Динамические языки против статических языков (могут ли эти два быть вместе в одном месте) - PullRequest
3 голосов
/ 26 ноября 2009

языков программирования сгруппированы в 2 основных класса "Динамический" и "Статический". - Это всегда так, когда язык программирования находится в одном из них, а не в обоих, я имею в виду, может ли язык быть динамическим и статичным одновременно?

Ответы [ 5 ]

4 голосов
/ 31 января 2010

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

Интерпретация / Компиляция

Это зависит не от самого языка, а от используемой реализации. Поэтому языки могут выполняться как через интерпретатор, так и через компилятор. Примеры

  • Haskell (GHC / GHCI / Hugs)
  • C ++ (G ++ / Ch)
  • F #

Некоторые скомпилированные языки также имеют возможность компилировать свой код во время выполнения (.NET).

Статическая / Динамическая печать

Статическая и динамическая типизация (утка) могут быть объединены на одном языке. См. C # dynamic, VB с Параметр Явный / Строгое выключено или Boo . Структурная типизация может использоваться для формулирования строгой типизации без явной иерархии типов. Полиморфные базовые типы (System.Object) также поддерживают некоторое динамическое поведение, хотя тип задан статически.

мета-конструкции (например, Reflection, генерирование типа среды выполнения)

Доступны также в Java и .NET.

Функциональные методы (например, функции высшего порядка, продолжения)

Может быть воспроизведено и в статически типизированных языках. См. Хаскелл или Скала.

4 голосов
/ 26 ноября 2009

C # 4.0 - статически типизированный язык, который также поддерживает динамическое разрешение . Ключевое слово dynamic в основном говорит компилятору: пока не беспокойтесь об этом. Если он не может разрешить тип во время выполнения, генерируется исключение.

2 голосов
/ 26 ноября 2009

Objective-C является еще одним примером. Это строгий надмножество C, а C статически типизирован. Но «объективный» материал может быть полностью динамическим (все объекты объявлены как тип id). Компилятор выполняет некоторую статическую проверку типов объектов Objective-C, хотя она ограничена, поскольку многие стандартные методы возвращают id. Например, коллекция NSArray возвращает объекты типа id, поэтому компилятор не может перехватить:

NSMutableArray *a = [NSMutableArray arrayWithObject:@"I am a string"];
NSNumber *n = [a objectAtIndex:0]; //assigning a string to a number!

хотя он может пометить NSNumber *n = @"I am a string" во время компиляции.

1 голос
/ 31 января 2010

Да. Возможно иметь как статическое, так и динамическое вместе.

Если кто-то использует C #, то мы находимся на статической дорожке, и в движении мы используем новый System.linq.Expression tree API в VS 2010 (.NET 4.0). Мы ориентируем наш код на структуру, называемую DLR (Dynamic Language Runtime), уровень выше CLR.

Даже наш код, созданный expression class, может также использоваться другими динамическими языками, такими как IronPython и т. Д.

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

0 голосов
/ 01 декабря 2013

Может ли язык быть динамическим и статичным одновременно?

Динамический и статический относятся ко многим различным вещам довольно расплывчато. В частности, языки могут быть статически или динамически типизированными, что означает, что проверка типов в некоторой степени принудительно выполняется при компиляции или полностью откладывается на время выполнения. Но люди часто называют язык «динамическим», потому что он имеет REPL, поэтому определения и выражения могут оцениваться в интерактивном режиме. Действительно, F # - это язык со статической типизацией, который был признан лучшим динамическим языком в опросе. Динамический также может относиться к способности делать самоанализ / рефлексию.

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

...