Автор Тема: Модифицированный синтаксис Оберона  (Прочитано 183353 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #375 : Ноябрь 30, 2012, 01:45:47 pm »
Почему не рассматривается объявление переменных вначале процедуры без секции var?
Кроме того, блоков в Обероне нет. Это не Алгол и не Паскаль и не Си.
"Секцию var" рассматриваем и просто как объявление переменных вначале процедуры и как, собственно, выделенную ключевым слов VAR. Если избавляемся от вара и бегина, нужно ли как-то отделять объявление от остального тела процедуры, к примеру ";"?
; - не годится. Слабо устойчиво к опечаткам, и увеличит WTF per minute.

Я хотел было предложить такое:
proc S(X : array of real) : real
    s : real
    e : real
    i : integer
    ----
    s := 0.0
    e := E(x)
    i := 0
    while i # len(X)
        s := s + (X[i]-e)*(X[i]-e)
        inc(i)
    return Math.sqrt(s)

Но вспомнил про ма-аленький такой нюанс - мы зациклились на VAR-секции, при этом абсолютно забыв про CONST и TYPE секции, а также про безымянную секцию (но которая также до BEGIN'а) для вложенных процедур.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #376 : Ноябрь 30, 2012, 02:13:13 pm »

Но вспомнил про ма-аленький такой нюанс - мы зациклились на VAR-секции, при этом абсолютно забыв про CONST и TYPE секции, а также про безымянную секцию (но которая также до BEGIN'а) для вложенных процедур.
:D вы не это забыли.. вы забыли то, что подпрограмма есть всего лишь отображение на язык программирования - понятия вспомогательный алгоритм... который отличается от основного лишь тем... что вспомогателен ( в контексте основной задачи) - а следовательно может обладать ВСЕМИ признаками основного (в том числе иметь свои вспомогательные алгоритмы)... соответственно и хорошо спроектированный язык должен давать как минимум ТАКИЕ ЖЕ возможности для  отображений(подпрограмм)....- вот это есть часть восприятия яп с позиции решаемой внешней задачи...

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #377 : Ноябрь 30, 2012, 03:49:11 pm »
вспомнил про ма-аленький такой нюанс - мы зациклились на VAR-секции, при этом абсолютно забыв про CONST и TYPE секции, а также про безымянную секцию (но которая также до BEGIN'а) для вложенных процедур.
Ну так просто последовательно объявляем константы, типы, переменные, вложенные процедуры без ключевых слов VAR, CONST и TYPE. Можно обойтись вообще без разделительного знака - компилятор и так легко определит, где закончилась секция объявления.
Что насчет объявления с возможностью инициализации?
proc S(X : array of real) : real
    s, e: real:=0.0, E(x)
    i : int:=0
    while i # len(X)
        s := s + (X[i]-e)*(X[i]-e)
        inc(i);
    return Math.sqrt(s)
end S;

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #378 : Ноябрь 30, 2012, 04:16:33 pm »
вспомнил про ма-аленький такой нюанс - мы зациклились на VAR-секции, при этом абсолютно забыв про CONST и TYPE секции, а также про безымянную секцию (но которая также до BEGIN'а) для вложенных процедур.
Ну так просто последовательно объявляем константы, типы, переменные, вложенные процедуры без ключевых слов VAR, CONST и TYPE. Можно обойтись вообще без разделительного знака - компилятор и так легко определит, где закончилась секция объявления.
Компилятор да, а программист, не знакомый с языком, сгенерирует кучку кирпичей разбирая ошибки компиляции. Затем придет на форум, обложит всех матами и пойдет дальше писать на каком-нибудь богомерзком питоне.
Y = λf.(λx.f (x x)) (λx.f (x x))

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #379 : Ноябрь 30, 2012, 05:45:36 pm »
Тогда нужно все оставлять: type, var, const тогда вероятность ошибки будет минимальной, да и порог вхождения тоже.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #380 : Ноябрь 30, 2012, 05:51:04 pm »
Тогда нужно все оставлять: type, var, const тогда вероятность ошибки будет минимальной, да и порог вхождения тоже.
В текущем синтаксисе тоже есть проблема - не очевидно, что порядок секций type, var, const имеет значение (точнее, что есть Единственно Верный Порядок)
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #381 : Ноябрь 30, 2012, 05:58:25 pm »
Тогда нужно все оставлять: type, var, const тогда вероятность ошибки будет минимальной, да и порог вхождения тоже.
В текущем синтаксисе тоже есть проблема - не очевидно, что порядок секций type, var, const имеет значение (точнее, что есть Единственно Верный Порядок)
очевидна... ее и заучивать не надо..(она вполне определяется алгоритмом решения задачи) ;)

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #382 : Ноябрь 30, 2012, 06:01:13 pm »
В текущем синтаксисе тоже есть проблема - не очевидно, что порядок секций type, var, const имеет значение (точнее, что есть Единственно Верный Порядок)
Тогда, может, заменим type, var, const на универсальное, скажем, declare, где объявления делаем в произвольном порядке?

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #383 : Ноябрь 30, 2012, 06:04:35 pm »
В текущем синтаксисе тоже есть проблема - не очевидно, что порядок секций type, var, const имеет значение (точнее, что есть Единственно Верный Порядок)
Тогда, может, заменим type, var, const на универсальное, скажем, declare, где объявления делаем в произвольном порядке?
:) а вы считаете, что   то что обьявляется в секциях  type, var, const -  одно и тоже?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #384 : Ноябрь 30, 2012, 06:39:58 pm »
В текущем синтаксисе тоже есть проблема - не очевидно, что порядок секций type, var, const имеет значение (точнее, что есть Единственно Верный Порядок)
Тогда, может, заменим type, var, const на универсальное, скажем, declare, где объявления делаем в произвольном порядке?
Мне не кажется это хорошей идеей.

Как правильно сделать - пока не знаю. Тут думать надо. Просто влепить решение из одного из других распространенных ЯП тут не прокатит.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #385 : Ноябрь 30, 2012, 06:46:27 pm »
В текущем синтаксисе тоже есть проблема - не очевидно, что порядок секций type, var, const имеет значение (точнее, что есть Единственно Верный Порядок)
Тогда, может, заменим type, var, const на универсальное, скажем, declare, где объявления делаем в произвольном порядке?
Мне не кажется это хорошей идеей.
  я бы сказал даже гениальной.. -  если тип данных это  схема по которой создается переменная - великолепная идея - в строготипизированном яп  = традиционно реализуемым однопроходным компилятором дать человеку, который не понимает разницу между типом , переменной и значениями,  возможность вначале обьявить переменную а лишь потом обьявить ее тип
 Vartovyj  - извините, конечно - но может вам вначале стоит разобраться хотя бы с базовыми понятиями информатики?
« Последнее редактирование: Ноябрь 30, 2012, 06:48:12 pm от DIzer »

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Модифицированный синтаксис Оберона
« Ответ #386 : Ноябрь 30, 2012, 07:00:22 pm »
DIzer, с другой стороны произвольный порядок объявления процедур ведь нормально воспринимается.  ;)

ps Хотя я с вами согласен.
pps Ветка трэшовая эта, аж мурашки по коже  ;D

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #387 : Ноябрь 30, 2012, 07:03:07 pm »
DIzer, с другой стороны произвольный порядок объявления процедур ведь нормально воспринимается.  ;)

ps Хотя я с вами согласен.
pps Ветка трэшовая эта, аж мурашки по коже  ;D
Дальний порядок не важен, человек его не ощущает. Ближний порядок важен. Ближний - это тот, который умещается на экране. Это раз.

Два - отношение между двумя функциями не то же самое, что отношение между переменной, типом и statement'ом.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #388 : Ноябрь 30, 2012, 07:08:42 pm »
DIzer, с другой стороны произвольный порядок объявления процедур ведь нормально воспринимается.  ;)

ps Хотя я с вами согласен.
pps Ветка трэшовая эта, аж мурашки по коже  ;D
не говорите фигню.. если одна процедура зависит от другой, то последняя должна быть определена раньше..  либо использоваться forward  -метка...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #389 : Ноябрь 30, 2012, 07:09:42 pm »
DIzer, с другой стороны произвольный порядок объявления процедур ведь нормально воспринимается.  ;)

ps Хотя я с вами согласен.
pps Ветка трэшовая эта, аж мурашки по коже  ;D
не говорите фигню.. если одна процедура зависит от другой, то последняя должна быть определена раньше..  либо использоваться forward  -метка...
Только вот в Обероне нет forward-меток :-)
Y = λf.(λx.f (x x)) (λx.f (x x))