среда, 25 марта 2009 г.

Отлично сказано! Так почему же самые продвинутые языки не попадают в мейнстрим?

В спорах с фанатичными функциональщиками на просторах профессиональных форумах постоянно сталкиваешься с непробиваемой уверенностью в том, что будущее за языками вроде Haskell. И если ты этого не понимаешь, значит просто пока не дорос. Но вот замечательное объяснение причин того, что экспериментальные, академические языки не находят широкого применения. Объяснение, которое дал Erick Meijer, один из отцов-основателей Haskell-а, теперь работающий в Microsoft над .NET-языками (Visual Basic и C#):

Since lambda expressions, meta-programming, monads, and comprehensions are abstract mathematical concepts, it might seem remarkable that they show up in contemporary languages such as C# 3.0, Visual Basic 9, and Java, as well as in more experimental hybrid functional/OO languages such as Fortress, Scala, Fortress, and F#. It is especially remarkable since, in the Haskell community, monads are still considered as one of the most advanced and difficult features to master.

The explanation for this apparent contradiction is that the successful programming languages understand developer inertia and obey the Change Function. They offer a solution to deep developer pain with a very low adoption threshold. The reason why most research languages die a quick death, and successful languages a slow one, is because they do not realize that users are in charge. Instead they promise miracles of improved productivity and automatic correctness; as well the fact that in the future their implementations will be fast enough thanks to better and more advanced compiler optimizations [7]. Sometimes a niche language targets a severe enough crisis, one that is larger than the perceived pain of adoption, and hence it gathers enough velocity to escape death. A good example of a language in this category is Erlang. Hopefully, Haskell will escape death as well.

Источник: Confessions Of A Used Programming Language Salesman (ссылка найдена здесь).


PS. А я последние пару месяцев ломал голову, как бы выкроить время и проштудировать Real World Haskell. Теперь с чистой совестью откажусь от этой затеи. Если время найдется, то лучше я плотнее познакомлюсь со Scala или C# 3.0.

PPS. В своей статье Meijer затрагивает проблему контрактов:

What we really need is a dial that we can turn from no static typing on the one extreme, to traditional static typing in the middle, to full contracts and invariants [15, 9, 13] on the other extreme. While we believe that pre- and post-conditions are ready for promotion from the research world to the real world, we feel that object invariants are maybe not yet ready for prime time.

Очень странно. И пред-, и постусловия, и инварианты объектов уже более двадцати лет активно используются в Eiffel-е. И, кстати говоря, являются еще одной причиной хорошей читабельности Eiffel-евских программ. А тут об Eiffel-е не слова. Или Meijer говорит о каких-то других контрактах или же “специалист подобен флюсу и полнота его одностороння”.

PPPS. По ходу чтения статьи (особенно в ее начале) очень удивлялся тому, сколько много всего автор со товарищи написали на Haskell-е (тут тебе и HaskellDB, и Haskell Server Page, и поддержка DHTML, и поддержка COM), да еще и статей настрочили по каждой разработке. В чем же причина такой производительности: значительное превосходство языка Haskell над всеми остальными (особенно в руках его создателей), работа по 10-12 часов в день без выходных или же сделанные разработки не выходили за рамки работающих прототипов? Мне лично кажется, что последнее.

Отправить комментарий