I’ve actually implemented a TUI in Prolog (because there wasn’t anything in the space and I wanted to make sure it respected the relational/logical nature of Prolog).
I’m happy with performance and developer ergonomics. But before I publish it, I want to firm up some opinions on how TUIs should behave for end users.
Do you have any suggestions other than “use Vim/Emacs and think about it”?
So, the S and P in LSP stands for Server and Protocol. The Protocol is to exchange JSON-RPC messages with a server. So to add a new language to Zed, we should just be able to direct Zed to the server to talk to right? No. You have to write an extension in Rust. https://zed.dev/docs/extensions/languages#language-servers.
Thank you!
I've recently become a bit obsessed with the work of Blaise Agüera y Arcas and his BFF experiments (self-replicating (Brainfuck) programs emerging spontaneously from random noise). This got me thinking about running a similar experiment with Cellular Automata (efficiently on GPUs). So I'll definitely be playing with this.
I tried exactly this idea a few years ago (inspired by how Bear app did Markdown at the time). But I never solved all the issues to get it working 100%.Eventually I just gave up and moved on.
So bravo and thank you for making it work!!
Apparently I'm a super smeller (always the first to detect gas leaks, food that's off, know the brand of shampoo a person uses if I'm 200ft down wind, know if you use scented dish soap to clean the bowl you used to make cookies in when I eat the cookie). And I just think the idea that adding smells to the world is absolutely insane. Can I beam my favourite colours directly into your eyes with a laser from across the room? What if I know you like that colour too?
I’m realized years ago I have full blown aphantasia. But I don’t suffer from autobiographical memory deficiencies. For me it’s akin to what happens when you close your eyes for a moment then open them again. I’m not shocked by everything in the room “appearing” suddenly. I knew it was all there, but not because I visualized it while my eyes were closed. So when I remember past events, it’s with that same sensation of being there but just having closed my eyes to it. I do dream with full imagery.
After spending a lot if time in Prolog, I want a nice way to implement and compose nondeterministic functions and also have a compile time type check. I’m eyeing all of these languages as a result. I’ll watch Ante as well. (Don’t forget developer tools like an LSP, tree-sitter or other editor plugins).
A Prolog TUI library that sticks to relational/logical programming, is conceptually simple, complete, and performant.
Only requires some core ansi features that exist or are easily implemented in most Prologs.
Currently have stuff like nested scrollable areas, toggles, frames, buttons, layouts working.
Also, a visual programming language implemented as a PICO-8 script, where the "programming" is done fully in the sprite editor.
Ok I’m genuinely convinced I’d be happier using Fennel than using Lua in instances where I need to use Lua. I’m not currently using Lua for anything. Maybe if I write a Pico-8 app…
As a proficient Elm developer with industry experience, I’m wondering what are the biggest challenges in hiring devs? Is it the paradigm, learning the ecosystem, lack of interest?
Are you currently hiring?
> Readability is a property of the reader, not the language.
Similarly, the inability of a person to write machine code directly is a property of the person, not the hardware. Yet some of these people admit their limitations and use K.
> if they haven't surpassed SWI in some performance metrics yet I'd be surprised
I was/am also anticipating performance gains from Scryer. Which is why I made a point to request up to date Scryer benchmarks in the SWI forums. Still, for free/open Prolog, SWI-Prolog is hard to beat: https://swi-prolog.discourse.group/t/porting-the-swi-prolog-...
Implementing and using a miniKanren was fun and enlightening. And it helped me appreciate how incredibly optimized and fast SWI-Prolog is for relational/logical programming. If someone knows of a miniKanren/language combination that outperforms SWI-Prolog and has good developer ergonomics for relational/logical programming, I’d love to hear about it.
For example: the logical core of Prolog along with it's resolution model (for the logical part) are non deterministic (something can have none, one, many solutions) but only one solution is explored at a time. So it's a "meta logical" thing to express something like "the set of solutions for ...". Given that the core of Prolog is Turing complete, you can still get Prolog to compute anything, you might just not have a nice way of declaring it in pure Prolog.
Prolog has an interesting history of people discovering ways to express things that are simple, powerful and elegant. And yet despite the simplicity, these ways of expressing things were not immediately evident. DCGs are a prime example.
> How do you debug DCGs? I get "false." instead of "syntax error at line 23", which is unacceptable for bigger inputs.
I also sympathize. "false" as the default failure mode is a challenge with Prolog. Most Prologs I've used have good debugging/stepping features (see spy and trace predicates), logical debugging of pure monotonic Prolog can often help (explained by Markus Triska), you can easily write (use existing) meta predicates that assert a called predicate must not fail otherwise throw an exception. For example: here the ./ is supposed to look like a checkmark. So `./ true.` is true. `./ false` throws an exception.