metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-10-11 03:22 pm

Динамическая типизация, или статическая типизация для ленивых

Вчера [livejournal.com profile] ivan_gandhi сделал замечание что я, пользуясь динамически типизированной кложурью, при этом требую, чтобы в Java проверяли входные параметры на валидность. (Если что, проверка валидности в дотнете есть на каждом шагу, а объяснения вида "экономят циклы и не делаю проверки" в контексте жабы, тяжелого железа, JIT и прочего звучат крайне странно).
Собирался на эту тему устроить срач с утра, но [livejournal.com profile] thedeemon уже начал, так что я продолжу :)

Так вот, динамически типизированными языками мы пользуемся от бедности - нету статически типизированных языков, которые давали бы ту же функциональность.

Например, я хочу использовать кортеж с именованными полями (потому что позиционные кортежи нихера нечитабельны и их тип вида int*string*smallint*money*bool*Chervie ни о о чем не говорят). От входа в F# при этом нужно:
1) объявить этот чертов record где-то
2) сослаться на модуль с объявлением везде где он нужен
3) создавать экземпляры рекорда кривопачвярными конструкциями, причем оставить поля значениями по умолчанию нельзя.
4) паттерн матчинг с декомпозицией вроде не работает с рекордами.

Хаскель сразу закапываем - там на каждый случай имеется 3-4 расширения и 10 пакетов в hackage различной степени недоделанности, идиоматический подход - писать в point-free style, чтобы коллеги не разобрались, а работать в продакшене можно только с теми сторонними библиотеками, которые я могу сам починить.

При этом, у меня при работе с оперденями постоянно ситуации вида: есть запись с тремя полями, полученная из БД, мне нужно произвести обработку этой записи и добавить результат обработки в виде четвертого поля, получив новый тип записи.
Я НЕ хочу объявлять каждый раз такое руками и в Clojure это делается элементарно, добавлением нового ключа в map в функции-обработчике записей.

При этом РЕАЛЬНО динамическую типизацию я не использую. Она мне почти не нужна, потому что единственная ситуация, где вменяемый человек будет на одном цикле биндить к имени число, на втором строку, на третьем - список записей - это когда по условию задачи нужна, например, EAV-модель во все поля. И то - обычно EAV делается от безысходности, потому что пользователь не может нормально работать со схемой БД, а задача требует чего-нибудь вроде "добавить к части записей атрибут "фаза луны в которую производилась приемка товара"". В норме должны быть зависимые типы и миграции и пользователи бы пользовались той же системой типов что и разработчик.
Т.е. нормальный вывод типов - это когда программа берет типы из тут же описанного SQL-запроса, а рекорды расширяемые и объявлять их не нужно.

Второй use-case, где "вроде бы динамическая типизация" - это когда я делаю документы в виде кложурных структур данных, подгоняя комбинации списков-мапов-массивов-множеств под предметную область. В кложуре же это делается в лоб, а в хаскеле в один список не положишь три разных по структуре(типу) раздела документа. Но на самом деле, то что я делаю в кложури - это просто алгебраический тип данных "для бедных", без объявления заранее и без явно выделенных-именованных конструкторов данных. Если бы была возможность делать расширяемые и объявляемые по месту типы данных (чтобы каждый раз при разработке не переключаться между объявлением типа и конструированием данных по этому типу) - то было бы то же самое что в кложури - но статически типизированное.

PS: На ту же тему: http://justy-tylor.livejournal.com/190153.html

[identity profile] thesz.livejournal.com 2012-10-11 07:39 pm (UTC)(link)
Это не мои правила. Это придуманные вами правила, приписанные мне.

В принципе, мой комментарий к посту и был призывом раскрыть карты. Он проигнорирован, и это не значит, что я должен что-то делать. Ровно наоборот.

Ощущаемые мной проблемы автора пусть остаются его проблемами. Может, мне только кажется, что это проблемы. Может, так ему легче жить. Быть может, это конкурентное преимущество.

У меня есть забота протестировать, как Хаскель разбирает регекспы на скорости в 1,25ГБайт/сек. Укладываемся ли мы в указанный диапазон. Вот это на самом деле интересно.

[identity profile] zamotivator.livejournal.com 2012-10-11 08:58 pm (UTC)(link)
Вы как-то очень завуалировано этот призыв высказали.
По сути - просто высказали своё оценочное суждение.
Призыв открыть карты я не видел.

[identity profile] thesz.livejournal.com 2012-10-11 09:08 pm (UTC)(link)
Вполне может быть.

Но теперь-то уж всем понятно, что я хотел услышать.

[identity profile] zamotivator.livejournal.com 2012-10-11 09:13 pm (UTC)(link)
кое-чего всё равно не хватает.

[identity profile] thesz.livejournal.com 2012-10-11 09:37 pm (UTC)(link)
Нешто мне клещами это из вас тянуть надо?

[identity profile] zamotivator.livejournal.com 2012-10-11 09:39 pm (UTC)(link)
http://juick.com/zamotivator/friends
Вот тут по ссылкам ищите. Haskell'истов поди сами опознате.

[identity profile] thesz.livejournal.com 2012-10-11 09:49 pm (UTC)(link)
Это очень странный ответ на мой вопрос о том, что же не хватает этой ветке, чтобы мой призыв автору был услышан. Но здесь я, конечно, должен винить себя.

Я достаточно глупый человек, я опираюсь на статическую типизацию из-за моей неспособности охватить всё и сразу. Я также достаточно тугоумен, чтобы проверять гипотезы по мере их выдвижения, просто чтобы не забыть.

Поэтому не могли бы вы немного разжевать свой ответ выше, и увязать его с другими своими и моими комментариями? Ибо я не успеваю за полётом вашей мысли.

[identity profile] zamotivator.livejournal.com 2012-10-11 09:52 pm (UTC)(link)
А, перепутал ветку.

Смирения вам не хватает. Слов "пожалуйста", и "спасибо".
А ещё умения признавать, что не существует серебрянной пули, и того, что вы можете ошибаться.

Потому и дискуттировать с вами не очень хочется.
Помнится, ещё в 2008 году вы мне заявляли, что я идиот, когда я вас спрашивал "где вакансии Haskell?".

Жаль видеть, что ничего с тех пор не поменялось.

Тут: http://metaclass.livejournal.com/735575.html?thread=14542423#t14542423 я это уже писал.

[identity profile] thesz.livejournal.com 2012-10-11 10:16 pm (UTC)(link)
Дорогой друг, ещё в 2008 году я ответил вам, что несмотря на отсутствие вакансий Хаскель сможет облегчить вам жизнь. И это не только я вам говорю, это вам многие другие говорят, про makes you a better programmer.

А идиотом я вас назвал после того, как мне пришлось повторять одно и то же несколько раз, не меньше пяти. Кто же устоит?

И само собой, что человеку, который так тратит чьи-то нервы, не имеет смысла говорить "пожалуйста" и "спасибо". Это вызовет закрепление не тех навыков, которые мне полезны.

Хотя, я бы сказал вам спасибо, если бы вы взяли на себя труд посмотреть на посты про 15 разных версий curl. Что вам стоит? Ну пожалуйста?

[identity profile] dinexi.livejournal.com 2012-10-11 11:28 pm (UTC)(link)
Ну, ты такой: чего этому комменту не хватает, да чего этому комменту не хватает. Ну я и добавил к нему пожалусту.

[identity profile] zamotivator.livejournal.com 2012-10-11 11:29 pm (UTC)(link)
А что, ты тоже считаешь, что программы нужно писать на haskell?
Забавно это слышать от PHP программиста :)

[identity profile] dinexi.livejournal.com 2012-10-11 11:35 pm (UTC)(link)
Вот, ещё один! Я сегодня отказался от работы, где люди не осознали разницы между "системный администратор" и "чувак, которого хлебом не корми, дай потрогать кривой код на PHP". В жуйке глянь на http://juick.com/stanis/2094837
Там есть баттхёртЪ.

p.s. Не, я за Haskell агитировать не буду.

[identity profile] zamotivator.livejournal.com 2012-10-11 11:36 pm (UTC)(link)
Да, я читал :) Верно по сути написано, но, просто, товарищ мало искал, как мне кажется.

[identity profile] dinexi.livejournal.com 2012-10-11 11:40 pm (UTC)(link)
Что написано? По какой сути? Какой товарищ? Чего искал? Умеешь ты утром туману нагнать! :) Если ты про этот extplorer... н-ну, мало. Да. Три вещи нашел. Одна "наиспанском", а у меня с испанским неважно. Вторая тоже не подошла. Третья -- вот эта, с такими перлами. Причем именно её хотел заказчик. Жаль, не сбылось. :-)

[identity profile] zamotivator.livejournal.com 2012-10-11 11:41 pm (UTC)(link)
Я про товарища, что ругался, как в России не уважают труд и требуют человека-оркестра.

[identity profile] dinexi.livejournal.com 2012-10-11 11:43 pm (UTC)(link)
О боги. Я уж думал, что придется рассказывать о связи между моим ником тама и тута. ОК. :-)
Не знаю я про того человека. Давно не ищу в России, но с моим опытом это слабо согласуется. Не, найти-то можно, если задаться целью, но так причем тут Россия. :-)

[identity profile] zamotivator.livejournal.com 2012-10-11 11:44 pm (UTC)(link)
Ну да, к товарищ вопрос. Я на такие малобюджетные вакансии даже не смотрю.
Во-первых придётся снижать уровень жизни.
Во-вторых в таких местах часто одни неудачники тусуются
В-третьих - ну как можно ожидать уважения к твоей работе в месте, где тебя настолько мало ценят? :)

[identity profile] dinexi.livejournal.com 2012-10-11 11:46 pm (UTC)(link)
Упс. Слона-то я и не. Я на бюджет не обратил внимания. Дай угадаю: меньше штуки зеленых?

[identity profile] zamotivator.livejournal.com 2012-10-11 11:49 pm (UTC)(link)
Так он там в начале поста и пишет про бюджет :)
Да, меньше штуки зелёных - это практически всегда вот такой пиздец

[identity profile] dinexi.livejournal.com 2012-10-11 11:51 pm (UTC)(link)
Хм. Ну, чтоб просить больше, нужны некоторый опыт и знания... ну, хотя бы о зарплате грузчика. :)