Как Язык программирования может быть и Со статическим контролем типов и С динамическим контролем типов?

Статически типизированные языки и динамически типизированные языки в принципе походят на противоположные понятия. Однако, как языку может понравиться Objective C, например, быть оба этих вещей сразу? Мне кажется, что Objective C более статичен, чем динамичный. Кто-то может объяснить, как это возможно?

17
задан Brandon Wamboldt 12 May 2014 в 17:06
поделиться

5 ответов

Objective-C сочетает в себе статическую и динамическую типизацию. Простые объекты C имеют статическую типизацию, но объекты Objective-C типизируются динамически. Среда выполнения Objective-C не заботится о типе объекта, пока сообщения, которые вы отправляете своим объектам, распознаются объектом.

0
ответ дан 30 November 2019 в 11:37
поделиться

C - это статически типизированный язык, но он обладает гибкостью для преобразования типов в другие типы и использования универсальных указателей (тип void *). Тип void * означает «указатель на неуказанный тип данных». Objective-C реализует свои динамические типы с помощью этих типов void *, хотя обычно это абстрагируется несколькими уровнями определений, определений типов и т. Д.

1
ответ дан 30 November 2019 в 11:37
поделиться

Я считаю, что вы путаете статическую типизацию и разрешение динамического метода . Objective-C определенно строго статически типизирован. Как и в C, все переменные должны быть объявлены и типизированы (нет даже вывода типа, как в других современных статически типизированных языках). Компилятор генерирует код на основе типа переменных, и этот тип нельзя изменить во время выполнения.

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

28
ответ дан 30 November 2019 в 11:37
поделиться

Если вы спрашиваете о технической возможности поддержки обеих идиом, это не особенно интересный вопрос. Просто посмотрите на большинство современных языков и посмотрите, как они это делают. Обычно это какой-то универсальный динамический тип ( Object в VB, dynamic в C #, void * в C и т. Д.).

На метафизическом / онтологическом уровне этот вопрос гораздо интереснее ...

Теория в физике может предполагать поведение, которое бросает вызов интуиции, заставляя человека задаться вопросом: «Как такое может быть?» Например, дуальность волна-частица выходит за рамки любого здравого смысла представления о том, какой реальность или должна быть реальность, и поэтому она заставляет нас размышлять о невесомом.

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

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

1
ответ дан 30 November 2019 в 11:37
поделиться

Objective-C на самом деле (концептуально) просто слой на самом языке C и, как таковой, может иметь как статические, так и динамические типы.Статический, если вы используете материал base-C, динамический, если вы используете расширения Objective-C.

Но C также вроде как предоставляет эту возможность. Если вы просто подумаете о типе void * в C, вы увидите, что он может указывать на любой тип, что дает вам (очень грубый) язык с динамической типизацией.

Например:

int i;
float f;
double d;
void *p = &i;
p = &f;
p = &d;

Во всех этих присвоениях p выше он указывает на другой тип. Если вы сделаете свой код достаточно умно, вы даже сможете эмулировать RTTI и полиморфизм в C.

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

9
ответ дан 30 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

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