Я только недавно осознал разницу между статической и динамической типизацией, начав с C++ и перейдя в Python и JavaScript. Я не понимаю, как динамически типизированный язык (например, Python) можно реализовать поверх статически типизированного языка (например, C). Кажется, я помню, как однажды читал что-то о указателях пустоты, но я действительно не понял.Как динамически типизированный язык реализован поверх статически типизированного языка?
ответ
Каждая переменная в языке DT представлена как структура {типа, значение}, где значение является объединением/другой структура/указатель и т.д.
В C++ вы можете получить аналогичный («похож») результат, если вы, например, создаете базовый абстрактный класс MyVariable и выведенный MyInt, MyString и т. д. Вы можете, с некоторой дополнительной работой, использовать эти вары, как в динамически типизированном языке. (Я не очень хорошо знаю C++, но думаю, вам нужно будет использовать функции операторов друзей, чтобы изменить тип переменных во время выполнения или, может быть, нет, что угодно)
Этот результат архивирован тем же, информация о типе времени выполнения, которые strores данные фактического типа в объекте
Я не буду рекомендовать его, хотя :)
в принципе, каждая «переменная» вашей динамически типизированный язык представлен структурой в статически который является типом данных, являющимся одним из полей. Операции над этими динамическими типами данных (добавление, вычитание, сравнение) обычно реализуются с помощью virtual method table, который для каждого типа данных представляет собой ряд указателей на функции, которые реализуют желаемые функциональные возможности по типу.
Это не так. Динамически типизированный язык реализуется поверх архитектуры ЦП. Пока архитектура процессора полностью завершена, вы можете реализовать на ней статический язык или динамический язык или что-то подобное, например CLR/DLR .NET. Важно то, что полнота архитектуры Тьюринга в архитектуре процессора - это то, что включает или отключает вещи, а не статическую природу языка программирования, такого как C или C++.
В общем, языки программирования поддерживают полноту Тьюринга, и поэтому вы можете реализовать что угодно на любом языке программирования. Конечно, некоторые вещи проще, если базовые инструменты поддерживают его, поэтому непросто реализовать приложение, основанное на динамическом подкреплении, на C или C++. Вот почему люди прикладывают усилия к созданию динамической системы, которая программируется, например, Python, так что вы можете реализовать динамическую систему один раз и страдать от лишних усилий только один раз, а затем повторно использовать ее на динамическом языковом уровне.
Полнота Тьюринга НЕ означает «может реализовать что угодно». вы не можете реализовать AI, например –
Полнота Тьюринга - не волшебство. Для всего, что вы пытаетесь реализовать, вам нужно подумать о том, как вы собираетесь это делать. –
- 1. C# Динамически типизированный язык
- 2. Каковы преимущества (и недостатки) слабо типизированного языка?
- 3. Пример динамического типизированного языка с использованием ANTLR
- 4. Статически типизированный язык с чертами и функцией перегрузки?
- 5. Статически типизированный Lua
- 6. Каковы основные аспекты строго типизированного языка?
- 7. Может ли статически типизированный язык поддерживать гетерогенные списки?
- 8. Возможно ли статически типизированный вариант Лиспа?
- 9. статически и динамически прицелы
- 10. Определить типизированный набор данных динамически?
- 11. Есть ли статически типизированный язык, который работает как на JVM, так и на CLR?
- 12. Нужно ли статически вводить тип безопасного языка?
- 13. Статически типизированный динамический поиск для записи
- 14. Сильно типизированный вид и динамически типизированный вид
- 15. Что такое строго типизированный язык?
- 16. C++ создание слабо типизированного парсера языка
- 17. Типизированный или не типизированный ArrayList
- 18. Изучение DLR (как реализовать язык поверх него)
- 19. Динамически типизированный список
- 20. Как плохо типизированный язык знает, как обращаться с разными типами данных?
- 21. Язык простого языка верблюдов - Как получить значение свойства динамически
- 22. В какой форме система типа haskells более полезна, чем система типов другого статически типизированного языка
- 23. Есть ли статически типизированный язык с хорошей поддержкой лямбда для JVM?
- 24. Что означает, что язык статически типизирован?
- 25. Как изменить язык динамически данных
- 26. Язык смены языка nibbles
- 27. Язык смены языка InitializeCulture
- 28. Определение определяемого пользователем языка поверх SQL
- 29. Язык языка PostgreSQL
- 30. Ищете сильный/явно типизированный язык без GIL
Вас интересует C++ или любой статически типизированный язык? Существуют некоторые реализации .NET для C#. –