HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
samsquire
ideas4
HISTORICAL RECORD2022–2023
samsquire / ideas4 · Not publicly available

ideas4

Discover this repository through its Hacker News conversations.

3Distinct people
47Mentions
1Explicit recommenders
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A public description has not been verified.

Where it is used

No documented product use has been verified yet.

What people are saying

I love these words "As I continued that work, I've also started talking about the feasibility of creating a supercompiler." and thoughts already. One of my ideas is a…

samsquire used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month47 dated mentions

Observed mentions: 2022-05-30 03:50:01 UTC to 2023-08-18 15:43:39 UTC.

02462022-05-01 00:00:00 UTC to 2022-06-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsMay 20222022-06-01 00:00:00 UTC to 2022-07-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2022-07-01 00:00:00 UTC to 2022-08-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2022-08-01 00:00:00 UTC to 2022-09-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-09-01 00:00:00 UTC to 2022-10-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2022-10-01 00:00:00 UTC to 2022-11-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2022-11-01 00:00:00 UTC to 2022-12-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2022-12-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsDec 20222023-01-01 00:00:00 UTC to 2023-02-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2023-02-01 00:00:00 UTC to 2023-03-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2023-03-01 00:00:00 UTC to 2023-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-04-01 00:00:00 UTC to 2023-05-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2023-05-01 00:00:00 UTC to 2023-06-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2023-06-01 00:00:00 UTC to 2023-07-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2023-07-01 00:00:00 UTC to 2023-08-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2023-08-01 00:00:00 UTC to 2023-09-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsAug 2023

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
May 20222022-05-01 00:00:00 UTC2022-06-01 00:00:00 UTC202
Jun 20222022-06-01 00:00:00 UTC2022-07-01 00:00:00 UTC505
Jul 20222022-07-01 00:00:00 UTC2022-08-01 00:00:00 UTC606
Aug 20222022-08-01 00:00:00 UTC2022-09-01 00:00:00 UTC202
Sep 20222022-09-01 00:00:00 UTC2022-10-01 00:00:00 UTC505
Oct 20222022-10-01 00:00:00 UTC2022-11-01 00:00:00 UTC404
Nov 20222022-11-01 00:00:00 UTC2022-12-01 00:00:00 UTC303
Dec 20222022-12-01 00:00:00 UTC2023-01-01 00:00:00 UTC202
Jan 20232023-01-01 00:00:00 UTC2023-02-01 00:00:00 UTC404
Feb 20232023-02-01 00:00:00 UTC2023-03-01 00:00:00 UTC404
Mar 20232023-03-01 00:00:00 UTC2023-04-01 00:00:00 UTC000
Apr 20232023-04-01 00:00:00 UTC2023-05-01 00:00:00 UTC202
May 20232023-05-01 00:00:00 UTC2023-06-01 00:00:00 UTC303
Jun 20232023-06-01 00:00:00 UTC2023-07-01 00:00:00 UTC101
Jul 20232023-07-01 00:00:00 UTC2023-08-01 00:00:00 UTC303
Aug 20232023-08-01 00:00:00 UTC2023-09-01 00:00:00 UTC101

What Hacker News says

47 sources
This article is against multithreaded executors by default and that synchronous code is easier to read and more practical than async code. I completely understand this. My hobby and main interest is multithreading, async, coroutines, parallelism so I love articles like this so thank you. I am trying to design a solution that lets us have our cake and eat it to. I want multithreaded coroutines or multithreaded async executors by default. I am trying to design a server and runtime that is largely parallel, concurrent, efficient, easy to understand, easy to reason about, async and easy to read and maintain. I want: * Tokio is not bad but I think a codebase that uses async rust requires a high level of skill, cognitive load and understanding. It's not straightforward! * synchronous straight-line flow code is the easiest to read and follow * p
Read the rest
romises and callbacks aren't easy to read or follow control flow * making a single threaded program parallel after writing it is almost a complete rewrite * work stealing thread pools solve the starvation problem, so they're good! * IO shouldn't block CPU and CPU shouldn't block IO * I am trying to design a syntax that is data orientated that means programs can be parallelised after writing them, so parallelisation comes for free * we can use the LMAX Disruptor pattern for efficient cross-thread communication. I use a lockfree multiconsumer multiproducer ringbuffer in my programs. I have an epoll-server which multiplexes clients/sockets over threads, this is more efficient than a thread-per-socket/client. I need to change it into a websocket server. Imagine you're a search engine company and you want to index links between URLs. How would you model this with async rust and thread pools? task download-url for url in urls: download(url) task extract-links parsed = parse(document) return parsed task fetch-links for link in document.query("a") return link task save-data db.save(url, link) 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
In Local async executors and why they should be the default
My blogging/journalling setup is simple. I've been doing it for 10 years and it really encourages me to write. It's also all in the open and public. I just use GitHub. I just rely on the default repository view on GitHub.com. I edit in Typora on Windows or on the web interface on GitHub website. I create a README.md and add markdown headings to the bottom or to the top (bottom if its a journal, top if it's a blog) and then when I get to 100-800 I create a new repository and repeat. https://github.com/samsquire/ideas (2013) https://github.com/samsquire/ideas4 https://github.com/samsquire/ideas3 https://github.com/samsquire/ideas5 https://github.com/samsquire/ideas2
In It Took Me a Decade to Find the Perfect Personal Website Stack – Ghost+Fathom
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.
In Ask HN: Could you share your personal blog here?
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
Read the rest
and queuing systems.
In Our Plan for Python 3.13
This is really good. Thank you! I've been studying how to create an asynchronous runtime that works across threads. My goal: neither CPU and IO bound work slow down event loops. How do you write code that elegantly defines a state machine across threads/parallelism/async IO? How do you efficiently define choreographies between microservices, threads, servers and flows? I've only written two Rust programs but in Rust you presumably you can use Rayon (CPU scheduling) and Tokio (IO scheduling) I wrote about using the LMAX Disruptor ringbuffer pattern between threads. https://github.com/samsquire/ideas4#51-rewrite-synchronous-c... I am designing a state machine formulation syntax that is thread safe and parallelises effectively. It looks like EBNF syntax or a bash pipeline. Parallel steps go in curly brackets. There is an implied interthread
Read the rest
ringbuffer between pipes. It is inspired by prolog, whereby there can be multiple conditions or "facts" before a stateline "fires" and transitions. Transitions always go from left to right but within a stateline (what is between a pipe symbol) can fire in any order. A bit like a countdown latch. states = state1 | {state1a state1b state1c} {state2a state2b state2c} | state3 You can can think of each fact as an "await" but all at the same time. initial_state.await = { state1a.await state1b.await state1c.await }.await { state2a.await state2b.await state2c.await } | state3.await In io_uring and LMAX Disruptor, you split all IO into two halves: submit and handle. Here is a liburing state machine that can send and receive in parallel. accept | { submit_recv! | recv | submit_send } { submit_send! | send | submit_recv } I want there to be ring buffers between groups of states. So we have full duplex sending and receiving. Here is a state machine for async/await between threads: next_free_thread = 2 task(A) thread(1) assignment(A, 1) = running_on(A, 1) | paused(A, 1) running_on(A, 1) thread(1) assignment(A, 1) thread_free(next_free_thread) = fork(A, B) | send_task_to_thread(B, next_free_thread) | running_on(B, 2) paused(B, 1) running_on(A, 1) | { yield(B, returnvalue) | paused(B, 2) } { await(A, B, returnvalue) | paused(A, 1) } | send_returnvalue(B, A, returnvalue)
In Libuv – Linux: io_uring support
This is very interesting and could lead to some futuristic programming technology. I kind of want to plot the state space of a program to see all available states. In my exploration of distributed systems, microservices and multithreaded systems, it is extremely helpful to try and see what potential states the system can be in. Global and local reasoning of these kinds of software is rather difficult. I've written about value tracing but I've not heard of treating values as types. I would love to be able to see the trajectory of a value through different states - such as membership to different collections. For example, if you have different collections or sets and items are removed from one collection and added to the other. https://github.com/samsquire/ideas4#571-value-calculus-varia... I've never written a TLA+ specification and I'm a
Read the rest
complete beginner to this space but I've been trying to understand the dining philosophers one. TLA+ Toolbox is aware of discrete states in the state space, which is absolutely awesome. Types can inform us about future possible valid states. I began writing a visualisation of memory and animated the movement of memory around to try reveal patterns. If you think of memory as state space, you can see movements of memory as picking things up and putting them down. https://replit.com/@Chronological/ProgrammingRTS#index.html If we see types or values as positions, we can create animations of the state space unfolding in front of us. This is the dream. (My plan is to write a programming simulation that is controlled similar to a real time strategy game as an alternative form of programming)
In What Is Type-Level Programming?
Great comment! >I think late architecture is orthogonal to functional, imperative Absolutely. From a truly architectural view, procedural, functional, and method-oriented (current OO) are really only variations on the call/return architectural style. Good and sometimes important distinctions, but not really that far apart. They are very much about computing, results from inputs. That is an appropriate architecture for fewer and fewer programs. See Why Architecture Oriented Programming matters https://blog.metaobject.com/2019/02/why-architecture-oriente... and Can Programmers Escape the Gentle Tyranny of call/return? https://2020.programming-conference.org/details/salon-2020-p... > its solution is higher level than even functional programming Yes. Well, functional actually gets most of its utility from being lower level as far as para
Read the rest
digms go (less powerful). But yes. > and more abstract No. Well, yes, if expressed with current programming languages. But that's part of the problem set, not part of the solution set. We should be able to express our architectures less abstractly, more concretely, but for that we need linguistic support. Which is why I am working on that: http://objective.st > I want software architecture to be cheap and easy to change without breaking any existing behaviours. I don't know much research on this subject. There was quite a bit of research at CMU, for example on packaging mismatch. Famous paper Architectural Mismatch, Why Reuse is so hard, and the 10 year follow up in 2009: Architectural Mismatch: Why Reuse is Still So Hard https://repository.upenn.edu/cgi/viewcontent.cgi?article=107...* Not much has changed since. > https://github.com/samsquire/ideas4 > https://devops-pipeline.com Will check those out. Dataflow is definitely a big part of it, with the extension of dataflow constraints (make, spreadsheets, "FRP"/"Rx"). But so is in-process REST with Storage Combinators! And breaking down barriers between scripting and "real" programming.
In Late Architecture with Functional Programming
I think late architecture is orthogonal to functional, imperative and its solution is higher level than even functional programming and more abstract. I think the solution requires a new class of programming that is beyond APIs and functions. It's the realm of relationships and pluralities, scheduling, understanding of meaning. (The realm of LLMs) I want software architecture to be cheap and easy to change without breaking any existing behaviours. I don't know much research on this subject. I think APIs are the wrong thing to code against, because APIs are tied to architecture. Some codebases are millions of lines big, it is extremely difficult to change a codebase's architecture when it is that big. It's either a lot of work or an extremely complicated program to rewrite sourcecode of that magnitude that isn't throwaway and not general p
Read the rest
urpose transformations. If you have a codebase that has a client per thread and you want to refactor it to multiplex clients over threads. Or you want to add load shedding or backpressure to your microservice architecture, you have a large amount of work to do. If you want to add a field to a message or underlying library that your every microservice architecture uses, you have a lot of pain to go through. If you want to change the workflow of a digitised business procedure you have a LOT of refactoring to do. My ideas on the solution to this problem include: - Vector programming: represent software architecture as vector embeddings, code against sequences of vectors that are arranged into relationships and then the space where the vectors reside is concretised - Compositional behavioural typing: We need some way of combining behaviours together, composing the code of functions such that code is interleaved rather than chaining together functions. In most programming languages I know, data is typed, not the behaviour, and behaviour cannot be changed without changing the code. I think behaviour is more useful to type than data. Composing behaviour is not g(f(x)), it's taking arbitrary parts of the innerworkings of f and g and applying behaviours to their mechanisms. Inheritance doesn't do it properly, because you have to rewrite functions to replicate the original behaviour with a tweak. React hooks don't do it. It's the missing idea of computer science. My dream is that classes are compatible if you can provide a mapping from the innerworkings of one class to another class and the code can seamlessly compose without rewriting. And it be open to extension. It's like metaprogramming for behaviour rather than types. Code that that matches a "dispatcher" interface, automatically inferred by the compiler, and I can can insert a Load balancer or an ACL arbitrarily in the stack, anywhere. I can change the plurality (one-to-many, many-to-one) of architectural relationships, such as insert a hierarchy of load balancers here between these objects. I can make my software internet scalable, multiregion, multithreaded by adding to the diagram. I can see the architecture as a giant relational diagram data structure and mutate it directly and cheaply and without breaking any existing behaviour. I've been journalling about this on github.com/samsquire/ideas4 I also wrote https://devops-pipeline.com which is an dataflow/diagram based perspective of software infrastructure.
In Late Architecture with Functional Programming
In my benchmark of a simple ledger I generate and do 25,021,365 (25 million) random transactions per second. (Withdraw and deposit over 80,000 accounts) Paralellise it via sharding and I get 80,958,379 transctions per second. If I remove the randomness, I get 134,600,233 transactions per second. If I parallelise with 12 threads I get 931,024,042 transactions per second. My point being, if you paralellise properly and do not use shared data, then you can boost performance by a multiple of the number of threads. https://github.com/samsquire/multiversion-concurrency-contro... For the technique I use for this scalability, see my journal entries on sharded structs and sharded integers https://github.com/samsquire/ideas4#565-sharded-struct-pseud... https://github.com/samsquire/ideas4#608-sharded-integers
In C++ Coroutines
Thanks for this. I have never deployed a service mesh or used one but I am designing something similar at the code layer. It is designed to route between server components. That is, at the architecture between threads in a multithreaded system. The problem I want to solve is that I want architecture to be trivially easy to change with minimal code changes. This is the promise and allure of enterprise service buses and messaging queues and probably Spring. I have managed RabbitMQ and I didn't enjoy it. If I want a system that can scale up and down and that multiples of any system object can be introduced or removed without drastic rewrites. I would like to decouple bottleneck from code and turn it into runtime configuration. My understanding of things such as Traefik and istio is that they are frustrating to set up. Specifically I am worki
Read the rest
ng on designing interthread communication patterns for multithreaded software. How do you design an architecture that is easy to change, scales and is flexible? I am thinking of a message routing definition format that is extremely flexible and allows any topology to be created. https://github.com/samsquire/ideas4#526-multiplexing-setting... I think there is application of the same pattern to the network layer too. Each communication event has associated with it an environment of keyvalues that look similar to this: petsserver1 container1 thread3 socket5 user563 ingestionthread1 These can be used to route to keyspace ranges (such as particular users to tenant shards or load balance) to other components. For example users1-1000 are handled by petsserver1 and socket5 is associated with thread3. In other words: changing the RabbitMQ routing settings doesn't change the architecture of your software. You need to change the architecture of the software to match the routing configuration. But what if you changed the routing configuration and the application architecture changed to match?
In Service mesh use cases (2020)
This is interesting. Correct me if I don't understand is this only concurrent with respect to IO is that right? If you run a IO operation or network call (fetch api) in those promises, those shall be concurrent with the CPU execution of your Javascript? I think async/await is a great primitive. I've been working on implementing a async/await switch statement based state machine* in Java for multithreaded async/await. I want to handle the scheduling of multiple promises eagerly, so when you call async task1(); async task2(); async task3(); it schedules them all independently on different threads. * if you've used protothreads in C, this is what it is similar to. To do interleaved concurrency in Javascript, you could do the same pattern (switch based state machine) or do my concurrent looping approach. You break up your long CPU task into l
Read the rest
ots of microtasks and switch between them concurrently with a switch statement. You switch between tasks with a scheduler loop, so you do a bit of work on each task independently. It's concurrent but not parallel. here's my writeup of concurrent loops which takes arbitrarily nested loops and turns them into an iterator https://github.com/samsquire/ideas4#133-concurrent-loops---l... here's my java state machine of multithreaded async/await in Java, that could be adapted to Javascript except it wouldn't be parallel. https://github.com/samsquire/multiversion-concurrency-contro...
In Go-like channels in 10 lines of JavaScript
Thanks for remembering me :-) I would like things to run locally by default and then deployed to the cloud where they run. Should be easier to debug problems if I can get the code to my machine and investigate issues with tools that my computer has such as "strace", "perf" and debug logging that I liberally apply to the build script. In production we would have log aggregation and log search (such as ELK stack) and it is a good habit to get into the perspective of debugging production via tooling. But CICD feels before that tooling in the pipeline. You could wire up your CICD to log to ELK but I would prefer local deployable software. I think my focus on automating things means I want to be capable of seeing how the thing works without relying on a deployed black box in the cloud and using assumptions of how it works rather than direct in
Read the rest
vestigation. One of my journal entries is almost a lamentation of all the things that need to be done to release and use software. This is that entry: https://github.com/samsquire/ideas4#5-permanent-softwareplat... I wonder if software could be deployed more like a URL that has all the information to configure a virtual machine. Docker over URL or something.
In Release engineering is exhausting so here's cargo-dist

Showing the 15 most recent of 47 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.