OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 12:36 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
В связи с оживлённой дискуссией в соседней теме viewtopic.php?f=30&t=6344&start=180#p115095

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

Краткое содержание предыдущих серий:

есть множество языков, которые прекрасно живут без точки с запятой. Однако некоторые, такие как JavaScript - не прекрасно. Помимо упомянутых в теме про Ofront, я наутро вспомнил ещё Transact-SQL. Там нет точек с запятой и конец строки тоже не имеет значения, но там любое предписание (предложение, statement) начинается с ключевого слова, в том числе и присваивание. Это облегчает задачу разбора текста, даже по сравнению с Обероном. Вообще, синтаксис легко читается, когда для его чтения не нужен глубокий стек. Именно поэтому VAR a : array 5 of pointer to array 5 of integer гораздо лучше, чем ... я что-то вообще не могу записать это на Си, редко пишу на этом языке. Как-то так, что ли? int ((*a)[5])[5] (честно скажу, я написал это с помощью компилятора и всё равно не уверен, что правильно).
Код:
#include <stdio.h>

int main()
{
    // array 5 of pointer to array 5 of integer
    int b[5];
    int (*pb)[5];
    int ((*a)[5])[5];
   
    pb = a[0];
    b[0] = (*pb)[0];
    int z = b[0];
   
    return 0;
}


В целом см. картинку.

Вложение:
нос-утконосонос.png
нос-утконосонос.png [ 277.13 КБ | Просмотров: 4884 ]


В Си типы и читаются, и пишутся не с начала, не с конца, а откуда-то из середины. В голове нужно поддерживать довольно сложный парсер, чтобы читать код на Си. Это здорово, когда надо померяться, у кого длиннее извилины в мозгу, но не здорово, когда у нас ремесло и нужно получить результат - работающую программу. И потому новые языки - Go, Rust и Котлин - перешли к паскалевскому стилю определения переменных.

Так вот, с типами в Обероне всё в порядке, но присваивание это всё же десигнатор := выражение, а при том десигнатор может быть каким-то раскудрявым, например,

Код:
MODULE Init;

IMPORT Log;

VAR a: ARRAY 5 OF ARRAY 5 OF INTEGER;

PROCEDURE b():INTEGER;
  BEGIN
   RETURN 1
  END b;

PROCEDURE Do;

BEGIN
 a[3+a[2][2]][0]:=b();
 Log.Int(a[3+b()][0]); Log.Ln;
 Log.Int(b()); Log.Ln;
END Do;

BEGIN
 Do();
 Do
END Init.


(программа проверена на https://visual.sfu-kras.ru/)

В этом случае, предписание (statement) в Обероне так же нужно читать из середины, как и выражение-тип в языке Си. Например, это необходимо, чтобы отличить присваивание от вызова процедуры даже при беглом просмотре кода.

А теперь представим себе такой кусок кода без точек с за
пятыми:
Код:
  Log.Int(a[3+b()][0]) a[3+a[2][2]][0]:=b()+a[3-b()][2] Log.Int(a[3+b()][0])

Такой код уже не так уж легко прочитать без разделителей.

В общем, я подумал-подумал и всё же склоняюсь к варианту, что:
  • ";" обязательна
  • ";" подразумевается в конце строки
  • ";" подразумевается перед END
  • пустое предписание (statement) запрещено
Всё. Если предписание слишком длинное - то уповаем на возможности среды разработки по переносу строк.

Последнее правило нужно с той целью, чтобы разделители выставлялись однозначно и не имел бы смысла код
Код:
ОченьМногозначительныйВызов;;;;;;;;;;;;;;;;;;;;;;

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


Я долго думал над продолжением строк с помощью "\" - оно присутствует в таком уважаемом мной языке, как tcl. Однако на практике это выглядит почему-то очень уродливо. Например, потому, что если не выравнивать
пилу из "\" после каждой правки, то получается уродливо:
Код:
 #define max(a,b) \
   ({ __typeof__ (a) _a = (a);     \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a :    \
   _b; })


В принципе есть ещё один вариант, не совсем хороший: не в конце строки ставить знак продолжения, а в начале следующей:
Код:
 #define max(a,b)
   |({ __typeof__ (a) _a = (a);     
   |    __typeof__ (b) _b = (b);
   |  _a > _b ? _a :   
   |_b; })


В вышеприведённом примере я бы ещё обратил внимание на Do/Do() - здесь как раз скобки были сделаны необязательными ради чистоты кода (другой причины я не вижу), но это приводит к тому, что в некоторых случаях компилятор путает вызов процедуры и её адрес. Это далеко не всегда безобидно, в АО скорее всего есть грабли, что
Код:
PROCEDURE P:ADDRESS; BEGIN RETURN 0 END;

BEGIN
Z := P + P()
END


Здесь оба вызова P и P() имеют смысл, но разный (ща проверю, кстати).

P.S. С END получается нехорошо - если запретить пустой оператор, то нельзя будет и написать BEGIN END. Значит, правила недостаточно хороши - думаем дальше. Например, оператор NOP всё равно понадобится - писать вместо "BEGIN END" - "BEGIN NOP END". В этом тоже можно найти плюсы - такая запись означает, что программист не забыл заполнить блок, а явно указал, что ничего делать не надо.


Последний раз редактировалось budden Среда, 18 Август, 2021 13:03, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 12:50 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Код:
MODULE Привет;

(* Привет.Дуй ~ *)
IMPORT KernelLog;

PROCEDURE П():ADDRESS;
BEGIN RETURN 0 END П;

PROCEDURE Дуй*();
BEGIN
        (* эти два куска компилируются и печатают разное *)
   KernelLog.Address(П); KernelLog.Ln;
   KernelLog.Address(П()); KernelLog.Ln;
   (* Здесь нас спасает только отсутствие адресной арифметики -
      закомментированный кусок не скомпилировался
   KernelLog.Address(П+П()); KernelLog.Ln; *)
END Дуй;

END Привет.

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

Также нужно отметить, что есть разные пользователи языка. Есть начинающие (которые нагородят такого, чего не один разработчик языка не предусмотрел), есть профессионалы, есть усталые/занятые профессионалы, есть профессионалы, которые пришли с другого языка или не видели код на Обероне последние 5 лет. При определении таких соглашений нужно учитывать, какому пользователю мы больше хотим угодить (всем угодить точно не получится).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 16:02 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Подписан на один чат в телеграме, где общаются компиляторщики. Так вот, по моим ощущениям больше 50% обсуждений там по поводу того, как и чем распарсить какой-то язык (часто без определенной грамматики). В контекте Оберонов там обсуждать то нечего, за день-два можно написать и лексер, и парсер (без всяких парсер комбинаторов, автоматов, регулярных выражений и прочего). То есть люди сначала создают себе сложности, определяя сложный язык, а потом героически сражаются с этой сложностью, которую сами и же и придумали.
Оберон хорош своей простотой. Это его основная цель.
Можно что-то убрать или добавить туда и тогда он уже не будет Обероном.

Тут еще параллельно проскакивает мысль о том, что точку с запятой можно заменить на перенос строки. Считаю, что это не есть хорошо. Когда я участвовал в олимпиадах по программированию, я видел много различных "стилей". Один из соседней команды любил писать "квадратные" программы. То есть исходник представлял собой практически квадрат и на одном экране умещалось все решение олимпиадной программы и не надо было листать вверх и вниз. Кому-то может быть так удобнее, кому-то по-другому. Если всех заставлять переносить каждый оператор на новую строку - это будет еще одним минусом языка. Независимость от переносов строк в Обероне (в Оберон-07 как минимум) проявляется даже в присваивании строк. То есть вся строка должна умещаться на одной строке:
Код:
s := "Hello World"

В Си же можно переносить стоковую константу и иногда появляется такой некрасивый код:
Код:
  if (something)
  {
    s = "Hello
World";
  }

При этом, если выровнять по отступам, то поменяется и сама программа. Кроме этого, возникают еще проблемы с тем, что после слова Hello могут быть еще невидимые символы до переноса строки и мы не знаем есть ли они и сколько их.
Мое мнение, что не надо в язык программирования вносить зависимость от переносов строк.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 17:46 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну, если придираться, то факт того, что строковый литерал должен быть на одной строке, означает как раз, что синтаксис Оберона зависит от концов строк. На самом деле это вкусовщина, можно и так, и этак. Мы с тобой можем каждый упереться в своё "мне нравится это, а то не нравится" и будем правы. Более того, даже мне нравится лисп, к примеру, а там мало, что концы строк не влияют, так там ещё и скобок море.

С другой стороны, есть языки bash и язык меню (которое я недавно осуждал), где каждая строка всё же означает конец чего-то. От этого никуда не деться. Да и в обычном структурном программировании отступы значимы для понимания кода. Сделай отступы неправильно - и работать с кодом будет практически невозможно.

Вот к примеру, я всего лишь вместо

Код:
BEGIN
  IF условие THEN
    действие
  END
END

стал писать

Код:
BEGIN
  IF условие THEN
    действие END END


Я не нарушил структуру отступов, а лишь сэкономил строчки на END-ах, а для некоторых это стало основанием никогда не смотреть на мой код (вот, оказывается. как легко обфусцировать код). Реальная проблема со значимыми концами строк возникнет только при копировании текста откуда-нибудь из интернета, но так везде есть или маркдаун, или тег "code", так что переносы строк тоже скопируются. В крайнем случае можно ввести какой-то спец знак, который именно для случаев копирования кода в интернет нужно вставлять для сохранности концов строк. Потому что с вариантом, что точка с запятой обязательна, но конец строки её заменяет, у нас вариант Олега остаётся как бы запасным уровнем прочности. Если мы не склеиваем случайно строки и не копируем текст через E-mail, то у нас вообще всё хорошо (мы не потеряли надёжность никак), а если мы это делаем, то надёжность нашего языка становится ниже, но точный смысл программы и при таком копировании передаётся.

Кроме того, если у нас Оберон, который, как уверяет нас Олег (и, возможно, он в этом прав) никак не страдает от удаления точек с запятой вообще, в том смысле, что правильная программа останется правильной и смысл её не изменится, то и риск того, что код поменяет смысл даже при ошибочном копировании через интернет, тоже отсутствует.

А раз уж у нас строки всё равно есть, соглашения по ним необходимы для работы и мы ими всё равно существенно пользуемся для понимания текста, то почему бы им не быть и частью синтаксиса?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 17:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Кстати, к вопросу о сохранении корректности. При необязательности точек с запятой правильная программа правильной останется, а вот неправильная программа может стать правильной.

Допустим была неправильная программа, долно не буду изобретать:

Код:
а ; ()


стёрли мы точку с запятой - и стала она синтаксически правильной:
Код:
a()

Это не обязательно есть хорошо, потому что получается ошибка + ошибка иногда равно нулю. Каждый наверняка попадал в такую ситуацию и знает, что это плохая ситуация.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 18:20 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Денис, влияние убранного разделителя будет сильно зависеть от синтаксиса языка. Вы хотите здесь порассуждать об убирании ";" вообще без приложения к синтаксису конкретного языка? А то создаётся такое впечатление. И пример Вы привели какой-то не оберонский.

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

А вот так я писать никогда не предлагал:
Код:
a := b b := c c := d
И сам бы я так писать не стал. Как минимум, разнёс бы по разным строкам. И разделитель поэтому не выпиливаю совсем.

Но так ли проблема дурного форматирования кода связана с разделителем? Можно очень даже накуролесить и без этого. Типа вот:
Код:
a :=
b;b
:=c;c
:=
d;
Наглядненько? И не говорите, что ";" здесь самая выразительная синтаксическая часть кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 18:55 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Олег, я много примеров привёл. Какой из них имеется в виду как "не оберонский"?

Цитата:
Денис, влияние убранного разделителя будет сильно зависеть от синтаксиса языка. Вы хотите здесь порассуждать об убирании ";" вообще без приложения к синтаксису конкретного языка? А то создаётся такое впечатление.


Это у Вас создаётся ошибочное впечатление.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 18:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Цитата:
Но так ли проблема дурного форматирования кода связана с разделителем?

Не связана, и что?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 20:30 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Я хотел бы закончить дискуссию с ";" - для меня тут всё очевидно. Если найду какие-то неоднозначности при убранной ";" - дам знать. Извините, продолжайте.

Rifat писал(а):
Можно что-то убрать или добавить туда и тогда он уже не будет Обероном.
Снова здорова. Вы заметили, что Оберон-07 позиционируют как "Оберон, идейный продолжатель Оберона"? Всё, точка. Уже не надо писать "7". Это просто Оберон. В описании Оберона-07 фигурирует "The Programming Language Oberon Revision 1.10.2013 / 3.5.2016"

Активный Оберон тоже позиционируют как "Оберон". И заметьте, в описании языка AO фигурирует "ETH Oberon (2019)". Там нет "7", а тут нет "Active". Их оба позиционируют как единственно правильную ветвь развития "того самого изначального, который из Цюриха в ETH". Но AO пошёл в распухание и уже не может называться простым языком. Он уже даже более громоздкий, чем КП, если даже прибавить к КП все расширения GPCP.

Какой же из этих двух Оберонов более оберонистый?

У кого подымется рука сказать, что они эквивалентны?

Мы вообще не можем помыслить о том, чтобы что-то изменить в языке? Нас сделали счастливыми раз и навсегда в неизменности Оберона? Но как это стыкуется с "единственно верным продолжателем"? Которых уже, как минимум, два: O7 и AO. А у меня в голове "Оберон" это тот самый изначальный, который Оберон-1. А к остальным я предпочитаю приписывать "7" или "Active". Для ясности.

Или же "Оберон" это обобщённо обо всех Оберонах. Но в этом контексте нельзя говорить "тогда он уже не будет Обероном". Потому что мы "Оберонов" уже можем насчитать с пяток минимум. И все различаются - и все Обероны.

Извините за отступление от темы. Можно перенести куда-то.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 21:16 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну жаль, что не уточнили, какой именно пример не оберонистый. Насчёт Оберона - возможно, что нужно признать, что Оберон закончился с выходом Вирта на пенсию, а теперь начинается история "Оберон-семейства". Так же, как существует лисп-семейство и никого не парит, что к нему относятся и CL, и Clojure, и Scheme, и Racket, и EMACS-лисп, и лисп из автокада. Но если бы кто-то создал новый диалект лиспа и начал бы говорить "я поменял лисп", на него бы посмотрели странно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 22:00 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Вот, кстати, пример ошибочного кода (при отсутствии точек с запятой):
a := b := c
Где ошибка? После первого присваивания забыли что-то дописать? Или же у второго присваивания пропустили то, чему присваиваем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 22:38 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Oleg N. Cher писал(а):
Я хотел бы закончить дискуссию с ";" - для меня тут всё очевидно.


Ну и как бы, если даже это и работает, всё равно, живёт то решение, которое принимают другие. Чтобы это произошло, нужно ещё иногда идти на компромиссы.

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

Я посмотрел на автора oberon+ - вот его сайт http://rochus-keller.ch/?cat=7 - ну уж точно не студент, и к тому же из Швейцарии. Допустим. Но ведь и весь Оберон, по меркам индустрии, находится в загоне. Т.е. даже если решение некоего швейцарца сто раз правильное с технической точки зрения, это никого не интересует и никто об этом не знает.

Когда делали КП, решения брали не исходя из того, что "мне так нравится", а с чем там совместимости искали? С Явой? Для АО вроде C# был ориентиром. Т.е. люди делают не исходя из того, что им так захотелось и не исходя из того, что это работает, а исходя из того, что это надо продать. Вы же делаете для себя и прямо с каким-то вызовом. Ну делайте, ок. Тогда можно вообще не выходить на форум, если вы делаете для собственного удовольствия и признания не ищете. А если смотрите вокруг, то да, надо смотреть на моду и с её учётом отбирать лучшее решение.

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

Я так скажу, это никто не понимает, но это так. ЯП - это как словарь кодирования для сжатия информации. Сообщением является смысл программы, а способ кодирования - это превращение программистом смысла в код, естественно, чем сложнее язык, тем больше возможностей сжать сообщение и тем сложнее будет его распаковывать. Не будем обсуждать, этого не понимает здесь никто. И теперь представьте, что словарь в обязательном порядке прилагается к сообщению и за его передачу тоже надо заплатить. Каков тогда оптимальный размер словаря? Тогда он зависит от размера сообщения, наверное, какой-то логарифм от размера сообщения. Если у вас спектрум, то у него маленькие программы. Оберон-07 подходит для них, особенно, если компилятор должен поместиться на сам спектрум. Если у вас телефон - тут уже нужен язык побольше, скажем, АО. Если же у вас сервер, то там нужен большой язык, типа какой-нибудь Явы (я говорю про размер, не про качество проектных решений).

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

Поскольку даже в оберонах есть спектр, языки разных масштабов, то и решение про разделители лучше принять такое, чтобы оно было масштабируемым не только на спектрум и о-07.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Среда, 18 Август, 2021 22:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Поскольку явно никто за меня работу делать уже не собирается - просмотрел грамматику АО - вроде там тоже можно упразднить ";" и неоднозначностей не возникнет. Хотя, если уж об этом зашла речь, то T(V) и V(T) - это дичь какая-то в Обероне. Если ещё туда добавить операцию (), как сделали швейцарцы, то будет вообще полная помойка: нельзя будет совершенно ничего сказать про X и Y в выражении X(Y), не зная контекста. Надо сделать, чтобы было всегда или хотя бы почти всегда, за особыми очевидными исключениями, ясно: если написано X(Y), то X - это процедура, а Y - нет. Видимо насчёт Y всё равно ничего не выйдет - это может быть процедурная переменная, хотя почему же?

Т.е.: охранаТипа(V,T), преобр(V,T), ссылкаНаПроц(Процедура), вызови(ПроцедурнаяПеременная)

Но это к слову, из давних планов, до которых руки неведомо когда дойдут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 08:48 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну вот, моё правило не работает:
Код:
BEGIN ;

Значит, придётся ещё раз прочитать про go и посмотреть, как сделан LAX в AO. Похоже, что сильно уже не улучшить по сравнению с Go.

https://golang-blog.blogspot.com/2019/0 ... olons.html

Цитата:
Если последний токен перед новой строкой является идентификатором (который включает в себя такие слова, как int и float64), базовый литерал, такой как число или строковая константа, или один из токенов break, continue, fallthrough, return, ++, --, ), }, лексер всегда вставляет точку с запятой после токена.

или, короче говоря
Цитата:
"если новая строка идет после токена, который может завершить оператор, введите точку с запятой"


честно сказать, я туповат для такого правила. Я его ни разу не продумал толком. Я вообще не помню сейчас, что такое fallthrough, хотя я 4 раза успешно прошёл собеседование как программист Go :lol: Мне кажется, было бы проще написать "точка с запятой всегда вставляется, кроме..." и дальше перечисление меньшего числа токенов, за которыми точка с запятой не вставляется. Например, это может быть {([,; - те токены, которые намекают, что оператор не закончился.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 10:36 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Активный Оберон нормально живет без разделителя ;
Хотя для устранения неоднозначности были внесены небольшие изменения в язык.
Например, можно было написать так:
var o: object; переменная, которой можно присвоить любой объект.
и так:
Код:
var o: object
           var i: integer;
            procedure P;
            end P;
        end;

получалась неоднозначность.
поэтому вместо
var o: object; var a: any;
нужно будет писать
var o: any object;
var p: any pointer;
var r: any record;
сейчас режим Lax( в котором разделители ; необязательны ) используется только в интерпрнтаторе АО.
Но и при компиляции тоже можно использовать - язык позволяет.
Теперь это разошлось по другим версиями оберона, но упомянуть источник заимстований ( включая заимствование шаблонов модулей и т.д) как всегда "забыли".


Последний раз редактировалось Sergej Durmanov Четверг, 19 Август, 2021 12:41, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 11:47 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Спасибо, Сергей! Так они в режиме Lax вообще необязательны? Т.е. не так, как в go, где они обязательны, но автоматически вставляются, а так, как в oberon+ и у Олега?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 12:37 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
я не знаю, как "у Олега", но в Fox в режиме Lax разделители необязательны. Они могут быть, но игнорируются. Более того, даже в обычном режиме такой вот код нормально компилируется:
Код:
MODULE Test6;

IMPORT
    Commands;
 
TYPE
    X = RECORD END
 
TYPE
    Y = RECORD END
 
    PROCEDURE P; END P
    PROCEDURE N; END N
END Test6.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 12:53 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Вон оно как повернулось!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 20:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
budden писал(а):
Когда делали КП, решения брали не исходя из того, что "мне так нравится", а с чем там совместимости искали? С Явой? Для АО вроде C# был ориентиром. Т.е. люди делают не исходя из того, что им так захотелось и не исходя из того, что это работает, а исходя из того, что это надо продать. Вы же делаете для себя и прямо с каким-то вызовом. Ну делайте, ок. Тогда можно вообще не выходить на форум, если вы делаете для собственного удовольствия и признания не ищете. А если смотрите вокруг, то да, надо смотреть на моду и с её учётом отбирать лучшее решение.


Совместимость с Явой в КП ТОЛЬКО в сетке элементарных типов. И всё.
Все остальные решения языка очень серьёзно обоснованы (хотя некоторые и промежуточны, как движение в сторону заявленных целей, но не до идеальной шлифовки). Всё это можно прочитать в книге Inside EthOS Шиперского (есть у нас на сайте).
По моему мнению, если брать фундаментальных проектировщиков (не инженеров - создателей разных реализаций и внедрений, а именно исследователей, обосновано создающих новое) в Оберон-мире, то Шиперски однозначно попадает третьим в ряд к Вирту и Гуткнехту.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: точки с запятой
СообщениеДобавлено: Четверг, 19 Август, 2021 23:05 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну в общем-то вопрос про точки с запятой - гораздо более мелкий, чем система типов. Если уж в типах поступились гордостью, то можно и в этом вопросе поступиться.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB