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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #150 : Ноябрь 22, 2014, 04:48:25 pm »
ReferenceError: require is not defined

Хост у тебя кто? require - это штука из Nodejs. Если компилить в браузере - то там надо эмулировать, см. как сделано на страничке.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Oberon-07/13: заметки
« Ответ #151 : Ноябрь 22, 2014, 09:23:58 pm »
ReferenceError: require is not defined

Хост у тебя кто? require - это штука из Nodejs. Если компилить в браузере - то там надо эмулировать, см. как сделано на страничке.
Не понял на какой страничке. Нужно что-то установить?
Хост - браузер.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #152 : Ноябрь 22, 2014, 09:56:17 pm »
Не понял на какой страничке. Нужно что-то установить?
Хост - браузер.

Страничка - которая http://oberspace.dyndns.org/oberonjs.html
Она же может быть построена в oberonjs: python build.py html
Общая идея такая, что поскольку это браузер, то он модулей совсем не понимает.Нужна одна большая простыня. oberonjs разрабатывается с использованием nodejs и его модулей (require). Поэтому чтобы заставить это работать в браузере - есть специальный скриптик, который склеивает все nodejs модули и добавляет туда эмуляцию require. В итоге получается вот такое - http://oberspace.dyndns.org/oc.js
В таком виде оно может работать в браузере.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Oberon-07/13: заметки
« Ответ #153 : Ноябрь 23, 2014, 12:48:57 pm »
Надо было запускать из папки где находится oberonjs.html

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #154 : Декабрь 14, 2014, 05:56:19 am »
Добавил конструкторы и оператор NEW. Никаких придумок, идеи давно уже опробованные в других языках, просто теперь и в обероне.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #155 : Декабрь 17, 2014, 04:50:57 am »
Добавил конструкторы и оператор NEW.

В качестве иллюстрации зачем это было нужно в обероне - прошелся по всем NEW и поменял где имело смысл на оператор NEW и конструктор. Вот изменения: https://github.com/vladfolts/oberonjs/commit/ffaaed9b8153952e15c883e37eb5fb072432f0b3
28 files changed, 456 insertions(+), 818 deletions(-)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #156 : Декабрь 17, 2014, 08:23:36 pm »
Загнал компилятор в профайлер. Самой тормозной процедурой оказалась... вы не поверите! Та самая, которая с Циклом Дейкстры! (который один на весь компилятор):
https://github.com/vladfolts/oberonjs/blob/master/src/ob/Lexer.ob#L111
PROCEDURE isReservedWord(s: STRING; words: STRING): BOOLEAN;
VAR
    i, w: INTEGER;
BEGIN
    WHILE (w < LEN(words))
        & (i < LEN(s))
        & (words[w] = s[i])
        & ((i # 0) OR (w = 0) OR (words[w - 1] = " ")) DO
        INC(w);
        INC(i);
    ELSIF (w < LEN(words))
        & ((i < LEN(s)) OR (words[w] # " ")) DO
        INC(w);
        i := 0;
    END;
    RETURN i = LEN(s)
END isReservedWord;

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #157 : Октябрь 24, 2016, 02:00:24 pm »
Был у меня в своё время парсер языка Си.  Однажды я тоже запустил профилировщик и обнаружил, что уйму времени занимает проверка идентификаторов на принадлежность к ключевым словам. Написана она была, разумеется, без цикла Дейкстры - обычный линейный поиск на while(). Тогда я по памяти написал за пол-часа поиск через ассоциативный массив, что сняло нагрузку, но практического смысла в этом не было.

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #158 : Октябрь 24, 2016, 02:08:49 pm »
"\n" не преобразовывается потому что в обероновских строках не предусмотрены специальные символы. Нужно же было уложиться в 16 страниц :)
Что характерно, в C++ рекомендуют использовать std::endl, а "\n" считают устаревшей частью C. Вообще, надо сказать, что интерпретация спецсимволов - вещь очень платформоспецифичная и в учебном проекте совершенна не нужна (да, 16-17-страничный Оберон - это учебный проект)

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #159 : Октябрь 24, 2016, 03:03:04 pm »
vlad, скажем так, профессиональное чутье не позволяет мне доверять такому решению. Если уж в WITH дырка обнаружилась..., то тут я бы крепко подумал перед тем как этим пользоваться.
Конкретное решение плохо тем, что меняет смысл NEW
NEW(pb);
IF pb IS PDerived THEN
    NEW(pb);
превращается в
pb = new Base();
if (pb instanceof Derived){
pb = new Derived();
Конечно, можно запретить и NEW, но мало ли, что имел ввиду автор.

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #160 : Октябрь 24, 2016, 03:18:39 pm »
2) См. стандарт MISRA по этому поводу (думаю что это такое все знают):
Мне особенно нравилась редакция 1998 года:
Цитировать
Nonetheless, it should be recognised that there are other languages available which are in general better suited to safety-related systems, having (for example) fewer insecurities and better type checking. Examples of languages generally recognised to be more suitable than C are Ada and Modula 2. If such languages could be available for a proposed system then their use should be seriously considered in preference to C.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #161 : Октябрь 24, 2016, 03:48:43 pm »
2) См. стандарт MISRA по этому поводу (думаю что это такое все знают):
Мне особенно нравилась редакция 1998 года:
Цитировать
Nonetheless, it should be recognised that there are other languages available which are in general better suited to safety-related systems, having (for example) fewer insecurities and better type checking. Examples of languages generally recognised to be more suitable than C are Ada and Modula 2. If such languages could be available for a proposed system then their use should be seriously considered in preference to C.

К счастью прогресс не стоит на месте, поэтому этот абзац больше силы не имеет :-) Таки почти 20 лет же прошло - огромный для индустрии срок.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #162 : Октябрь 24, 2016, 07:11:38 pm »
C для надёжного применения теперь подходит лучше Ada?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #163 : Октябрь 24, 2016, 08:29:49 pm »
C для надёжного применения теперь подходит лучше Ada?

Думаю Ада всё еще лучше (особенно в связке со SPARK), но вот modula-2 уже точно хуже.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #164 : Октябрь 24, 2016, 08:30:45 pm »
Хотя, с учетом числа специалистов отлично знающих Аду и отлично знающих Си, веровтно у Ады и Си таки паритет в плане надежности в таких системах.
Y = λf.(λx.f (x x)) (λx.f (x x))