![]() |
От: |
jazzer
|
Skype: enerjazzer |
Дата: | 30.01.15 09:19 | ||
Оценка: | 10 (2) |
Но они при этом честно описывают проблемы, с которыми столкнулись (раздел 4, цитирую кусочки, которые мне показались весомыми, но лучше прочитайте раздел целиком, это полторы странички):We were lucky with our choice of Haskell and GHC and, in light of our experience, we would make the same choice again.
2. RefactoringWe found that to use many common Haskell structures, such as functors, monoids and monads, we needed to think in significantly different ways than we did in other languages, even other functional languages such as Scheme.
3 Profiling Tools, and Deficiencies ThereofThe main issue was that where, with a language such as Ruby, one can change a small handful of functions and leave the rest “broken” while testing the change, in Haskell one must fix every function in the module before even being able to compile.
4 Lazy Evaluation and Space LeaksOne of the major problems, directly connected to lazy evaluation, is that where the work happens is quite a slippery concept.
One module may define and apply all of the functions for the work to be done, but in actuality leave only a few thunks in the heap: the real work of the computation occurs in some other place where the data are used.
It’s quite possible to have a final consumer of “work” actually doing all of the work that one wanted to have done in several other threads running on different cores.
A last note about a particular problem for us with GHC: profiling builds must run using the non-parallel runtime.
You will always get what you always got
If you always do what you always did