Почему большинство языков сценариев свободно набираются? - PullRequest
5 голосов
/ 21 ноября 2010

почему большинство языков сценариев свободно набраны? например

JavaScript, Python и т. Д.?

Ответы [ 2 ]

13 голосов
/ 24 ноября 2010

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

Имеется слабая типизация против строгая типизация о том, насколько строго различаются различные типы (то есть, если 1 + "2" дает 3 или ошибку).

И есть динамическая против статическая типизация , что составляет примерно , когда определяется информация о типе - во время или до запуска.

Итак, что такое динамический язык ? Язык, который интерпретируется вместо компилируемого? Конечно, не , так как способ работы языка никогда не является неотъемлемой характеристикой языка, а является чистой деталью реализации. На самом деле, могут быть интерпретаторы и компиляторы для одного и того же языка. Для Haskell есть GHC и GHCi, даже у C есть интерпретатор Ch.

Но тогда, что такое динамические языки? Я хотел бы определить их через то, как с ними работать.

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

Таким образом, если вы напишите

foo = greatFunction(42)
foo.run()

на языке сценариев , вы просто будете предполагать, что есть некоторое greatFunction, принимающее число, которое возвращает некоторый объект, который вы можете run. Вы никак не докажете это для компилятора - без предопределенных типов, без IRunnable .... Это автоматически приведет вас к домену динамического набора .

Но есть вывод типа . Вывод типа означает, что на языке со статической типизацией компилятор автоматически определяет типы для вас. Результирующий код может быть чрезвычайно лаконичным, но все еще статически типизированным. Возьмите для примера

square list = map (\x -> x * x) list

в Хаскеле. Хаскелл заранее выясняет все типы, которые здесь задействованы. У нас list - список чисел, map - некоторая функция, которая применяет некоторую другую функцию к любому элементу списка, и square, которая создает список чисел из другого списка чисел.

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


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

1 голос
/ 22 ноября 2010

Я не совсем понимаю ваш вопрос.Кроме PHP, VBScript, COMMAND.COM и оболочки Unix, я не могу придумать ни одного свободно типизированного языка сценариев.

Некоторые примеры языков сценариев, которые не являются свободно типизированными, - это Python, Ruby,Mondrian, JavaFXScript, PowerShell, Haskell, Scala, ELisp, Scheme, AutoLisp, Io, Ioke, Seph, Groovy, Fantom, Boo, Cobra, Guile, Slate, Smalltalk, Perl,…

...