5

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

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

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

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

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

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

+0

UML не является «Универсальной моделью для языков», это «Универсальный язык для моделирования». Разработчику по-прежнему приходится превращать модели в программу (или вытеснять их, если инструмент UML генерирует код). –

ответ

3

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

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

+0

Это похоже на лучшее из 7 ответов. И уныние, как и большинство других, - огромные последствия в моем просмотре связанной статьи. – Smandoli

+0

У меня есть this книги, сидя у себя дома. Он старый и немного устаревший, но он кажется немного менее страшным, чем бумаги там. Он подробно описывает конкретные примеры языков. Например, полный перевод (подмножество) Prolog на Algol-68, иллюстрирующий, как Algol-68 можно использовать в качестве универсального языка для представления любого другого. – sigfpe

0

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

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

+0

«уже есть определенный набор требуемых частей» - я полагаю, что я ищу дополнительную информацию об этом бите. – Smandoli

+0

Чтобы отвлечься от ответа Ромен Хеппе о полной полноте обучения, это казалось бы самым примитивным, нам нужно, если, goto и распределение памяти. Более продвинутые функции, такие как функции, циклы и типы данных, основаны на трех основных идеях. – aepheus

4

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

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

+0

Мне очень хотелось бы иметь такую ​​большую перспективу. Я рад узнать больше о том, как маленькая моя. Что касается SQL, это еще один пример того, как термин «язык» неадекватен или неоднозначен (по крайней мере, используется мной). Мне нужен богатый словарный запас. – Smandoli

+0

Спасибо за ссылку UNCOL. Это попытка универсального решения, а не модель. Википедия: «UNCOL была амбициозной попыткой в ​​начале 1960-х годов. Попытка решить проблему написания компилятора в конечном итоге потерпела неудачу, поскольку язык и технология компилятора еще не были зрелыми. «Итак ... что изменилось? Если есть больше зрелости, это не привело к меньшему разнообразию. – Smandoli

0

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

+0

Это должно быть чей-то дипломный тезис, не так ли? – Smandoli

+1

@Smandoli, это, наверное, * много * выпускников диссертаций! – tloflin

+1

Ну, пока результат - это то, что может сыграть достойную игру. – Smandoli

0

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

0

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