Есть ли универсальная модель для языков?

Многие языки программирования имеют общие и даже довольно универсальные функции. Например, если вы сравнили Java, VB6, .NET, PHP, Python, то вы найдете общие функции, такие как управляющие структуры, числовые и строковые манипуляции и т. Д.

Что было сделано для определения этих функций на метаязыковом (или независимом от языка) уровне?

UML предлагает описательную справочную информацию о программном обеспечении во всех аспектах, но реальная сфера деятельности, по-видимому, - процессы обработки данных. Актуален ли UML?

Я не спрашиваю: "Почему у нас нет единого языка, который заменяет нынешнее изобилие". Нам нужно много разных инструментов (по крайней мере, в этот период).

Я не спрашиваю, чтобы все языки соответствовали шаблону - языки ассемблера и компиляции достаточно различны, чтобы сделать это неосуществимым (и некоторые люди называют HTML языком, хотя я бы не стал). Любая попытка будет начинаться с достаточно узкой сферы действия. В соответствии с этим, я не ожидаю, что модель будет охватывать даже небольшой выбор с полной достоверностью.

Тем не менее, я ожидаю, что такую ​​модель можно будет использовать для переноса с одного языка на другой (с ограниченными целями - подумайте о переводе с места).

6 ответов

Решение

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

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

Было много попыток, но ни одна из них не была очень успешной. Самое раннее, о чем я знаю, это UNCOL более 50 лет назад.

Вы дали список языков, которые имеют много общего, потому что они очень похожи - все они процедурные языки с общими корнями и добавлены некоторые OO-расширения, так что это не слишком удивительно. Если вы начинаете смотреть на разные языки, такие как LISP, haskell, erlang, prolog или даже SQL, вы начинаете видеть совершенно разные вещи.

Я думаю, что MOF - универсальный язык. Например, вы можете создавать UML-диаграммы из MOF с помощью UML-метамодели. Если вы сохраните эту информацию метамодели в xmi, вы сможете сохранить любую нужную вам информацию и даже больше, чем на любом языке. Семантика XMI настолько богата, что нет никаких ограничений для ее использования. Если вы сопоставите UML с xmi в верхней части прямой синхронизации метамодели с MOF, то для меня это универсальный язык.

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

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

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

Автор Pattern Calculus, кажется, предлагает такую ​​универсальную модель. Я ожидаю, что это окажется столь же полезным, как и предыдущие попытки определить универсальную модель, то есть, хорошую по частям, но не последнее слово.

Другие вопросы по тегам