Автор Тема: Online компилятор Oberon-07/11.  (Прочитано 165218 раз)

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #45 : Июнь 18, 2013, 06:32:03 pm »
По факту они появляются только в процедурах и вложенных процедурах (прям как в жабаскрипте - ха-ха). А поскольку вложенные процедуры Вирт собирался выпилить... то можно будет только говорить об области процедуры и охватывающего ее модуля... и все.
именно так... только одно уточнение .. все идентификаторы объявляются в секциях....(либо модулей, либо процедур)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #46 : Июнь 18, 2013, 06:34:41 pm »
если это явно не запрещено и не противоречит другим явным определениям и следствиям из них то они должны перекрываться... гыыы например:

Да нет там в репорте нормальных определенний про области видимости. Нет.
Цитировать
The scope extends textually from the point of the declaration to the end of the block (procedure or module) to which the declaration belongs and hence to which the object is local.

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

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #47 : Июнь 18, 2013, 06:42:33 pm »
если это явно не запрещено и не противоречит другим явным определениям и следствиям из них то они должны перекрываться... гыыы например:

Да нет там в репорте нормальных определенний про области видимости. Нет.
Цитировать
The scope extends textually from the point of the declaration to the end of the block (procedure or module) to which the declaration belongs and hence to which the object is local.

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

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #48 : Июнь 18, 2013, 06:45:59 pm »
впрочем, давайте назовем это особенностью реализации Влада.. и успокоимся... только Влад..- с вас список  этих "особенностей"  :D

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #49 : Июнь 18, 2013, 07:00:19 pm »
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

Объясняю. Когда я реализовывал предопределенные идентификаторы я их "представил" как включенные в каждую новую область видиморсти (scope). Еще можно себе представить, что каждый scope наследуется от базового scope, в котором есть эти идентификаторы. А перекрываться могут только идентификаторы из родительского scope (впрочем даже этого у Вирта не описано, хе-хе). Почему мое "представление" противоречит определению и какому?
При компиляции модуля в процессе инициализации создаётся новая область видимости, затем туда добавляются все предопределённые идентификаторы, и потом уже выполняется всё остальное. То есть предопределённые идентификаторы обычно включают не в "каждую новую область видимости", а в область видимости каждого модуля. Это не одно и то же, потому что свои scope есть и у процедур и функций (у блоков). Так как все блоки могут находиться только в модулях, то получается, что предопределённые идентификаторы видны отовсюду, и, следовательно, могут быть перекрыты в любом блоке.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #50 : Июнь 18, 2013, 07:06:33 pm »
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
Наверно стОит пояснить, что именно забавно. Как так, блоки есть, правила видимости есть, а язык фдрук "не имеет блочной структуры"?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #51 : Июнь 18, 2013, 07:07:26 pm »
Так как все блоки могут находиться только в модулях, то получается, что предопределённые идентификаторы видны отовсюду, и, следовательно, могут быть перекрыты в любом блоке.

Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)? Если существующие реализации такое позволяют, то я бы предположил, что это только потому, что его было проще реализовать так как рассказывает igor - как некий root scope. Мне было проще по-другому. Мало того, я считаю, что по-моему - правильнее :)

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #52 : Июнь 18, 2013, 07:28:32 pm »
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист Вася вообще не знаком с тригонометрией  :), но ему позарез нужен этот идентификатор для чего-то своего. Он пишет своё объявление Pi, которое автоматически перекрывает предопределённое, и никаких проблем не возникает (по крайней мере до тех пор, пока ему не понадобится число пи).

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

Мне было проще по-другому. Мало того, я считаю, что по-моему - правильнее :)
Возможно. Не вижу смысла с Вами спорить. Всё, что сказано выше мной, - это просто моё мнение.

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #53 : Июнь 18, 2013, 07:34:03 pm »
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
Наверно стОит пояснить, что именно забавно. Как так, блоки есть, правила видимости есть, а язык фдрук "не имеет блочной структуры"?
конечно.. стоит - просто посмотрите на описание ЯП и убедитесь что блоков кода - в том смысле , как они понимаются в
СИ подобных яву -  нет (операторные скобки), более того,  нет их даже в смыслеПаскаля ( Begin... End) - разумеется можно назвать секции обьявлений (TYPE.. VAR) - блоками..  но это не то.. обратите внимание на приведенный Владом кусок описания О7 - в нем Вирт использует слово block просто как сокращение связки (procedure or module)... без всякого доп. смысла.

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #54 : Июнь 18, 2013, 07:42:40 pm »
Проверте репозитории. Я залил подсветку.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #55 : Июнь 18, 2013, 09:01:53 pm »
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист

Это все правда, но в обероне нет "Pi". Есть пара десятков зарезервированных идентификаторов, причем КАПСОМ. Представить ситуацию, когда их надо будет позарез переопределить - не могу. Проблемы, конечно, могут быть при добавлении чего-то нового в следующей ревизии языка... Но Вирт обычно убирает, а не добавляет ;) И вообще не парится обратной совместимостью.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #56 : Июнь 18, 2013, 09:03:07 pm »
Проверте репозитории. Я залил подсветку.

Спасибо! Только оно почему-то мерджить автоматом не хочет. Буду разбираться.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #57 : Июнь 18, 2013, 09:23:18 pm »
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист Вася вообще не знаком с тригонометрией  :), но ему позарез нужен этот идентификатор для чего-то своего. Он пишет своё объявление Pi, которое автоматически перекрывает предопределённое, и никаких проблем не возникает (по крайней мере до тех пор, пока ему не понадобится число пи).

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

Мне было проще по-другому. Мало того, я считаю, что по-моему - правильнее :)
Возможно. Не вижу смысла с Вами спорить. Всё, что сказано выше мной, - это просто моё мнение.

То есть эдакая мина, вроде область передвижения свободная, но где то может рвануть.

А не лучше ли использовать namespace, который автоматом даётся в модуле.

Пример
В самом модуле Math
CONST
  Pi = 3.14+100500
IMPORT Math;

A := Math.Pi;

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #58 : Июнь 18, 2013, 09:28:25 pm »
А почему вы хотите реализовать именно oberon 07? Можно взять оберон 2, он не так сильно урезан. И type foo = integer; есть.

На каком уровне будет совместимость?

Madzi

  • Jr. Member
  • **
  • Сообщений: 86
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #59 : Июнь 18, 2013, 09:50:31 pm »
А почему вы хотите реализовать именно oberon 07? Можно взять оберон 2, он не так сильно урезан. И type foo = integer; есть.

На каком уровне будет совместимость?
Потому что 07 проще, соответственно  проще реализовать и проще обкатывать свои идеи.