Commit Graph

2773 Commits

Author SHA1 Message Date
KtorZ fbe2f82582
Thread down environment module from cli down to the type-checker
We simply provide a flag with a free-form output which acts as
  the module to lookup in the 'env' folder. The strategy is to replace
  the environment module name on-the-fly when a user tries to import
  'env'.

  If the environment isn't found, an 'UnknownModule' error is raised
  (which I will slightly adjust in a following commits to something more
  related to environment)

  There are few important consequences to this design which may not seem
  immediately obvious:

  1. We parse and type-check every env modules, even if they aren't
     used. This ensures that code doesn't break with a compilation error
     simply because people forgot to type-check a given env.

     Note that compilation could still fail because the env module
     itself could provide an invalid API. So it only prevents each
     modules to be independently wrong when taken in isolation.

  2. Technically, this also means that one can import env modules in
     other env modules by their names. I don't know if it's a good or
     bad idea at this point but it doesn't really do any wrong;
     dependencies and cycles are handlded all-the-same.
2024-08-04 10:27:32 +02:00
KtorZ c9d0da0c22
Parse sources of conditional env modules.
Do nothing about it yet, but trigger an error if env/default.ak is
  missing; but only if there's any module at all under env.
2024-08-03 17:42:55 +02:00
KtorZ 4645257e62
Prune pallas dependencies.
Using 'pallas' as a dependency brings utxo-rpc other annoying dependencies such as _tokyo_. This not only makes the overall build longer, but it also prevents it to even work when targetting wasm.
2024-08-03 14:14:49 +02:00
Matthias Benkort 09c065d332
Merge pull request #991 from aiken-lang/pattern-match-bytearrays
Allow pattern-matching on bytearrays
2024-08-03 14:09:12 +02:00
KtorZ f14dfdf8e1
Allow pattern-matching on bytearrays
- Doesn't allow pattern-matching on G1/G2 elements and strings,
    because the use cases for those is unclear and it adds complexity to
    the feature.

  - We still _parse_ patterns on G1/G2 elements and strings, but emit an
    error in those cases.

  - The syntax is the same as for bytearray literals (i.e. supports hex,
    utf-8 strings or plain arrays of bytes).
2024-08-03 13:51:36 +02:00
KtorZ ea032c90f2
Add missing CHANGELOG entries. 2024-08-02 12:08:25 +02:00
KtorZ 86aed1baa5 Enable 'mk_pair_data' builtin. 2024-08-02 00:17:16 -04:00
KtorZ 643e43f8aa Fix zero-arg builtins invokations.
There are currently two zero-arg builtins:

  - mkNilData
  - mkNilPairData

  And while they have strictly speaking no arguments, the VM still
  requires that they are called with an extra unit argument applied.
2024-08-02 00:17:16 -04:00
KtorZ 1c58da4d86 Support mk_cons builtin
While this builtin is readily available through the Aiken syntax
  `[head, ..tail]`, there's no reason to not support its builtin form
  even though we may not encourage its usage. For completeness and to
  avoid bad surprises, it is now supported.

  Fixes #964.
2024-08-02 00:17:16 -04:00
KtorZ bf5a406ffb Remove clause guards.
Closes #886.
2024-08-02 00:16:27 -04:00
KtorZ b28d4a6e9f
Add input reference to ReferenceInputNotFound error.
Fixes #974.
2024-08-01 15:29:39 +02:00
KtorZ 34d5bc71b1
Add one more edge-case test for multiline. 2024-08-01 15:21:53 +02:00
KtorZ 91aa435f37
Fix 'multiline' truncating last character of each line.
Fixes #987.
2024-08-01 15:20:43 +02:00
KtorZ b8bb480bff
Fix 'aiken new' workflow template 2024-07-26 13:56:26 +02:00
rvcas 4645fd3e28
chore: Release 2024-07-25 08:28:15 -04:00
rvcas 732147b36a
chore: remove msi installer 2024-07-25 08:26:45 -04:00
KtorZ 53b5a5ccee
Screw windows too, until next non-alpha. 2024-07-25 12:24:47 +02:00
KtorZ 9dc4c915f3
Manually set windows version. 2024-07-25 12:07:27 +02:00
KtorZ 9e08f9b4e6
Re-add wix file for Windows release. 2024-07-25 11:48:27 +02:00
KtorZ 26c3e95a06
screw musl targets, for now. 2024-07-25 11:29:52 +02:00
KtorZ 28c1922600
Also include pkg-config for musl build. 2024-07-25 10:23:30 +02:00
KtorZ d36edb4e01
Add libssl-dev build dependency for musl target. 2024-07-25 10:17:29 +02:00
KtorZ 49190b485a
chore: Release 2024-07-25 09:58:06 +02:00
KtorZ 327449e320
Update CHANGELOG, bump date, document latest fixes & optimizations 2024-07-25 09:54:03 +02:00
Matthias Benkort 594a304190
Merge pull request #980 from aiken-lang/multivalidator-plus-optimization
Mutlivalidator is now an opcode to help minimize validator size
2024-07-25 09:47:47 +02:00
Matthias Benkort 63863c948f
Merge pull request #979 from aiken-lang/fix_casting_inference
Fix pattern inference and annotation requirements.
2024-07-25 09:40:27 +02:00
microproofs c286ada08d
clippy fix 2024-07-24 11:29:55 -04:00
microproofs 1001e83374
Updated acceptance test runs 2024-07-24 10:34:29 -04:00
microproofs dfce9c1d96
feat: Add multivalidator as an AIR tree opcode.
feat: Add uplc eval optimization
2024-07-24 10:00:08 -04:00
KtorZ 67493ad847
Fix casting inferrence on patterns
The original goal for this commit was to allow casting from Data on
  patterns without annotation. For example, given some custom type
  'OrderDatum':

  ```
  expect OrderDatum { requested_handle, destination, .. }: OrderDatum = datum
  ```

  would work fine, but:

  ```
  expect OrderDatum { requested_handle, destination, .. } = datum
  ```

  Yet, the annotation feels unnecessary at this point because type can
  be inferred from the pattern itself. So this commit allows, whenever
  possible (ie when the pattern is neither a discard nor a var), to
  infer the type from a pattern.

  Along the way, I also found a couple of weird behaviours surrounding
  this kind of assignments, in particular in combination with let. I'll
  highlight those in the next PR (#979).
2024-07-24 12:42:24 +02:00
KtorZ 987a5fa779
Set a date for v1.0.30-alpha release. 2024-07-24 09:39:48 +02:00
rvcas 06ac851458
chore: update changelog 2024-07-23 11:20:42 -04:00
Matthias Benkort 967c264bfe
Merge pull request #978 from aiken-lang/supercharge_traces
Supercharge traces
2024-07-23 08:53:46 +02:00
KtorZ 89890f3b4b
Fill-in CHANGELOG 2024-07-19 12:44:12 +02:00
KtorZ 30ddfa23d9
Provide better parse errors in trace when using comma instead of colon. 2024-07-19 12:28:08 +02:00
KtorZ 2922c0aa6f
Display expected patterns/tokens in parse error when applicable.
We've never been using those 'expected' tokens captured during
  parsing, which is lame because they contain useful information!

  This is much better than merely showing our infamous

    "Try removing it!"
2024-07-19 12:28:08 +02:00
KtorZ d6fd37c80e
Rework 'compact' mode for traces
- Trace-if-false are now completely discarded in compact mode.

  - Only the label (i.e. first trace argument) is preserved.

  - When compiling with tracing _compact_, the first label MUST unify to
    a string. This shouldn't be an issue generally speaking and would
    enforce that traces follow the pattern

    ```
    label: arg_0[, arg_1, ..., arg_n]
    ```

  Note that what isn't obvious with these changes is that we now support
  what the "emit" keyword was trying to achieve; as we compile now with
  user-defined traces only, and in compact mode to only keep event
  labels in the final contract; while allowing larger payloads with
  verbose tracing.
2024-07-19 12:28:08 +02:00
KtorZ a9d782e206
re-introduce code-gen patch, but with a test.
Actually, this has been a bug for a long time it seems. Calling any
  prelude functions using a qualified import would result in a codegen
  crash. Whoopsie.

  This is now fixed as shown by the regression test.
2024-07-19 12:28:07 +02:00
KtorZ 5afcc9b0c1
Remove unnecessary code_gen patch.
This is a little weird but, prelude functions are handled slightly
  differently.
2024-07-19 12:28:07 +02:00
KtorZ f8236817fe
Allow serialisable (Data-able) arguments to trace
Somehow, we have to patch some function in gen_uplc because of the
  module name. I have to look further into this because it isn't normal.
2024-07-19 12:28:07 +02:00
KtorZ beb5ac4643
Add 'diagnostic' to the prelude, as well as companion functions.
This is not fully satisfactory as it pollutes a bit the prelude. Ideally, those functions should only be visible
  and usable by the underlying trace code. But for now, we'll just go with it.
2024-07-19 12:28:07 +02:00
KtorZ 754ed07408
Type-check variadic traces & desugarize them. 2024-07-18 10:02:23 +02:00
KtorZ f9719af23e
Allow variadic arguments in trace
Although, doesn't do anything with them yet. The idea is to simplify
  the use of trace to make it a lot more useful than it currently is.
2024-07-18 10:01:34 +02:00
KtorZ 976262c2e6
Allow discard in expect.
Fixes #967.
2024-07-17 18:11:09 +02:00
KtorZ 61a991cb23
Merge branch 'benchmark-knights' 2024-07-17 13:01:32 +02:00
KtorZ 46b82fac86
Split benchmarks out of acceptance tests job. 2024-07-17 13:01:17 +02:00
KtorZ e074037838
Move benchmarks one level up. 2024-07-17 13:00:57 +02:00
KtorZ 30d3898b5b
Add Rust cache to continuous integration workflow. 2024-07-17 12:56:41 +02:00
KtorZ 52974aed75
Add clausify benchmark. 2024-07-17 12:53:19 +02:00
KtorZ 20e606e645
Add benchmarks to continuous integration workflow. 2024-07-17 12:53:18 +02:00