1,097 karma · joined July 12, 2017
I find type annotations to be a major benefit while prototyping - I know exactly what everything is, and can quickly refactor anything. The ability to use serde to deserialize/serialize into Rust structs is another huge benefit. Chaining iterators, collections, etc removes a lot of the boilerplate that I find myself doing in python.
I've also been using Rust as my primary programming language for 5+ years now, so I am definitely "in the zone"
I really dislike both the semantics and syntax of python. However, the scientific computing libraries (pandas, numpy, scipy, scikit-learn, matplotlib, seaborn, etc) are just too productive to turn away from for quick data analysis tasks. If these libraries didn't exist, I wouldn't touch python with a 500-foot pole.
When I choose languages, I choose them based on semantics, tooling, community/ecosystem, UX, and then maybe syntax
I was working on a SML compiler [1] and language server in Rust as well, but I dropped the ball towards the end of 2020 as I had a PhD to finish!
SML is a great language, and I think some better tooling (like a language server) is all that it really needs to be useful.
Pleasantly surprised so far - knock on wood.
Phenomenal performance, drop-in concurrency support (`iter()` -> `par_iter()` with Rayon), and a great ML-based type system that makes writing correct code easy.
It also has some of the best developer UX/tooling out of any language I've used.
It's really not - have you played around with AF at all? Made mutations to protein structures and asked it to model them? Go look up the crystal structures for important proteins like FOXA1 [1], AR [2], EWSR1 [3], etc (i.e. pretty much any protein target we really care about and haven't previously solved) and tell me with a straight face that AF has "solved" protein folding - it's just a fancy language model that's pattern matching to things it's already seen solved before.
signed, someone with a PhD in biochemistry.
[1] https://alphafold.ebi.ac.uk/entry/P55317 [2] https://alphafold.ebi.ac.uk/entry/P10275 [3] https://alphafold.ebi.ac.uk/entry/Q01844
> There's a huge gap between the fundamental units of biology (biochemistry) and the resulting emergent behaviour (living things). We don't have a good bottom-up system to predict the emergent behaviour so we're mostly left with observing from the top down and poking/prodding sub-systems, hoping to gain some insight.
I think this is just about the last thing that we will ever solve/figure out.
There are just a mind-boggling number of parameters, feedback loops, dynamic modifications, interactions, etc that are effecting cellular state (let alone organism state) - something that I think many CS oriented folks ignore when talking about "DNA as source code" (perhaps if program behavior depended on the size of indents, font, variable names, how many lines of code you wrote, the proximity in source location of different functions, etc).
A good first step is to require supplemental materials are published in a machine readable format (e.g. not manually thrown together Excel files that lack any kind of normalization or rational schema)
As for language-server, I'm currently sketching out some plans to use SMLnj's "Visible Compiler" feature, since that seems the easiest path forward. I have a half-baked language-server based on MLton's def-use output, but it's too unstable to share. I am planning to make some progress on the language-server in the next couple weeks.
[1] You'll notice it's just a fragment of the language for now, and only half-implemented. https://github.com/SomewhatML/sml-compiler and https://github.com/SomewhatML/sml-analyzer (again for a fragment of SML)
Sure, it has some warts/differences compared to newer languages - we have moved towards traits/typeclasses/etc, and I wish I could just write #[derive(Debug) - but I feel that SML fits in a very unique spot for programming languages. It's extremely simple, yet still powerful and expressive. I hope we will see continued work on SML/Successor ML descendants (like 1ML, etc), because I think there's still potential there
I think some updated language tooling would dramatically help.
I find this interesting - I think I typically do the reverse: I generally start by thinking of my program in terms of types and then write code to perform operations/transformations on those types (obviously this doesn't work 100% of the time).
That being said, I have never written any Go, but I can't imagine I would approach it differently.
Some resources I like:
- Andrew Kennedy's 2007 paper Compiling with Continuations, Continued [1]. This one is the most clear IMO
- Andrew Appel's Compiling with Continuations book (a bit outdated though... assembly code is for VAX)
- Matt Might's series [2]
- MLton's source and documentation [3]
[1] https://www.microsoft.com/en-us/research/wp-content/uploads/...