Кто-нибудь знает какие-нибудь статически типизированные скриптовые языки?[закрыто]
-
23-08-2019 - |
Вопрос
Я собираюсь запустить дистрибутив Linux на базе LFS просто для хобби-проекта.Я планирую выполнить несколько весьма нестандартных задач, большая часть которых будет заключаться в изменении практически всех скриптов в дистрибутиве.(в основном сценарии инициализации, но я также напишу простой набор сценариев диспетчера пакетов.) Поскольку я собираюсь отойти от нормы и поскольку я никогда не был поклонником языков с динамической типизацией (perl, python, bash и остальные хороши, но это не моя сильная сторона), мне было интересно, знает ли кто-нибудь об интерпретируемом языке, в котором действительно есть объявленные переменные.
Решение
Посмотрите на команду «typeset» в вашей любимой оболочке.bash и ksh93 могут применять целые числа и строки, использовать ссылки (переменные переменные) и т. д.С помощью ksh93 вы также можете выполнять математические операции с плавающей запятой и использовать объекты с атрибутами.Статическая типизация на самом деле не принесет вам ничего полезного в сценариях инициализации и тому подобном.В первую очередь вам придется читать файлы и выполнять системные команды — в этом оболочка действительно хороша.Потратьте некоторое время на книгу О'Рейли «Изучение Korn Shell», прежде чем решить, что все остальные Unix-системы спроектированы глупо...;)
Другие советы
Обычно статически типизированные языки являются компилируемыми языками.Я думаю, причина в том, что статический анализ типов довольно дорог, и вам нужно глубоко изучить весь код, который вы обрабатываете.После того, как вы это сделаете, кажется пустой тратой не записать всю эту информацию в файл, чтобы вам не пришлось делать это снова в следующий раз.Таким образом, вы быстро получите компилируемый язык.
С другой стороны, превратить скомпилированный язык в «нескомпилированный» довольно легко.Вы просто никуда не сохраняете результаты компиляции, а выполняете их напрямую.Один известный мне компилятор, предоставляющий такую оболочку, — это GHC, стандарт Хаскелл компилятор.Можете добавить #!/usr/bin/runhaskell
в ваши исходные файлы, а затем напрямую выполнить их.А поскольку вы планируете отклониться от нормы, Haskell кажется идеальным вариантом ;).Но ожидайте довольно большого времени запуска ваших скриптов, потому что весь анализ и оптимизация «время компиляции» не бесплатны.
Haskell не предназначен для написания сценариев оболочки и является функциональным языком, поэтому, если вы никогда не видели его раньше, возможно, потребуется некоторое время, чтобы к нему привыкнуть.Но у него очень мало синтаксических накладных расходов, а сила функциональных языков — в абстракции, поэтому я не понимаю, почему вы не можете создать библиотеку, которая сделает написание сценариев оболочки увлекательным.Есть даже некоторые экспериментальная оболочка Haskell, но это похоже скорее на подтверждение концепции, чем на реальное решение.
В целом я бы сказал, что накладные расходы на весь анализ типов значительны, но я бы посоветовал вам выбрать свой любимый статически типизированный компилируемый язык и поискать оболочку вроде runhaskell
для выполнения написанных в нем скриптов.
быстрый гугл.F3, сценарий javaFX, язык сценариев Linden (сценарии для второй жизни), в отличие от комментария к первому ответу, F# можно использовать в качестве языка сценариев. http://blogs.msdn.com/chrsmith/archive/2008/09/12/scripting-in-f.aspx
Felix, Tuga, CFGScript, Talc, Angelscript и, думаю, это нечто большее, чем просто быстрый поиск.
Дуглас
Ф# обеспечивает сочетание «типовой безопасности, краткости, производительности, выразительности и сценариев».
Круто.По умолчанию он динамический, с утиным типом.Но также поддерживает статическую типизацию.