Hopac
ideas5
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.
Hopac
-
Is Parallel Programming Hard, and, If So, What Can You Do About It? v2023.06.11a
https://github.com/Hopac/Hopac is such an impressive piece of software. Too bad it never really took off like it deserved but with more popular competition like rx or just tasks/async (which is enough for most stuff) pretty unavoidable.
-
How do I get around the lack of MailboxProcessor in Fable?
Found this article, it didn't even occur to me to look for a channel library in JS. This is definitely the direction to go in. Incidentally, Hopac is the most underrated of all F# libraries, just sayin'.
-
Learning about typed languages, static analysis, and tools
3) This third part is the hardest, and that is to get proficient at concurrency itself. For this I had to study various libraries like Rx, but what I settled on after a lot of experimentation was to first compile the various passes to streams of lazy promises. For languages in particular, they have a top down structure and what is needed is to employ a lot of diffing in order to reuse old results. The difficult part is to organize all of this. I can't praise a library like Hopac enough, but even with it, it still took me months to get a grasp on the way the editor support segments should be designed. At the time of writing, I am a day away of finalizing what will be the true design of the language server. It is not that the end result is complex, this latest redesign of the last 1.5 weeks is in fact significantly simpler than what I had before, but concurrency requires different design principles than sequential programming and getting used to the new domain takes an active effort.
ideas5
-
WTF is going on with R7RS Large?
https://github.com/samsquire/ideas5#350-structured-interacti...
Knowledgegraph programming language:
-
Railway Oriented Programming
I see a lot of correlations between parsing train tracks and BNF and error handling and state machines.
I wrote a bit about it here
https://github.com/samsquire/ideas5#252-happy-path-state-mac...
-
Async rust – are we doing it all wrong?
How would you do control flow and scheduling and parallelism and async efficiently with this code?
`db.save()`, `download()` are IO intensive whereas `document.query("a")` and `parse` is CPU intensive.
I think its work diagram looks like this: https://github.com/samsquire/dream-programming-language/blob...
I've tried to design a multithreaded architecture that is scalable which combines lightweight threads + thread pools for work + control threads for IO epoll or liburing loops:
Here's the high level diagram:
https://github.com/samsquire/ideas5/blob/main/NonblockingRun...
The secret is modelling control flow as a data flow problem and having a simple but efficient scheduler.
I wrote about schedulers here and binpacking work into time:
https://github.com/samsquire/ideas4#196-binpacking-work-into...
I also have a 1:M:N lightweight thread scheduler/multiplexer:
https://github.com/samsquire/preemptible-thread
-
Ask HN: Could you show your personal blog here?
Thanks for posting this Ask HN question.
I journal ideas and thoughts about computers and software. I am interested in software architecture, parallelism, async, coroutines, database internals, programming language implementation, software design and the web.
https://github.com/samsquire/ideas (2013)
https://github.com/samsquire/ideas2
https://github.com/samsquire/ideas3
https://github.com/samsquire/ideas4 <-- this is recent but needs editing
https://github.com/samsquire/ideas5 <-- this is what I'm working on now
https://github.com/samsquire/startups
https://github.com/samsquire/blog <-- thoughts I want to write about, but incomplete
I use README.md on GitHub and create a heading at the bottom for each entry. I use Typora on Windows or the GitHub web interface to edit.
-
Our Plan for Python 3.13
My deep interest is multithreaded code. For a software engineer working on business software, I'm not sure if they should be spending too much time debugging multithreaded bugs because they are operating at the wrong level of abstraction from my perspective for business operations.
I'm looking for an approach to writing concurrent code with parallelism that is elegant and easy to understand and hard to introduce bugs. This requires alternative programming approaches and in my perspective, alternative notations.
One such design uses monotonic state machines which can only move in one direction. I've designed a syntax and written a parser and very toy runtime for the notation.
https://github.com/samsquire/ideas5#56-stateful-circle-progr...
https://github.com/samsquire/ideas4#558-state-machine-formul...
The idea is inspired by LMAX Disruptor and queuing systems.
-
Is Parallel Programming Hard, and, If So, What Can You Do About It? v2023.06.11a
https://github.com/samsquire/ideas5/blob/main/NonblockingRun...
The design is that we have three groupings of thread types. The application starts up some application threads which are not associated with a request, these service multiconsumer multiproducer thread safe ringbuffers in lightweight threads with a Go-erlang-like lightweight process runtime. (My simple lightweight thread runtime is https://github.com/samsquire/preemptible-thread) We also multiplex multiple network clients sockets across a set number of kernel threads which I call control threads. Their responsibility is to dispatch work to a work stealing thread pool ASAP which has its own group of threads. So we pay a thread synchronization cost ONCE per IO which is the dispatch from the control thread to a thread pool thread. (Presumably this is fast, because the thread pool threads are all looping on a submission queue)
We split all IO and CPU tasks into two halves: submit and handle reply. I assume you can use liburing or epoll in the control threads. The same with CPU tasks and use ringbuffers to communicate between threads. We can always serve client's requests because we're never blocked on handling someone else's request. The control thread is always unblocked.
I think this article is good regarding Python's asyncio story:
What are some alternatives?
ThreadPool - A simple C++11 Thread Pool implementation
c_playground - C Playground
preemptible-thread - How to preempt threads in user space
swift-corelibs-libdispatch - The libdispatch Project, (a.k.a. Grand Central Dispatch), for concurrency on multicore hardware
startups - a list of startup ideas
vscode-extension-samples - Sample code illustrating the VS Code extension API.
Rouille, Rust web server middleware - Web framework in Rust
express-c - Fast, unopinionated, minimalist web framework for C
blog - My personal blog
fio - :wrench: A type-safe, highly concurrent library for F# based on pure functional programming
go-cleanarchitecture - An example Go application demonstrating The Clean Architecture.