I have added a lot of features to my implementation of ASDL. This includes:

  • More built-in types (since they are not listed yet, they are: int, uint, char, uchar, size, usize, int8, uint8, int16, uint16, int32, uint32, int64, uint64, string, bytearrray, identifier).
  • Append/dump for list functions
  • Linked lists for generated code

I am currently using it to implement POSIX Shell. You can find the ASDL descriptions I am using for it in examples/shell.asdl.

Basically, ASDL allows you to have an ML-like type system for any language. My implementation does C, because it would be pointless for more modern languages like Rust, that have it built-in (although in a rather clumsy way). Or it’s a foregone conclusion for OCaml or Haskell. The only ‘old’ language still in use is C, and I think this services the purpose.

You can use the generated C code with C++, because C++ is a superset of C — unless your C++ compiler is weird.

There’s an alternative to my implementation of ASDL, that is, 'pyasdl` which is a library for Python that just parses ASDL and lets you generate the code.

Bring up man page to lean more about it, but sadly it’s a bit outdated. I will update the documentation soon.

Thanks, enjoy.