I don't want to write code in a browser. For python you have something like ipython which allows you to have an interactive experience, while also allowing you to have your favourite editing environment. For ocaml, surely there are also repls that provide this kind of thing.
It drives me nuts that some people see this as «either or».
Linqpad is another and different take on data-driven environments. As is various «SQL admin» alternatives.
If I don’t, the notebook quickly becomes bloated, I start getting paranoid about stale cells and lose track of what I'm actually trying to do.
Ideally the notebook’s sole purpose is interactivity, as kind of a quick-and-dirty frontend when it's not worth it to write an actual frontend, everything infrastructural gets moved out.
For interactive development, repl is a joke. Sketching out a fully working prototype of a few hundred lines of code (possibly depending on some data and context you don't want to reload) is impossible in repl.
I don't want to adapt, the shortcuts in the browser remain in the browser, and same for text editing, no overlapping.
And it also was a good way to get comfortable with using terminal.
Using notebooks removes all these learnings. I dislike it because it makes for less confident programmers in the long run.
https://www.youtube.com/watch?v=7jiPeIFXb6U
And the slides; https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUh...
I have a hand-rolled proxying inference framework written in Python that is similar in purpose to something like LangChain but much more stripped down, less abstraction. Similarly to many other Python tools, it leverages the reflective capabilities of the language to do things like ask LLMs for responses conforming to a data class, or pass native Python functions as tools. Best of all, it relies on native Python constructs like docstrings to provide additional context to the inference APIs, making clean and well documented code a secondary programming model in a sense.
Perhaps it’s vanity, but at least in Python I find the resulting code quite elegant. I became curious what it would be like to port this to other languages, and surprisingly found that F# would, to my eyes, end up with the most lovely analogue.
Even languages I expected to be expressive and terse, like Haskell, couldn’t express the same ideas as understandably yet concisely as F#.
- https://github.com/dotnet/TorchSharp
- https://github.com/DiffSharp/DiffSharp
* https://github.com/brianberns/Hearts
* https://github.com/brianberns/MinGptSharp
In particular, it shines on very large models or where fast quasi real-time inference is required.
I'm a bit surprised to see no mention of Owl (https://github.com/owlbarn/owl an older project for scientific computing in OCaml that was resurrected recently), I wonder how they compare.
The Raven README mentions:
> We prioritize developer experience and seamless integration.
so maybe that's one difference — I used Owl on a course project about a decade ago, and while it got the job done, I remember the experience being rather painful compared to Numpy (even though I was more experienced with OCaml than with Python at the time).
https://discuss.ocaml.org/t/owl-project-restructured/14226
Too early to tell what it will lead to.
> Is Raven the successor to Owl?
That's what I am wondering too (especially with the name), but I couldn't find a reference to Owl in the repo.
Elixir vs ocaml I use both languages but for such completely different things I don't even think about a comparison. Elixir is for when the problem I have suits beam's strengths.
OCaml seems to be a lovely language based on my limited experience with it. It’s a pity it’s not more popular.