Pull to refresh

Comments 3

Не, все проще. Авторы массовых языков узнали про теорию категорий, теорию типов и cоответствие Карри-Ховарда. Раньше эти вещи жили в языках вроде Haskell, а массовые языки делались "наивно" по принципу "а вот еще эту фичу добавим". Теперь пришло осознание, что математика вообще-то для всех одна, и обойти ее при всем желании не получится.


Строгость языка, контроль нужен не столько программисту, сколько самим разработчикам компилятора. Точнее, его оптимизатора. В языках вроде C++ компилятору приходится гадать, что имел в виду программист, отсюда костыли вроде strict aliasing. Возможность разыменовать null-тип, то есть сконструировать bottom-тип, формально равноценна возможности выполнить бесконечный цикл, а потом работать дальше, так как bottom-тип — именно то, что формально возвращает бесконечный цикл. Пытаясь сделать оптимизирующий компилятор для таких вещей, есть неиллюзорный риск создать компилятор, который неверно компилирует верный код — худший кошмар программиста из всех возможных. Чем ближе язык к строгой математике, тем легче его компилировать. Бонусом получается защита программиста от ошибок на compile-time.

Фича, запрещающая наследование по умолчанию - просто великолепна.
Не нужно наследовать, если ты или другой человек точно не уверены, что создали этот класс ровно для этого - чтобы быть расширяемым.
По поводу тестов - вообще смешно. Явное объявление и проверка типов на этапе компиляции - это и есть самый лучший тест на целый класс ошибок, хорошо, что к нему еще и null-safety прикрутили. После этого просто не нужно писать целый ряд тестов

В статье взгляд человека, который привык к динамической типизации и не научился пользоваться преимуществами статической, она ему "мешает".

> Например, в Swift, если вы объявляете функцию, которая будет выбрасывать exception, то, ей-богу, каждый вызов этой функции, вплоть до стека, должен быть снабжен блоком do-try, try! или try?.

Исключение не обязательно тащить через весь код. Можно поймать его в функции выше, обработать и превратить во что-то адекватное.

> Правила языка требуют, чтобы при использовании nullable переменной вы должны сначала проверить ее на null.

Да. На практике получается, что в нормальном коде большая часть переменных и аргументов - не nullable. А если они nullable, то их, само собой, надо проверять на null. И язык об этом напомнит.

> Поэтому вы объявите все свои классы и все свои функции
open. Вы никогда не будете использовать исключения. И вы привыкнете
использовать много-много символов !, чтобы отменить проверку null и
позволить NPE бесчинствовать в ваших системах.

Нет. В нормальном коде этого не будет. Это то, что происходит в языках с динамической типизацией.
"Программист на фортране может писать на любом языке как на фортране" - это про автора.

Sign up to leave a comment.