Автор Тема: Добавить методы в О7/13  (Прочитано 37370 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Добавить методы в О7/13
« Ответ #75 : Ноябрь 21, 2013, 05:09:31 pm »
Лично я против кода процедур в описании рекорда/объекта. Только заголовки!  :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #76 : Ноябрь 21, 2013, 05:40:11 pm »
Посмотрите на объекты в Active Oberone

Смотрел. Во-первых (как я уже говорил), хочется только декларации, без потрохов. Во-вторых, оно сразу подразумевает если не многопроходность, то серьезные изменения в реализации компилятора. Оно, конечно, все равно случится в какой-то момент. Но этот момент хочется оттянуть - чтобы к тому времени меньше кода было на JS (который рефакторить без страданий ну никак нельзя).

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #77 : Декабрь 31, 2013, 07:57:22 am »
Итак, свершилось. Методы добавлены: https://github.com/vladfolts/oberonjs/wiki/eberon-methods. Код с помощью них написан: https://github.com/vladfolts/oberonjs/blob/master/src/ob/Types.ob.

Замечания и предложения приветствуются.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #78 : Декабрь 31, 2013, 08:08:46 am »
Новые впечатления от переписывания:
- конструкторы полезны в том числе и для инициализации базового класса.
- так уж выпало, что переписывание совпало по времени с очередной дозой восторга по поводу обероновского синтаксиса на сайте Зорко. Ну очень смешно. Исходник после переписывания увеличился в два раза... А ведь это был JS, даже не питон... ;)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #79 : Декабрь 31, 2013, 09:23:12 am »
... так уж выпало, что переписывание совпало по времени с очередной дозой восторга по поводу обероновского синтаксиса на сайте Зорко. Ну очень смешно. Исходник после переписывания увеличился в два раза... А ведь это был JS, даже не питон... ;)
Ну так оберонщегам надо же как-то обосновать свои 500 строк кода в день ))
to iterate is human, to recurse, divine

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #80 : Декабрь 31, 2013, 09:26:08 am »
Итак, свершилось. Методы добавлены: https://github.com/vladfolts/oberonjs/wiki/eberon-methods. Код с помощью них написан: https://github.com/vladfolts/oberonjs/blob/master/src/ob/Types.ob.

Замечания и предложения приветствуются.
Цитировать
PROCEDURE Record.initializer(cx: Context.Type): JsString.Type;
    RETURN JsString.concat(JsString.concat(JsString.concat(
        JsString.make("new "),
        cx.qualifyScope(SELF.scope)),
        SELF.cons),
        JsString.make("()"))
END Record.initializer;
А куда делся BEGIN? о_О
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #81 : Декабрь 31, 2013, 03:25:44 pm »
А куда делся BEGIN? о_О

BEGIN не нужен, если нет statements. См. грамматику.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #82 : Декабрь 31, 2013, 03:29:25 pm »
А куда делся BEGIN? о_О

BEGIN не нужен, если нет statements. См. грамматику.

Нарушается правило наименьшей неожиданности... :P
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #83 : Декабрь 31, 2013, 03:35:34 pm »
Нарушается правило наименьшей неожиданности... :P

Это все ерунда. Вот невозможность поставить точку с запятой после RETURN и после последного филда в рекорде - да, доставляет ;)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #84 : Декабрь 31, 2013, 03:47:31 pm »
Нарушается правило наименьшей неожиданности... :P

Это все ерунда. Вот невозможность поставить точку с запятой после RETURN и после последного филда в рекорде - да, доставляет ;)
Да, это самые частые мои "опечатки" при например портировании компилятора на Oberon rev 2013 (в другое окружение). Ну и при написании биндингов тоже.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #85 : Декабрь 31, 2013, 05:24:18 pm »
Нарушается правило наименьшей неожиданности... :P

Это все ерунда. Вот невозможность поставить точку с запятой после RETURN и после последного филда в рекорде - да, доставляет ;)
А вот это надо пофиксить! ))
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #86 : Декабрь 31, 2013, 06:12:05 pm »
А вот это надо пофиксить! ))

Не, если дело дойдет до синтаксиса, то надо выкидивать всю архаику нафиг. Вместе с капсом. Точки с запятой тут как мертвому припарка...

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #87 : Январь 01, 2014, 08:40:23 am »
А куда делся BEGIN? о_О
BEGIN не нужен, если нет statements. См. грамматику.
В грамматике неточность. По ней вдобавок получается, что после StatementSequence перед RETURN не должно быть точки с запятой, что опровергают все примеры.
По хорошему должно быть как-то так:
ProcedureBody = DeclarationSequence [ BEGIN ( StatementSequence [";" RETURN expression] | RETURN expression ) ] END

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #88 : Январь 03, 2014, 04:39:28 pm »
А куда делся BEGIN? о_О
BEGIN не нужен, если нет statements. См. грамматику.
В грамматике неточность.

Я бы не стал "исправлять" по своему разумению вполне формальную оригинальную запись. Потому что так можно далеко зайти (особенно если иметь "непаскальный" опыт).

По ней вдобавок получается, что после StatementSequence перед RETURN не должно быть точки с запятой, что опровергают все примеры.

Именно так. Точка с запятой может отсутствовать. Поэтому примеры ничего не опровергают. Видимо Вирт по привычке всегда ее ставит (RETURN как не-statement появился недавно) .

По хорошему должно быть как-то так:

По-хорошему - идиотизм запрещать точку с запятой после последнего филда и после RETURN. Здравый смысл принесенный в жертву формалистике.
« Последнее редактирование: Январь 03, 2014, 04:41:57 pm от vlad »

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Добавить методы в О7/13
« Ответ #89 : Январь 03, 2014, 06:03:02 pm »
А куда делся BEGIN? о_О
BEGIN не нужен, если нет statements. См. грамматику.
В грамматике неточность. По ней вдобавок получается, что после StatementSequence перед RETURN не должно быть точки с запятой, что опровергают все примеры.
По хорошему должно быть как-то так:
ProcedureBody = DeclarationSequence [ BEGIN ( StatementSequence [";" RETURN expression] | RETURN expression ) ] END

Кстати, пока я на это дело при компиляции Виртовский сорцов не напарывался.
Y = λf.(λx.f (x x)) (λx.f (x x))