Чи буде статична типова альтернатива JavaScript на веб-сторінках практичною?


9

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

Моє запитання: чи технічно можливо створити статично типову альтернативу JavaScript для розширення веб-сторінок на стороні клієнта тощо?


3
Чому б і ні? `` `
Джош К

2
Ви говорите про гіпотетичну статично набрану мову, яку повинен був би реалізувати кожен браузер, або про вже наявні можливості?
користувач281377

2
Ви можете використовувати аплети Java, я думаю.
Девід Торнлі

@ammoQ, що ви згадуєте, Гіпотетичне
Арман

@Josh я не знаю. @David LOL, дякую за це!
Арман

Відповіді:


22

Звичайно, немає технічних причин, щоб таке не могло існувати. Нічого конкретного щодо коду клієнта, який би вимагав використання динамічно набраних мов.


1
Dart має необов'язкове статичне введення тексту, але компілюється у звичайний Javascript. www.dartlang.com
Nishant George Agrwal

16

Оскільки малоймовірно, що інша мова знайде широке прийняття, найкращим варіантом буде створити статично типізовану версію JavaScript (тобто мову, близьку до Java) та препроцесор, який перетворює її на звичайний JavaScript.

Наприклад, ваш сценарій виглядає так:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

і препроцесор перевіряє, що кожна змінна, функція, об'єкт тощо використовується правильно відповідно до її типу, і змінює сценарій на

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

з яким може працювати кожен браузер.


5
+1 для прагматичного підходу
Gary Rowe

Дійсно, це питання не стосується прагматизму - це теорії. Буде оновлено.
Арман

2
Я б також запропонував використовувати умовивід типу.
Олівер Вайлер

Метод помічника: Дуже гарна пропозиція, але я зараз не змінюю свого прикладу, оскільки висновок типу зробить статичну версію дуже подібною до динамічної версії, оскільки приклад такий простий.
користувач281377

4
Я не думаю, що статично набраний Javascript був би дуже близький до Java, окрім синтаксичного. У Javascript та Java є багато відмінностей, ніж статичне та динамічне введення - OO на основі класу проти прототипу. Оскільки ваш зразок коду здається на основі класу, я стверджую, що "staticjavascript" є неправильним для цієї мови, і його слід називати чимось на кшталт "Java на стороні клієнта". Хоча +1 для компіляції в javascript (btw Google Web Toolkit компілює java в javascript).
sepp2k

8

Моє запитання: чи технічно можливо створити статично типову альтернативу JavaScript для розширення веб-сторінок на стороні клієнта тощо?

Звичайно. Google Web Toolkit компілює статичний збірний Java в JavaScript ... Просто подумайте про це: усій красі і гнучкості Java, з усією продуктивністю машини згенерованих JavaScript!

Якщо серйозно, ви можете зробити це для будь-яких мов, і багато хто спробував (є, або були, і компілятори для C і C #). Від того, чи є кінцевий результат практичним чи ні, залежить від того, що ви намагаєтеся досягти: Google працює після послідовної платформи для розробки дуже великих клієнтських додатків і має власний механізм JavaScript для завантаження; Ви цілком можете виявити, що прийняття такого звіра для наближення ефектів і дивний дзвінок AJAX приносить набагато більше болю, ніж просто навчитися жити з трохи нетипізованим кодом ...


3
Я не можу повністю сказати, чи ти жартуєш про "переваги" GWT. Якщо ви є, браво. Робота з GWT була одним з найбільш дивних досвіду мого життя.
Ніколь

@Renesis: Наче робота з сумісністю Javascript та браузера вже не зводила з розуму? Але у нього є гладкі функції, як завантаження декількох зображень в одне зображення, а потім їх вирізання на клієнті.
Macneil

1
@Macneil Вони, можливо, це вже виправили, але коли я працював з Sprites, це майже заперечувало всю користь, оскільки воно автоматично записувало інші фонові властивості CSS, які ви, можливо, не хотіли, тому вам довелося щоразу перекручувати CSS, щоб змінити його .
Ніколь

6

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


2
+1 для пояснення можливої ​​причини, чому ні , не просто відповіді, якщо це можливо.

4

Він існує вже.

ActionScript 3 (мова сценаріїв за Flash і Flex) - це діалект ECMAScript, який реалізує сильні типи, і ви можете використовувати його більш-менш тим же способом, що і на стороні клієнта, як JavaScript (різниця полягає в тому, що для AS3 потрібен плагін флеш-версії, і складається). Я особисто намагаюся відмовитися від цього в наші дні, але якщо ви перебуваєте в "статичному" таборі, дайте йому кружляти.

Це відповідає на головне питання, і тепер, коли ми це маємо, ваше вторинне запитання стає "Чи Flash практично?" Відповідь "так", з кількома "if" і "but" s

  • ... якщо вам потрібно приховати свій код з будь-якої причини.
  • ... якщо ви хочете дуже-дуже (минулого рівня jQuery) високого рівня інтерактивності
  • ... але навіть без HTML5, сумісність між веб-браузерами останнім часом стає значно кращою.
  • ... але незабаром HTML5.
  • ... але одне з великих малюнків статичного набору тексту / компіляції (на відміну від інтерпретації) - це додаткова швидкість, яку він дозволяє здійснювати за допомогою оптимізацій (а Flash не має дуже гарної швидкості, незважаючи на систему типу)

AS3 базується на покинутому ES4.
gsnedders

3

Теоретично ви можете вставити будь-які сценарії на потрібну сторінку. <script>Тег має typeатрибут, в кінці кінців.

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


Так що так, це малоймовірно на даний момент.


Отже, ніяких проблем зі статичним набором тексту тоді не було? Мене не надто турбує практичність цього лову.
Арман

1
@Alison: Ви можете розмістити будь-який текстовий вміст, який ви хочете, у тег сценарію (за винятком - він не може містити послідовності символів </script>). Ви можете вписати код Brainf * ck туди, якщо цього дуже хотіли. Тоді все, що вам потрібно зробити, це здійснити перекладач вибраної вами мови у браузері, який ви хочете використовувати.
Анон.

@Anon. дякую, дуже цікаво Якщо це так просто, це, мабуть, було зроблено десь. Я пам’ятаю, <script type="vbscript">колись давно ...
Арман

Елісон: vbscript був лише IE, і деякі люди використовували його, коли частка ринку IE становила> 90%. Сьогодні, коли частка ринку IE десь близько 50%, можливо, в деяких частинах світу є меншою, це не дуже важливо; і поки жоден веб-переглядач знову не отримає такої частки ринку, не сподівайтесь, що щось подібне до нової мови написання сценарію не буде.
користувач281377

@Alison: Internet Explorer все ще підтримує VBScript як мову сценаріїв ... Я повинен знати, що у нас є сайти інтрамережі, які використовують його (а значить, вимагають Internet Explorer - urgh!)
Дін Хардінг

2

Це було б практично? Ні.

Це можливо? Так!

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


Хочете пояснити?
back2dos

Додано наступний параграф.
Марсі

Я просто додам, що єдиною причиною, чому це може бути не практично, є ситуація, що склалася. Якби ми повернулися до пункту перед випуском Javascript, все було б інакше.
яків


1

Ви можете використовувати такі мови, як haXe, щоб писати свій код у статично введеному вигляді та експортувати його у javascript. JavaScript стає дуже швидким, тому його достатньо як вихідну мову. Спроба застосувати мову, що є статично введеною як веб-стандарт, майже неможлива. Спроби впровадити статичний набір тексту в JavaScript не вдалися з причин для широкого обговорення.


1

Це технічно було б можливо? Якщо це буде реалізовано на Java, я б сказав "дуже, дуже важко, але можливо" без значних втрат продуктивності.

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

Справа в тому, що я продовжую натрапляти на подібні проблеми, але, сидячи на ньому деякий час, я приходжу до гарного рішення. Отже, зробити це і мати переваги продуктивності статичного набору тексту (без перевірки типу виконання), я б сказав, що це надзвичайно важко, але не неможливо. Мінус продуктивності, я б сказав, важко, але дуже можливо.

Я знаю, що це давнє запитання, я просто вважав, що мій досвід комусь може бути цінним.


0

Технічно можливо писати сценарії на стороні клієнта будь-якою мовою сценаріїв, яку підтримує користувальницький агент (браузер). На практиці єдиною широко підтримуваною мовою є JavaScript / ECMAScript. Переконати виробників браузерів впровадити та підтримати нову мову на цьому етапі навряд чи вдасться; таким чином, якщо ви хочете використовувати нову статично набрану мову на стороні клієнта, вам потрібно буде або перекласти нову мову в JavaScript, або застосувати інтерпретатор для неї в JavaScript.

Є кілька проектів, які вже роблять щось подібне; наприклад, веб-інструментарій Google , як згадується в одній з інших відповідей.


0

Враховуючи, що ви не маєте надії отримати всі браузери, які використовуються в реальному світі для підтримки нової мови; мову доведеться скласти до jscript.

Оскільки всі приклади Інтернету є у jscript, мова в основному повинна виглядати як jscript.

Я думаю, що є сфера з "підмножиною" jscript, яка перевіряється статичною перевіркою, але також є дійсною jscript. Наприклад:

  • Усі змінні повинні мати коментар, який говорить про типи перед першим використанням.
  • Усі звичаї змінних повинні бути дійсними відповідно до вищезазначеного.
  • Функції / клас не можна використовувати, якщо вони не були задекларовані в коментарі #
  • Коментар у верхній частині файлу js повинен містити перелік усіх інших js-файлів, від яких це залежить.

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