Совместимость языков

редактировать

Совместимость языков - это способность двух разных языков программирования взаимодействовать как часть одного и того же система. Функциональная совместимость выгодна, потому что языки программирования оптимизированы для конкретных задач, и позволяя им общаться, можно создавать лучшие системы.

Есть много способов взаимодействия языков программирования друг с другом. HTML, CSS и JavaScript - это форма языковой совместимости, поскольку они работают вместе для визуализации веб-страниц. Некоторые объектно-ориентированные языки могут делать это благодаря хостингу виртуальной машины (например, .NET CLI-совместимые языки в Common Language Runtime и JVM-совместимые языки в виртуальной машине Java ). Языки программирования высокого уровня обычно совместимы с некоторыми языками более низкого уровня, примером которых является Apple Swift (язык программирования) и Objective-C.

Содержание
  • 1 Методы взаимодействия
    • 1.1 Объектные модели
    • 1.2 Виртуальные машины (ВМ)
  • 2 Проблемы
    • 2.1 Различия в объектных моделях
    • 2.2 Модели памяти
    • 2.3 Изменчивость
  • 3 См. Также
  • 4 Ссылки
Методы взаимодействия

Объектные модели

Чтобы облегчить взаимодействие между языками, одним из методов является использование объектных моделей. CORBA и COM - самые популярные объектные модели. Эти стандарты предоставляют базовый набор правил того, как объектно-ориентированные языки будут реализовывать свои модели данных, чтобы обеспечить независимый от языка способ реализации объектов, которые могут использоваться в средах, отличных от той, в которой они были созданы.

Виртуальные машины (ВМ)

Различные языки компилируются в общий интерфейс командной строки

Виртуальная машина - это программное обеспечение, которое имитирует операционные системы и действует как буфер между языком и оборудованием. Это позволяет программе работать на любом оборудовании или ОС. Преимущество виртуальных машин в использовании этих систем типов для обеспечения корректности участвующих языков и предоставления языкам общей основы для информации о типах. Еще одно преимущество состоит в том, что языки, разработанные для виртуальных машин, компилируются в промежуточный язык низкого уровня. Затем промежуточный язык проходит через собственный компилятор или интерпретатор, который может выполнять больше типов оптимизации.

Проблемы

Различия в объектной модели

С объектно-ориентированными языками попытайтесь объединить контейнеры данные с кодом, но то, как каждый язык выбирает, как это делать, может немного отличаться. Это дизайнерское решение не всегда легко переносится на другой язык. Примером этого может быть то, как разные языки обрабатывают наследование. Один класс может иметь ноль (Go ), один (Java ) или несколько (C ++ ) суперклассов. Распространенный подход к этой проблеме - определение подмножества языка, которое напрямую сопоставляется с другим, но также может полностью понимать другой язык. Этот подход действительно означает, что для того, чтобы надмножество могло обмениваться данными, ему нужно будет обернуть некоторые из своих интерфейсов в классы, которые могут быть поняты подмножеством.

Модели памяти

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

Изменчивость

Изменчивость становится проблемой при попытке создать взаимодействие между функциональными и объектно-ориентированными языками. Такие языки, как Haskell, не имеют изменяемых типов, тогда как в C ++ есть некоторые конструкции для пометки классов как неизменяемых, но отсутствует поддержка определения, является ли что-то изменяемым или нет. Многие функциональные типы при подключении к объектно-ориентированным языкам не могут гарантировать, что базовые объекты не будут изменены.

См. Также
Ссылки
Последняя правка сделана 2021-05-26 13:09:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте