mvsamuel.bsky.social
I solve large software systems problems with programming language techniques.
Previously, I was the first frontend engineer on Google Calendar, and was a security engineer who worked on the industrial-strength Mad Libs undergirding Gmail.
793 posts
583 followers
569 following
Active Commenter
comment in response to
post
Yeah.
To my mind, low-level is for running with scissors.
It involves simple, often unsafe interfaces for building safe abstractions or going higher on the developer effort/runtime-performance tradeoff curve.
If the GPU decides when/what to emulate (eg in low-power mode) it's not low level.
comment in response to
post
Because a modern CPU isn't this clean, easily understood pipeline with a single instruction set stepping to a single clock signal.
It's more like a loose confederation of cores and caches handling tasks from a polyglot front office connected by variable speed couriers.
comment in response to
post
Meh. Without CDR no good for streaming requests.
comment in response to
post
Yeah, there're some tools in common, but
parts of speech haven't proven useful for analyzing code, and
PLs' twin audiences, people and engines, break mutual intelligibility as a way to chart language community boundaries.
comment in response to
post
Wild how a word for
a sequence of operations specified in painstaking detail to achieve a clearly defined goal
has been co-opted to mean
a system of weights barfed out by a program&input too large for anyone to understand and whose goals and success can only be understood statistically.
comment in response to
post
With many cheerful facts about the COPY book for code-re-use.
comment in response to
post
About GOTO à la Dijsktra I'm teeming with a lot o' news,
comment in response to
post
I understand equations, both the fix-ed and floating-pointable,
comment in response to
post
I'm very well acquainted, two, with phrase COMPUTATIONAL,
comment in response to
post
From Mainframe to Micro, in vars environmental,
comment in response to
post
I know the REXX of Cowlinshaw, and quote specificatons industrial,
comment in response to
post
I've information tabular, columns, and types pictorial,
comment in response to
post
I'm still salty that babel became this foundational bit of infrastructure, and felt that the JS bundler ecosystem could have been simplified if bundlers could share macros with the files they bundle and their output.
comment in response to
post
Btw, I don't think I've said how cool I think this work is.
I tried to get foundations for meta-programming into JS 15 years ago and through some twists that turned into template strings.
Safari spiked it bc a value/AST correspondence seemed an overlarge spec effort.
esdiscuss.org/topic/an-alt...
comment in response to
post
So yeah my bias: either be syntactic or don't.
jsmacro`
let ${allocateMeATemporary("prefix")} = ${initializerExpr};
```
or
verbs like declare, initialize, assign, evaluate, call, define.
comment in response to
post
Huh. I know const was not because some Java programmer thought they might want that from C++ and JS inherited Java's reserved list.
But I thought it was .. yeah, it's allowed as a key not an ident.
$ node
Welcome to Node.js v23.11.0.
Type ".help" for more information.
> ({ let: 1 })
{ let: 1 }
>
comment in response to
post
Non-PL devs tend to fixate on syntax, esp keywords.
Eg `let` and `const` are separate things, not one has a few extra restrictions.
Unless you're doing quasiliterals, my bias is APIs should describe the intended changes to non-syntactic abstractions like scopes.
comment in response to
post
I don't recall if `let` is conditionally reserved, but the meaning is clear to me.
comment in response to
post
Yeah. There's the whole pattern of error handling via labeled break where you can't always assign because deep code exits like batman.
let result;
...
if (cannotComputeResult) {
break windowAndDeployBatachute
}
result = ...
...
return result;
comment in response to
post
"Bind" to my mind means "this name is an alias for it's lifetime" so I'd avoid that term unless it's a lifelong association. I think you alluded about unwanted constyness so it seems just an initializer.
Unless you have a different meaning for your project.
comment in response to
post
Maybe "declareAndInit"?
letBind declares a name and associates an initializer?
"let scoping" is a term of art in JS, so I'd avoid using "let" unless you need to contrast that with "var" scoping or function declaration style hoisting.
comment in response to
post
Oh, I hadn't heard that.
One thing to keep in mind: FB/Meta has a large investment in C++.
Their eng arc was:
1. Zuckerberg wrote some PHP
2. Hired people to rewrite core bits in C++ for speed
3. Marcel wrote XPHP(?) that generated C++ from PHP syntax
4. Announced Hack and a custom VM for it
comment in response to
post
That said, I think the CSnakes people (
@anthonypjshaw.bsky.social ? ) have solved the "you can just use Python in .NET" problem.
comment in response to
post
Like languages just have different invariants they care about.
In JS, I can add a property to almost any object.
In Java, the set of properties a class has is fixed at class-load time.
You can square some of these, eg weakmaps, but it's a lot of tricky, per language pair work.
comment in response to
post
Sorry I couldn't help but that sounds intriguing. If you do track it down, I'd love a pointer.
ASTs are limited. People have made things like Python but on the JVM.
But there's a long history of attempts having subtle semantic errors or not inter-operating with existing libraries.
comment in response to
post
Yes, idioms differ. In Python, they steer you towards a setup so the tight loops are inside C code. In Rust, not so much.
ime, the exhaustion that comes from parallel libraries is in the maintenance.
You've crafted and tested a fix in language 1.
Now redo it with modifications in 2,3,4...
comment in response to
post
Yeah, a lot of people go full-stack mid-career. Unfortunately, many people having a foot in two or three and some in more isn't going to solve the problem that implementing N features across M languages is O(n x m) effort but if you have a way to implement it once, it's only O(n).
comment in response to
post
I am not a historian, but iirc early Christian Roman emperors did not recognize an obligation to support a state of Israel.
comment in response to
post
We've been working on this for about five years now and are pushing towards a version 1.
There're quite a few bits of the language to nail down before we get there, but the language is surprisingly fun to work in.
comment in response to
post
We don't just do translation though.
Our backend system is designed to allow/encourage deep integration into a target language's toolchain.
Unit tests written in Temper translate to tests in the target language to give confidence in translations when CI/CD just picks them up and runs them.
comment in response to
post
It looks a lot like (tbh) TypeScript.
Its a typed, compiled PL (not AI) that makes specific choices about core types, memory, concurrency, error recovery so as to translate well to other PLs.
Like Satnam, I want to avoid the wrath of Rachit who sadly may've left bsky:
bsky.app/profile/satn...
comment in response to
post
Temper is a PL designed to allow sharing libraries and type definitions across all nodes in sprawling, multi-language systems.
Maybe siloed engineering is the best we can do.
But Temper is designed to be usable by the workaday programmer so a small team can support all the language communities.
comment in response to
post
I want problem solvers to be able to solve problems across all the language communities.
I want data scientists and mobile devs to be able to recognize common problems and share common solutions.
I want devs to use the right tool for the job AND still produce reliable well-integrated systems.
comment in response to
post
Our types and static analyses stop at service boundaries.
We're building giant systems of disconnected islands.
This is great for cloud service billing, but it sucks for reliable systems.
comment in response to
post
But libraries are just better when that specific set of conditions isn't met.
The other problem is we're building huge, multi-language distributed systems glued together by JSON over HTTP.
The more we decompose into micro-services, the more our quality control checks miss.
comment in response to
post
Some problems can be solved with micro-services: stateful async functions.
If a problem is naturally asynchronous, and its inputs and outputs can be serialized/deserialized, and the network hop isn't prohibitively expensive.
And if you don't need compositionality from craft types.
comment in response to
post
Imagine you want to write an OSS library to solve a problem across all those languages, how much work would you have to do?
You'd have to write and maintain code in many different languages.
Our languages get in the way of us recognizing common problems and contributing to common solutions.
comment in response to
post
Yeah. I'm working on a language designed to translate well. You write a library in it, and you get libraries in all the other language.
It's not simple AST transformations which you mentioned earlier. Those don't get you far.
It's a fully compiled language with its own carefully picked semantics.
comment in response to
post
tree-sitter.github.io/tree-sitter/ might be what you're thinking of.
They're trying to provide a basis for getting syntax trees for many languages available for analyses done within many languages.
comment in response to
post
If Kiran revamps her article to integrate generated python into racket DSLs it should be retitled "Towers of Mediocrity."
comment in response to
post
I've been coming at DSLs from another direction.
I'm designing a GPPL to translate to libraries in all the others to allow well-integrated multi-PL systems.
A viable implementation path for some DSLs may be translation to a GPPL and hence to libraries in many GPPLs.
comment in response to
post
Kotlin DSLs lean heavily on intricate rules around `this`-binding and extension functions.
comment in response to
post
Another thing that worries me about DSLs is that DSLs might have fewer examples in the corpus.
Even DSLs like Scheme and Kotlin DSLs where the surface language is the same as the embedding language, they're likely to be less well supported.
comment in response to
post
No. I had no idea he'd reprised The Professional but now I'm intrigued.
www.reddit.com/r/underrated...
comment in response to
post
I did the same thing with homemade Pesada when I met her mother's mother. We've been married 15 years.
comment in response to
post
I tried to impress a girl by dissolving tons of wasabi in a dipping dish.
Me thinking: "look at me, calm and collected. She's laughing at my jokes."
She, a doctor, thinking: "his face is bright red. I hope he's ok."