"Functional record update" [1] was the one missing feature that bothered me most about Standard ML. If you want to change one element in a record, you've got to specify explicitly that every other element in the record didn't change.
I wouldn't use "update" since it imply that there is a modification of the value in the original record. This is possible with mutable field of course, but I think the feature of OCaml (and apparently, SML#) you're talking about is the `with` keyword:
# type foo = { bar: int ; baz: string };;
type foo = { bar : int; baz : string; }
# let a = { bar = 42; baz = "hello" };;
val a : foo = {bar = 42; baz = "hello"}
# let b = {a with baz = "bye"};;
val b : foo = {bar = 42; baz = "bye"}
# a;;
- : foo = {bar = 42; baz = "hello"}
SML# is one of the lesser known SML implementations, although it's a quite good one. The only thing that I found impractical,... you can only link 32bit libs, which is very odd on todays 64bit Systems.
Nevertheless, the thing I like most at SML# is the excellent FFI. You can just pass SML-records or SML-functions to C. SML# is very powerful if you code your applications in SML and C.
The recently released ocaml-ctypes <https://github.com/ocamllabs/ocaml-ctypes > library by Jeremy Yallop does something similar. It uses GADTs to represent the C type system in OCaml's type system with as-you-would-expect OCaml signatures. For example, you can pass an OCaml comparator to a C sort function that takes a function pointer and it works.
It's not quite as smooth, as far as I know, but it will soon include C header consumption and C stub generation to both improve binding accuracy/safety and remove dynamic paths for performance.
'In 1993, Atsushi Ohori extended the Standard ML of New Jersey compiler at Kansai Laboratory of Oki Electric, and named the experimental prototype SML# of Kansai. [..] The name SML# of Kansai symbolizes the field selector #〈label〉, which was given a polymorphic type for the first time by this compiler.'
TL;DR: the CLI is the specification, of which the CLR is Microsoft's own implementation. Another/the other implementation of the CLI is Mono.
Which begs the question: you've written "Microsoft's CLI", which does make sense because they were the ones who've come up with it, but can't that be interpreted as a synonym for CLR? Maybe that's what 616c meant.
Sorry, my bad. I had no idea about CLI, and the CLI-CLR distinction, or I would not have put foot in mouth. Thanks for the link and not a snarky comment.
Good to know about this alternative. SML was a great language, and deserves to live on. OCaml is not really a successor to SML because of its object-oriented features and its lack of backward compatibility to SML.
sorry to ask, but who uses SML nowadays and for what do they use it? (I know about it's descendants or languages influenced/inspired by it, like OCaml, F# and the less related Haskell, but nothing hits the news about SML projects.)
Although SML is such a beautiful and pragmatic language and has many Compilers and Runtimes, I am not aware of any real world projects with impact other than the well-known SML compilers (Mlton, SMLNJ, MosML, Poly ... to only name a few).
Usage of SML results in very short, readable and efficient programs, so I wonder why there is only so little industry adoption.
Most of the people who would be using SML are using Haskell, hence why Robert Harper is so bitter, constantly writing blog posts about how much "Haskell sucks", and how "unsafe" it is.
I'm not sure it is right to speak of "most people". Many people use OCaml these days. For instance, I have the impression that in work on program verification and static analysis OCaml is more popular than Haskell. Coq is written in OCaml, for example. The Haskell community much more vocal though.
Harper has strong opinions, but he has a few points. Haskell may be great, but one should be aware that it is not an improvement on SML in each and every respect. For example, SML has a much better module system than Haskell.
Perhaps OCaml gets a lot of use in that community because a lot of that community is French -- that was my experience, anyway. And a lot of the folks in that community don't seem as vocal (to this side of computing) only because they are using different channels and complaining about different stuff!
It was actually surprising (and somewhat annoying) that Twelf is written in SML.
adaption of ML style languages suffers from the unfamiliar syntax, the pretty steep learning curve for those trained in imperative dialects at 'java-school'.
at least when it comes to syntax mythryl might someday provide an option. its basically SML/NJ with a c-like syntax and multithreading support. still very much in development but looks promising: mythryl.org
that said Haskell certainly seems to be the winner of the current functional language trend.
I don't think people really care about syntax that much. OCaml, F#, Haskell all have similar looking syntax, Scalla has a particularly ugly one (maybe if it wasn't supposed to be C/Java-like it wouldn't have ended like this).
...the only times I heard people bitching about syntax to the point of staying away from a language for it was either about Lisps ("undistinquishable paren soup") or about Python's significant indentation and lack of multiline lambada. MLs have a pretty familiar math-like syntax and apart from some operators seems "normal looking" even for Java and C programmers.
I often use SML for writing games. The Functioning library (http://github.com/robsimmons/functioning) provides support for SDL and includes an SML port of Box2D.
[1] http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/en/Ch4....