Альтернативы JavaScript

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

Знаете ли вы о какой-либо существующей или планируемой инициативе по внедрению лучшего (переработанного) языка любого вида (не только javascript) для обработки дерева DOM и HTTP-запросов в браузерах следующего поколения? Если да, то какова дорожная карта для ее интеграции, скажем, в Firefox, и если нет, то по каким причинам (помимо интероперабельности) должен быть JavaScript только поддерживаемый язык на платформе браузера?

Я уже использовал jQuery, и я также читал "javascript: хорошие части". Действительно, предложения хороши, но я не могу понять: почему только javascript? На стороне сервера (ваша-любимая-os-платформа) мы можем манипулировать деревом DOM с каждым языком, даже fortran. Почему клиентская сторона (платформа браузера) поддерживает только javascript?

Ответ 1

Проблема с javascript - это не сам язык - это отличный прототип и динамический язык. Если вы работаете на фоне OO, есть немного кривой обучения, но это не ошибка языка.

Большинство людей считают, что Javascript похож на Java, потому что он имеет похожий синтаксис и аналогичное имя, но на самом деле это намного больше похоже на lisp. Это действительно очень хорошо подходит для манипуляций с DOM.

Реальная проблема заключается в том, что он скомпилирован браузером, а это означает, что он работает совсем по-другому, в зависимости от клиента.

В зависимости от браузера не только фактическая DOM, но и огромная разница в производительности и макете.


Изменить следующие пояснения

Предположим, что поддерживается несколько интерпретированных языков - у вас все еще есть те же проблемы. Различные браузеры по-прежнему будут ошибочными и имеют разные DOM.

Кроме того, вам потребуется иметь встроенный в браузер интерпретатор или каким-то образом установленным в качестве подключаемого модуля (который вы могли бы проверить, прежде чем подавать страницу) для каждого языка. Это потребовало времени для согласования Javascript.

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

ОК, так что о какой-то песочнице для скомпилированного кода? Звучит как Java-апплеты для меня. Или ActionScript в Flash. Или С# в Silverlight.

Как насчет какого-то стандарта IL? Это имеет больший потенциал. Разработайте на любом языке, который вы хотите, а затем скомпилируйте его в IL, который браузер затем JITs.

Кроме того, Javascript - это уже уже тот ИЛ - просто посмотрите GWT. Он позволяет писать программы на Java, но распространять их как HTML и JS.


Изменить следующие последующие разъяснения

Javascript не является, или, вернее, не единственным, поддерживаемым браузерами: обратно в темные века Internet Explorer вы можете выбирать между Javascript или VBScript для запуска в IE. Технически IE даже не запускал Javascript - он выполнял JScript (в основном, чтобы избежать необходимости платить Sun за слово java, Oracle по-прежнему владеет имя Javascript).

Проблема заключалась в том, что VBScript был патентован для Microsoft, но также, что это было не очень хорошо. В то время как Javascript добавлял функциональные возможности и получал инструменты отладки высшего уровня в других браузерах (например, FireBug), VBScript оставался только для IE и в значительной степени не отлаживался (dev инструменты в IE4/5/6 не существовали). Тем временем VBScript также расширился, превратившись в довольно мощный скриптовый инструмент в ОС, но ни одна из этих функций не была доступна в браузере (и когда они стали серьезными дырами в безопасности).

Есть еще некоторые внутренние внутренние приложения, которые используют VBScript (и некоторые полагаются на эти дыры в безопасности), и они все еще работают с IE7 (они только остановили IE6, потому что MS окончательно отключили его).

Получение Javascript к текущему состоянию было кошмаром и заняло 20 лет. Он по-прежнему не имеет последовательной поддержки, с языковыми функциями (указанными в 1999 году), которые все еще отсутствуют в некоторых браузерах, и требуется большое количество прокладок.

Добавление альтернативного языка для интерпретации в браузерах сталкивается с двумя основными проблемами:

  • Получение всех поставщиков браузеров для внедрения нового языкового стандарта - то, что им еще не удалось для Javascript через 20 лет.

  • Второй язык потенциально разбавляет поддерживаемую вами поддержку, позволяя (например) IE иметь поддержку второго курса Javascript, но отличный VBScript (снова). Я действительно не хочу писать код на разных языках для разных браузеров.

Следует отметить, что Javascript не "закончен" - он все еще развивается, чтобы стать лучше в новых браузерах. последняя версия на многие годы опережает реализацию браузеров, и они работают над следующим.

Ответ 2

Скомпилировать Javascript

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

(Но я действительно не думаю, что это проблема. Javascript теперь хорошо оптимизирован. Машинный код также небезопасен, если он написан вручную, но отлично работает как цель компиляции и язык исполнения.)

Множество опций

Существует постоянно растущий пул языков, которые компилируются в Javascript. Подробный список можно найти здесь:

Обращает на себя внимание

Я упомянул несколько, я думаю, примечателен (хотя, без сомнения, пренебрегая некоторыми драгоценными камнями, о которых я не знаю):

  • Spider появился в 2016 году. Он утверждает, что использует лучшие идеи Go, Swift, Python, С# и CoffeeScript. Он не является типичным, но имеет некоторые незначительные функции безопасности.

  • Elm: Haskell может быть самым умным языком всех, а Elm - вариант Haskell для Javascript. Он отличается высокой степенью точности и краткости и предлагает Функциональное реактивное программирование как опрятную альтернативу реактивным шаблонам или спагетти MVC. Но это может быть довольно сильным шоком для процедурных программистов.

  • Google Go нацелен на краткость, простоту и безопасность. Код Go может быть скомпилирован в Javascript GopherJS.

  • Dart была позже попытка Google заменить Javascript. Он предлагает интерфейсы и абстрактные классы с помощью синтаксиса типа C/Java с опцией ввода.

  • Haxe - это как Flash ActionScript, но он может настроить несколько языков, чтобы ваш код мог быть повторно использован в программах Java, C, Flash, PHP и Javascript. Он предлагает типы и динамические объекты.

  • Opalang добавляет синтаксический сахар к Javascript для обеспечения прямого доступа к базе данных, интеллектуальных продолжений, типа - проверка и помощь при разграничении клиент/сервер. (Привязано к NodeJS и MongoDB.)

  • GorillaScript, "язык компиляции для JavaScript, предназначенный для расширения прав пользователя пытаясь предотвратить некоторые распространенные ошибки". сродни Coffeescript, но более всеобъемлющей, предоставляя кучу дополнительных функций для повышения безопасности и сокращения повторяющихся шаблонов шаблонов.

  • LiteScript находится где-то между Coffeescript и GorillaScript. Он предлагает синтаксис async/yield для "inline" обратных вызовов и проверку на наличие опечаток.

  • Microsoft TypeScript является небольшим надмножеством Javascript, который позволяет помещать ограничения типа на аргументы функции, которые могут несколько ошибок. Аналогично BetterJS позволяет применять ограничения, но в чистом Javascript либо путем добавления дополнительных вызовов, либо путем указания типов в комментариях JSDoc. И теперь Facebook предложил Flow, который дополнительно выполняет вывод типа.

  • LiveScript является побочным эффектом от Coffeescript, который был популярен по его краткости, но не выглядит очень читаемым для меня. Наверное, не лучший для команд.

Как выбрать?

Если выбрать альтернативный язык, для необходимо учитывать факторы:

  • Если другие разработчики присоединятся к вашему проекту в будущем, сколько времени им потребуется, чтобы ускорить и изучить этот язык, или каковы шансы, что они уже это знают?

  • Имеет ли язык слишком мало функций (код по-прежнему будет заполнен шаблоном) или слишком много функций (для освоения потребуется много времени, и до тех пор какой-то действительный код может быть не поддающимся анализу)?

  • Есть ли у вас функции, необходимые для вашего проекта? (Требуется ли для вашего проекта проверка типов и интерфейсы? Требуется ли им умное продолжение, чтобы избежать вложенного аддонов обратного вызова? Существует ли много реактивности? Возможно, вам нужно ориентироваться на другие среды в будущем?)

Будущее...

Джефф Уокер написал серию размышлений в сообщениях в блоге о "проблеме Javascript", в том числе о том, почему он не считает ни TypeScript, а не Dart и Coffeescript предлагают адекватные решения. Он предлагает некоторые желательные функции для улучшенного языка в заключение.

Ответ 3

должен быть JavaScript только поддерживаемый язык на платформе браузера?

Да и нет. Существует альтернатива, которую Dart предоставляет Google, которая компилируется на JavaScript и точно так же, как jQuery, она пытается сделать манипуляции с DOM немного легче. Это может быть интересно экспериментировать, проверить это.

См. также

Ответ 4

Верно, что Javascript был в какой-то момент печально с трудом справиться, но сообщество веб-разработчиков прошло долгий путь. Вместо этого я бы посоветовал вам взглянуть на jQuery. Это легко и абстрагирует все различные проблемы.

И действительно нет альтернатив, которые работают по всем направлениям. Flash приходит на ум, но это тоже ECMA script, и это, вероятно, больше всего убивает для большинства вещей.

Ответ 5

В краткосрочной перспективе я бы использовал такие вещи, как jQuery, чтобы скрыть несовместимость браузера. Долгосрочные технологии, такие как Silverlight или Adobe AIR, могут сделать это совсем другим минным полем (но все же минным полем) в будущем.

Ответ 6

Doug Crockford поговорил с Google, в котором подробно описываются плохие и хорошие части JavaScript и его будущее. С 1999 года он практически не изменился - это можно сказать, что это хорошо (почти все браузеры могут запускать один и тот же код, пока вы знаете об их ограничениях), а Дуг показывает, где хорошие части были в основном недоразумениями, которые оказываются очень сильными.

Для DOM-манипуляции рассмотрите JQuery как клиентскую библиотеку, которая заменяет большую часть ужасного DOM API операциями, которые являются болью для написания довольно элегантных битов кода, которые легче писать.

Ответ 7

Если вы думаете, что у JavaScript есть глубокие проблемы, я рекомендую книгу Дуга Крокфорда, JavaScript: Хорошие части. (Или Google для "JavaScript Крокерсона", чтобы найти несколько видео-презентаций, которые он сделал.) Крокфорд набросает безопасное подмножество и множество практик и специально перечисляет некоторые части языка, чтобы этого избежать.

Я не знаю о планах заменить JavaScript как фактическое средство манипулирования DOM. Поэтому лучше научитесь использовать его безопасно и хорошо.

Ответ 8

В терминах клиентской стороны Javascript - это единственный способ манипулировать DOM. С точки зрения серверной части существует множество способов.

Ответ 9

Internet Explorer поддерживает подключаемые языки сценариев, хотя только один, надежно включенный в IE, помимо JScript - это VBScript.

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

Ответ 10

Если вы хотите ограничить своих клиентов/посетителей конкретными браузерами и, возможно, захотите потребовать их установки плагина, вы можете посмотреть MS Silverlight - читаемый обзор находится на wikipedia. С Silverlight 2 вы можете запускать клиентский код, написанный на С#, IronPython, IronRuby, VB.NET и т.д.; бесплатный Moonlight клон Silverlight, из проекта Mono, promises, чтобы принести ту же функциональность Linux.

На практике большинство разработчиков веб-приложений и сайтов предпочитают охватить более широкую аудиторию, чем Silverlight (и в конечном итоге Moonlight) в настоящее время могут доставлять, что означает использование Javascript или, возможно, Flash (который использует похожий язык программирования, ActionScript).

Таким образом, получение существенного ума, принятие и тяга к чему-либо еще доказывают, что это будет тяжелая битва даже для Microsoft с ее большими группами инженеров и маркетинговых бюджетов и проекта со свободным программным обеспечением на стороне (чтобы, возможно, ослабить опасения о запатентованной блокировке), что может помочь объяснить, почему очень мало интереса, например со стороны Фонда Mozilla, в стремлении к достижению такой цели. "Помимо интероперабельности", вы говорите: "но ясно, что проблема интероперабельности - это большой трюк здесь, учитывая то, что мы наблюдаем за прогрессом Silverlight...

Ответ 11

Как уже говорилось, у вас есть Flash (ActionScript, который является производным языком из Javascript) и Silverlight/Moonlight (IronPython, IronRuby, JScript, VBScript, С#), которые могут запускаться в браузере через плагины (первый из них более вездесущий).

Есть и другая альтернатива, если вам нравится Ruby: HotRuby, это рубиновая реализация в javascript, которая будет запущена в браузере. Он еще не очень зрелый, но вы можете взглянуть на него.

Ответ 12

Одна вещь, о которой я не упоминал (о, я вижу, что Алсид упоминал HotRuby, когда я писал, и Носредна упомянул GWT и Script #) и хотел бы выбросить там есть ряд реализаций [insert language] -on-JavaScript (например, переводчики, которые позволяют вам конвертировать Ruby, Python, С#, Java, Obj-J/Cappuccino [аналогично Obj-C/ Cocoa] или Processing [для Canvas] для JavaScript на клиенте или перед развертыванием [и некоторые из них также содержат различные библиотеки абстракции]). Разумеется, накладные расходы на производительность, если они переводится на клиент, но если вы более комфортно относитесь к другому языку, это даст вам некоторую гибкость.

Лично, однако, я рекомендую научиться любить JavaScript. Это отличный, мощный язык и довольно элегантный, как только вы это узнаете. Я столкнулся с противоположной дилеммой, набирая бит, чтобы иметь надежное серверное решение JavaScript/DOM, которое отвечает всем моим потребностям./незапрашиваемое мнение

Ответ 13

JQuery (по-прежнему javascript, но) это действительно поможет вам иметь поддержку почти для всех браузеров, и на самом деле это не так сложно узнать:)

Ответ 14

Нет. JavaScript есть, но он будет развиваться. Следующая версия - "JavaScript Harmony", и вы можете узнать больше, если это Google.

Время от времени кто-то предлагает помещать интерпретатор байтового кода в браузер вместе с JavaScript. Наверное, этого не произойдет, по крайней мере на некоторое время.

Мне нравится JavaScript. Но есть и другие решения, в том числе GWT, который компилирует Java на JavaScript и Script #, который компилирует С# на JavaScript.

Ответ 15

Я не думаю, что Javascript будет заменен в ближайшее время. Для совершенно другого подхода к богатым клиентам вы можете изучить Flex, который является технологией Flash.

Ответ 16

Возможно, что-то вроде haxe (см. haxe.org) может вам помочь. Это язык, который кажется более чистым, чем JavaScript, и его можно скомпилировать до JavaScript, поэтому его можно запустить в браузере.

Я знаю, что это не прямой ответ на ваш вопрос, но я думал, что это может быть интересно для вас, тем не менее.

Ответ 17

Многие понимают, что Javascript не лучший и самый красивый язык. Тем не менее, в настоящее время он поддерживается браузерами, и поэтому будет очень сложно ввести другой язык. Нам просто не нужна другая война в браузере.

Это объясняет, почему я не знаю о планах перехода на другой клиентский язык.

Но я думаю, что Javascript не так уж плох, если вы начнете думать о модели DOM и как с ней работать. Многие вещи, которые беспорядочны с JS, являются результатом того, как работает модель DOM.

Ответ 18

JavaScript - это английский язык в Интернете. Английский исторически распространился, потому что у него был сильный флот, завоевывающий различные страны. Это сопоставимо с крупными компаниями, которые завоевали Интернет с помощью JavaScript. Это язык, сбитый из разных европейских источников (греческий, латинский, германский языки, французский даже некоторые китайские и индийские слова). JavaScript заимствовал много концепций на протяжении многих лет с других языков (структурный, OO, функциональный). На английском языке говорят в разных местах с небольшими вариациями в диалекте и акценте, что может затруднить понимание. Так же, как JavaScript имеет разные браузеры, интерпретирующие его несколько иначе.

Несмотря на то, что английский язык легко учится изначально, он имеет очень непоследовательное произношение и больше исключений, чем правила. Так же, как JavaScript, он всегда предлагает сюрприз.

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

Были попытки вытеснить английский язык как основной язык миров, например. Эсперанто. Но все они потерпели неудачу, потому что большинство людей на земле говорят по-английски. Точно так же будет трудно представить лучшие альтернативы JavaScript.