Различия статические и динамический язык весьма неоднозначны, поскольку могут ссылаться на множество различных (более или менее подходящих) критериев. Я постараюсь ответить для каждого случая:
Интерпретация / Компиляция
Это зависит не от самого языка, а от используемой реализации. Поэтому языки могут выполняться как через интерпретатор, так и через компилятор. Примеры
- Haskell (GHC / GHCI / Hugs)
- C ++ (G ++ / Ch)
- F #
Некоторые скомпилированные языки также имеют возможность компилировать свой код во время выполнения (.NET).
Статическая / Динамическая печать
Статическая и динамическая типизация (утка) могут быть объединены на одном языке. См. C # dynamic
, VB с Параметр Явный / Строгое выключено или Boo . Структурная типизация может использоваться для формулирования строгой типизации без явной иерархии типов. Полиморфные базовые типы (System.Object
) также поддерживают некоторое динамическое поведение, хотя тип задан статически.
мета-конструкции (например, Reflection, генерирование типа среды выполнения)
Доступны также в Java и .NET.
Функциональные методы (например, функции высшего порядка, продолжения)
Может быть воспроизведено и в статически типизированных языках. См. Хаскелл или Скала.