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

StackOverflow https://stackoverflow.com/questions/2329460

Вопрос

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

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

Это было полезно?

Решение

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

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

  1. Компилятор схемы Гамбита, Схема Chez, Компилятор схемы воровства Уилла Клингера, Биглу Компилятор схемы и, вероятно, многие другие.

    Почему?

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

  2. Компилятор LuaJIT just-in-time для Lua.

    Почему?

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

  3. Тот Самый iconc Значок-компилятор на-C.

    Почему?

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

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

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

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

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

    Почему?

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

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

    Почему?

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

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

    Почему?

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

  4. UCSD Pascal - система, которая сделала "P-code" словом нарицательным.

    Почему?

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

    На случай, если вам интересно, P означало портативный.

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

Другие советы

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

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

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

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

Python — динамический язык, имеющий компиляторы.

Видеть этот ТАКОЙ вопрос - Python - why compile?, например.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top