Чи зможу я коли-небудь кодувати код браузера на стороні клієнта мовою, яку я вибрав? [зачинено]


15

Я буду жорстоко чесним: ненавиджу писати клієнтський код у JavaScript. Я, принаймні, не шанувальник цієї мови.

Мені здається дурним, що браузери підтримують мову програмування , а не проміжну віртуальну машину (наприклад, CIL або JVM). Останнє дозволить програмістам писати мовою, яку вони вибирають (певною мірою), а не однією фіксованою наперед заданою мовою. Ця мова могла розвиватися швидше, тому що лише зміни в CIL / JVM / що б потребували оновлення кожного головного браузера. Мовні функції можна додати, не впливаючи на стару роботу браузера.

Масові заощадження зусиль, які приносять проміжні язики , добре відомі . Чи існують якісь ініціативи щодо просування браузера «сценаріїв» у чомусь іншому, ніж JavaScript, і особливо у вже розробленій, розробленій та оптимізованій віртуальній машині? Чи мають вони імпульс?


Відповіді:


11

Щоб відповісти на ваше запитання, так, докладаються зусилля для знецінення Javascript на користь більш згуртованої мови для веб-сценаріїв. Google поклав велику тягу за їхньою мовою Dart . У Dart є свій власний VM, який вже вбудований у Chrome, але я не впевнений, що інші браузери його ще прийняли. Існує також досить перспективна мова під назвою CoffeeScript .

Є також дуже амбітний на вигляд проект під назвою HaXe, який має на меті об'єднати цілу низку платформ розвитку з єдиною мовою ..

Повірте, ти не любиш Javascript, але боюся, що він нікуди не піде - насправді, здається, він набирає багато обертів, що стосується програм Windows 8 HTML5 / JS тощо., Але альтернативи, як ті, які я згадані починають весняно починати :)


9
Об'єднання всього в одну мову - якраз протилежне бажаному. Це залишає вас у тій самій ситуації, що і зараз, лише іншою мовою замість JavaScript. Справа в тому, що слід докладати зусиль: IL / CLR є добре налагодженим, він вже має високоефективні JITters для більшості платформ, а кілька компіляторів вже збирають кілька мов. Щоб перенести Інтернет у 21 століття, веб-переглядачам потрібно використовувати це, а не постійно намагатися готувати нові речі і починати з нуля.
Тімві

3
@Timwi, CIL занадто важкий і в ньому занадто багато бюрократії. Не було б сенсу приєднувати до кожного onSomethingобробника подій повний роздутий файл байт-коду з виділеним класом та усіма об'ємними метаданими - синтаксичний аналіз та інтерпретація 10-20 символів простої мови сценаріїв набагато ефективніше.
SK-логіка

1
@ SK-логіка: Ви, здається, маєте абсолютно неправильну картину CIL та байт-коду взагалі. Я не маю уявлення, що б змусило вас думати, що бінарні метадані є "громіздкими" порівняно з синтаксисом високого рівня, як JavaScript. Більше за все, я не маю поняття, чому "кожен обробник подій на щось". Програми C # чітко не збираються в кілька збірок для кожного обробника подій.
Тімві

1
@Timwi, я їмо ECMA-335 на сніданок, тому я дуже добре знаю, наскільки об'ємний CIL. Вузли DOM часто генеруються динамічно. Немає можливості додати щось до існуючого модуля в CIL - ви повинні визначити новий модуль. І ви не можете додати до класу - ви повинні визначити новий клас (із доданими об’ємними метаданими). І просто порівняйте вартість читання, JITing та виконання CIL з розбором, виконанням та негайним відхиленням крихітного текстового рядка. Є багато випадків, коли спеціальна інтерпретація є способом, набагато ефективнішим, ніж будь-який вид компіляції.
SK-логіка

2
@Timwi, ви пропонуєте використовувати байт-код як загальний знаменник і формат спілкування, правда? Моя думка, що поточна специфікація CIL є майже марною. ExpandoObject не має значення. І ваш погляд на складність розбору затьмарений. Модуль CIL містить власну довідкову таблицю складання, таблицю лексем метаданих і лише потім класи та методи. Порівняйте зусилля, необхідні для того, щоб прочитати та спільно реагувати на весь цей об’ємний матеріал із інтерпретацією рядка тривіальної мови високого рівня. Вартість парсінгу майже тут дорівнює нулю. Просто спробуйте обидва підходи та порівняйте себе.
SK-логіка

5

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


5

По суті, ні. Ви в значній мірі застрягли з Javascript.

Сказавши це, в минулому докладалися зусилля щодо залучення інших мов на борт (java-аплети, vbscript тощо). Кожна з них ніколи не отримувала тяги, яку має JavaScript, оскільки JavaScript інтегрований .

Єдиний спосіб побудувати те, про що ви посилаєтесь, - це створити мову сценаріїв, яка працює на віртуальній машині, складена клієнтською стороною і потім виконується. Тоді кожен браузер повинен був би реалізувати віртуальну машину у власну кодову базу, щоб весь код працював у всіх браузерах. Тоді вам доведеться переконатись у наявності якихось стандартів, щоб усі браузери виконували команди однаково. Зрозуміло, що веб-переглядачі, створені незалежно, мабуть, мали би бути примхи, які розробники повинні мати на увазі.

Але зараз ми тільки що описали Javascript.

Отже, нарешті, ваш вибір:

  1. звикнути до Javascript
  2. спробуйте скористатися якоюсь мовою, яка компілюється до Javascript. (Майте на увазі, що ви все ще хочете перевірити Javascript, що повертається до параметра 1.)
  3. використовувати мову, яка існує як плагін до браузера, наприклад ,criptcript (Flash), ActiveX, аплет java, .Net (SilverLight). Це дозволяє уникнути проблеми з декількома постачальниками / реалізаціями мови, але не інтегрує мову.

По суті, якщо ви хочете інтегрувати мову, ви застрягли з Javascript.


2
Іншим вибором буде використання мови, яка компілюється в javascript, і використовувати її.
Джетті

@Jetti Ви думаєте про CoffeeScript ? Це девіз - це "Золоте правило", як його називають - це "Це просто Javascript" . Але якщо ви пишете щось, що по суті є Javascript, чи не справді ви пишете Javascript? Це як би стверджувати, що jQuery не JavaScript, тому що він чистіший і простіший у використанні.
Річард


@Jetti Можливо, у них все складеться добре. Але, маючи вигадливість підтримки крос-браузера, я б нервував рекомендувати будь-яку з них і не перевіряти фактично створений JavaScript.
Річард

1
За винятком того, що JavaScript є надзвичайно жахливим проміжним мовою, і його дуже важко послідовно виконувати.
Milind R

4

Насправді ви не ненавидите javascript, як описано в стандартах Ecma, але ви ненавидите жахливу реалізацію в різних браузерах , коли вони дивуються, помилки та wtfs. На серверному Javascript насправді дуже приємно. Також модель DOM є причиною 80% болю від JavaScript на стороні клієнта.

Якщо ви все ще хочете використовувати іншу мову, ви можете використовувати GWT , який в основному дозволяє вам писати Java, а потім компілювати її в (потворний) javascript або CoffeeScript , який є синтаксичним цукром над JS, який компілюється в JS.


9
Я не можу говорити за romkyns, але я ненавиджу сам JavaScript ( крім проблем, які ви згадали). Він не є об'єктно-орієнтованим, не має статичної типізації, корисного поводження з помилками та не має корисних рамок сучасного функціоналу. Це також непослідовно і неприборкано. І, до речі, сама ненависна особливість JS, вставка крапки з комою, є стандартом ECMA.
Тімві

1
@Timwi, це заснована на функції, і ви можете написати код OO, якщо хочете. Статичне введення приємно, але якщо ваш код написаний добре (невеликі функції, правильне розміщення), це рідко є проблемою. Щодо вставки з комою, я вважаю, що це легке роздратування. Мене це коли-небудь кусало, бо я мав повернення та відкриття {об’єкта по різних лініях. Які «рамки сучасного функціоналу» ви вважаєте відсутнім?
CaffGeek

2
JavaScript сам по собі не найкраща мова (ввічливо кажучи). Мене не цікавить об'єктно-орієнтована штука (чим менше - тим краще), її система динамічного типу (вона, на жаль, потрібна для мов сценарію подібного типу, на жаль), але наявність висловлювань та відсутність належного списки та кортежі дратує. Як для написання на JavaScript, так і для реалізації компіляторів, націлених на JavaScript.
SK-логіка

2
@Timwi: ти не сприймаєш орієнтацію на обєти як погану річ, хоча це не завжди так. Будь ласка, не розглядайте ООП як срібну кулю парадигм розвитку. Функціональний підхід, як JS або Scala, теж чудовий. Ви можете мати OOP в JS, але головна відмінність полягає в тому, що це програмування на основі прототипів, а не програмування на основі класу. OOP - широке ім'я, яке не обмежується Java / C #. Основа прототипу відрізняється від класу на основі класу і добре використовується, вона настільки ж потужна, як і на основі класу.
Климент Герреман

2
@ClementHerreman: JavaScript не обмежується клієнтською стороною, але ця дискусія стосується клієнта. JavaScript буде обмежено на базі прототипу, який є недоліком по порівнянні з IL , який дозволить вам використовувати майже будь-яку мову взагалі.
Тімві

2

Це питання час від часу виникає.

Чому ми не маємо інших мов у тегах сценарію замість Javascript

Ще в той день, коли IE представив VB як альтернативу Javascript. Я думаю, ви вже можете бачити, як це призвело б до пекла стандартів, якби це спіймало на ...

То чому б тоді не було загальної стандартної мови проміжних?

Є старий подкаст від Брендана Ейха, який пояснює, чому він не бачить мову проміжного байт-коду найближчим часом:

http://www.aminutewithbrendan.com/pages/20101122

http://news.ycombinator.com/item?id=1893686

Основна проблема полягає в тому, що хоча проміжна мова (як, наприклад, CIL та байт-коди JVM) намагається бути загальною, більшість із них вони виявляються занадто низькими і занадто прив’язаними до оригінальних мов високого рівня, що складаються для них. Наприклад, ви не можете реально реалізувати хвостові рекурсивні функції в JVM - які інші мовні функції або вибір реалізації ми не зможемо реалізувати, якщо ми занадто рано підключимося до абстракції байт-коду низького рівня?

Тим часом Javascript - це гнучка мова високого рівня з розробленою семантикою та безліччю різних, ефективних реалізацій. Що ми можемо побачити в майбутньому, це сам Javascript як проміжна мова. На жаль, це дещо незріле і на сьогоднішній день в JS складається декілька мов.


Але цей аргумент стосується JavaScript так само, як і для JVM та CIL, чи не так? :) Єдине, що стосується JavaScript, це те, що він вже підтримується всіма браузерами.
Роман Старков

Справа більш тонка - Javascript описаний на більш високому рівні, ніж більшість проміжних мов, тому реалізація отримує більше місця для вибору того, що робити. (Звичайно, це ще не все море троянд - я просто хотів зазначити, що ми не вперше задумалися про ІР для Інтернету і що це не так просто)
hugomg

1

Так. Ви вже можете компілювати Dart, Coffeescript та Java в Javascript. У вас є Emscripten, який є резервним файлом компілятора для LLVM для генерації байт-коду Javascript (і LLVM обробляє досить багато мов, я вважаю).

Але крім компіляції в JS, не за короткий проміжок часу. IE6 10 років і все ще б'є. Я сподіваюся, що нинішні веб-переглядачі (які не підтримують інші мови) не виживуть так довго, але вони будуть існувати протягом декількох років, провокуючи цикл кусання хвоста, "ми все ще повинні підтримувати браузери, які підтримують Javascript, тому нам доведеться використовувати Javascript ", набагато складніше, ніж, наприклад, CSS3 - ваш сайт може працювати без CSS3, але спробуйте зробити його без скриптів на стороні клієнта.


0

Можливо, вам просто пощастить. Це вступний пункт подання на форумі webkit-dev:

Сьогодні багато мов збираються в JavaScript для запуску в Інтернеті. Як альтернатива, ми експериментували з тим, щоб дозволити різному мовному виконанню в WebKit запускати веб-сторінки поряд з JavaScript ...

Решту повідомлення ви можете переглянути тут .


0

JavaScript є самою душею браузерів, тому більшість нових спроб генерують JavaScript (CoffeeScript - це наочний приклад).
У GWT ви кодуєте свою логіку на клієнтській мові програмування Java, а набір інструментів - генерує JavaScript.

ClojureScript - цікавий проект, якщо ви кодуєте Lisp.

Отже, незважаючи ні на що, JavaScript тут залишається. (COBOL в Інтернеті, можливо?).


0

"Будь-який клієнт може мати автомобіль, пофарбований у будь-який колір, якого він хоче, якщо він є чорним". - Генрі Форд

Уже є низка компіляторів, націлених на javascript, і ви можете вибрати будь-яку мову, що компілюється в javascript.

Ваше посилання, що обговорює значення проміжних мов, обговорює їх у контексті реалізації набору компіляторів, а не в наданні коду, який буде доставлений через мережу та працюватиме на клієнтській машині. Javascript може бути не найкращим форматом для цього, але що б там не було, він не буде схожий на CIL або Java-байт-коди.

Якщо ви ненавидите javascript, я пропоную вам перейти в простір для вбудованих, наукових чи ігрових розробок, де C, Fortran і C ++ керують переходом. Лінійка ділових додатків дуже сильно рухається до Інтернету, а це означає більше Javascript, а не менше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.