Haskell and OCaml are both functional programming languages (well OCaml has OO support as well) that have a REPL, interpreter, and native code compiler. They have decently sized communities considering that they are mainly academic languages although Haskell is starting to see industry use at some big name companies like Facebook. OCaml is maintained by the French national lab INRIA and is extremely popular at the fintech firm Jane Street. OCaml inspired much of the syntax of F# (.NET functional programming language). Haskell takes functional programming to the extreme and has a lot of academic jargon (Monads) that can turn off beginners. Scala is like OCaml in that it has support for both OO & FP, but it runs on the JVM and you can use Java libraries. I think both Haskell and Scala have excellent concurrency support. I forget which one uses STM. OCaml has been supposed to be getting multi-core functionality for a long time I think. These three languages are all pretty standard business languages that you could build a business out of. The fact that Scala can use the JVM is super super nice as a lot of Haskell and OCaml libraries are not something I would trust in production. FPComplete is a consultancy for helping firms use Haskell commercially.
Nim is a language with Python like syntax that transpiles (or compiles) its source code to C or JavaScript and then uses those compilers to get really fast code and an executable to distribute. It is still pre 1.0, but it has the option to use or not use garbage collection. A pretty cool language. It can be used for fairly high level projects where Python might normally be used, all the way to OS and video game work with some effort. Rust is mainly meant to replace C++ (closer to D than Nim, but they do overlap some). Rust uses the LLVM compiler and is being used at Mozilla. It currently has had a lot of hype for awhile. It is supposed to be a really safe language. The syntax is a mix of imperative, OO, and FP in my opinion. It is quite fast. Lastly Shen is a research language from Mark Tarver (wrote the bipolar lisp programmer essay). Last time I looked it focused on theorem proving and ran on top of another lisp (can't remember, but maybe Racket or Common Lisp). It used to have a pretty odd license, but I think it's been fixed for awhile. It has built in support for prolog functionality like some other lisps which is cool. He also has taken time to write some libraries which let you use Tk for GUI, which is also neat. I wish I had time to check it out.
Lisps are kind of like the ultimate dynamic languages, while Haskell is like the ultimate static language. Lisp has more flexibility, but the Haskell compiler will catch a lot of bugs.
The type system is quite similar to C++'s one, just that the language has better support for meta-programming, modules, packages and explicit notion of unsafe code (system in D speak).
Code generation at compile time is done via compile time code execution, templates or plain replacement.
It has a GC, but like all GC enabled systems programming languages, has mechanisms to control its execution, forbid its use in performance critical sections (@nogc attribute) or just manually allocate memory via stack, globals or plain OS calls.
why do you think haskell is the ultimate static language? surely it has tough competitors in f#, sml, and idris, all of which have big features haskell doesn’t have.
I'm not aware of any language that can go up against Haskell in the bleeding edge category. I'm sure there are plenty of features such as mutable state in functions that were intentionally left out. I thought Idris was supposed to be Haskell on JVM? Let me know which features it is lacking from the other two. I'm not familiar with SML. Overall I guess it doesn't really matter.
The JVM Haskell is called Eta (I also heard of another similar project, Frege). Idris is Haskell-ish, but it has Dependent Types - the "new" typing hotness - which offer typing even more advanced/fine-grained than Haskell[1]. AFAIK using types to create something resembling a proof of correctness isn't uncommon in Idris. Or stuff like a function that a takes a number and a proof that the number has some property, say even-ness. So I'd say Idris is even more researchy/bleeding-edge than Haskell.
[1] Some of these features can be emulated in Haskell, but AFAIK it's kinda clumsy at the moment. There's an ongoing initiative called DependentHaskell that aims to improve that.
I don’t know if I’d describe JS as a fintech. Their technology is not their product that you can buy, it exists to power their real business, which is prop trading.
True to a degree, but most would say there is a difference between standard bank "x" and a company that has billions in trades going through it. A fine lined distinction though.
Most banks don't have lots of people writing complex algorithms for their day to day job.
Most banks don't have complex algorithms (the sort that some would consider OCaml or Haskell a good fit for) in general, they only have complex software because they have complex business and regulatory requirements, complex and incoherent existing systems to work with, cost constraints and organizational issues.
I agree. I was in technology for in-house use in both commercial and investment banks in the 90s. I definitely refer to my work back then as fintech as much as my more recent work on algo trading systems for direct client use.