async-wormhole
cant
Our great sponsors
async-wormhole | cant | |
---|---|---|
3 | 11 | |
108 | 58 | |
1.9% | - | |
0.0 | 9.1 | |
5 months ago | 18 days ago | |
Rust | Scheme | |
- | GNU Affero General Public License v3.0 |
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.
async-wormhole
-
A mini-Erlang/Elixir -- tell me if/why my idea sucks
Taking onto such a big project can be scary and overwhelming, so I like to "cheat" a bit. Instead of developing a M:N scheduler I picked an already mature and proven one from the Rust ecosystem: tokio. Then I just needed to develop a virtual stacks solution that works well with the scheduler. Instead of inventing my own byte-code I just picked WebAssembly, it's just a small abstraction above machine code and has mature JIT compiler libraries that generate code close to native speed. Then again, I just needed to figure out how to do reduction counting and insert preemption points into WebAssembly code during loading.
-
lunatic v0.5 released
Previously, we used our own implementation of virtual stacks and stack switching. Both (Wasmer & Wasmtime) Wasm runtimes we used internally required a tight integration with it, but neither library exposed the primitives to integrate well with it. So we needed to maintain forks of both runtimes with some patches to expose internal data structures. Just keeping up to date with new releases was taking way too much of my time. Stack switching is also a delicate task with a lot of hand written assembly involved and we would run into segfaults from time to time. Luckily Wasmtime shipped "native" async support that works similar to our implementation so we could switch to it. Re-writing was a pain, but I'm happy how everything has turned out and think that it was worth it.
-
Lunatic - An Erlang inspired runtime for all programming languages
Under the hood, Lunatic wraps "processes" inside of Rust async tasks with https://github.com/bkolobara/async-wormhole and can use any async executor to run them. We are currently using Smol's multithreaded executor, so it scales quite nicely across cores.
cant
- Advent of Code 2023 in your language
-
Calculate the difference and intersection of any two regexes
That was one of the short examples in Norvig's Python program-design course for Udacity. https://github.com/darius/cant/blob/master/library/regex-gen... (I don't have the Python handy.)
-
Squeezing a sokoban game into 10 lines of Haskell
> figure out a way to do upward movement that doesn’t require annoying special casing. If you figure it out, don’t tell me since it means I’ll have to make more levels.
Don't read this, then: https://github.com/darius/cant/blob/master/examples/games/20...
As long as I'm commenting, here are some links to other console Sokobans I thought were fun (listed in the source code to mine). The sed one is nuts -- I had no idea it could do that: https://github.com/darius/cant/blob/master/examples/games/20...
-
Noulith: A new programming language currently used by the Advent of Code leader
I've done AoC using my own language before. As a task it's at a sweet spot for finding weaknesses in the language/library/implementation: real and varied enough to exercise your system, small chunks of work, lots of code to compare yours to, with fun and competitive juices.
The first time I did it it forced me to fix some major problems. My language would still be a handicap for me in the state it's in (though I did get on the leaderboard a couple times using it).
fwiw: https://github.com/darius/cant (haven't done this year's so far)
-
What language and why? ;)
I've used my own hobby language Cant before, for a couple reasons: it's meant to be enjoyable to code in (at least for me), and tackling random problems like this is a good way to drive some improvements to it.
-
Gleam v0.25 released with a new approach to fixing callback hell
Also similar: the 'for' expression in Cant (search for "syntax: for").
-
UnixBench is the original BYTE Unix benchmark suite
Darius Bacon wrote a version of this in https://github.com/darius/cant/blob/master/library/factoring... where the "frontier" of active riders is stored in a hash table rather than a bin heap, which is almost certainly a more efficient approach. But he's not doing the bitmaps.
-
Multiple assignment and tuple unpacking improve Python code readability
Thank you!
I dislike style nazis too, e.g. carping when Peter Norvig's code won't pass PEP 8.
I'm just leery of the expected cost in this kind of case. It can go on working for years until some new complication or some change in the ecosystem makes it suddenly create a really weird problem. Or when you want to try moving to a fancy new Python implementation, you find you have this friction. Matter of judgement where some chance of such messes is paid for by what it can do for you. (Of course when it's less "load bearing" the balance shifts.) With https://coverage.readthedocs.io/en/stable/ for example, it used bytecode hacks to do something you couldn't do otherwise, and that's unlikely to mess you up.
I have had old C programs go crazy years later in a really hard to debug way because newer compilers may interpret your code like your ex-wife's divorce lawyer (as Kragen put it, iirc). Back in the day a lot of us thought we had a different kind of relationship with C compilers, and it'd be fine to code to that informal social contract. (Just a loose analogy.)
I'm piddling away at https://github.com/darius/cant these days. (Some of the motivation was feeling too confined by Python, actually.) No Wasm, but I'm happy it exists! I tried to make a system like it 20 years ago (Idel) and gave up too soon.
-
Any comprehensive list of programming use case for evaluating a language ?
Agreed. I used a few Rosetta Code problems in https://github.com/darius/cant/tree/master/examples and https://github.com/darius/cant/tree/master/library, but Rosetta is mostly things I don't care about.
-
Denigma is an AI that explains code in understandable English . Test any code language on Denigma and give us your feedback!
Just for fun I tried it on my own toy language that nobody but me uses -- going to the limit in nicheness. E.g. Project Oiler problem #1 -- it's very wrong, but no shame in that.
What are some alternatives?
lunatic - Lunatic is an Erlang-inspired runtime for WebAssembly
byte-unixbench - Automatically exported from code.google.com/p/byte-unixbench
flume - A safe and fast multi-producer, multi-consumer channel.
lambdanative - LambdaNative is a cross-platform development environment written in Scheme, supporting Android, iOS, BlackBerry 10, OS X, Linux, Windows, OpenBSD, NetBSD, FreeBSD and OpenWrt.
beam_languages - Languages, and about languages, on the BEAM
UnPack.jl - `@pack!` and `@unpack` macros
bastion - Highly-available Distributed Fault-tolerant Runtime
schism - A self-hosting Scheme to WebAssembly compiler
aoc2019 - https://adventofcode.com/2019
snyk - Snyk CLI scans and monitors your projects for security vulnerabilities. [Moved to: https://github.com/snyk/cli]