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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #315 : Ноябрь 29, 2012, 05:06:28 pm »
PROCEDIRE Foo() : (INTEGER, REAL)


с этой фигней нормально.. а если параметром кортежа будет значение  переменной процедурного типа?
Так я же пример с указателем привел следующим ответом.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #316 : Ноябрь 29, 2012, 05:10:17 pm »
PROCEDIRE Foo() : (INTEGER, REAL)


с этой фигней нормально.. а если параметром кортежа будет значение  переменной процедурного типа?
Так я же пример с указателем привел следующим ответом.
я имею ввиду инициализацию   в секции VAR ... ,

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #317 : Ноябрь 29, 2012, 05:13:39 pm »
3. Херня -это обсуждение  обдолбаных технофошистов- рептилоидов! впрочем ,  если им неймется... пусть пишут zerobased - перед array
- секция var - нц

zerobased - херня :) Усугубление проблемы. Потому что нормального человека все равно потом будет плющить от кода Дизера, даже если они и расставит там явно onebased ;) Нужна как минимум добавочная типизация для индеков - чтобы zerobased индекс нельзя было использовать для индексации onebased массива и наоборот. А это еще одно усложнение. И все равно будет хреново.

Мы на плюсах такое делали. Было какое-то немаленькое количество кода (что-то типа древнючей паскальной либы переписанной на С++) с тотальной единичной индексацией (паскаль, ага). Но могу врать, может и еще чего-то. Не важно. В какой-то момент нас окончательно задолбало фиксить баги, возникающие из-за разной индексации. Сделали типизированные индексы, даже стандартный вектор (std::vector) заспециализировали, чтобы оно гладко работало с такими индексами. Баги как бы исчезли, но вот головная боль от преобразований туда-сюда - осталась.

Вывод: подобная "дуальность" в языке - однозначное зло. А почему в языке (общего назначения) должен быть именно zerobased - уже обсуждалось.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #318 : Ноябрь 29, 2012, 05:14:13 pm »
я имею ввиду инициализацию   в секции VAR ... ,
Так, кажется я начинаю понимать что тебя интересует. Интересует тебя, видимо, не секция VAR, а как модифицировать одно из полей уже существующей переменной-кортежа. Это так?
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #319 : Ноябрь 29, 2012, 05:20:35 pm »
я имею ввиду инициализацию   в секции VAR ... ,
Так, кажется я начинаю понимать что тебя интересует. Интересует тебя, видимо, не секция VAR, а как модифицировать одно из полей уже существующей переменной-кортежа. Это так?
это тоже интересует (если мы собираемся давать возможность определять переменную такого типа... если ограничимся только значением (совместимым по присваиванию с переменной типа запись в определенных случаях)- то нет), но мне не нравится, то что  в общем случае , невозможно определять полноценно значения переменных в секции VAR...
« Последнее редактирование: Ноябрь 29, 2012, 05:22:10 pm от DIzer »

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #320 : Ноябрь 29, 2012, 05:26:20 pm »
я имею ввиду инициализацию   в секции VAR ... ,
Так, кажется я начинаю понимать что тебя интересует. Интересует тебя, видимо, не секция VAR, а как модифицировать одно из полей уже существующей переменной-кортежа. Это так?
это тоже интересует (если мы собираемся давать возможность определять переменную такого типа... если ограничимся только значением (совместимым по присваиванию с переменной типа запись в определенных случаях)- то нет), но мне не нравится, то что  в общем случае , невозможно определять полноценно значения переменных в секции VAR...
В секции VAR и так никого инициализировать нельзя в Обероне :-)

А модифицировать очень просто:
VAR
    a : (INTEGER, POINTER TO MyRecord)
    b : POINTER TO MyRecord
BEGIN
    a[0] := 42;
    NEW(b);
    a[1] := b;
    NEW(a[1]);
    RETURN a;
END
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #321 : Ноябрь 29, 2012, 05:37:11 pm »
тык это в Обероне.. я же говорю про засераемый нами Обсерон...  ;D ...  тогда
 инициализация в секции VAR не очень хорошая идея.. как и  <-   ;)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #322 : Ноябрь 29, 2012, 05:44:07 pm »
тык это в Обероне.. я же говорю про засераемый нами Обсерон...  ;D ...  тогда
 инициализация в секции VAR не очень хорошая идея.. как и  <-   ;)

VAR
    a : (INTEGER, POINTER TO MyRecord)
    b : POINTER TO MyRecord
BEGIN
    a := (42, b);
END

Не вижу проблем втащить то же самое в секцию VAR.
В секции VAR при инициализации указателей, безотносительно туплов, будет одна проблемка - если хочется чтобы указатель сразу указывал на новую сущность в куче, то ничего не выйдет, ведь NEW не функция а процедура. То есть a = new Foo; не получится сделать.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #323 : Ноябрь 29, 2012, 05:44:34 pm »
хорошо повеселились, однако  :)

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #324 : Ноябрь 29, 2012, 05:49:04 pm »

Не вижу проблем втащить то же самое в секцию VAR.
В секции VAR при инициализации указателей, безотносительно туплов, будет одна проблемка - если хочется чтобы указатель сразу указывал на новую сущность в куче, то ничего не выйдет, ведь NEW не функция а процедура. То есть a = new Foo; не получится сделать.
я вижу..  если уж ручками инициализируем переменную, то она должна быть заполнена нормальными значениями (иметь непротиворечивое состояние относительно логики  программы ), а если  поле типа указатель или функциональный тип будет ВСЕГДА NIL (если инициализировать ее в секции VAR)  - то это не комильфо

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #325 : Ноябрь 29, 2012, 05:54:29 pm »

Не вижу проблем втащить то же самое в секцию VAR.
В секции VAR при инициализации указателей, безотносительно туплов, будет одна проблемка - если хочется чтобы указатель сразу указывал на новую сущность в куче, то ничего не выйдет, ведь NEW не функция а процедура. То есть a = new Foo; не получится сделать.
я вижу..  если уж ручками инициализируем переменную, то она должна быть заполнена нормальными значениями (иметь непротиворечивое состояние относительно логики  программы ), а если  поле типа указатель или функциональный тип будет ВСЕГДА NIL (если инициализировать ее в секции VAR)  - то это не комильфо

Не всегда.

TYPE T = POINTER TO MyRecord;

PROCEDURE Foo(p : T)
VAR
    a : T := p
    b : (INTEGER, T) := (42, p)
BEGIN
END
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Модифицированный синтаксис Оберона
« Ответ #326 : Ноябрь 29, 2012, 05:56:10 pm »

Не вижу проблем втащить то же самое в секцию VAR.
В секции VAR при инициализации указателей, безотносительно туплов, будет одна проблемка - если хочется чтобы указатель сразу указывал на новую сущность в куче, то ничего не выйдет, ведь NEW не функция а процедура. То есть a = new Foo; не получится сделать.
я вижу..  если уж ручками инициализируем переменную, то она должна быть заполнена нормальными значениями (иметь непротиворечивое состояние относительно логики  программы ), а если  поле типа указатель или функциональный тип будет ВСЕГДА NIL (если инициализировать ее в секции VAR)  - то это не комильфо


Не всегда.

TYPE T = POINTER TO MyRecord;

PROCEDURE Foo(p : T)
VAR
    a : T := p
    b : (INTEGER, T) := (42, p)
BEGIN
END
это еще хуже..

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #327 : Ноябрь 29, 2012, 06:11:24 pm »
По моим ощущениям, после беглой оценки, введение кортежей в Оберон-07/11 весьма не трудоемко и не должно что-либо порушить. То есть вписаться они должны в язык достаточно гладко.

Но это на первый взгляд. Возможно я что-то упускаю.

Вопрос к vlad'у - как ты считаешь, насколько это трудоемко интегрировать в оный Оберон?

PS. Я не предлагаю интегрировать прямо сейчас.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #328 : Ноябрь 29, 2012, 06:54:16 pm »
foo(a, b: int): int
    return a*a + b*b
end foo;

А лямбды как записывать?  ;)
типа того:

lamdba(a, b: int): int
    return a*a + b*b
end
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Модифицированный синтаксис Оберона
« Ответ #329 : Ноябрь 29, 2012, 06:58:17 pm »
... а для любителе 0 - индексации - модификатор zerobased   ;), кроме того дать процедуре возможность возвращать нормально любой тип данных допустимый языком.. а не только простые типы и указатели...
Нафига? Надо просто вернуть старый паскалевский стиль объявления массивов:
xs: array [1..10] of integer;
ys: array [0..9] of byte;
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…