вторник, 20 августа 2013 г.

Ads and Reality of Functional Programming

There’re a lot of rumors about functional programming now. For example, a lot of people say (mostly on forums) that only really smart guys can learn a functional language and in the short time a Java/C#/C++ programmer will look like a pure C programmer in our age.

Why will functional languages win? Because “they are languages of future” and “I like them”. One more thing: a Haskell program looks really difficult. How can you beat such a difficult thing?

But I don’t think so. Functional languages are very active now, they give great influence to Object Oriented ones, Ruby, Python, PHP, Java, C#, even C++ are implementing lambdas and mapping. But “being futuristic and unusual” and “look difficult” aren’t features. It isn’t even the truth.

Firstly, functional languages are much older then Object Oriented ones. LISP was released in 1958, and became popular in Algol time. They had really plenty of time to beat Fortran or Pascal, but they didn’t. Even today there’re plenty of languages with functional influence, there’re plenty of languages where functional style is possible, but the pure functional family is very little: LISP relatives (they are surviving in Closure, Emacs and SICP, but even SICP course is studied  today with examples on Python), Haskell (more studied then used), Erlang (needed only if you work for Sony Ericsson) and ML languages (OCaml/F# and Scala). All of them look unusual. if you were teached programming on Pascal/C++/Java/Python and are very usual for stufent who studied SICP. LISP was used even in Soviet Union (there’re some translations of handbooks made in 1988-1990).

Even Google uses C++/Python/Java, not Scheme or Haskell.

Secondly, if you need really unusual and different things, try quantum mechanics. The simpler code is, the cheaper will be support. If you aren’t sure, do you need the easy supported code, ask your vendor.

But what’s the thing that make functional languages useful? Let’s look to very ancient (1984, last edition at 1990) paper by a guru:

  1. Glueing Functions Together – you can glue functions and objects they generate as easy as you glue modules of your application.
  2. Glueing Programs Together – any program on a functional language is a function and can be used this way easily
  3. Lazy evaluation makes functional language a good choice to write AI (this was even in Soviet-time books on computer science from 1990!). Because of it, you can avoid storing in memory all of the wrong variants during position analysis.

Have you met this pros in any of functional languages polemics? Or they aren’t important anymore?

If you didn’t, there aren’t any gurus in this thread. There’re just people who show you rare things that are fashionable only because they are rare. Such a people will never make functional languages popular: when something can be used my everyone, it isn’t cool and fashionable anymore.

Studying and using the ideas from functional programming is the business of “simple” programmers on C++-like languages. Because we are only ones who can find place for all of pretty lambdas, closures and monads.