Большинство людей могут согласиться с тем, что JavaScript был самым важным языком 2016 года и будет оставаться основным продуктом хакерского сообщества еще долгие годы. Однако все больше и больше людей говорят о Rust. Его C-подобная семантика в сочетании с гарантированной безопасностью типов дает ему уникальное и важное место в языках программирования сегодня. Итак, я создаю транспилятор JavaScript в Rust на Haskell, отличный язык для компиляторов и отличное ключевое слово для любого сообщения Hacker News. Написав этот транспилятор, я надеюсь изменить наше представление о JavaScript и Rust, а также положить конец забытому богом монотонному чтению о языках программирования изо дня в день.

Одна очевидная начальная проблема в решении этой проблемы - устранение некоторых фундаментальных несовместимостей двух языков. Поскольку JavaScript слабо типизирован и склонен к неопределенному поведению, возникает вопрос о том, как мы должны обрабатывать поведение в JavaScript, которое противоречит тем же шаблонам, которые делают Rust таким желательным языком. Если я реализую безопасное подмножество JavaScript, освободит ли это меня от моего проклятия из-за того, что я трачу много энергии на споры об антипаттернах React в Интернете? Если я воспользуюсь небезопасными функциями Rust для полной реализации ES6 / ES2015, смогу ли я снова разговаривать с нормальными людьми? Смогу ли я почувствовать? Если ты порежешь меня, я истечу кровью?

Каждое утро я просыпаюсь, выпиваю стакан Soylent и повторяю следующее: «Сегодня я буду решать сложные задачи. Завтра решу и сложные задачи. Каждый день я буду решать сложные задачи, а затем роботы возьмут верх, и я умру удовлетворенным человеком, и кто-то опубликует мой некролог в Hacker News ». Затем я вхожу в свою машину с помощью специального сценария запуска.

›Добро пожаловать, Джулиан. Хотели бы вы сделать мир лучше сегодня? да / нет

y

> Очень хороший. Теперь вы можете пользоваться root-доступом к вашей системе.

Haskell предлагает ряд функций, которые делают его отличным выбором для написания компилятора. Хотя компилятор обычно пишется либо на исходном, либо на целевом языке, ни JavaScript, ни Rust не предлагают все богатство рекурсивных алгебраических типов данных Haskell. Также имеет смысл использовать чисто функциональный язык для написания компилятора, поскольку компилятор по своей сути представляет собой серию преобразований, которые могут и должны выполняться элегантным способом без сохранения состояния.

Я вижу облака в небе и зеленую траву. Прошло пятьдесят лет, и я сижу в парке со своей собакой, кормлю уток и наблюдаю за играющими местными детьми. Я уже много лет не произносил фразу «безопасность типов». Все стартапы ушли. Я свободен.

В заключение, это амбициозный проект, но я благодарен за весь энтузиазм, который я получил от сообществ JavaScript, Rust и Haskell, а также от всего сообщества компиляторов. Следите за стабильной версией в ближайшее время.

Пожалуйста, спасите меня.