6 ms·
For me, Erlang was the ladder to functional programming. Once I’ve mastered Erlang to be able to write gossiperl (http://gossiperl.com http://gossiperl.com, not
by rad_gruchalski 5y ago
For me, Erlang was the ladder to functional programming. Once I’ve mastered Erlang to be able to write gossiperl (http://gossiperl.com http://gossiperl.com, not maintained in a long time), all immutable programming became easy. Maps, flat maps, recursion, no side effects, all became clear.
After Erlang, I’ve enjoyed Scala a lot. Especially Akka.
I do tons of go now and when I need actors in go (not very often because channels are rather straightforward), I use proto.actor: https://github.com/AsynkronIT/protoactor-go https://github.com/AsynkronIT/protoactor-go.
Erlang is awesome. I can definitely recommend the “Designing for scalability with Erlang/OTP”: https://www.oreilly.com/library/view/designing-for-scalability/9781449361556/ https://www.oreilly.com/library/view/designing-for-scalabili.... This is the book which finally made me “get it”.
- olah_1 5y agoI have definitely noticed a functional programming to golang pipeline. Multiple people used Haskell and switched to Golang. Interesting anecdotes.
- dcolkitt 5y agoWhen you're dying from the compile time of functional languages, you really appreciate Golang's near instant compiles.
- dwohnitmok 5y agoThat's mainly Haskell and Scala. OCaml and Elm have as fast or faster compile times.
- anuragsoni 5y agoNot all functional languages are made alike. OCaml compile times can rival Go's.
- G4BB3R 5y agoThe cause is not being functional, but having dozens of extra features and multiple syntaxes for the same thing, both Scala and Haskell suffer from that. On the other hand OCaml is very fast and Elm is the fastest compiler I've ever seen. Edit: oops there was already a similar comment when I posted
- saghm 5y ago> Elm is the fastest compiler I've ever seen Compared to the other languages you mention there, I'm not surprised that Elm has the fastest compiler; compiling to an actual binary (or something low-level like JVM bytecode) definitely seems like it would take more work to compile to than something much higher level like JavaScript, especially if you're performing optimizations at each intermediate layer. That's not to knock Elm though; obviously having a fast compile time is a good thing regardless of the reason, and it certainly still would be possible for someone to accidentally write a slow compiler to JavaScript!
- pharmakom 5y agoCompiling to binary can be plenty fast, especially JVM code. It’s optimisation that really takes time.
- Cthulhu_ 5y agoIn a modern stack though, compiling a JS or Typescript project takes ages; I don't believe it's the rewriting, optimizing and minification per se, but more the huge amounts of code and files that need to be processed.
- kaba0 5y agoElm is fast because it does only the subset of Haskell’s feature set. It doesn’t have as strong a type system, it uses eager evaluation and I guess it mostly falls back on the JS runtime for optimizations.
- orbifold 5y agoIn reality the Elm compiler is probably orders of magnitude slower than clang, it just has much less work to do. A C++ compiler needs to parse / preprocess 100k+ lines of code even for something like hello world.
- rak1507 5y agoI would appreciate it if golang was any good. Unfortunately, it isn't. (It isn't functional either, so I'm not sure what point you were making)
- deleted 5y ago[deleted]
- pharmakom 5y agoI don’t think this comment adds anything to the discussion. Perhaps add a few of the anecdotes? Or even a theory as to what’s going on?
- exo762 5y agoMay you elaborate? Some Haskell users I know are not fans of Golang. What were the reasons for the switch?
- randomswede 5y agoIf you like elaborate[0] typing and immutable everything, Go really is not the language for you. [0] I don't know Haskell that well, but my understanding is that its type system is capable of expressing more intricate types than the Go type system.
- rad_gruchalski 5y agoI was tired of having to provision the runtime and dependencies. Native binaries with no dependencies was the reason to change to go.
- Ixiaus 5y agoErlang was a gateway to functional programming for me too, specifically Haskell. (And Emacs!)
- qwerty456127 5y ago> all immutable programming became easy Switching to the functional style of logic from the algorithmic style can be slightly tricky but as for immutability itself - since the introduction of for-each loops which freed us from incrementing counters I could never understand why is immutability not the default in all the popular languages. Programming algorithmically I rarely need to change a variable even in C# or Python. The fact they don't have a syntax for defining single-assign values (like val in Scala) annoyed me since I learnt Scala (which is extremely easy to start with - you can use it just as "better Java", advanced functional programming tricks are entirely optional) and realized I mostly use "val" naturally. If a variable I defined is changed - it most likely is by a mistake or some unexpected behavior taking place. Both C# and Python already have "var" to define a variable with its type inferred, why won't they add "val" to tell the compiler it can only be initialized once and never assigned again? To me it seems trivial for a compiler developer to add and also not breaking anything while bringing quite a lot of value by eliminating a whole class of bugs.
- Roonerelli 5y agocouldn't you use the readonly modifier in c#?
- qwerty456127 5y agoI do, occasionally. But it looks annoyingly verbose (which to me already feels enough to avoid using it too much) and IIRC has some limitations (I can't remember) as compared to Scala's concise and universal `val valueName = value`.
- Cederfjard 5y agoIs ”algorithmic” a synonom for ”imperative” in this case? I haven’t seen this usage before.
- qwerty456127 5y agoYes. "Imperative" probably is the right word. I don't read much programming literature. You probably are correct.