Автор Тема: Oberon-07/13: заметки  (Прочитано 83467 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon-07/13: заметки
« Ответ #105 : Июнь 27, 2014, 06:35:03 pm »
Цитировать
Кроме того похоже что вообще IS нельзя с RECORD использовать
А нет работает.

Но value variable cannot be used меня озадачило.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #106 : Июнь 27, 2014, 06:43:05 pm »
Цитировать
invalid type test: a value variable cannot be used

vlad, ты тут как бы намекаешь, что плюшка только для POINTER?
Кроме того похоже что вообще IS нельзя с RECORD использовать. Это что за прикол?

Да, это очень интересный момент. Я до последнего хотел делать переменные по месту как ссылки для рекордов (там даже тест закомментаренный остался) и тогда твой пример работает, но в итоге отказался от него в пользу единообразия - все переменные по месту являются value-типами, т.е. в случае рекордов/массивов они копируются (и не могут использоваться в IS).

Но не все так плохо. Следующий очевидный шаг -  разрешить сужение типов для аргументов процедуры - это закроет часть случаев (прежде всего любимый message bus). И второе - явно специфицировать, что ты хочешь ссылку:
VAR v <- x.pointerToRecordField^;
ASSERT(v IS Derived);

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon-07/13: заметки
« Ответ #107 : Июнь 27, 2014, 06:46:56 pm »
Понятно. Меня как раз message bus интересовала.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #108 : Июнь 28, 2014, 03:56:51 am »
2. Автоматическое приведение типа после проверки (аналог WITH), работает только с переменными по месту из пункта 1.
    IF pb IS PDerived THEN
        pb.derivedField := 123;
    END;
Зачем перегружать известные и предсказуемые конструкции всякой чухнёй?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #109 : Июнь 28, 2014, 04:49:28 am »
Зачем перегружать известные и предсказуемые конструкции всякой чухнёй?

И вам спасибо за отзыв :)

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #110 : Июнь 28, 2014, 05:12:39 am »
А чем не понравилось слово "as", как в C#?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #111 : Июнь 28, 2014, 03:20:19 pm »
А чем не понравилось слово "as", как в C#?

Надо новое имя переменной придумывать. В случае message bus не очень удобно.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #112 : Июнь 28, 2014, 09:08:07 pm »
А вот тут народ в Обероне алчут структурные литералы: http://zx.oberon2.ru/forum/viewtopic.php?f=10&p=1275&sid=84c4b2cfe9831ae7d0a16b6350731f97#p1275

Более того - считают что их отсутствие -- самый большой минус всех Оберонов и производных от них.

Правда хотят пока только один их тип - массивы. Но лиха беда начало :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #113 : Июль 11, 2014, 06:27:33 am »
Ну вот, нашел таки место, где оригинальный оберон можно еще больше ограничить ;) Сделал non-VAR аргументы только для чтения: https://github.com/vladfolts/oberonjs/wiki/Eberon-non-VAR-arguments-are-read-only

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #114 : Июль 12, 2014, 07:04:19 pm »
Даже записи? На всю глубину? Круто.

А OUT параметры уже выпилены?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #115 : Июль 13, 2014, 05:39:45 am »
Даже записи? На всю глубину? Круто.

Записи и так были read-only, на всю глубину, согласно Вирту. Их, кстати, даже кастать нельзя - тоже согласно Вирту. Мое ограничение по сравнению с оригинальным обероном касается только скалярных типов.

А OUT параметры уже выпилены?

В обероне нет OUT-параметров, только VAR - здесь никаких изменений нет.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #116 : Июль 13, 2014, 06:41:41 am »
В свете переменнных по месту очень интересно начинает выглядеть такой конструкт:
s <- "abc";

Долго думал. Пока склоняюсь к идее, что это "константа по месту". Т.е., ведет себя аналогично CONST s = "abc", только с поправкой на область видимости.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #117 : Июль 13, 2014, 06:59:28 am »
Долго думал. Пока склоняюсь к идее, что это "константа по месту". Т.е., ведет себя аналогично CONST s = "abc", только с поправкой на область видимости.

Или всегда делать строкой STRING...

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #118 : Июль 14, 2014, 04:43:30 am »
Ну вот, нашел таки место, где оригинальный оберон можно еще больше ограничить ;) Сделал non-VAR аргументы только для чтения: https://github.com/vladfolts/oberonjs/wiki/Eberon-non-VAR-arguments-are-read-only
[/quoteJОни потому "нек только для чтения", что их используют в качестве локальных переменных, для экономии, видимо

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #119 : Июль 14, 2014, 04:56:21 pm »
Они потому "нек только для чтения", что их используют в качестве локальных переменных, для экономии, видимо

Да, наверное, можно сэкономить сколько-то тактов и стека. Но для ЯВУ неактуально (не говоря уже о js-бакенде) и мешает.