Hacker News new | past | comments | ask | show | jobs | submit login
SML#: a new Standard ML family programming language (tohoku.ac.jp)
55 points by 0x1997 on July 20, 2013 | hide | past | favorite | 26 comments



"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.

[1] http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/en/Ch4....


You can also update one field in OCaml, I really like this language.


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"}


You are completely right, thanks for the precision and code sample.


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.


Strange choice of name given that it doesn't build on Microsoft's CLI at all.


'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.'

http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/en/Ch1....

It predates it, actually.


You mean CLR?



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.


Microsoft authored and controls the standard, so I don't think it is unreasonable to call it Microsoft's CLI, but sure.


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.

edit: or OCaml, or F#.


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.


Haskellers complain about Haskell's module system and say that SML's is better more often than any MLer, I think.


F# might already be more popular than both, but it's hard to tell for sure.


Yes, that's my point. We shouldn't say that most people use X because it doesn't seem clear cut at this point.


It's not really an ethical problem, just an estimation. If SML was the only similar language, surely a lot more people would be using it.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: