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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #15 : Январь 14, 2014, 04:43:00 pm »
Тогда о чем спор не пойму. О том, что на этот документ надо наплевать?

Почему же? В данном документе четко прописано в каких случаях и каким образом можно выключать отдельные правила (при этом за рамки документа не выходим):

Цитировать
AV Rule 4
To break a “should” rule, the following approval must be received by the developer:
    • approval from the software engineering lead (obtained by the unit approval in the
    developmental CM tool)

AV Rule 5
To break a “will” or a “shall” rule, the following approvals must be received by the
developer:
    • approval from the software engineering lead (obtained by the unit approval in the
    developmental CM tool)
    • ap proval from the software product manager (obtained by the unit approval in the
    developmental CM tool)

Смысл в том, чтобы от каждого пункта ОСОЗНАННО отказывались, причем при этом были затронуты все нужные уровни ответственности.

Скажем если практика данного проекта и коллектива показывает, что ошибок данная штука не порождает, зато без этой штуки будет читабельней, то от правила можно отказаться (либо если скажем регулярно используется инструментарий либо методология, которая автоматически отлавливает класс ошибок который может порождаться при отказе от данного правила).
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #16 : Январь 14, 2014, 04:58:16 pm »
Важно понимать, что любое правило не является догмой. Если в конкретном вашем проекте оно не работает и мешает - отменяйте правило, или корректируйте его.
Y = λf.(λx.f (x x)) (λx.f (x x))

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 479
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #17 : Январь 14, 2014, 05:30:50 pm »
В таком случае у нас разное понимание статуса этих документов.
Я считаю, что это отраслевой стандарт (для AIR VEHICLE, транспортных средств и других встраиваемых систем и т.п.).
Измышления конкретного коллектива умников, на конкретном проекте, отрасли по барабану.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #18 : Январь 14, 2014, 05:36:37 pm »
В таком случае у нас разное понимание статуса этих документов.
Я считаю, что это отраслевой стандарт (для AIR VEHICLE, транспортных средств и других встраиваемых систем и т.п.).
Измышления конкретного коллектива умников, на конкретном проекте, отрасли по барабану.
Дык я ни в какой букве и не противоречу тому что в них написано :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #19 : Январь 23, 2014, 10:38:11 pm »
Переписал oberon.js. Получился вот такой ужос: https://github.com/vladfolts/oberonjs/blob/master/src/ob/Operator.ob. Оригинал: https://github.com/vladfolts/oberonjs/blob/fb3cf7ea53bfe3d8972c3df1fed864ae9d4188b4/src/operator.js. Исходник увеличился в 3 раза. Любители синтаксического оверхеда могут прокомментировать и поправить :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #20 : Январь 23, 2014, 10:44:17 pm »
Из последних наблюдений:
- надо чего-то делать с синтаксисом вызова функции: "f().g()" не написать и это задалбывает особенно в свете необходимости объявлять промежуточные переменные в секции VAR.
- жестокий копипаст - куча почти одинакового текста
- локальные функции почти бесполезны без возможности передать их хотя бы вниз по стеку (пришлось наплодить кучу сугубо локальных функций в глобально скопе).

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1948
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #21 : Январь 24, 2014, 05:14:05 am »
Переписал oberon.js. Получился вот такой ужос: https://github.com/vladfolts/oberonjs/blob/master/src/ob/Operator.ob. Оригинал: https://github.com/vladfolts/oberonjs/blob/fb3cf7ea53bfe3d8972c3df1fed864ae9d4188b4/src/operator.js. Исходник увеличился в 3 раза. Любители синтаксического оверхеда могут прокомментировать и поправить :)

Так это уже код на "ебероне"? На обероне он был бы ещё больше -- в куче процедур слово BEGIN отсутствует...
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #22 : Январь 24, 2014, 06:37:24 am »
Так это уже код на "ебероне"? На обероне он был бы ещё больше -- в куче процедур слово BEGIN отсутствует...

Отсутствующий BEGIN всегда был в О7, это не моя придумка. В ебероне пока только методы добавлены, больше никаких изменений по сравнению с оригинальным Виртовским О7. И, кстати, да - без методов кода было бы еще больше, причем такого, мясного...

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1948
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #23 : Январь 24, 2014, 05:04:38 pm »
Отсутствующий BEGIN всегда был в О7, это не моя придумка.
о_О Надо же, я только сейчас это заметил ))
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #24 : Январь 26, 2014, 05:41:02 pm »
При том, что труЪ оберонщики FOR не любят, ни разу не упоминалась такая ущербность данного конструкта (в оберновской инкарнации):

FOR нельзя использовать для итерирования по пустой последовательности.

FOR i := 0 TO LEN(array) - 1 DO

" - 1" всегда напрягало, теперь понятно в чем подвох.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2535
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Oberon-07/13: заметки
« Ответ #25 : Январь 26, 2014, 07:47:24 pm »
Не очень понятно. Можешь пояснить?

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #26 : Январь 27, 2014, 02:43:12 am »
Не очень понятно. Можешь пояснить?

Вот этот код перестает работать (падает), если массив пустой:
PROCEDURE test(a: ARRAY OF CHAR);
VAR i: INTEGER;
BEGIN
    FOR i := 0 TO LEN(a) - 1 DO
        print(a[i]);
    END;
END test;

Конечно нулевые массивы конкретно а О7 под вопросом, потому что там нет динамических массивов, но это не принципиально - можно взять любой другой индексируемый контейнер.

В то же время WHILE или сишный for работают всегда:
WHILE i < LEN(a) DO
или
for(int i = 0; i < a.size(); ++i)

adva

  • Sr. Member
  • ****
  • Сообщений: 370
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #27 : Январь 27, 2014, 03:19:02 am »
А почему падает-то? По идее код цикла не должен отрабатывать и всё. Может это в конкретной реализации падает и это ошибка?

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #28 : Январь 27, 2014, 03:30:24 am »
А почему падает-то? По идее код цикла не должен отрабатывать и всё. Может это в конкретной реализации падает и это ошибка?

Да, все работает, ложная тревога. У Вирта там подробно расписано как оно должно работать в случае отрицательного и положительного шага.

adva

  • Sr. Member
  • ****
  • Сообщений: 370
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #29 : Январь 27, 2014, 06:16:47 am »
Извиняюсь, что то не нашел, а какой символ разделителя для многострочного ARRAY OF CHAR использовать? Или такого нету?