Русский
Русский
English
Статистика
Реклама

Вы просто не знаете зачем нужны языки с динамической типизацией

Вы просто не знаете зачем нужны языки с динамической типизацией



Пока некоторые незрелые личности бомбят от языков с динамической типизацией, хотелось бы сказать и показать, что многие разработчики просто не понимают необыкновенной свободы этих языков.


Я, конечно же, я верю в статическую типизацию. Я убежден что она захватит (и уже захватывает) мир. Люди, бросавшие мне в лицо: "нам не нужны все эти ваши типы" с таким же фанатизмом рукоплескали добавлению различных типов в их любимые языки с динамической типизацией (классы в JavaScript, аннотации типов вместе с mypy в python). Мне не нужны извинения за их недальновидность и невежество. Они вели себя радикально лет 10-15 назад и проиграли. То, во что превратилась экосистема их любимых языков это лучшее наказание, а их поведение обязательно должно быть наказано. Пока питонисты решают на каком питоне писать: 2.7, 3.8 или подождать 4-ку по сути теперь есть три разных питона. JavaScript-еров справедливо ненавидят подростки освоившие статически типизированный TypeScript точно с таким же пренебрежением JavaScript'еры смотрели на корпоративных программистов на Java в свое время.


Однако, в языках со статической типизацией существует серьезная проблема. Проблема не в том, что типы надо указывать и соблюдать. Настоящая проблема: отсутствие свободы и принуждение к весьма посредственному дизайну языка. Давайте я приведу несколько примеров.


Диктатура


Java сопротивлялась добавлению "синтаксического сахара" около 10-ти лет (условно где-то 2002-2012). Наконец-то в нее добавляют все то, что должно быть в хорошем языке программирования даже лень приводить полный перечень, потому что это будут буквально все фичи нормальных языков. Это не было каким-то вынужденным 10-ти летним простоем в дизайне языка, во время которого переписывали компилятор или решали другие объективные проблемы развития. Просто Sun и Oracle предпочитали нанимать юристов, а не разработчиков. Да, они за это поплатились туда им и дорога, но это не отменяет того факта, что множество программистов было вынуждено писать на убогом языке по милости каких-то мутных управленцев с сомнительной экспертизой.


В C# только что добавили тип данных запись (record type), это заняло всего лишь 9 лет отсчитывая от релиза другого языка F# 2.0 (2010), в котором уже была очевидна полезность этих типов. Оба языка разрабатывались под одной и той же крышей Microsoft трудно предположить, что в команде C# не заметили возможностей F#. Просто они решили не торопиться. Возможно года через 3-4 мы получим именованные объединения (tagged union или discriminated union) в C#. Почему так долго? А нет никаких причин просто дизайнерам языка так захотелось.


Программисты на Scala надменно ухмыляются у них-то нет этих проблем. Нет проблем, как и нет нормального перечисляемого типа (enum). 14 лет выходили новые релизы этого языка начиная с 2006 года (релиз 2.0) ломая обратную совместимость компилятора на минорных релизах, но во всем этом бардаке не нашлось места перечисляемым типам. Есть enumeratum, но в Dotty одна из новых фич языка это enum, прямо новое ключевое слово. Существующие до сих пор костыли никуда не годятся настолько, что требуется новое ключевое слово. Если бы только мы не должны были ждать Dotty 3+ лет. Хотя, это ничто по сравнению с 14 годами без enum'ов.


Мой посыл, я думаю, понятен: когда вы пишите на языках со статической типизацией вы отдаете свою профессиональную жизнь на милость диктатуре. Диктатуре Гослинга, Хейлсберга, Одерского, Бреслава. От их настроения в день принятия решения будет зависеть, получите ли вы какую-то фичу в этом году или лет через 10. В языках с динамической типизацией это не так в них больше свободы, если тебе чего-то не хватает создай это сам и для этого есть все удобства и инструменты. Конечно же будет меньше безопасности. Но ведь не все люди готовы жертвовать свободой ради безопасности.


А что народ?


Раз уж я сравнил главных дизайнеров языков с диктаторами, теперь придется доводить аналогию до конца. Программисты предпочитающие конкретный язык со статической типизацией это народ. Учитывая, что народ многочислинен и подразумевается, что умён, как так получается, что диктатура настолько успешна?


Случалось ли вам встречать Java-программиста эмоционально утверждающего, что "синтаксический сахар" не нужен, более того он вреден? "Не надо нам как в C# это недоязык от мелкомягких". Целые орды высококлассных специалистов объясняющие в книгах и на ресурсах вроде Stackoverflow, как текущее положение абсолютно прекрасно и исчерпывающе достаточно.


Видели ли вы когда-либо в книге уровня "Философия Java" (Брюса Эккеля) раздел хотя бы на пару страниц, в котором обсуждались бы возможные улучшения в языке? Хотя бы одним глазком посмотреть: как может быть или (не дай Бог) как должно быть. Были ли лямбда-функции такой уж инновационной концепцией, что сложно было предположить как это могло бы выглядеть в Java? Только диктатор может предлагать, остальные только соглашаются и доказывают друг другу насколько хороши все принятые решения.


Особенность работы программиста в том, что он создает нечто гибкое, что можно дополнять, масштабировать, применять в различных сценариях, крутить и вертеть как захочется. Software от слова soft мягкий, гибкий. Однако вся гибкость исчезает, как только программисты начинают говорить о языках программирования со статической типизацией. Любая новая возможность воспринимается как "противоречащая идеологии языка" или, в крайнем случае, "излишне сложная и избыточная".


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


Никогда вы не увидите такого поведения толпы в сообществах, пишущих на динамически типизируемых языках.


Свобода


Свобода динамически типизированных языков очевидна на примере JavaScript. Этим людям дали скобки () {} и точку . и на этом они построили такое, что в какой-то момент времени JavaScript считался функциональным языком программирования (при живом-то Haskell). Там программисты создали себе все: от классов до прототипов.


Очевидно, что дизайн решений в JavaScript оставляет желать лучшего и едва ли этот опыт можно назвать успешным, но хотя бы у программистов была свобода. Это другой менталитет. Здесь нет авторитетов и диктаторов. Если чего-то не хватает, то это можно разработать. Никто не будет сидеть сложа руки 14 лет, пока Одерский прдпочитает заниматься алгебраическими типами данных вместо простых перечисляемых типов. Никто не будет ждать, когда команда C# наиграется с переписыванием компилятора и интеграцией его в свою посредственную IDE и наконец-то обратит внимание на то, что языку нужны современные фичи.


Меня же на все эти мысли натолкнул мой опыт с python. Мне понадобился новый тип именованное объединение (tagged union или discriminated union), который проверял бы типы своих кейсов во время исполнения кода. Зачем понадобился я, возможно, расскажу в будущей статье. Я вспомнил, что класс данных (record type) добавлен в стандартную библиотеку питона через декоратор @dataclass это не дополнительная возможность языка, и не ключевое слово, класс данных реализован на стандартных возможностях питона в виде библиотеки. Без особых проблем я смог реализовать @tagged_union. Вся реализация занимает 120 строк кода и один вечер. Код на КДПВ как раз использует мой микромодуль.


Со мной можно пообщаться в неформальной обстановке в чате который вдохновил меня на эту статью.

Источник: habr.com
К списку статей
Опубликовано: 05.08.2020 22:05:40
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Программирование

Net

Scala

Свобода

Типизация

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru