Our great sponsors
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
Kong
Kong is an implementation of the Monkey interpreter in Java 8 from The Writing An Interpreter In Go books (by AmrDeveloper)
-
tailspin-v0
A programming language with extreme data-pattern matching and data-declarative syntax, hopefully different enough to be interesting
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
I didn’t add too many new features to my Ada-like language bluebird this month because of lots of projects/school stuff.
In the language, I added anonymous array literals. I did some cleanup in the compiler and updated to LLVM 12 from 10 (which was pretty trivial, surprisingly). I also added frozen, a C++ perfect-hashing library, as a dependency to speed up the lookup of keywords in my lexer. The library exploits C++’s constexpr features to generate a perfect hash at compile-time without any separate build step, which is great, and it also provides a drop-in replacement for std::unordered_map that uses the hash.
Just finished Writing An Interpreter In Go book and implemented the interpreter in java https://github.com/AmrDeveloper/Kong and I will start Writing A Compiler In Go book and work on my language design :D
If I get time this month I will add typestates to Tailspin, with essentially a simple syntax for implementing the State pattern which is one of my favourite patterns.
Current work on the Ecstasy project includes
Recently Never was extended with tuples. I hope to add documentation and examples soon. Also some bugs and improvements were removed and added. Now I am looking for ideas what to do next. Maybe you could suggest something?
Here is a link to the repo for AFK Script in case anyone is interested.
Recently, I've been working on adding garbage collection to Pika. I've successfully written an Immix-based garbage collector that works with the LLVM GC support infrastructure, and I'm currently working on integrating the GC with Pika, or really Durin, the dependently-typed intermediate representation that Pika compiles to. Because types are passed around at runtime, objects of unknown type and size can be stored unboxed in polymorphic data structures; but that makes keeping track of type information for heap allocations somewhat harder, because type information needs to be allocated and constructed at runtime in some cases. It's an interesting design problem, because you want constructing type information to be fast; but the GC will run much more often, so maximizing tracing speed by avoiding e.g. indirection in type information is important; and you also want to construct as much type information as possible at compile time and embed it as constants.
Recently, I've been working on adding garbage collection to Pika. I've successfully written an Immix-based garbage collector that works with the LLVM GC support infrastructure, and I'm currently working on integrating the GC with Pika, or really Durin, the dependently-typed intermediate representation that Pika compiles to. Because types are passed around at runtime, objects of unknown type and size can be stored unboxed in polymorphic data structures; but that makes keeping track of type information for heap allocations somewhat harder, because type information needs to be allocated and constructed at runtime in some cases. It's an interesting design problem, because you want constructing type information to be fast; but the GC will run much more often, so maximizing tracing speed by avoiding e.g. indirection in type information is important; and you also want to construct as much type information as possible at compile time and embed it as constants.
I've started a discord for low level programming language design https://discord.gg/tgmUz9cFyv other than that the C3 compiler is making progress piece by piece. I've got two major pieces left, which is the contract part and the generic modules. Recently I've been working on modules which had me revisiting some thing about module visibility and in general my module system to make sure it's done the right way. I should only need about a day's work to get the generic modules up and running so that I can start testing it, so that's going to be interesting. (If anyone is interested in talking C3, the discord is at https://discord.gg/qN76R87)
I just added variable-arity functions to my lisp which compiles to Cranelift. I was blocked for a while trying to work out how to convince Cranelift to put arguments on the stack but eventually gave up and I now heap allocate a location for function arguments. It's not great for performance but it feels great to have finally finished it!