Автор оригинала: FreeCodeCamp Community Member.
Джеймс Райт
Обновление – 1 февраля 2017
Я слышал различные контрварки, касающиеся безопасности типов в JavaScript, так как я впервые опубликовал эту статью, и хотя я все еще верю, что многие проекты не требуют использования набранного JavaScript SuperSet, я признаю, что был слишком поспешным в публикации этого статья. Некоторые соответствующие случаи использования впоследствии схватили мое внимание:
- Glimmer , двигатель с низким уровнем рендеринга за Ember, написан в Teamecript для продвижения Мономорфные сайты звонков , помогая производительности при выполнении V8 и потенциально другими двигателями JavaScript
- Визуальный студийный код Преимущества из Tymdercript из-за чистого размера проекта; Учитывая, что он распределяется как настольное приложение, имея одну кодовую базу, а не примирение отдельных пакетов по времени сборки, на мой взгляд, разумный вариант
- Секты (По общему признанию, проект самого моего собственного, поэтому здесь есть потенциальное предвзятость!) Написано в Teadercript, чтобы потребители могли писать большие модульные игры для веб-сайта, в то время как надежно уменьшить ошибки времени выполнения, приводящие к размножению, и другие проблемы, которые возникают в результате динамики JavaScript природа
У меня дополнительно поняли, что написание меньших библиотек в Tymdercript и публикация их с помощью определений типов, создаваемых в виде сборки, одновременно позволяет их бесшовную интеграцию с напечатанными и Традиционные проекты JavaScript, что дает разработчикам более широкий технологический выбор.
Тем не менее, для Sakerity’s Sake, вот оригинальная статья полностью.
Сегодня я столкнулся с статьей о запуске JS ++ , что утверждает, что «исправить отсутствие безопасности JavaScript». Уже достаточно, у нас уже есть Tymdercript , ST-JS и Scala.js , который помогает разработчикам в конечном итоге достигать той же цели.
Прежде чем я запустил эту тираду, позвольте мне выделить три важных момента:
- Я ранее написал Учебное пособие на создание простой напечатает проект. Я вижу лицемерие, но мое мнение изменилось, так как я опубликовал его более года назад
- Сильные печатающие и статические печатающие, являются жизненно важными парадигмами. Первый оказывает прозрачность над организациями, представленными в своем кодексе, их отношениях, и функциональность, которую они можно ожидать, что предоставит, а последняя является важным, сеткой безопасности срока службы в сложных системах. Я пришел из фона C #, поэтому у меня есть опыт из первых рук этого
- Я также люблю JavaScript, учитывая его неотъемлемые недостатки, многие из которых были адресованы Ecmascript 6 и 7
Так почему же я вообще против статического набора в JavaScript?
Преимущественно, что делает JavaScript такой мощным языком – это его слабо напечатанный характер; Это тривиально реализовать ветви логики через принуждение типа, и это так легко создавать экземпляры объектов произвольного типа. Кроме того, отсутствие компиляции (если только один не использует транспортер или создавать инструмент, такой как Babel, например), например Babel) делает разработку невероятно быстро, так как длительный код не приведет к любому причудливому поведению. На мой взгляд, это то, что делает его таким мощным для Frontend и простой Развитие Backend (E.g. IoT).
Я лично считаю, что если кто-то разрабатывает систему настолько сложным, что она требует безопасности типа безопасности, то следует использовать язык, который поддерживает его в своем ядре; Написание руководящей системы, которая включает сложные математические операции, в JavaScript безумно.
Моя основная проблема с этими JavaScript Tools и Supersets состоит в том, что они компилируются, ну, JavaScript; Эти программы, следовательно, работают в динамическом контексте, поэтому могут произойти те же побочные эффекты. TypeyScript, например, может быть статически набран (i.e. Информация о типе собрана и проанализирована по времени компиляции), но необходимо иметь полную уверенность в том, что полученный код все еще будет работать, как ожидается. Да, конечно, даже статически напечатанные языки обычно скомпилированы на язык более низкого уровня, который, как правило, обычно интерпретируется, но эти целевые языки, безусловно, были разработаны с использованием печати в качестве первоклассного гражданина; В качестве примера Compiler Microsoft Jit для .NET все еще реализует Время выполнения типа проверки его промежуточного языка перед компиляцией на родной код.
Кроме того, при проведении разработки Frontend я все еще мышления, который JavaScript должен использоваться для Дополнение HTML и CSS Solutions E.g. Добавление классов к элементам, изготовление HTTP-вызовов на Backend Services и т. Д., В то время как в Интернете с точки зрения структуры для создания более крупных приложений на основе UI (FYI, я написал более крупные приложения с REVING.JS и VANILLA JS; я люблю оба ), Я предпочитаю держать свои JS как можно более светом. Я понимаю, что это не всегда возможность на самом деле, но если бэкэнд системы служат исходной истиной для фундаментальной бизнес-логики, то код Frontend становится более легкой и менее избыточным; В этом отношении какие преимущества будут приносить систему типа?
Следуя моей точке размера программного обеспечения Frontend, моя текущая работа влечет за собой написание концентрированных веб-приложений для каждой заботы о всеобъемлющей системе; В отличие от одной крупной одностраничной приложения для нашего магазина, который содержит представление списка продуктов, представление о продукте и представление о покупке, у нас есть соответствующие приложения для них в Node.js для них. Очевидно, что это лучшая практика с точки зрения свободной муфты и устойчивости, но с точки зрения кода, он позволяет легче сосредоточиться на реализации одной области нашего интерфейса.
Мой последний аргумент – это; JavaScript действительно трудно учиться? Как я уже говорил, ECMAScript 5 сам является ошибочным языком; Различные шаблоны вызова функции И как они влияют на «это ключевое слово и недостаток блока, например, может затруднить их для начинающих». Однако с Ecmascript 6, плюс множество удивительных ресурсов там, легко преодолеть и знать об этих вопросах. Почему бы не просто пропустить средний человек и выучить язык напрямую?
Я закрою, сказав, что я фанат всех набора подходов, но в некотором смысле определенные сценарии больше, чем другие. Если JavaScript лучше всего подходит для большинства программного обеспечения Frontend, учитывая его повсеместность в рамках команд разработки и их проекты, то, безусловно, не нуждается в суперсете. Кроме того, есть грузовик языков, которые по своей природе введены в эксплуатацию, поэтому перестаньте переосмыслить колесо!