Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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


Отредактируйте следующее уточнение, о котором идет речь

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

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

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

Хорошо, так как насчет какой-нибудь изолированной среды для скомпилированного кода?По-моему, это похоже на Java-апплеты.Или ActionScript во Flash.Или C# в Silverlight.

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

За исключением того, что Javascript в некотором роде уже является таким IL - просто посмотрите на GWT.Это позволяет вам писать программы на Java, но распространять их как HTML и JS.


Редактировать после дальнейшего уточнения вопроса

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

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

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

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

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

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

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

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

Другие советы

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

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

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

Так много вариантов

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

Заслуживающий внимания

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

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

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

  • Google's Вперед нацелен на лаконичность, простоту и безопасность.Код Go может быть скомпилирован в Javascript с помощью ГофердЖС.

  • Дротик это была более поздняя попытка Google заменить Javascript.Он предлагает интерфейсы и абстрактные классы с использованием синтаксиса, подобного C / Java, с необязательным набором текста.

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

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

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

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

  • Компания Microsoft Машинописный текст это небольшой надмножество Javascript, которое позволяет устанавливать ограничения типа для аргументов функции, что может привести к нескольким ошибкам.Аналогично BetterJS ( Лучший JS ) позволяет применять ограничения, но в чистом Javascript, либо добавляя дополнительные вызовы, либо указывая типы в комментариях JSDoc.И теперь Facebook предложил Поток который дополнительно выполняет вывод типа.

  • Жизненный сценарий это спин-офф от Coffeescript, который был популярен из-за своей краткости, но мне кажется не очень читабельным.Вероятно, не самый лучший вариант для команд.

Как правильно выбрать?

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

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

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

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

Будущее...

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

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

И да, и нет.Существует альтернатива под названием Dart от Google, которая компилируется в JavaScript и, как и jQuery, пытается немного упростить манипулирование DOM.Возможно, будет интересно поэкспериментировать, проверьте это.

Смотрите также

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

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

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

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

Что касается манипулирования DOM, посмотрите на jQuery как на клиентскую библиотеку, которая заменяет большую часть ужасного DOM API операциями, которые сложно записать, на довольно элегантные фрагменты кода, которые проще писать.

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

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

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

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

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

Если вы хотите ограничить своих клиентов / посетителей определенными браузерами и, возможно, потребовать от них установки подключаемого модуля, вы могли бы посмотреть на МИСС Сильверлайт -- читаемый обзор включен википедия.С Silverlight 2 вы можете запускать на стороне клиента код, написанный вами на C #, IronPython, IronRuby, VB.NET и т. Д;свободный Лунный свет клон Silverlight из проекта Mono обещает привнести ту же функциональность в Linux.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top