State of the Languages

Welcome to the first post in the Tezos language series. We’ll give you a peek behind the curtain of Tezos smart contract language development on a weekly basis.

Let us know if you have

  • feedback
  • suggestions
  • a language you would like to add

This week in development

LIGO

The LIGO team was pelted with GitLab issues and spent most of their time keeping up.

Developers made suggestions as well as bug reports via Gitlab—a lot of them—so LIGO will adjust their process to sort bugs and suggestions into different categories in order to prioritize better.

SmartPy

The SmartPy team worked hard this week to finish their next release.

In addition to new features they will announce soon, this release will be SmartPy’s first open source version.


Thanks for reading, and check back next week for a new update!

Eowyn on behalf of the LIGOlang team

8 Likes

Readers, thank you for your excellent feedback on our last report. We hope you enjoy this week’s insights into Tezos smart contract language development.

Let us know if you have:

  • feedback
  • suggestions
  • a language you would like to add

Recent development

Albert

The Albert team recently submitted an academic article to the 2020 edition of the Trusted Smart Contract Workshop. It provides, among other things,

  • an overview of the current state of Albert
  • details on how Albert compiles to Michelson
  • an example smart contract written in Albert

For more detail you can peruse their academic article here:

Albert, an intermediate smart-contract language for the Tezos blockchain

LIGO

The LIGO team has been working on a diverse set of improvements. They:

  • changed the calling conventions in CameLIGO and ReasonLIGO to make them more similar to OCaml/Reason. In particular, the following equivalences now hold, as one would expect:

    fun x y -> z
      ~=
    fun x -> fun y -> z
    
    (* when f is not a built-in operator: *)
    f x y
      ~=
    (f x) y
    
  • fixed a bug which prevented using failwith in both branches of a conditional.

    let main ((b, _) : bool * unit) =
      if b
      then failwith "b is true"
      else failwith "b is false"
    
  • improved many unhelpful “not a X” type errors, along with errors related to typing built-in operators (e.g. “wrong types”, “bad X”.)

  • added a record update operation to all syntaxes, e.g. {r with b = 2048; c = 42} in CameLIGO.

  • added support for Tezos key and signature literals as type-annotated base58 strings. For example ("edpk..." : key).

  • added syntax for ‘attributes’ to all syntaxes, including an “inline” hint which will encourage the compiler to inline a particular definition, even if it is used more than once.

SmartPy

The SmartPy team shipped its first open source release this week!

Now they are back to working on SmartPy core current projects:

  • the testing framework
  • Michelson static analysis / decompilation.

Thank you for reading. Check back soon for more updates!

Eowyn on behalf of the LIGOlang team

2 Likes