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.