Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Методы взаимодействия [ править ]

Объектные модели [ править ]

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

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

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

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

Проблемы [ править ]

Различия в объектных моделях [ править ]

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

Модели памяти [ править ]

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

Изменчивость [ править ]

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

См. Также [ править ]

Ссылки [ править ]

  1. ^ a b Мэлоун, Тодд (2014). «Совместимость языков программирования». CiteSeerX  10.1.1.684.337 . Цитировать журнал требует |journal=( помощь )
  2. ^ «Межъязыковая совместимость» . Сеть разработчиков Microsoft (msdn.microsoft.com). CS1 maint: обескураженный параметр ( ссылка )
  3. ^ Chisnall, Дэвид (2013-10-01). «Проблема межъязыкового взаимодействия» . Очередь . 11 (10): 20–28. DOI : 10.1145 / 2542661.2543971 . ISSN 1542-7730 .