Новый язык для Интернета

Что есть причина?

Язык от Facebook, который компилируется в JavaScript

Reason (ранее ReasonML) - это синтаксис и набор инструментов, упакованных в простой в использовании пакет. Его цель - привлечь внимание инженеров JavaScript, предоставляя знакомый синтаксис и облегчая интеграцию в существующую экосистему JS. Я наблюдал за его развитием в течение прошлого года и экспериментировал с ним на стороне. Так что же такое разум и почему вам это нужно?

Цель Reason - сделать менее известный язык OCaml более знакомым и легко интегрированным в существующую экосистему JavaScript. Он разработан, чтобы хорошо сочетаться с рабочими процессами, к которым вы привыкли, и с инструментами, которые вы знаете. На первый взгляд, это новый синтаксис поверх OCaml, который немного больше похож на JavaScript (Фактически, вы, вероятно, можете скопировать некоторый JS в файл причин, и он будет работать).

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

Зачем использовать Reason вместо TypeScript или Flow?

Если вы не используете средство проверки статического типа, меня интересует, почему? В противном случае, если вы уже увлеклись идеей статической типизации для JavaScript, вы можете задаться вопросом, почему вы хотите пройти весь процесс, используя полностью другой язык. В отличие от TypeScript и Flow, Reason использует вывод типов, поэтому вам редко приходится явно указывать компилятору, что это за типы. Это часто встречающаяся у меня проблема с Flow и TypeScript каждый день, которую решает Reason. Это экономит много времени и усилий по сравнению с другими средствами проверки статических типов. Reason может делать выводы о типах и при этом давать вам необходимую уверенность.

Но Reason скомпилирован - не будет ли медленно?

Если вы сегодня используете такие инструменты, как babel, для переноса исходного кода на ES2015, вы уже выполняете нечто похожее на компиляцию. Обычно это один из многих шагов, которые проходит ваш исходный код, прежде чем попасть к конечному пользователю. Если вы этого не сделаете, то переход на компилируемый язык - серьезная проблема. Чтобы облегчить ваши опасения. Причина очень быстрая. Я использую множество инструментов для создания современных приложений React, включая webpack, babel и flow. Это может занять минуту после холодного пуска и несколько секунд после внесения изменений. Это не показалось таким длинным, но затем я использовал Reason, который строится за миллисекунды. Хотелось бы, чтобы все компилируемые языки были такими быстрыми, я поражен производительностью, и это еще не создало проблем.

Отладка будет кошмаром, правда?

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

Могу ли я по-прежнему использовать React with Reason?

ReasonReact - это библиотека, которая позволяет вам использовать React в Reason. Что касается других библиотек, вы можете найти пакеты Reason на NPM. Redex (индекс пакетов причин) существует для сортировки пакетов причин и облегчения их поиска. Если нужной библиотеки нет, то взаимодействие между Reason и JavaScript относительно простое. Самое сложное, что вам нужно сделать, - это написать привязку между пакетом в JavaScript и Reason. Он включает явную типизацию, чтобы сообщить Reason, с чем он работает и какие типы ожидаются. Это может быть сложно, если библиотека, которую вы хотите, использует много динамических типов или относительно недокументирована.

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

Если хотите попробовать, то загляните на официальный сайт. Я также создал Краткое руководство по Reason по изучению X за Y минут.