Что представляет собой «модель семанти c», представленная в Апокалипсисе №1? - PullRequest
7 голосов
/ 10 июля 2020

В Апокалипсис # 1 Ларри написал, с моим добавленным акцентом :

Raku будет поддерживать несколько синтаксисов, которые соответствуют одному семанти. c модель . Во-вторых, эта модель single semanti c, в свою очередь, будет отображаться на нескольких платформах.

У меня есть некоторые смутные представления о том, что мог иметь в виду Ларри, когда писал «single semanti c model»:

  • Полный язык / автомат Тьюринга; и / или

  • Что стало 6моделью; и / или

  • Что стало NQP / nqp.

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

Возможно, более важным, чем ответ на то, о чем он думал, тогда является то, что произошло.

Его формулировка определенно звучит многообещающе. как это могло бы соответствовать NQP и / или nqp (в середине архитектуры бэкэндов Raku / NQP / nqp / NQP).

(Если так, предположительно эта модель "указана" по эквиваленту nqp для жаркого Раку?)

Или, согласно Liz ++, QAST или RAST?

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

1 Ответ

14 голосов
/ 10 июля 2020

Апокалипсис № 1 представляет собой одно из самых ранних размышлений Ларри о процессе, который привел нас к языку Раку, который мы знаем сегодня. Я не был так рано в процессе разработки языка, поэтому любой ответ, который я дам, естественно, будет включать попытку вообразить то, что было известно в тот момент. С этим довольно важным предостережением давайте посмотрим.

Синтаксис связан с написанными нами словами и символами. Семантика - это то, что означают вещи. Например, предположим, что мы находимся на языке, в котором есть такая вещь, как инфиксные операторы, и есть оператор с записью +. Мы могли бы написать выражение a + b. Семантика говорит нам, что это значит. Хотя многие языки программирования имеют этот синтаксис, они сильно различаются по семантике, то есть по значению, связанной с ним. Например:

  • В C это зависит от типов a и b. Это может означать какое-то сложение чисел c (с целым набором правил, основанных на целых числах, целочисленных рангах, с плавающей запятой и т. Д. c.). Однако, если a - указатель, а b - целое число, на самом деле там тоже происходит скрытое умножение в зависимости от размера указателя.
  • В C ++ см. Определения из C , но также это может быть вызов функции для перегрузки оператора и / или любой из этих семантик, но полученный после применения правил преобразования к операндам. Пожалуйста, не спрашивайте меня, что это за правила.
  • В Java это также идет по типу; это может означать сложение numeri c или конкатенацию строк.
  • В JavaScript это может быть добавление numeri c или конкатенация строк, но это решается во время выполнения в соответствии с правилами. Нет, не спрашивайте меня и об этих.
  • В Raku это вызов функции infix:<+>, и это означает то, что стандартная библиотека решает, это означает.

Чтобы Мне кажется, что модель semanti c - это систематический c способ описания семантики. Это может быть одно или несколько из:

  • Написанная (на естественном языке) спецификация, которая пытается описать, что должны делать
  • Исполняемая спецификация, которая пытается описать, что что-то делает ( например, Raku spectests)
  • Выражение семантики с использованием математического формализма, такого как операционная семантика или денотационная семантика. c модель)
  • Компилятор, переводящий на какой-то другой язык (опять же, мы опираемся на семанти c модель целевого языка)

Как мы уже наблюдали что синтаксис a + b может отображаться на множество различных семантик на разных языках, мы также можем иметь много синтаксисов, отображаемых на один и тот же набор семантик. Это верно даже для стандартного раку; нет semanti c разницы между написанием $a + $b и infix:<+>($a, $b).

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

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

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

Я думаю, мы можем рассматривать это как предвидение таких функций, как определяемые пользователем операторы и жаргонные выражения.

В некоторой степени у нас уже есть мультисинтаксическая модель в Perl 5; Каждый раз, когда вы используете прагму или модуль, вы искажаете язык, который используете.

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

Если из объявлений в верхней части модуля ясно, какую версию языка вы используете, это вызывает небольшие проблемы.

Это означает, что языковые мутации носят ограниченный характер. В итоге они оказались в лексической области видимости, а не только в области видимости файла. Это не совсем удивительно; Полезность лексической области видимости, похоже, все больше осознается в процессе проектирования.

Особенно ярким примером того, как поддержка нескольких синтаксисов позволит продолжить развитие, является переход от Perl 5 к Perl 6 собственно.

Это указывает на то, что в то время считалось, что Perl 5 и Perl 6 (теперь Раку) будут иметь достаточно общего, чтобы иметь общее семанти c модель и запускать в той же среде выполнения. Как мы знаем, дела обстояли иначе, однако во время написания Апокалипсиса №1 я могу представить, что это было предположением. Фактически, он, вероятно, оставался таковым довольно долгое время; например, PON IE (проект по попытке запустить Perl 5 поверх виртуальной машины Parrot) продолжался несколько лет спустя.

На самом деле, когда возник дизайн языка, единственное семанти c модель что бы учесть что стало нереально c. По этой причине предпринимались различные попытки перенести функции из Perl 6 в Perl 5. Умное сопоставление - это примерный дочерний элемент для этого, и проблема была вовсе не из-за синтаксиса, а из-за семантики: в Raku вещи всегда знают свой тип, тогда как в Perl 5 скаляр может одновременно содержать строку и числа. c представление, в зависимости от того, как значение использовалось до этого момента. Эта функция была основана на чем-то в модели Raku semanti c, что не имело прямого эквивалента в модели Perl 5 semanti c.

Еще одним интересным моментом является то, что работа RakuAST, которая в настоящее время Текущая версия предоставит объектную модель документа на языке Raku. Мы могли бы рассматривать это как альтернативный синтаксис для Raku, выраженный в виде графа объектов. Учитывая, что это также будет представление, которое интерфейс компилятора использует для кода Raku, мы также можем рассматривать его как своего рода независимый от синтаксиса шлюз к модели Raku semanti c. И когда мы действительно достигнем наличия сленгов, можно ожидать, что они будут реализованы путем выражения семантики, связанной с дополнительным синтаксисом сленга, в виде композиции узлов RakuAST - и, таким образом, в конечном итоге, будут предоставлять новый синтаксис в терминах одного Raku semanti c модель.

...