Автор Тема: Сириус - обероноподобный язык и компилятор  (Прочитано 75167 раз)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
...
                xtyp := x.typ; OCE.TypTest(x, y, FALSE); x.obj.typ := x.typ
...
ilovb, это реальный (правильно)работающий код или это просто копипаст из книжки, и там возможны ошибки?

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
...
                xtyp := x.typ; OCE.TypTest(x, y, FALSE); x.obj.typ := x.typ
...
ilovb, это реальный (правильно)работающий код или это просто копипаст из книжки, и там возможны ошибки?
Ага, нашел, сразу не увидел - то что мне нужно было и ожидалось в данном месте обнаружилось в другом месте. Весь код лопатить времени нет, но сдается мне что преобразование динамики в статику здесь тоже есть, т.е. происходит разыменование указателя, и далее, полученный адрес используется как сылка, а ссылка это не указатель, вот она и статика.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Ха, Вирт крут - его WITH работает так, как надо - после разыменования указателя, т.е. получения адреса записи (ссвлки) мы работаем с данной конкретной областью памяти, и пофигу нам какаие-то указатели - ну присвоим мы глобальному поинтеру другое значение, но в блоке WITH мы работаем со ссылкой на старый участок памяти. Проблемы-то и нет никакой, ну за исключением возможной утери этой области памяти по причине отсутствия ссылок на нее, но это уже совсем другая история.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Ага, нашел, сразу не увидел - то что мне нужно было и ожидалось в данном месте обнаружилось в другом месте. Весь код лопатить времени нет, но сдается мне что преобразование динамики в статику здесь тоже есть, т.е. происходит разыменование указателя, и далее, полученный адрес используется как сылка, а ссылка это не указатель, вот она и статика.

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

Кстати, только сейчас заметил, что процедуру OCE.TypTest не полностью скопипастил
...
Вот тело самой процедуры
BEGIN
  IF x.typ.form = Pointer THEN
   IF y.typ.form = Pointer THEN
    GTT(x.typ.BaseTyp, y.typ.BaseTyp, FALSE)
   ELSE OCS.Mark(86)
      END
  ELSIF (x.typ.form = Record) & (x.mode = Ind) & (x.obj # NIL) &
   (x.obj # OCC.wasderef) & (y.typ.form = Record) THEN
   GTT(x.typ, y.typ, TRUE)
  ELSE OCS.Mark(87)
  END
 END TypTest;
« Последнее редактирование: Май 05, 2012, 07:47:00 am от ilovb »

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Вообще я думаю, что это оптимизация по месту. И делается скорее всего одинаково как внутри WITH, так и вне его.

А крутость Вирта еще проверить нужно ;)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Так и есть - WITH преобразует указатель на запись в ссылку на запись и дальше, внутри охраняемого блока с динамической переменной работает как со статической. Подмена экземпляра внутри блока не приведет к фатальным последствиям, т.к. для WITH экземпляр статичен. А вот после выхода из блока WITH переменная вновь считается динамической, и если произошла подмена экземпляра... то вот-тут то и есть проблема. Но это не проблема WITH - он отработал как надо. В Сириусе такой проблемы нет, потому что осуществляется не только охрана типа, но и экземпляра.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Почему вы так уверены? Уже проверили на компиляторе Оберона?
Вот например в ЧЯ это не так:
http://oberspace.dyndns.org/index.php/topic,229.msg5368.html#msg5368

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Это окончательная версия языка или допускаются внесения изменений?
Х86-64 будет в открытом доступе?
Для конторы окончательная - там много кода, завязанного на имеющуюся реализацию, в паблике будет открытая. x86-64 на данный момент нет.
Ну хоть какие-то изменения возможны? К примеру, убрать капс...

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Ну хоть какие-то изменения возможны? К примеру, убрать капс...
Начните с module  и всё.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
или хочется BeGiN ... eNd ?
такого точно не будет

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
или хочется BeGiN ... eNd ?
такого точно не будет
как в зонноне, или END или end.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
или хочется BeGiN ... eNd ?
такого точно не будет
как в зонноне, или END или end.
начинаем с MODULE - пишем капсом, начинаем с module - дальще ключевые слова только в lowercase

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
То есть если начать с MODULE, то идентификаторы module, if, then, begin, end и т.п. можно использовать для имён переменных (они не зарезервированные слова)?

А если начать с module, то и наоборот? MODULE, IF, BEGIN - не будут считаться зарезервированными словами?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
То есть если начать с MODULE, то идентификаторы module, if, then, begin, end и т.п. можно использовать для имён переменных (они не зарезервированные слова)?

А если начать с module, то и наоборот? MODULE, IF, BEGIN - не будут считаться зарезервированными словами?
Обычно module и MODULE (капсом и нет) резервируют везде (то есть это зарезервированные слова), при этом в зависимости от режима (капс или нет) у нас ключевыми словами являются либо MODULE либо module.

Пример зарезервированного слова (то есть идентификатор такой не возможен) которое не является ключевым (то есть оно ничего не значит для языка - пустышка) это goto в java.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
На начальном этапе определены только некоторые символы, чтобы распарсить комментарии и директивы условной компиляции (они всегда капсом), набор ключевых слов не определен (на самом деле их не 2, а 4, т.к. есть наборы для русского). Для каждого набора определено стартовое слово. Ищем первое значимое слово в исходном тексте и сравниваем со стартовыми словами наборов, если находим - подключаем нужный набор.
Поэтому да, если стартуем с MODULE, то module etc можно использовать для имён переменных и наоборот.