Кто-либо знает о каких-либо языках сценариев со статическим контролем типов? [закрытый]

Нет, это не ошибка. Это просто стандартная проблема с внутренним представлением чисел. Итак (в Swift):

var a = 0.15 + 0.15
var b = 0.1 + 0.2
print (a == b) // can be false!
print (a >= b) // can also be false!

var c = 80.138
print(c) // 80.138
print (c - 80.0 - 0.138) // 5.218048215738236e-15

Есть много людей, наблюдающих это «странное» поведение, практически на любом языке программирования. Просто проверьте некоторые веб-сайты, такие как stackoverflow.com:

странный вывод по сравнению с плавающей точкой с литералом float

или с красивыми изображениями:

[ 112] https://bitbashing.io/comparing-floats.html

12
задан Cœur 15 January 2019 в 18:15
поделиться

5 ответов

Загляните к "набранной" команде в Вашей любимой оболочке. удар и ksh93 и могут осуществить целые числа и строки, использовать ссылки (переменные переменные), и т.д. С ksh93 можно также сделать математику с плавающей точкой и использовать объекты с атрибутами. Статический контроль типов действительно не покупает Вас ничто полезное в init сценариях и подобный. Вы, прежде всего, собираетесь быть файлами чтения и рабочими системными командами - который является что оболочка, действительно хорошая в. Не торопитесь с O'Reilly "изучение книги" Shell Korn прежде, чем решить, что все те другие Unixes глупо разработаны... ;)

0
ответ дан 2 December 2019 в 22:06
поделиться

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

С другой стороны, для возвращения скомпилированного языка "не - скомпилированный" каждый довольно легок. Вы просто не храните результаты компиляции нигде, но выполняете их непосредственно. Один компилятор я знаю это, обеспечивает, такая обертка является GHC, стандартом компилятор Haskell. Можно добавить #!/usr/bin/runhaskell к Вашим исходным файлам и затем непосредственно выполняют их. И так как Вы планируете быть далекими норма, Haskell походит на идеальное соответствие ;). Но ожидайте некоторое довольно большое время запуска для своих сценариев, потому что весь анализ "времени компиляции" и оптимизация не являются бесплатными.

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

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

7
ответ дан 2 December 2019 в 22:06
поделиться

F# обеспечивает комбинацию "безопасности типов, сжатой, производительность, expresivity и сценарии".

1
ответ дан 2 December 2019 в 22:06
поделиться

быстрый Google. F3, javaFX сценарий, Язык сценариев липы (пишущий сценарий для второй жизни), В отличие от комментария к первому ответу F# может использоваться в качестве языка сценариев http://blogs.msdn.com/chrsmith/archive/2008/09/12/scripting-in-f.aspx

Felix, Tuga, CFGScript, Тальк, Angelscript, и предполагающий существуют больше, чем тот быстрый поиск.

Douglas

2
ответ дан 2 December 2019 в 22:06
поделиться

Groovy. По умолчанию это динамично, вводится уткой. Но также и статический контроль типов поддержек.

1
ответ дан 2 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: