2009-11-08 5 views
2

Я только недавно осознал разницу между статической и динамической типизацией, начав с C++ и перейдя в Python и JavaScript. Я не понимаю, как динамически типизированный язык (например, Python) можно реализовать поверх статически типизированного языка (например, C). Кажется, я помню, как однажды читал что-то о указателях пустоты, но я действительно не понял.Как динамически типизированный язык реализован поверх статически типизированного языка?

+0

Вас интересует C++ или любой статически типизированный язык? Существуют некоторые реализации .NET для C#. –

ответ

4

Каждая переменная в языке DT представлена ​​как структура {типа, значение}, где значение является объединением/другой структура/указатель и т.д.

В C++ вы можете получить аналогичный («похож») результат, если вы, например, создаете базовый абстрактный класс MyVariable и выведенный MyInt, MyString и т. д. Вы можете, с некоторой дополнительной работой, использовать эти вары, как в динамически типизированном языке. (Я не очень хорошо знаю C++, но думаю, вам нужно будет использовать функции операторов друзей, чтобы изменить тип переменных во время выполнения или, может быть, нет, что угодно)

Этот результат архивирован тем же, информация о типе времени выполнения, которые strores данные фактического типа в объекте

Я не буду рекомендовать его, хотя :)

3

в принципе, каждая «переменная» вашей динамически типизированный язык представлен структурой в статически который является типом данных, являющимся одним из полей. Операции над этими динамическими типами данных (добавление, вычитание, сравнение) обычно реализуются с помощью virtual method table, который для каждого типа данных представляет собой ряд указателей на функции, которые реализуют желаемые функциональные возможности по типу.

1

Это не так. Динамически типизированный язык реализуется поверх архитектуры ЦП. Пока архитектура процессора полностью завершена, вы можете реализовать на ней статический язык или динамический язык или что-то подобное, например CLR/DLR .NET. Важно то, что полнота архитектуры Тьюринга в архитектуре процессора - это то, что включает или отключает вещи, а не статическую природу языка программирования, такого как C или C++.

В общем, языки программирования поддерживают полноту Тьюринга, и поэтому вы можете реализовать что угодно на любом языке программирования. Конечно, некоторые вещи проще, если базовые инструменты поддерживают его, поэтому непросто реализовать приложение, основанное на динамическом подкреплении, на C или C++. Вот почему люди прикладывают усилия к созданию динамической системы, которая программируется, например, Python, так что вы можете реализовать динамическую систему один раз и страдать от лишних усилий только один раз, а затем повторно использовать ее на динамическом языковом уровне.

+0

Полнота Тьюринга НЕ означает «может реализовать что угодно». вы не можете реализовать AI, например –

+0

Полнота Тьюринга - не волшебство. Для всего, что вы пытаетесь реализовать, вам нужно подумать о том, как вы собираетесь это делать. –

Смежные вопросы