Какова историческая основа использования Javascript в веб-программировании?

9

Я родом из научной биологии, где мы также часто используем Python.

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

Преобладание JavaScript - это историческая случайность или что-то еще? Кроме того, мне интересно, есть ли какие-либо препятствия для интеграции Python в скрипты на стороне клиента?

rd108
источник
Требуется ли внимание модератора на основе meta.programmers.stackexchange.com/questions/363/… ?
Рейн Хенрикс
@ Rein - Вы можете, vote to closeесли считаете, что это не по теме. Если другие чувствуют то же самое, они или модератор последуют вашему примеру.
jmort253
@ jmort253 (Возможно, мне следует перейти к мета). В связанном обсуждении не было консенсуса, и я амбивалентен. :(
Рейн Хенрикс
@ Rein - мыслительный процесс в комментариях в порядке (поскольку он служит указателем того, почему или почему, сообщество решило принять меры в отношении сообщения. Если нет соглашения, то делайте то, что считаете лучшим. :) Лично я думаю, что эта историческая информация может помочь другим понять будущее JavaScript как языка и почему важно понимать и принимать этот язык.
jmort253

Ответы:

16

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

Internet Explorer реализовал JavaScript таким образом, который позволяет подключаемые скриптовые движки (он поставляется с VBScript и JScript). Если вы предпочитаете (как я) писать свой код на PerlScript или PythonScript, вы можете, но на всех ваших клиентах должен быть установлен этот язык сценариев, и они должны использовать IE. Вы можете сделать это для внутренних проектов, но в Интернете это никак не сработает.

Гейб
источник
Еще кое-что, что мне показалось интересным, это проекты по написанию компиляторов python-to-javascript, например, Pyjamas pyjs.org .
rd108
«Pajamas - это многофункциональная платформа для разработки интернет-приложений (RIA) как для веб-сайтов, так и для настольных компьютеров. Она содержит компилятор Python-to-Javascript, инфраструктуру AJAX и API Widget Set. Pajamas начала свою работу как порт Python для Google Web Toolkit, Компилятор Java-to-Javascript. Прочитайте FAQ и список возможностей. "
rd108
Существует множество компиляторов чего-то для JavaScript. CoffeeScript, TypeScript, ClojureScript, LispyScript и т. Д. И т. Д.
Флориан Маргейн
7

JavaScript изначально был создан Бренданом Эйчем. Впервые он был выпущен с бета-версией Netscape Navigator 2.0 в сентябре 1995 года как LiveScript, но был переименован в JavaScript в совместном объявлении с Sun Microsystems в декабре 1995 года. Только позже (в 1996 году) JavaScript был представлен в Ecma International и в конечном итоге стал стандартизированный ECMAScript.

Его нынешнее доминирование на рынке во многом связано с исторической инерцией.

Источник: http://en.wikipedia.org/wiki/JavaScript#History

Рейн Хенрикс
источник
2

Не уверен, но это легкий клиентский язык сценариев. Я думаю, что его происхождение лежит в ранних браузерах Netscape (хотя я могу ошибаться). Действительно, само его имя было изменено перед выпуском, чтобы включить слово «Java», хотя оно не имеет ничего общего с Java. Это была быстрая тактика завоевать популярность в то время.

Майкл Джованни Пумо
источник
1

Я уверен, что это имеет непосредственное отношение к истории.

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

Мартин Йорк
источник
Это не имеет смысла. ИТ-отделы сами решают, какие API доступны для языка программирования. Конечно, если бы Python поставлялся в браузерах, он имел бы доступ к тем же API, которые есть у Javascript (например, DOM), поэтому у него не было бы никакого способа нанести ущерб.
Андреа
@ Андреа - можно утверждать, что язык - это не только его стандартные библиотеки, но и его синтаксис и семантика. Javascript не имеет стандартной библиотеки для файлового ввода-вывода, и это сделано намеренно по соображениям безопасности. В Python есть стандартные библиотеки для файлового ввода / вывода и для многих других вещей, которые могут рассматриваться как проблемы безопасности. Запретите это, и, возможно, вы больше не имеете дело с Python. Давным-давно у Python была песочница - я помню, что она была там около версии 1.5 - но она была отброшена IIRC, потому что она использовалась недостаточно и была далеко не герметичной.
Steve314
Стандартные библиотеки для ввода / вывода в Javascript пишутся. Конечно, они не доступны в браузере. Я просто хочу сказать, что если бы Python был реализован в браузере, небезопасные библиотеки были бы недоступны. И, вероятно, вы не пропустите их, так как они не предназначены для использования на веб-сайте.
Андреа
-2

«Преобладание JavaScript - историческая случайность или что-то еще?»

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

Несмотря на то, что названный так, чтобы он обращался к разработчикам Java, и синтаксис, подобный синтаксису на основе Java, также обращался к разработчикам Java, Брендан Айх (Brendan Eich) принял одно из самых задиристых решений в истории www, которое должно было исходить главным образом из Scheme для реальной языковой механики. Вдохновение, которое разработчикам Java, похоже, не очень понравилось (что я нахожу очень забавным).

JavaScript использует очень гибкое / гранулированное наследование прототипов для ООП, имеет замыкания, типы являются на 100% динамическими, сами функции являются первоклассными, что позволяет передавать их, как любой другой объект или тип данных, и повторно использовать в различных контекстах и ​​даже применяются к объектам на лету, как если бы они были объявлены как фактические члены объекта с самого начала. Это практически кричащее использование для управляемых событиями архитектур, которые должны нормализовать тонну проприетарного мусора или решать очень нелинейные проблемы пользовательского интерфейса.

В конце рассвета Интернета это единственный язык, который когда-либо серьезно подходил к задаче нормализации браузеров посредством реальной войны браузеров, когда Netscape и IE пытались сделать что-то по-другому, а затем более 10 лет браузер Перемирие, когда IE просто делал вещи по-другому, потому что MS ленив и самоуверен в некоторых справедливо глупых антиконкурентных методах, приводящих к стагнации браузера, и теперь мир, где браузеры наконец начинают соглашаться на ту же общую спецификацию в отношении HTML, CSS и DOM API с IE всего лишь на 2-3 года отстают от последних разработок, а не на 10 из-за того, что Google и Mozilla выпустили JIT-компиляторы, благодаря которым показатели производительности IE выглядят настолько жалкими, что MS наконец-то постаралась должным образом модернизировать свои проклятые браузеры.IE9 является первым, кто действительно серьезно обновил поддержку API DOM до уровней, которые Netscape поддерживал еще в 2000-х годах.

JS участвовал в конкурсе в форме Java-апплетов и Adobe ActionScript для Flash. Вот и все на серьезном фронте соперника. MS пыталась подтолкнуть VB, но с треском провалилась, потому что ... ну ... VB. Также запатентованный. На самом деле Flash-сайтов было намного больше, чем думает большинство людей. Вы просто не могли найти глупости с помощью поисковых систем. Апплеты сделали свое дело, и это было ужасно. Очень некрасиво JS был единственным языком, который действительно решал проблему работы в контексте нескольких браузеров людьми, которые не соглашались с тем, кто устанавливает спецификации, с которыми они должны были соответствовать.

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

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

Эрик Реппен
источник
Вы упоминаете Схему дважды, никогда не говоря, как JS относится к Схеме. Разумеется, вы не думаете, что у JS есть макросы, S-выражения, хвостовая рекурсия, продолжения или какие-либо другие отличительные особенности Scheme - не так ли?
Гейб
@Gabe. Проверьте 4-й блок текста. Замыкания, динамическая типизация и функции первого класса довольно важны. Тот факт, что JS использует c-подобный синтаксис, запрещает использование макросов Scheme. Это не индивидуальная копия Схемы, но она, безусловно, находится под ее влиянием.
mike30
Так замыкания и динамическая типизация делают язык похожим на Scheme? Означает ли это, что C # похож на схему? А как насчет Ruby, Python и Perl? И почему Схема, а не Лисп или какой-либо другой подобный язык?
Гейб
@Gabe Я не эксперт по Scheme, но на случайной википедии я бы сказал, что комбинация лексического контекста, первоклассных функций и замыканий - это три, которые делают JS намного ближе к Scheme, чем к Java. В противном случае я просто взял слово Брендана Эйха об этом и предположил, что правильные первоклассные функции были главным успехом.
Эрик Реппен
Итак, у JS есть замыкания (которые, как я считаю, подразумевают первоклассные функции и лексическую область видимости) и динамическую типизацию, например Scheme. Поскольку C # имеет замыкания, динамическую типизацию и ограниченную форму S-выражений, означает ли это, что C # еще более похож на схему, чем JS?
Гейб