Здравствуйте, kaa.python, Вы писали:
KP>После того как полгода писал продуктовый код (не интеграционные тесты) на Elixir пришел к выводу, что динамика в проде вообще не опция, если ты планируешь писать больше 50 KLOC. Слишком много неожиданностей и неприятностей. Только статическая типизация, без вариантов. Хочется экзотики в проде — то, наверное, надо брать Haskell или F#. А лучше не брать экзотики вообще.
Может это проблема элексира? Он динамичный?
Haskell или F#
— упаси, бог!
Простой пример:
match x with
| A -> f1()
| B -> f2()
...
и
(defgeneric description (object)
(:documentation "Return a description of an object."))
(defmethod description ((object integer))
(format nil "The integer ~D" object))
(defmethod description ((object float))
(format nil "The float ~3,3f" object))
(description 10); => "The integer 10"
(description 3.14); => "The float 3.140"
обобщенные функции в CLOS наголову выше паттерн-матча, который по сути — те же if-ы.
Совершенно не уменьшает связанность и следовательно сложность ПО, даже наоборот, каждый матч это новый клубок.