Какие языки с динамическим контролем типов и скомпилированы (и которые со статическим контролем типов и интерпретируются)?

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

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

37
задан Suraj Jain 12 January 2017 в 16:59
поделиться

5 ответов

Вот список нескольких интересных систем. Это не исчерпывающий!

Динамически типизированный и компилированный

  1. Компилятор схемы Gambit, Chez Scheme , компилятор схемы Уилла Клингера Larceny Scheme, компилятор схемы Bigloo и, возможно, многие другие.

    Почему?

    Многим действительно нравится Scheme. Программы как данные, хорошая макросистема, 35 лет разработки, большое сообщество. Но им нужна производительность. Следовательно, существует ряд хороших компиляторов машинного кода - Chez Scheme - даже успешный коммерческий продукт (интерпретируемые байт-коды бесплатны; собственные коды вы платите).

  2. Оперативный компилятор LuaJIT для Lua .

    Почему?

    Чтобы показать, что это возможно. А потом людям понравилось трехкратное ускорение их программ Lua. Lua присутствует во многих играх, где производительность имеет значение, плюс он проникает и в другие продукты. 70% кода в Adobe Lightroom - это Lua.

  3. Компилятор iconc Icon -to-C.

    Почему?

    Пятьдесят человек, которые использовали его , полюбили Icon. Совершенно необычная оценочная модель, самая инновационная (и, на мой взгляд, лучшая) система обработки строк из когда-либо созданных. Но эта оценочная модель была действительно дорогой, особенно на компьютерах конца 1980-х годов. Компилируя Icon на C, Icon Project позволил запускать большие программы Icon за меньшее количество часов.

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

Статически типизированный и интерпретируемый

Эта категория менее распространена, но ...

  1. Objective Caml . Диалект ML, средство для лотов инновационных экспериментов в языковом дизайне.

    Почему?

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

  2. Москва МЛ. Стандартный ML с некоторыми дополнительными функциями модульной системы.

    Почему?

    Переносимость, быстрая компиляция, простота создания интерактивного цикла чтения / оценки / печати. Стал популярным обучающим компилятором.

  3. C-Terp. Старый продукт, я думаю, может быть от Gimpel Software. Sabre C - продукт, который, я думаю, вы больше не сможете купить.

    Почему?

    Отладка. Особенно отладка на оборудовании 80-х под MS-DOS. При очень небольших ресурсах вы можете получить действительно хорошую помощь в отладке кода C на очень ограниченном оборудовании (подумайте: процессор 4,77 МГц с 8-битной шиной, 640 КБ ОЗУ полностью загружены). Практически невозможно получить хороший визуальный отладчик для кода, скомпилированного в машинном коде, но с интерпретатором это довольно просто.

  4. UCSD Pascal - система, которая сделала «P-код» общеупотребительным словом.

    Почему?

    Учителям нравился дизайн языка Никлауса Вирта, и компилятор мог работать на очень маленьких машинах.Чистый дизайн Вирта и P-система UCSD представляют собой непревзойденную комбинацию, и Паскаль был стандартным языком обучения 1970-х. Молодым людям может быть трудно понять, что в 1970-е годы не было споров о том, какой язык преподавать на первом курсе. Сегодня я знаю программы, использующие C, C ++, Haskell, Java, ML и Scheme. В 1970-х это всегда был Паскаль, и P-система UCSD была большим поводом для этого.

    Если вам интересно, P означает Portable .

Резюме : Интерпретация статически типизированного языка - отличный способ быстро получить реализацию в руки каждого. (Он также имел преимущества для отладки на оборудовании бронзового века.)

36
ответ дан 27 November 2019 в 04:58
поделиться

ActionScript имеет динамическую типизацию и компилируется в байт-код.

И он даже компилируется прямо до машинного кода, если вы хотите выпустить приложение Flash на iPhone.

1
ответ дан 27 November 2019 в 04:58
поделиться

Java (статически типизированный язык) компилируется в байткод JVM, который интерпретировался на старых версиях JVM, тогда как сейчас используется компиляция Just In Time (JIT), то есть машинный код генерируется во время выполнения. Я также считаю, что ML и его диалекты могут быть интерпретируемыми, и ML определенно статически типизирован.

2
ответ дан 27 November 2019 в 04:58
поделиться

Python - это динамический язык с компиляторами.

См. этот вопрос SO - Python - зачем компилировать? , например.

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

0
ответ дан 27 November 2019 в 04:58
поделиться

Objective-C компилируется и поддерживает динамическую типизацию (конечно, при вызове методов через [target doSomething] синтаксис). То есть, вы можете послать любое сообщение цели (используя обычный синтаксис языка, без программирования под API отражения), получить только предупреждение во время компиляции, что оно может быть не обработано, и получить исключение только во время выполнения, если цель не отвечает на этот селектор (который подобен сигнатуре метода); и вы можете спросить любой объект (который может быть статического типа id, если ваш код не знает лучше или не заботится об этом), отвечает ли он respondsToSelector: для проверки его возможностей.

3
ответ дан 27 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

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