Автор Тема: [Oberon-07/11] Export non-scalar variable.  (Прочитано 23775 раз)

DddIzer

  • Гость
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #45 : Сентябрь 13, 2013, 08:50:28 pm »

Эмм.. Не понял. А что динамического вот в этом:
VAR
  rec : RECORD i,j,k : INTEGER END;
в этом - ничего, но произвольная запись может содержать указатели в качестве полей.

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

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #46 : Сентябрь 16, 2013, 07:37:11 am »
Экспортировать можно только read only. А для сложных типов сделать read only видимо проблематично. Вот и запретил... :-)

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #47 : Сентябрь 16, 2013, 02:27:33 pm »
Я тоже так думаю. Ниасилил научить компилятор следить за константностью экспортированных записей. Когда осилит, тогда и разрешит.

read-only для записаей/массивов прописано для случая не-VAR параметров процедуры. И я бы не сказал, что там какие-то сложности в реализации.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #48 : Декабрь 24, 2013, 02:05:37 pm »
Я тут грешным делом вкуриваю компилятор и прочие модули что в Project Oberon 2013, по идее он должен быть писан на неком переходном языке (Oberon 1990 -> Oberon 2013), так вот, у Вирта там из модулей вполне экспортируются массивы:

MODULE ORS;

TYPE Ident* = ARRAY IdLen OF CHAR;
VAR id*: Ident;

END ORS.

Внимание вопрос - это мы так не правильно поняли что есть скаляр, или же в PO2013 таки язык разрешает экспортировать не скаляры?
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #49 : Декабрь 24, 2013, 03:08:18 pm »
А вот еще интересней:

MODULE Oberon;
TYPE
    Marker* = RECORD Fade*, Draw*: Painter END;
VAR
    Arrow*, Star*: Marker;
END Oberon.

То есть тут вообще экспортируются прям таки голые RECORD'ы.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #50 : Январь 04, 2014, 11:37:28 am »
Ну вот, по крайней мере этот вопрос похоже закрыт - получил ответ (народ проконсультировался с Виртом и ответил мне как оно на самом деле):

Цитировать
From: Diego Sardina
Subject: Export of scalar/non scalar variables.

Hi there,

> But there is no definition for scalar type.

I asked Prof. Wirth more details about the term scalar type used in the Oberon Report. He replied with:

>> The word "scalar" means "on a scale". It is not a specific technical term.
>> As for Oberon, it is actually synonymous with basic, or with "not
>> structured".

>> Both unstructured and structured variables are supposd to be exported as "read-only".

He also sent me a more recent report with the correct sentence, it is now:

>> Variables are always exported in read-only mode.

This is the reason structured variables are exported in the new Oberon book.

> Thanks, Alexey.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #51 : Январь 04, 2014, 03:57:11 pm »
>> The word "scalar" means "on a scale". It is not a specific technical term.
>> As for Oberon, it is actually synonymous with basic, or with "not
>> structured".

Блин, вот по-нормальному все равно не сказать! Что такое "not structured"??? Поинтеры/массивы/процедуры сюда входят или нет?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #52 : Январь 04, 2014, 04:10:12 pm »
>> The word "scalar" means "on a scale". It is not a specific technical term.
>> As for Oberon, it is actually synonymous with basic, or with "not
>> structured".

Блин, вот по-нормальному все равно не сказать! Что такое "not structured"??? Поинтеры/массивы/процедуры сюда входят или нет?
А понятие структурных типов вроде бы в репорте как раз есть.

Впрочем, разве где-то еще кроме этого места скалярные типы упоминались?
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #53 : Январь 04, 2014, 11:13:45 pm »
Впрочем, разве где-то еще кроме этого места скалярные типы упоминались?

Оно упоминается в формальных параметрах процедур. И там оно имеет смысл (из общих соображений) для базовых типов, поинтеров и процедурных типов.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [Oberon-07/11] Export non-scalar variable.
« Ответ #54 : Январь 05, 2014, 12:33:27 am »
Впрочем, разве где-то еще кроме этого места скалярные типы упоминались?

Оно упоминается в формальных параметрах процедур. И там оно имеет смысл (из общих соображений) для базовых типов, поинтеров и процедурных типов.

Ну, что такое структурный тип в репорте определено четко:
StrucType = ArrayType | RecordType | PointerType | ProcedureType.

Другое дело что Вирт опять неоднозначно ответил:
Цитировать
>> The word "scalar" means "on a scale". It is not a specific technical term.
>> As for Oberon, it is actually synonymous with basic, or with "not
>> structured".

При этом basic и structured type определены в репорте четко.
Y = λf.(λx.f (x x)) (λx.f (x x))