когда язык считается языком сценариев?

<p>что делает язык скриптовым языком? я слышал, как некоторые люди говорят "когда это интерпретируется, а не компилируется". это сделало бы php (например) языком сценариев. это единственный критерий? или есть другие критерии?</p><h3>смотрите также:</h3><ul> <li> <a href="https://stackoverflow.com/questions/98268/whats-the-difference-between-a-script-and-an-application">в чем разница между "сценарием" и "приложением"?</a> </li> </ul>

<p>просто. когда я использую его, это современный динамический язык, когда вы его используете, это просто язык сценариев!</p>

<p>традиционно, когда речь идет о разнице между сценариями и программированием, сценарии интерпретируются и программы компилируются. язык может быть выполнен по-разному - интерпретирован или скомпилирован (для байт-кода или машинного кода). это не делает <em> язык </em> тем или иным.</p><p>в некоторых отношениях то, как вы <em> используете </em> язык, делает его языком сценариев (например, разработчики игр, которые разрабатывают в основном на c++, будут <em> сценарий </em> объекты в lua). опять же, линии размыты - язык может быть использован для программирования одним человеком, и тот же язык может использоваться для языка сценариев другим.</p><p>это из статьи <a href="http://en.wikipedia.org/wiki/scripting\_language">wikipedia</a> о языках сценариев:</p><blockquote> <p>язык сценариев, язык сценариев или язык расширения - это язык программирования, который позволяет управлять одним или несколькими программными приложениями. "сценарии" отличаются от основного кода приложения, поскольку они обычно написаны на другом языке и часто создаются или, по крайней мере, изменяются конечным пользователем. скрипты часто интерпретируются из исходного кода или байт-кода, тогда как приложения, которыми они управляют, традиционно компилируются в собственный машинный код. языки сценариев почти всегда встроены в приложения, которыми они управляют.</p> </blockquote><p>вы заметите использование "обычно", "часто", "традиционно" и "почти всегда" - все это говорит вам, что есть <strong> нет </strong> набора различных атрибутов, которые делают определенный язык "скриптовым языком".</p>

<blockquote> <p>"сценарий - это то, что вы даете актерам. программа - это то, что вы даете зрителям". - ларри уолл</p> </blockquote><p>я действительно не думаю, что есть большая разница больше. так называемые "скриптовые" языки часто компилируются - просто очень быстро и во время выполнения. и некоторые из "языков программирования" также компилируются во время выполнения (например, jit), и первый этап "компиляции" - это проверка синтаксиса и разрешение ресурсов.</p><p>не зацикливайтесь на этом, это действительно не важно.</p>

<p>мое определение будет языком, который обычно распространяется как источник, а не как двоичный файл.</p>

<p>есть много возможных ответов на это.</p><p>во-первых: на самом деле речь не идет о разнице <em> </em> между языком сценариев и языком программирования, потому что язык сценариев <em> является </em> программным язык. вопрос скорее в том, какие черты делают некоторый язык программирования языком сценариев, в то время как другой язык программирования <em> не является </em> языком сценариев.</p><p>второе: действительно трудно сказать, что такое язык xyz, будь то xyz, "скриптинг", "функциональное программирование", "объектно-ориентированное программирование" или что у вас есть. определение понятия "функциональное программирование" довольно ясно, но никто не знает, что такое "язык функционального программирования".</p><p>функциональное программирование или объектно-ориентированное программирование - это стили программирования <em> </em>; вы можете писать в функциональном стиле или объектно-ориентированном стиле практически на любом языке. например, переключатель виртуальной файловой системы linux и модель драйвера linux в значительной степени объектно-ориентированы, несмотря на то, что они написаны на c, тогда как большая часть кода java или c #, который вы видите в интернете, является очень процедурной, а не объектно-ориентированной. ориентированный <em> на все </em>. ото, я видел какой-то сильно функциональный код java.</p><p>итак, если функциональное программирование и объектно-ориентированное программирование - это просто стили, которые могут быть выполнены на <em> любом </em> языке, то как вы определяете "объектно-ориентированный язык программирования"? можно сказать, что объектно-ориентированный язык программирования - это язык, который позволяет объектно-ориентированное программирование. но это не так уж много определений: <em> все </em> языки допускают объектно-ориентированное программирование, поэтому <em> все </em> языки являются объектно-ориентированными? итак, вы говорите, что хорошо, язык является объектно-ориентированным, если он <em> заставляет </em> вас программировать в объектно-ориентированном стиле. но это не так уж много определений: <em> все </em> языки допускают функциональное программирование, поэтому <em> no </em> язык является объектно-ориентированным?</p><p>итак, для меня я нашел следующее определение:</p><blockquote> <p>язык - это язык сценариев (объектно-ориентированный язык/функциональный язык), если он <em> оба </em></p> <ul> <li><em> облегчает </em> создание сценариев (объектно-ориентированное программирование/функциональное программирование), т. е. оно не только <em> позволяет </em>, но и делает его <em> легкий </em> и <em> естественный </em> и содержит функции, которые <em> помогают </em> в этом, <em>а также</em></li> <li><em> поощряет </em> и <em> направлять </em> вас к сценариям (объектно-ориентированное программирование/функциональное программирование).</li> </ul> </blockquote><p>итак, после пяти абзацев я пришел к следующему: "язык сценариев - это язык сценариев". какое отличное определение. не.</p><p>очевидно, что теперь нам нужно взглянуть на определение "сценариев".</p><p>здесь возникает третья проблема: тогда как термин "функциональное программирование" является четко определенным, и только термин "функциональный язык программирования" проблематичен, к сожалению, с помощью сценариев, <em> оба </em> термин "сценарий" и термин "язык сценариев" плохо определены.</p><p>ну, во-первых, скриптинг <em> - это </em> программирование. это просто особый вид программирования. iow: каждый скрипт - это программа, но не каждая программа - это скрипт; набор всех сценариев является надлежащим подмножеством набора всех программ.</p><p>по моему личному мнению, то, что делает скриптовые скрипты и отличает их от других видов программирования, заключается в том, что ...</p><blockquote> <p>скрипты в основном манипулируют объектами, которые</p> <ul> <li>не были созданы сценарием,</li> <li>иметь жизнь независимо от сценария и</li> <li>жить вне домена сценария.</li> </ul> <p>кроме того, используемые типы данных и алгоритмы обычно определяются не сценарием, а внешней средой.</p> </blockquote><p>подумайте о сценарии оболочки: сценарии оболочки обычно управляют файлами, каталогами и процессами. большинство файлов, каталогов и процессов в вашей системе, вероятно, не были созданы текущим скриптом. и они не исчезают при выходе из сценария: их время жизни полностью не зависит от сценария. и они на самом деле не являются частью сценария, они являются частью системы. вы не запустили свой скрипт, написав классы <code>file</code> и <code>directory</code>, эти типы данных вас не интересуют: вы просто предполагаете, что они есть, и вы даже не знаете (и вам <em> не нужно </em> знать) как они работают. и вы не реализуете свои собственные алгоритмы, например, для обхода каталога вы просто используете <code>find</code> вместо того, чтобы реализовывать свой собственный поиск в ширину.</p><p>вкратце: сценарий присоединяется к более крупной системе, которая существует независимо от сценария, манипулирует какой-то небольшой частью системы и затем завершает работу.</p><p>эта более крупная система может быть операционной системой в случае сценария shell, браузером dom в случае сценария браузера, игрой (например, world of warcraft с lua или second life с языком сценариев linden), приложением (например, autolisp язык для макросов autocad или excel/word/office), веб-сервер, пакет роботов или что-то еще полностью.</p><p>обратите внимание, что сценарий является полностью ортогональным ко всем остальным аспектам языков программирования: язык сценариев может быть строго или слабо типизирован, строго или слабо типизирован, статически или динамически типизирован, номинально, структурно или утки, черт возьми, он может быть даже нетипизирован , он может быть императивным или функциональным, объектно-ориентированным, процедурным или функциональным, строгим или ленивым. его реализации могут быть интерпретированы, скомпилированы или смешаны.</p><p>например, mondrian - строго ленивый функционально-ленивый скриптовый язык со скомпилированной реализацией.</p><p>тем не менее, все это спорный вопрос, потому что путь этот термин <em> язык сценариев </em> есть <em> на самом деле </em>, используемое в реальном мире, не имеет никакого отношения к делать с любым из вышеперечисленного. чаще всего его используют просто как оскорбление, а определение довольно простое, даже упрощенное:</p><blockquote> <ul> <li><em> реальный </em> язык программирования: мой язык программирования</li> <li>язык сценариев: ваш язык программирования</li> </ul> </blockquote><p>похоже, именно так чаще всего используется этот термин.</p>

<p>"язык сценариев" является одним из тех нечетких понятий, которые могут означать много вещей. обычно это относится к тому факту, что существует одношаговый процесс, переводящий вас из исходного кода в исполнение.</p><p>например, в perl вы делаете: <code>perl my\_source.pl</code></p><p>с учетом вышеуказанных критериев php является языком сценариев (даже если вы можете использовать процесс "компиляции", например, при использовании zend encoder для "защиты" исходного кода).</p><p>ps. часто (но не всегда) скриптовые языки интерпретируются. также часто (но опять же не всегда) языки сценариев типизируются динамически.</p>

<p>все языки сценариев являются языками программирования. строго говоря, разницы нет.</p><p>термин не относится к каким-либо фундаментальным свойствам языка, он относится к типичному <em>использование</em> языка. если типичным использованием является написание коротких программ, которые в основном выполняют вызовы ранее существовавшего кода, и некоторой простой обработкой результатов (то есть, если типичным использованием является запись <em>scripts</em>), то это язык сценариев.</p>

<p>одно подразделение</p><ul> <li>сценарий = динамически интерпретируется</li> <li>нормальный = скомпилированный</li> </ul><p>динамически интерпретируемый язык интерпретируется во время выполнения, тогда как скомпилированный язык компилируется перед выполнением.</p><p>я должен добавить, что, как указал йорг, различие в интерпретации/компиляции является не особенностью языка, а механизма исполнения.</p><p>вас также может заинтересовать это объяснение <a href="http://en.wikipedia.org/wiki/type\_system">система типов</a> , которое связано и больше фокусируется на языковом аспекте, а не на механизме выполнения. большинство языков сценариев типизируются динамически, тогда как "нормальные" языки в основном статически типизированы.</p><p>в целом разделение статически и динамически типизированных языков лучше определено и имеет больше последствий для удобства использования языка.</p>

<p>я думаю, что у мистера роберто иерусалимского есть очень хороший ответ или вопрос в разделе "программирование в lua":</p><blockquote> <p>однако отличительной особенностью интерпретируемых языков является не то, что они не компилируются, а то, что любой компилятор является частью среды выполнения языка, и, следовательно, возможно (и легко) выполнять код, сгенерированный на лету</p> </blockquote>

<p>позвольте мне предположить, что языки сценариев - это термин, от которого многие люди уходят. я бы сказал, что в основном это сводится к скомпилированным языкам и динамическим языкам.</p><p>я имею в виду, что вы не можете сказать что-то вроде python, или ruby являются "скриптовыми" языками в наше время (у вас даже есть такие вещи, как <a href="http://en.wikipedia.org/wiki/ironpython">ironpython</a> и <em> jit - ваш любимый язык </em>, разница еще более размыта).</p><p>честно говоря, лично я не чувствую, что php больше не является языком сценариев. я бы не ожидал, что людям нравится классифицировать php иначе, чем скажем java в своем резюме.</p>

<p>в "моем мнении" я бы сказал, что динамически интерпретируемые языки, такие как php, ruby и т.д., все еще являются "нормальными" языками. я бы сказал, что примерами языков "сценариев" являются такие вещи, как bash (или ksh, tcsh или любой другой) или sqlplus. эти языки часто используются для объединения существующих программ в системе в ряд последовательных и связанных команд, таких как:</p><ol> <li>скопируйте a.txt в/tmp/work /</li> <li>запустить ночной процесс очистки на сервере базы данных</li> <li>зарегистрируйте результаты и отправьте их системному администратору</li> </ol><p>так что я бы сказал, что разница (для меня, во всяком случае) заключается в том, как вы <em>используете</em> язык. такие языки, как php, perl, ruby могут использоваться как "языки сценариев", но я обычно вижу их как "нормальные языки" (за исключением perl, который, кажется, работает в обоих направлениях.</p>

<p>определение "языка сценариев" довольно размыто. я бы основал это на следующих соображениях:</p><ol> <li> <p>языки сценариев обычно не имеют видимых пользователю шагов компиляции. обычно пользователь может просто запускать программы одной простой командой.</p> </li> <li> <p>программы на языках сценариев обычно передаются в исходном виде.</p> </li> <li> <p>языки сценариев обычно имеют среды выполнения, которые присутствуют в большом количестве систем, и среды выполнения могут быть легко установлены в большинстве систем.</p> </li> <li> <p>языки сценариев, как правило, кроссплатформенные и не зависят от конкретной машины.</p> </li> <li> <p>языки сценариев позволяют легко вызывать другие программы и взаимодействовать с операционной системой.</p> </li> <li> <p>языки сценариев обычно легко встраиваются в большие системы, написанные на более традиционных языках программирования.</p> </li> <li> <p>языки сценариев обычно разрабатываются для простоты программирования и с гораздо меньшим вниманием к скорости выполнения. (если вам нужно быстрое выполнение, обычный совет - кодировать трудоемкие части во что-то вроде c и либо встраивать язык в c, либо вызывать c-биты из языка.)</p> </li> </ol><p>некоторые из характеристик, которые я перечислил выше, верны для реализаций, и в этом случае я имею в виду более общие реализации. были интерпретаторы c, с (afaik) нет очевидного шага компиляции, но это не верно для большинства реализаций c. вы, конечно, можете скомпилировать программу на perl в нативный код, но это не так, как обычно. некоторые другие характеристики носят социальный характер. некоторые из вышеуказанных критериев частично совпадают. как я уже сказал, определение нечеткое.</p>

<p>я предпочитаю, чтобы люди не использовали термин "язык сценариев", так как я думаю, что это уменьшает усилия. возьмите такой язык, как perl, часто называемый "язык сценариев".</p><ul> <li>perl - это язык программирования!</li> <li>perl скомпилирован как java и c++. это просто скомпилировано намного быстрее!</li> <li>в perl есть объекты, пространства имен и замыкания.</li> <li>в perl есть ide, отладчики и профилировщики.</li> <li>perl имеет обучение и поддержку и сообщество.</li> <li>perl - это не просто веб. perl не просто системный администратор. perl - это не просто клейкая лента интернета.</li> </ul><p>почему нам даже нужно различать язык, подобный java, который компилируется, и ruby, который не является? какова ценность в маркировке?</p><p>подробнее об этом см. <a href="http://xoa.petdance.com/stop\_saying\_script">http://xoa.petdance.com/stop\_saying\_script</a> .</p>

<p>язык сценариев - это язык, который настраивает или расширяет существующую программу.<br> язык сценариев - это язык программирования.</p>

<p>важным отличием является <a href="http://en.wikipedia.org/wiki/strongly\_typed\_programming\_language">строгая типизация</a> (против <a href="http://en.wikipedia.org/wiki/weak\_typing">слабая типизация</a> ). <strong> языки сценариев часто слабо типизированы </strong>, что позволяет быстрее писать небольшие программы. для больших программ это является недостатком, так как он запрещает компилятору/интерпретатору находить определенные ошибки автономно, что затрудняет рефакторинг кода.</p>

<p>языки сценариев - это языки программирования, где программы обычно доставляются конечным пользователям в читаемой текстовой форме и где есть программа, которая может <em>очевидно</em> выполнять эту программу напрямую. (программа вполне может скомпилировать сценарий внутренне; здесь это не имеет значения, поскольку оно невидимо для пользователя.)</p><p>для языков сценариев относительно характерно иметь возможность поддерживать интерактивный сеанс, где пользователи могут просто ввести свою программу и сразу же запустить ее. это потому, что это тривиальное продолжение основного требования из первого абзаца; основным дополнительным требованием является добавление механизма, позволяющего выяснить, когда введенный оператор завершен, чтобы его можно было отправить в механизм выполнения.</p>

<p>для немного другого взгляда на вопрос. язык сценариев - это язык программирования, но язык программирования не обязательно является языком сценариев. язык сценариев используется для управления или создания сценариев системы. эта система может быть операционной системой, в которой язык сценариев будет bash. система может быть веб-сервером с php языком сценариев. языки сценариев предназначены для заполнения определенной ниши; они являются предметно-ориентированными языками. интерактивные системы интерпретируют скриптовые языки, что порождает представление о том, что скриптовые языки интерпретируются; однако это является следствием системы, а не самого языка сценариев.</p>

<p>язык сценариев - это язык, который интерпретируется каждый раз при запуске сценария, он подразумевает наличие переводчика, и большинство из них очень удобочитаемо для человека, поэтому язык сценариев удобен в изучении и использовании.</p><p>каждый компилируемый язык может быть превращен в язык сценариев, и наоборот, все зависит от реализации интерпретатора или компилятора, так как в примере c++ имеет интерпретатор, поэтому его можно назвать языком сценариев, если он используется так (не очень практично в целом, как c++). это очень сложный язык), одним из самых полезных языков сценариев в настоящее время является python ...</p><p>таким образом, чтобы ответить на ваш вопрос, определение заключается в использовании интерпретатора для запуска быстрых и простых программ со сценариями, для решения простых задач или создания прототипов приложений. самое мощное использование языков сценариев - это возможность для каждого использования расширять составленное приложение.</p>

<p>я всегда смотрел на языки сценариев как на средство общения с каким-либо приложением или программой. напротив, язык, который компилируется, фактически создает саму программу.</p><p>теперь имейте в виду, что язык сценариев обычно добавляет или изменяет программу, которая была изначально создана с использованием языка, который был скомпилирован. таким образом, это, безусловно, может быть частью более широкой картины, но исходные двоичные файлы сначала создаются с помощью компилируемого языка.</p><p>поэтому я мог бы создать язык сценариев, который позволит пользователям выполнять различные действия или настраивать мою программу. моя программа будет интерпретировать скриптовый код и, в свою очередь, вызывать какую-то функцию. это просто базовый пример. это просто дает вам возможность динамически вызывать подпрограммы в программе.</p><p>моя программа должна была бы проанализировать скриптовый код (вы могли бы называть их командами) и выполнить любое действие в реальном времени.</p><p>я вижу, что на этот вопрос уже отвечали несколько раз, но я думал, что добавлю свой взгляд на вещи в смесь. конечно, некоторые люди могут не согласиться с этим ответом, но такой способ мышления всегда помогал мне.</p>

<p>скрипт <em> </em> - относительно <em> небольшая </em> программа. <em> система </em> - это относительно <em> большая </em> программа или <em> коллекция </em> относительно больших программы.</p><p>некоторые языки программирования имеют функции, которые разработчик языка и сообщество программистов считают полезными при написании относительно небольших программ. эти языки программирования известны как <em> скриптовые языки </em>, например php.</p><p>точно так же другие языки программирования разработаны с функциями, которые разработчик языка и сообщество программистов считают полезными при написании относительно больших программ. эти языки программирования известны как <em> системные языки </em>, например джава.</p><p>теперь маленькие и большие программы можно писать на любом языке. небольшая программа java представляет собой скрипт. например, программа java "hello world" - это сценарий, а не система. большая программа или набор программ, написанных на php, является системой. например, facebook, написанный на php, это система, а не скрипт.</p><p>рассматривать возможность использования одного языка как "лакмусовой бумажки" для принятия решения о том, является ли язык наиболее подходящим для сценариев или системного программирования, сомнительно. например, сценарии <em> могут </em> быть скомпилированы в байт-код или машинный код, или они <em> могут </em> быть выполнены с помощью дерева абстрактного синтаксиса (ast) ) интерпретация.</p><p>итак, <strong>язык является языком сценариев, если он обычно используется для написания сценариев</strong>. язык сценариев может использоваться для написания систем, но такие приложения, вероятно, будут считаться сомнительными.</p>

<p>наиболее известное эссе, написанное на эту тему заслуживающим внимания источником, которое я знаю, называется <a href="https://en.wikipedia.org/wiki/ousterhout%27s\_dichotomy">дихотомия оустерхаута</a> . он подвергается резкой критике как довольно произвольный и часто в шутку называется ложной дихотомией оустерхаута. это, как говорится в дискуссии на эту тему, заслуживает цитирования.</p><p>я лично согласен с тем, что это ложная дихотомия, и я бы не стал доверять никому, отвечающему на этот вопрос, который предлагает иметь твердые свойства относительно того, что определяет язык сценариев. комментарии типа "язык сценариев должен быть динамически типизирован" являются ложными, а комментарии типа "языки сценариев должны интерпретироваться" даже не имеют смысла, потому что вопреки распространенному мнению, компиляция и интерпретация вообще не являются свойством языка.</p><p>есть много свойств, которые люди упомянули выше как приблизительно совпадающие языки сценариев, к счастью, большинство из них правильно объясняют, что этот термин не имеет строгого определения. поэтому я не буду дублировать мои идеи о том, что они здесь. по моему опыту, люди считают, что язык является языком сценариев, если они могут легко написать в них несколько быстрых одноразовых программ без особого труда. я в основном отвечаю, чтобы дать вам цитату оустерхаута, которого я здесь не вижу.</p>

<p>если это не так /<i>не будет</i> запустить на процессоре, это сценарий для меня. если интерпретатор должен работать на цп ниже программы, то это скрипт и язык сценариев.</p><p>нет причин усложнять это?</p><p>конечно, в большинстве (99%) случаев ясно, является ли язык скриптовым. но учтите, что vm может эмулировать, например, набор команд x86. разве это не делает байт-код x86 языком сценариев при запуске на виртуальной машине? что, если бы кто-то написал компилятор, который превратил бы код perl в собственный исполняемый файл? в этом случае я бы не знал, как назвать сам язык. это будет иметь значение, а не язык.</p><p>с другой стороны, я не знаю ничего подобного, так что сейчас мне все еще удобно называть языки сценариев для интерпретируемых языков.</p>

<p>язык сценариев - это язык программирования, который используется для управления, настройки и автоматизации возможностей существующей системы. в таких системах полезные функциональные возможности уже доступны через пользовательский интерфейс, и язык сценариев представляет собой механизм для предоставления этой функциональности программному управлению. таким образом, существующая система, как говорят, предоставляет хост-среду объектов и средств, которая дополняет возможности языка сценариев. язык сценариев предназначен для использования как профессиональными, так и непрофессиональными программистами.</p><p>ссылка</p><p> <a href="http://www.ecma-international.org/publications/files/ecma-st/ecma-262.pdf">http://www.ecma-international.org/publications/files/ecma-st/ecma-262.pdf</a> </p>

<p>просто кратко</p><p>языки сценариев работают внутри другой программы. языки сценариев не компилируются. языки сценариев просты в использовании и написании. но …</p><p>очень популярные языки программирования (java, c #) запускаются внутри "родительской" программы - как языки сценариев. языки сценариев сегодня используются для создания сложного программного обеспечения. в наши дни компьютеры настолько быстры, а языки сценариев настолько эффективны, что для большинства бизнес-операций нет практического преимущества в скорости (которое когда-то было) с скомпилированным языком программирования.</p>

<p>кроме того, вы можете проверить <a href="http://www.se-radio.net/podcast/2006-02/episode-4-scripting-languages">этот подкаст на языках сценариев</a> .</p>