Диалект или новый язык?

66 views
Skip to first unread message

Sergey Dimchenko

unread,
Apr 5, 2009, 12:28:43 AM4/5/09
to progopedia.ru
Есть такой вопрос, что считать отдельным языком программирования, а
что - диалектом?
Можно ли по каким-то формальным критериям отличать одно от другого?

Например, Object Pascal (Delphi) вроде как диалект паскаля, но отличия
от паскаля примерно такие, как отличия C++ от C, а это отдельные
языки...

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

Crosspath

unread,
Apr 7, 2009, 11:48:10 AM4/7/09
to progopedia.ru
Согласно определению из википедии:
Диалект является полноценной системой речевого общения (устной или
знаковой, но не обязательно письменной) со своими собственными
словарём и грамматикой.
Так, появление ключевых слов и правил синтаксиса - это новый диалект.
-
Диалект считается языком, если его синтаксис и семантика
самостоятельны, независимы от языка-родителя (если есть такой).
Подумаю еще и продолжу.
По поводу си и си плюс плюс: до 1999 года они были совместимы. После -
нет.

Crosspath

unread,
Apr 9, 2009, 5:10:56 AM4/9/09
to progopedia.ru
Диалект считается языком, если имеет официальный статус, закрепленный
законом. В нашем случае Ада является языком, а Free Pascal - диалект.
У Ады есть стандарт (ISO или ANSI), у Free Pascal такого нет.
~~~
Обобщим:
1. Если язык/диалект расширен ключевыми словами, возможностями,
правилами синтаксиса, то это еще только диалект. Требуется уточнить,
является ли это языком.
2. Диалект является языком, если выполняется хотя бы одно из следующих
условий:
а) он не поддерживает изменения и дополнения, вносимые в язык-
прародитель;
б) он имеет международный стандарт, ANSI или ISO.
~~~
Возможны дополнения к этим признакам.
~~~
Так, Object Pascal (Borland) & Object Pascal (Apple) & Delphi должны
быть вынесены в язык Object Pascal. Это связано с тем, что Object
Pascal Борланда не является расширением Паскаля (хотя именно так
считают многие), еще во времена Турбо Паскаля компания Борланд не
соблюдала стандарты Паскаля. По сути, (а вот это уже все признают) эта
компания сама задала стандарт, поэтому Делфи стал языком одной
системы, одной компании.
Еще в ту же категорию можно Delphi Prism отнести (но я не уверен).

Sergey Dimchenko

unread,
May 11, 2009, 8:06:15 PM5/11/09
to progopedia.ru
В общем, все довольно логично.
Но все-таки однозначную четкую границу для всех языков не получится
провести.
Например, у языка Scheme есть официальный стандарт, но он считается
диалектом Lisp. В общем, как посмотреть.
С Бейсиками вообще запутаешься.
Лучше, наверное, на особо зацикливаться за этих различиях и в каждом
конкретном случае делать, как удобнее. Всегда можно исправить, если
что.

Например, если Object Pascal вынести в отдельный язык, то Turbo Pascal
5.0 будет как бы реализацией двух языков: просто Pascal и Object
Pascal, что неудобно.
И описание элементов синтаксиса будет практически дублироваться.

Опять же, по условию "он не поддерживает изменения и дополнения,
вносимые в язык-прародитель", получится куча бейсиков в качестве
самостоятельных языков.

И как быть с Lisp, Common Lisp и Scheme - непонятно. На Common Lisp и
Scheme есть стандарты, и языки достаточно различны, чтобы не считать
их диалектами. Но что тогда такое Lisp до стандартизации? Получится
три языка, просто Lisp, Common Lisp и Scheme, что некрасиво... А есть
еще Emacs Lisp, Autocad Lisp, которые довольно сильно отличаются.

Можно вообще структуру хранения информации переделать, если она не
подходит.

Crosspath

unread,
May 12, 2009, 4:17:03 AM5/12/09
to progopedia.ru
В таком случае, наиболее простой вариант иерархии:
{язык: {реализация} }
То есть для каждого языка возможна реализация, причем может быть много
реализаций. И так для множества языков.
Таким образом, игнорируем существование диалектов.
Не знаю насчет всех бэйсиков, но версии вб точно можно расположить по
ветвям реализаций. А QuickBasic / QBasic и VisualBasic считать разными
языками.

Crosspath

unread,
May 12, 2009, 5:40:30 AM5/12/09
to progopedia.ru
Ах да, а связывать родственные языки или те, которые считаются очень
близкими, диалектами, можно по принципу
РодственныеЯзыки = { язык }
Для Scheme:
Lisp, Algol, Common Lisp
И на каждое название - ссылка на страницу языка. То есть простой
список с ссылками.
~
Видимо, так надо связывать страницы по принципу 'много-ко-многим', и
использовать таблицу-связку в базе данных.

kemiisto

unread,
May 23, 2009, 7:55:11 AM5/23/09
to progopedia.ru
Всем привет!

Подумал на досуге - я тоже не против, чтоб убрать диалекты. Чёрт ногу
сломит и то не определит, что есть язык, а что диалект. =)

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

Думалось ещё, что можно группировать языки по принципы принадлежности
к определённому сеймейству. Для примеру,
- Oberon-семейство (Active Oberon, Component Pascal, Oberon, ...)
- Prolog-семейство (Prolog, Mercury, Oz, ...)
- LISP-семейство (LISP, Scheme, AutoLISP, ...)
- ML-семейство (SML, OCaml, F#, ...)
- Haskell-семейство (Haskell-98, O'Haskell, Haskell++, Mondrian, ...)

Тоже не выход. Но очень похоже на то, что предложил Crosspath чуть
выше (РодственныеЯзыки).

Подход с диалектами наиболее явным образом демонстрирует свою
непригодность на языках, у которых (исторически) несколько стандартов:
Ada (диалекты: Ada 2005, Ada 83, Ada 95)
C# (диалекты: ECMA-334, ISO/IEC 23270:2003)
FORTRAN (диалекты: FORTRAN 66, FORTRAN 77, Fortran 2003, Fortran
2008, Fortran 90, Fortran 95, High Performance Fortran)

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

P.S. С C# вообще надо срочно что-то делать. Там, простите, бред
полнейший.

Crosspath

unread,
May 23, 2009, 11:05:17 AM5/23/09
to progopedia.ru
Простите (не знаю, заметил ли кто?), что связал Scheme с Алголом; не
родственны они.
---
Семейство языков - это было бы хорошо. К какому семейству отнести Яву?
С. З. Свердлов в книге о языках и трансляторах предлагает считать, что
на Яву напрямую повлиял Си++ и в меньшей степени - Оберон (1). Эти два
языка очевидно имеют разные семейства.
Кстати, хорошо было бы в real-time строить подобную схему влияния и
развития языков, как в этой книге на странице 23 (2007 год выпуска,
издательство Питер).
---
В предложенной схеме 'реализация' - это не только название
компилятора, но и его версия. На примере Делфи: затрудняемся выявить
отличия между Delphi language и Object Pascal language, а с каждой
новой версией IDE язык становится всё больше, фактически - каждая
новая версия является диалектом.
Отсюда возникает вопрос. Если обьединить Delphi и Object Pascal как
один и тот же язык разных версий, то что делать с Turbo Pascal?
Reply all
Reply to author
Forward
0 new messages