maiko
Co-dfns
Our great sponsors
maiko | Co-dfns | |
---|---|---|
2 | 9 | |
74 | 510 | |
- | 1.0% | |
7.6 | 9.0 | |
about 2 months ago | 11 days ago | |
C | APL | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
maiko
- How practical could CLOS paired with a Smalltalk-like IDE be?
-
"Interlisp is a very large software system"
https://github.com/Interlisp/maiko has ~72K lines of C (src, inc, bin/make*) which corresponds to microcode and BCPL on Dorado.
Co-dfns
-
Why APL is a language worth knowing
Stories please! What did the closures do to you?
Hopefully this won't be seen as too combative, but I feel like there are a few people in the array community giving me some pretty strong conclusions that they don't really have the experience to back up (Aaron wrote[0] 17 lines of array compiler, and says the low-abstraction approach he used is the only way to develop sustainably. Cool. I wrote[1] 350 lines of array compiler following his style, and I disagree[2]). At the same time, my experience only goes so far (there's no way I would have invented the array style compiler!), and clearly you arrived at these conclusions somehow. So is there a chance you'd share the observations that led you that way?
On my end, I was actually introduced to a little object-oriented programming in J when Henry suggested using it for a simulation project. I used it, but I don't think I really got it—just a weird way to organize data. And then in college I had to learn objects-only Java. Not good. But later I worked some with Node.js, and its module system was pretty nice: no name conflicts, easy to share code! Some way into BQN development, I figured out (with some help from a Common Lisp programmer) a way to add modules with an APL-y syntax, and something magic happened. I got objects[3] too! I think I've done about as much OOP in BQN as anywhere else, and I feel like I understand it a lot better now.
So, this is my experience with Lisp-family features and APL. Fits like a glove, programming is easier and more fun. I mix and match array, functional, and object-oriented styles however I want. Did I lose coherence? When I translate my old J code it comes out shorter and cleaner and without exec (".) everywhere. But I still don't get why I should want the language I use to not support mutability rather than just default to immutability. Did I fail to understand something in J when I had the chance?
[0] https://github.com/Co-dfns/Co-dfns
[1] https://github.com/mlochbaum/BQN/blob/master/src/c.bqn
[2] https://mlochbaum.github.io/BQN/implementation/codfns.html
-
Barriers to APL Adoption
Co-dfns feels like an academic project that I won't be able to figure out how to use.
- Array programming language(s) for 3d-graphics?
-
Is C the only right option for implementing an array language?
As an example, Aaron Hsu's Co-dfns APL compiler is written in Dyalog APL.
-
Let's build a simple interpreter for APL, part 2 (2020)
Does "make use of the speed of array-based language, but save computation time by compiling" refer to using an array language that is compiled? [Co-dfns](https://github.com/co-dfns/co-dfns) compiles a dialect of APL, so that might be interesting to you.
-
Zig 0.8.0 Release Notes
The changes to the IR data structures in this release are really neat- whole trees and graphs fit in a small fixed number of flat arrays. This saves on allocations, saves on total memory usage, and makes them trivial to serialize because there are no pointers.
I recently arrived at a similar design for manipulating NFAs as adjacency matrices, as a replacement for more pointer-y adjacency lists, by way of sparse matrix data structures. Rather than Zig's performance angle, I found that it made whole-graph operations much easier to implement and reuse.
I've also seen similar approaches from array languages like APL, for example this project for running this kind of stuff on GPUs: https://github.com/Co-dfns/Co-dfns
And, I've seen it in Rust as a "workaround" for the borrow checker, where that framing tends to make it feel like cheating or settling, which IMO is unfortunate since when people arrive at it for other reasons it seems to have a lot of other benefits!
There are probably more contexts I'm not familiar with- anyone have any good examples from domains they've worked in?
-
From Competitive Programming to APL
You might be interested in Aaron Hsu's work on co-dfns, which is a compiler that compiles a subset of Dyalog APL to the GPU.
-
A C compiler which can compile itself (in 2048 bytes)
It's funny to see the Perl comparison when APL-family languages normally have code that looks like that:
-
"Interlisp is a very large software system"
There's a guy who wrote a dyalog compiler for GPU stuff so you can just run your APL stuff on the GPU. He wrote the thing in dyalog, and the compiler is "just" a few files, no more than a page each.
What are some alternatives?
BQN - An APL-like programming language. Self-hosted!
chibicc - A small C compiler
sbcl - Mirror of Steel Bank Common Lisp (SBCL)'s official repository
ngn-apl - An APL interpreter written in JavaScript. Runs in a browser or NodeJS.
tigerbeetle - A distributed financial accounting database designed for mission critical safety and performance to power the future of financial services.
dex-lang - Research language for array processing in the Haskell/ML family
zig - General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
april - The APL programming language (a subset thereof) compiling to Common Lisp.
quickjs - Public repository of the QuickJS Javascript Engine. Pull requests are not accepted. Use the mailing list to submit patches.
cloc - cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.
uemacs - Random version of microemacs with my private modificatons