У меня более, чем тридцатилетний опыт разработки, и я ни разу не видел в продакшене код, который сбоит из-за того, что кто-то где-то опечатался (даже в руби, где можно object.send(:method)). Есть миллиарды причин, по которым типы действительно могут в чем-то помочь, но вот этим бессмысленным аргументом с опечаткой неимоверно достали, если честно.
Предыдущий комментатор говорит не совсем про это, и предыдущий комментатор в толк не может взять, с чем именно у 0xd34df00d тут заминка (есть гипотеза, что ни с чем). Тут никакой идрис не нужен, банальной джавы хватит.
Нечистоплотная функция, принимающая данные извне, сразу возвращает тип Hashed, с единственным конструктором, который портит входной параметр. В рамках проекта на строго-типизированном языке — (без внезапных вызовов машинного кода по адресу на ровном месте) — до кода, не только до базы, — просто не сможет докатиться исходная строка.
Если надо на идрисе — можно доказать, что при проникновении строки внутрь защищенного кода она никогда не совпадает с исходной строкой снаружи.
Потому что «каждая селедка рыба, но не каждая рыба — селедка», как говаривал один капитан дальнего плавания.
Я никогда не утверждал, что никакую ошибку поймать нельзя. Я сказал, что не все ошибки элиминируются таким незамысловатым образом. Модель, пытающаяся складывать яблоки и апельсины, безусловно, будет отбракована. Модель, превращающая в качестве сложения все фрукты в пюре — пройдет любую валидацию.
Сопоставление не может ограничить множество типов, которое может принимать переменная.
Переменная? При чем тут вообще переменная? Переменных в языке может вообще не быть (если не рассматривать хаскелевский синтаксический сахар let in как переменную, конечно) — и в языках с нативными функциями высшего порядка их обычно и нет.
напишите конкретную реализацию АТД с помощью фабрики, и я вам покажу, в чем ее проблема.
Эка невидаль, это я и сам покажу. Моя мысль (и оратора, стартовавшего ветку) заключалась как раз в том, что АТД вообще не нужны. Ну хорошо, иногда нужны, но не такие, и не в PHP, и не просто ради того, чтобы они были, потому что нравятся трем с половиной людям.
большинство промышленных задач решаются не языками, а экосистемой библиотек в них
Есть три типа задач:
проектик для портфолио, когда начал учить новый язык
обычная работа на галере
что-то новое, интересное и сложное
Так вот множества задач, решаемых экосистемой (②) и задач, которыми заниматься хочется (①, ③) не пересекаются вообще никак. В нормальных задачах ну вот разве что только хранилище данных и брокер сообщений можно взять готовые, да и то придется напильником полировать.
Конечно речь об увеличении строгости типизации, в эту сторону двигается PHP.
Неясно, почему это аксиоматично хорошо. Но допустим.
Алгебраический тип данных — это довольно простая штука [...]
Я в курсе, что это такое, спасибо.
Существует огромное число случаев, в которых удобно использовать тип-сумму (перечисление) и АТД.
Как я уже заметил в том комментарии, на который вы отвечаете, ваши нужды конкретно в этом вопросе покрываются сравнением с образцом. Вы приписываете эти чудо-свойства АТД просто потому, что в АТД оно используется, но это не единственный (и не лучший) вариант его использования.
вместо булевых флагов для обозначения состояний
Это смешной аргумент. Есть миллиард ничуть не худших способов сделать то же самое. Фабрика и приватный конструктор в банальной джаве умеют это с 1996 года.
АТД привносит преимущества нестрогой типизации в строго-типизированные языки, не выходя за пределы строгой типизации.
Так если у нестрогой типизации есть преимущества, может надо ее и использовать, а не тащить их повсюду?
Есть правильное решение описанной проблемы (зависимые типы). К сожалению, ни раст, ни хаскель его никогда не увидят, хотя надежда, конечно, умирает последней. Есть рабочее, типа протоколов в эликсире. А есть многословные, и неуклюжие алгебраические типы. Зачем втискивать их в языки, в которых и без них не протолкнешься от синтаксического избыточного многообразия — непонятно (точнее, понятно: по хайпу, но это так себе аргумент).
Корректность формализации неверной модели очень легко доказуема и ничемушеньки не противоречит. И любой агдрис (отличное имя для скандинавского божества, кстати: «Агдрис на Слейпнире, с Мьёльниром в руке джейсон ковыряет на скрипто́вом языке», — простите, вырвалось) радостно прохавает такую формализацию и подтвердит ее корректность.
Вы просто не понимаете зачем это надо, а это шаг в сторону реализации алгебраического типа данных.
Я вот тоже совершенно не понимаю, зачем это надо. Мантры «шаг в сторону реализации алгебраического типа данных» («алгебраического типа данных» произносится шепотом и с придыханием) — тоже нифига не достаточно. Алгебраический тип данных сам по себе — как артефакт — никакой ценности не представляет.
Опыт rust — это лучше, чем ничего, но бесконечно мало, для того, чтобы делать такие заявления. Сопоставление с образцом для извлечения данных — это уже теплее, но алгебраические типы тут ни при чем (так умеет даже физический триод, и то, что алгебраические типы — тоже, пока не делает их лучше). Гошная кондовая проверка на ошибку — тоже сопоставление с образцом, в какой-то мере. switch в js.
Так что (если вы действительно понимаете, что в них хорошего) — было бы неплохо лицезреть пример — без баззвордов и апелляций к конкретным языкам. Потому что вот опыт лиспа говорит о другом, смолтолка — о третьем, а уж опыт эрланга (где вообще типов нет, и оттого все прямо прекрасно) — вообще об обратном.
Квалифицированные программисты это понимают и потому даже не пытаются писать «идеальную программу», а просто закладывают некоторый объем финального тестирования (или вероятность сбоя).
Вы бы сначала поняли сами, что такое проблема останова, а потом бы рот открывали на публике. Никому (кроме абстрактных теоретиков) не вперлось проверять тотальность всех программ в мире. А для одной конкретно взятой программы ее проверить внезапно можно, и современные языки программирования, типа идриса, даже позволяют указать директиву %default total, что на практике заставит компилятор проверить тотальность.
Так что квалифицированные программисты прекрасно себе эту задачу представляют и решают. Тесты тут вообще ни при чем никаким боком.
Они не идут путём доната не потому, что он не работает в принципе.
Ха-ха. Они не идут путем доната, потому что брезгуют. Большинство, по крайней мере.
Причём, не просто не отличает — и не хочет разобраться и отличить.
Я разобрался. Это одно и то же, даже если вам очень хочется клянчить и попрошайничать, но так, чтобы это было признано в высшем свете и не считалось уделом нищебродов (чем оно и является на самом деле).
Вот уж воистину иногда лучше жевать, чем говорить. Вы бы хотя бы в профиль заглянули, что ли: я как раз из тех, кто дает бесплатно.
А еще я плачу́ несколько тысяч евро налога ежемесячно, и контролирую, куда они распределяются. Из них, в частности, спонсируется и то самое искусство. Правда, там, чтобы получить дотации, недостаточно нести херню в прямом эфире и выкладывать нюдес.
Это даже в oss очень заметно: все, кто делает что-нибудь стоящее — кроме Джимми, да, но он был первым и единственным, причем из политических соображений и он, что характерно, никогда не клянчит бабла себе любимому, — не идут путем доната.
Если бы мне на глаза попалось такое отписывание «его лиду», я бы лично приложил все усилия к тому, чтобы автор воззвания к лиду был уволен вчерашним днем.
Вы бы еще в Гаагский суд написали: ведь это целый джун породил целый кусок кода, который целому вам не понравился. Расстрельная статья прямо напрашивается.
Профессионал в таком случае поговорил бы с джуном напрямую, выяснил причины, поделился своими.
Обновления защитить в миллион раз проще.
А какому современному языку требуется несколько компиляторов и зачем?
Времена закрытых компиляторов, породивших открытые аналоги, вроде далеко в прошлом.
У меня более, чем тридцатилетний опыт разработки, и я ни разу не видел в продакшене код, который сбоит из-за того, что кто-то где-то опечатался (даже в руби, где можно
object.send(:method)
). Есть миллиарды причин, по которым типы действительно могут в чем-то помочь, но вот этим бессмысленным аргументом с опечаткой неимоверно достали, если честно.Предыдущий комментатор говорит не совсем про это, и предыдущий комментатор в толк не может взять, с чем именно у 0xd34df00d тут заминка (есть гипотеза, что ни с чем). Тут никакой идрис не нужен, банальной джавы хватит.
Нечистоплотная функция, принимающая данные извне, сразу возвращает тип
Hashed
, с единственным конструктором, который портит входной параметр. В рамках проекта на строго-типизированном языке — (без внезапных вызовов машинного кода по адресу на ровном месте) — до кода, не только до базы, — просто не сможет докатиться исходная строка.Если надо на идрисе — можно доказать, что при проникновении строки внутрь защищенного кода она никогда не совпадает с исходной строкой снаружи.
Ну, скажем, Франсуа Коллету пришлось, и правда, затащить пару библиотек в работу класса ③.
Но «датасатанистское исследование» как таковое — это уже давно класс ②.
Потому что «каждая селедка рыба, но не каждая рыба — селедка», как говаривал один капитан дальнего плавания.
Я никогда не утверждал, что никакую ошибку поймать нельзя. Я сказал, что не все ошибки элиминируются таким незамысловатым образом. Модель, пытающаяся складывать яблоки и апельсины, безусловно, будет отбракована. Модель, превращающая в качестве сложения все фрукты в пюре — пройдет любую валидацию.
Контекст статьи тут вообще ни при чем.
Переменная? При чем тут вообще переменная? Переменных в языке может вообще не быть (если не рассматривать хаскелевский синтаксический сахар
let in
как переменную, конечно) — и в языках с нативными функциями высшего порядка их обычно и нет.Эка невидаль, это я и сам покажу. Моя мысль (и оратора, стартовавшего ветку) заключалась как раз в том, что АТД вообще не нужны. Ну хорошо, иногда нужны, но не такие, и не в PHP, и не просто ради того, чтобы они были, потому что нравятся трем с половиной людям.
Есть три типа задач:
Так вот множества задач, решаемых экосистемой (②) и задач, которыми заниматься хочется (①, ③) не пересекаются вообще никак. В нормальных задачах ну вот разве что только хранилище данных и брокер сообщений можно взять готовые, да и то придется напильником полировать.
Ух. Я столько кода даже на ревью не осилю.
Неясно, почему это аксиоматично хорошо. Но допустим.
Я в курсе, что это такое, спасибо.
Как я уже заметил в том комментарии, на который вы отвечаете, ваши нужды конкретно в этом вопросе покрываются сравнением с образцом. Вы приписываете эти чудо-свойства АТД просто потому, что в АТД оно используется, но это не единственный (и не лучший) вариант его использования.
Это смешной аргумент. Есть миллиард ничуть не худших способов сделать то же самое. Фабрика и приватный конструктор в банальной джаве умеют это с 1996 года.
Так если у нестрогой типизации есть преимущества, может надо ее и использовать, а не тащить их повсюду?
Есть правильное решение описанной проблемы (зависимые типы). К сожалению, ни раст, ни хаскель его никогда не увидят, хотя надежда, конечно, умирает последней. Есть рабочее, типа протоколов в эликсире. А есть многословные, и неуклюжие алгебраические типы. Зачем втискивать их в языки, в которых и без них не протолкнешься от синтаксического избыточного многообразия — непонятно (точнее, понятно: по хайпу, но это так себе аргумент).
Корректность формализации неверной модели очень легко доказуема и ничемушеньки не противоречит. И любой агдрис (отличное имя для скандинавского божества, кстати: «Агдрис на Слейпнире, с Мьёльниром в руке джейсон ковыряет на скрипто́вом языке», — простите, вырвалось) радостно прохавает такую формализацию и подтвердит ее корректность.
Я вот тоже совершенно не понимаю, зачем это надо. Мантры «шаг в сторону реализации алгебраического типа данных» («алгебраического типа данных» произносится шепотом и с придыханием) — тоже нифига не достаточно. Алгебраический тип данных сам по себе — как артефакт — никакой ценности не представляет.
Опыт
rust
— это лучше, чем ничего, но бесконечно мало, для того, чтобы делать такие заявления. Сопоставление с образцом для извлечения данных — это уже теплее, но алгебраические типы тут ни при чем (так умеет даже физический триод, и то, что алгебраические типы — тоже, пока не делает их лучше). Гошная кондовая проверка на ошибку — тоже сопоставление с образцом, в какой-то мере.switch
в js.Так что (если вы действительно понимаете, что в них хорошего) — было бы неплохо лицезреть пример — без баззвордов и апелляций к конкретным языкам. Потому что вот опыт лиспа говорит о другом, смолтолка — о третьем, а уж опыт эрланга (где вообще типов нет, и оттого все прямо прекрасно) — вообще об обратном.
Если ответить одним предложением, то ③ — я считаю, что продавать надо услуги и физических вещи.
Вы бы сначала поняли сами, что такое проблема останова, а потом бы рот открывали на публике. Никому (кроме абстрактных теоретиков) не вперлось проверять тотальность всех программ в мире. А для одной конкретно взятой программы ее проверить внезапно можно, и современные языки программирования, типа идриса, даже позволяют указать директиву
%default total
, что на практике заставит компилятор проверить тотальность.Так что квалифицированные программисты прекрасно себе эту задачу представляют и решают. Тесты тут вообще ни при чем никаким боком.
Мне в Испании кнопку «царь горы» не показывают вовсе; интересно было бы узнать про другие страны.
Не только с каждым словом, но с каждой запятой согласен.
Ха-ха. Они не идут путем доната, потому что брезгуют. Большинство, по крайней мере.
Я разобрался. Это одно и то же, даже если вам очень хочется клянчить и попрошайничать, но так, чтобы это было признано в высшем свете и не считалось уделом нищебродов (чем оно и является на самом деле).
Вот уж воистину иногда лучше жевать, чем говорить. Вы бы хотя бы в профиль заглянули, что ли: я как раз из тех, кто дает бесплатно.
А еще я плачу́ несколько тысяч евро налога ежемесячно, и контролирую, куда они распределяются. Из них, в частности, спонсируется и то самое искусство. Правда, там, чтобы получить дотации, недостаточно нести херню в прямом эфире и выкладывать нюдес.
Это даже в oss очень заметно: все, кто делает что-нибудь стоящее — кроме Джимми, да, но он был первым и единственным, причем из политических соображений и он, что характерно, никогда не клянчит бабла себе любимому, — не идут путем доната.
Если кандидат не может без своей любимой IDE на задачках такого уровня — то дальше и разговаривать не о чем, можно сразу разворачивать.
К сожалению, вы вообще не понимаете, в чем заключается работа лида. Бывает.
Если бы мне на глаза попалось такое отписывание «его лиду», я бы лично приложил все усилия к тому, чтобы автор воззвания к лиду был уволен вчерашним днем.
Вы бы еще в Гаагский суд написали: ведь это целый джун породил целый кусок кода, который целому вам не понравился. Расстрельная статья прямо напрашивается.
Профессионал в таком случае поговорил бы с джуном напрямую, выяснил причины, поделился своими.