A pure scheme web programming tool(goeteia.dev)
goeteia.dev
A pure scheme web programming tool
https://goeteia.dev
27 comments
Hoot is also not a 2 day old vibecoded project.
The second 2 day old vibecoded project by the author, posted minutes after: https://news.ycombinator.com/item?id=48877344
I always loved the "syntax" of the "beautiful report language" and how the [] meshed with Scheme's () and HTML/XML <> (and maybe JSON {}).
https://brl.sourceforge.net/
https://brl.sourceforge.net/
thx good to know
This really gets at the issue with JavaScript in the age of AI: it’s just not a terribly statically verifiable language, and DOM work is incredibly prone to failing silently while the app itself is clearly not working. We’ve had to paper over it with TypeScript and frameworks that impose constraints just to stop several classes of bugs, and even then it doesn’t go terribly well.
The flip side is that AI is making the underlying code more like a..compilation target? At least in the sense that, yes, as this site mentions, Scheme is ugly to read and would be hell to write the old way, but with the new way..maybe we can try because it would give us what native JavaScript and the latest browser standards never could: reliability
The flip side is that AI is making the underlying code more like a..compilation target? At least in the sense that, yes, as this site mentions, Scheme is ugly to read and would be hell to write the old way, but with the new way..maybe we can try because it would give us what native JavaScript and the latest browser standards never could: reliability
I don't understand this, if I'm honest. WebAssembly is the compilation target. It's a Scheme compiler for wasm, right? Why is it pretending to be a way to rewrite websites? Wouldn't that be a job for literally any possible language compiled to WebAssembly?
I read the "Why Scheme?" page and it looked entirely AI generated, inasmuch as the reasoning presented confused me, because it didn't make sense. It references homoiconicity as pretty much the only reason to do this, mentions Lisp once or twice, and then just sort of talks about AI not understanding HTML because it doesn't understand compiling.
But putting it under the prompt of "must pass compiler" makes an AI exactly as capable at the task of making websites as it is capable at the task of making correct programs in any language - which is to say that it can't be guaranteed. Which in turn puts into the question the whole purpose of this project, and particularly, why Scheme chosen at all? Why not Lisp? Why not C? Or Erlang? Or Clojure?
I read the "Why Scheme?" page and it looked entirely AI generated, inasmuch as the reasoning presented confused me, because it didn't make sense. It references homoiconicity as pretty much the only reason to do this, mentions Lisp once or twice, and then just sort of talks about AI not understanding HTML because it doesn't understand compiling.
But putting it under the prompt of "must pass compiler" makes an AI exactly as capable at the task of making websites as it is capable at the task of making correct programs in any language - which is to say that it can't be guaranteed. Which in turn puts into the question the whole purpose of this project, and particularly, why Scheme chosen at all? Why not Lisp? Why not C? Or Erlang? Or Clojure?
Scheme language is very well-suited for producing websites, I've been doing that for several months with decent results. But unless I missed information, I think you're right that has nothing to do with WebAssembly. However I know Scheme->wasm compilers exist if unsure of their status.
Of course many languages can be used to create or serve websites. If language doesn't matter, then why not Scheme? It's at least as capable as the languages mentioned. OTOH much less is written about Scheme vs. more "mainstream" languages. Maybe that does make a difference.
Of course many languages can be used to create or serve websites. If language doesn't matter, then why not Scheme? It's at least as capable as the languages mentioned. OTOH much less is written about Scheme vs. more "mainstream" languages. Maybe that does make a difference.
the syntax-case marco
> it’s just not a terribly statically verifiable language
FYI, neither is scheme.I'm learning Clojure and using it in a vibe coding environment. AI hates brackets.
I tried to edit the Scheme source but it seems to have a bug where every editing action seems to happen a row above of where the cursor is.
Bravo! If only Clojure(Script) did this. There is a real need to reduce the size of compiled JS delivered to the browser and eliminate legacy dependency on goog.
1 Self hosting in browser with hygienic macros
2 handle HTML and CSS like Scheme (Expand with macro)
3 Use S-expr to send / receive message with server
Very cool!
At the top of the program you import Web Libraries. is it some standard Scheme web framework that you're using?
* ;; re-running this source bumps the generation; the old loop sees it ;; and lets go (js-eval "globalThis.__hero_gen = (globalThis.__hero_gen || 0) + 1") (define gen (js->number (js-get (js-global) "__hero_gen"))) (letrec ((tick (lambda _ (when (= gen (js->number (js-get (js-global) "__hero_gen"))) (frame!) (js-method (js-global) "requestAnimationFrame" tick))))) (js-method (js-global) "requestAnimationFrame" tick))
Is this the part where it is compiled?
At the top of the program you import Web Libraries. is it some standard Scheme web framework that you're using?
* ;; re-running this source bumps the generation; the old loop sees it ;; and lets go (js-eval "globalThis.__hero_gen = (globalThis.__hero_gen || 0) + 1") (define gen (js->number (js-get (js-global) "__hero_gen"))) (letrec ((tick (lambda _ (when (= gen (js->number (js-get (js-global) "__hero_gen"))) (frame!) (js-method (js-global) "requestAnimationFrame" tick))))) (js-method (js-global) "requestAnimationFrame" tick))
Is this the part where it is compiled?
38.2 kB / 75ms you have syntax-case in browser
Neat project but the AI writing is a turn off. Could use a whole lot less "honest residue".
1: https://spritely.institute/hoot/