Мысли о современных платформах
Товарищи из codingteam меня всё-таки раскрутили на то, чтобы я написал эту небольшую заметку. Сразу скажу, она во многом противоречива и носит философский характер. Я надеюсь, она не заденет ничьих профессиональных чувств.
Разговор начался с данного тезиса, высказанного неким неназванным участником неназываемой дискуссии:
Пока TS не будет поддерживаться по умолчанию всеми браузерами без дополнительных библиотек и компиляции TS в JS, нет смысла его использовать.
Т.к. чем больше различий между тем что пишет разработчик и что выполняется в браузере тем больше проблем и ошибок.
За мнимой типизацией появится гораздо больше других проблем
Разумеется, тезис о том, что стоит оставить типизированный язык в пользу нетипизированного, не мог не разогреть обсуждение. И вот, я пришёл к следующей цепочке рассуждений.
Да, TypeScript действительно является менее надёжной платформой, чем JavaScript. При этом под «надёжностью» мы понимаем некое совокупное качество платформы, которое складывается из ожиданий программиста, который с ней работает, качества и наличия инструментов, документации, ответов на вопросы.
Почему это происходит? Да потому, что платформа JavaScript является базовой для платформы TypeScript. Спецификация ECMAScript 2015, являющаяся нормативной на сегодняшний день, полностью описывает семантику поведения программ на JavaScript. Рассмотрена модель памяти, модель выполнения и прочее. Для того, чтобы писать на JavaScript, не нужно знать более никакого языка; достаточно явно или неявно владеть его спецификацией в достаточной степени (точно так же, например, не нужно знать C или машинного языка, чтобы писать на Java — спецификация Java уже покрывает поведение программы полностью).
У TypeScript такой подробно прописанной семантики нет; в большинстве моментов TypeScript полагается на низлежащий JavaScript: на его реализации, его модель поведения, его инфраструктуру и его экосистему. Нельзя писать на TypeScript, не зная JavaScript. Именно это я пытаюсь вложить в понятие «надёжности платформы»: прежде всего это её самодостаточность.
Нельзя сказать, что подобный симбиоз между JavaScript и TypeScript уникален только для них или, например, для веб-разработки. Можно найти множество подобных примеров и в других языках: Erlang и Elixir, Java и Frege.
Точно так же нельзя сказать, что «ведомый» язык в этих парах всегда является плохим, непригодным или более сложным для программирования. Я являюсь пропонентом TypeScript и не стал бы такого про него говорить. Данная оценка говорит только о том, что для программирования на «ведомом» языке требует большего количества знаний, более сложных инструментов, более объёмного технологического стека.
В дальнесрочной перспективе это недостатки языков, которые должны как-то решаться, если они хотят занять нишу своих старших товарищей: для них должны быть разработаны самостоятельные виртуальные машины или компиляторы; для них должна быть определена самостоятельная семантика моделей памяти и выполнения.
<ForNeVeR> Я закончил.
Оригинальный вариант монолога доступен по ссылке.