Автор Тема: Online компилятор Oberon-07/11.  (Прочитано 165452 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #300 : Октябрь 21, 2013, 01:03:33 pm »
это на каком коде?
код, с данной ошибкой, отправил в ЛС.
Глянул. Все правильно - в коде два модуля. Ошибка во втором модуле, соответственно собрался первый модуль (именно его код видно в окошке js-кода), а второй не собрался.

Ну а ошибка в коде ровно та же - попытка наследоваться не от RECORD'a, а от POINTER'a. Ошибки в комиляторе нет.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #301 : Октябрь 21, 2013, 01:15:13 pm »
Такой вопрос возник, и что-то у меня не ругается на код вида

PROCEDURE (op: Op) Do
...

Но судя по всему, подобные процедуры не компилируются

У меня ругается, только весьма туманно  - "END expected (MODULE)". Но номер строки правильный.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #302 : Октябрь 21, 2013, 04:10:45 pm »
У меня ругается, только весьма туманно  - "END expected (MODULE)". Но номер строки правильный.
Да, извиняюсь, у меня оказывается в комментарии код был (просто почему-то не подкрашивалось как комментарий)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #303 : Октябрь 21, 2013, 04:13:06 pm »
А скорее всего подсвечивался комментарий, но я по какой-то причине не заметил (воспроизвести не получается).

Пока вопросов больше нет

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #304 : Октябрь 21, 2013, 04:14:28 pm »
У меня ругается, только весьма туманно  - "END expected (MODULE)". Но номер строки правильный.
Да, извиняюсь, у меня оказывается в комментарии код был (просто почему-то не подкрашивалось как комментарий)
Вот поэтому IDE/редактор обязан понимать исходник программы в точности также как компилятор, следовательно код у них должен быть един. К этому и движемся.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Online компилятор Oberon-07/11.
« Ответ #305 : Ноябрь 23, 2013, 05:47:04 pm »
Вы не совсем поняли - речь идет о том, что ожидаемой надежности и строгости в построения (т.е. продуктов выполняемых на это языке) - Оберон не предоставляет (правда это в моем понимании   :( ) - а количество подобных казусов херово уловимых (по сути дела была "прошита" система контроля типов) , прямо пропорционально количеству дуканий как ни крути.

Никто не обещал безопасность и строгость при использовании SYSTEM. Ни в одном из оберонов. Тут только один ответ может быть - не использовать SYSTEM (особенно в JS.do() виде). JS.method - нужно сделать контроллируемым (в виде АВОСТ в случае невозможности приведения к ожидаемому типу), чтобы упростить написание биндингов.
Я не нашёл объяснения почему вместо в качестве принятого в Оберонах непереносимого модуля вместо "SYSTEM" он был назван "JS"?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #306 : Ноябрь 23, 2013, 06:16:24 pm »
Я не нашёл объяснения почему вместо в качестве принятого в Оберонах непереносимого модуля вместо "SYSTEM" он был назван "JS"?
Потому что кроме названия к SYSTEM'у оно бы никакого отношения не имело. Название должно быть таким, чтобы было понятно что там будет. SYSTEM описанный в репорте (который к счастью является опциональным) для js-vm не реализовать.

Так что просто не вводим пользователя в заблуждение.

Вообще, валить в SYSTEM абсолютно все - и непереносимое и опасное одновременно, это не есть правильно. Зависящий от платформы модуль должен называться PlatformName. Это легче читается, проще понимается и порождает ошибки компиляции. И это хорошо.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Online компилятор Oberon-07/11.
« Ответ #307 : Ноябрь 23, 2013, 08:30:51 pm »
Я не нашёл объяснения почему вместо в качестве принятого в Оберонах непереносимого модуля вместо "SYSTEM" он был назван "JS"?
Потому что кроме названия к SYSTEM'у оно бы никакого отношения не имело. Название должно быть таким, чтобы было понятно что там будет. SYSTEM описанный в репорте (который к счастью является опциональным) для js-vm не реализовать.

Так что просто не вводим пользователя в заблуждение.

Вообще, валить в SYSTEM абсолютно все - и непереносимое и опасное одновременно, это не есть правильно. Зависящий от платформы модуль должен называться PlatformName. Это легче читается, проще понимается и порождает ошибки компиляции. И это хорошо.
Ну, не всё. Насколько мне известно, назначение модуля SYSTEM - это низкоуровневые операции в низлежащей среде исполнения.
По аналогии с БлэкБоксом можно было вынести в SYSTEM такие операции, как выполнение "ассемблерных инструкций" на JavaScript, которые в этой реализации Оберона именуются "JS.do". А в модуль JS (аналог подсистемы Win) поместить высокоуровневые  операции для работы с самой средой исполнения - работа с DOM, AJAX - посредством JavaScript.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #308 : Ноябрь 23, 2013, 08:37:43 pm »
Если не можешь реализовать SYSTEM такой как описан в репорте - не реализуй никакой. Иначе у пользователя будут проблемы.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #309 : Ноябрь 23, 2013, 09:00:44 pm »
По аналогии с БлэкБоксом можно было вынести в SYSTEM такие операции, как выполнение "ассемблерных инструкций"

Давай с другой стороны зайдем. Какие проблемы с названием JS? Нет индикации, что используются внеязыковые операции?   Так это при первом знакомстве с системой выясняется и все. А всякие Аяксы и Домы все равно по отдельным модулям будут. Или еще что-то?

Мне кажется, что JS точнее отражается суть. В частности JS.do и JS.var выглядят намного эстетичнее, чем SYSTEM.JScode и SYSTEM.JSvar. Кроме того, как правильно заметил Алексей, в этом модуле нет ничего из  оригинального обероновского SYSYTEM.

P.S. Название меняется правкой одной строки в исходнике компилятора.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #310 : Ноябрь 25, 2013, 02:44:27 am »
Поднимал вопрос, пока обходился, но все же нужно следущее решение: модули оберона хранятся в UTF8 , в таком виде они не компилятся, надо бы как-то сделать считывание их как UTF8 без BOM . Для этого, как я понял, надо всего лишь проверить и заменить (или удалить) первые пару байт.

Для записи в UTF8 из UTF8 без BOM достаточно добавить в начало строки "\uFEFF"

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #311 : Ноябрь 25, 2013, 02:48:42 am »
Кстати типовые средства 1С это не позволяют (народ извращается, но не факт, что эти извращения будут работать на новых платформах).

К тому же хотел бы компилить не только из 1с, но из нотепада (а менять кодировку цепочки модулей руками не очень хочется)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #312 : Ноябрь 25, 2013, 03:48:05 am »
Вернее там 3 байта

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #313 : Ноябрь 25, 2013, 04:32:14 am »
Вроде можно так решить:
fs.readFileSync(fileName).toString("utf8",3)

Вместо
fs.readFileSync(fileName, "utf8")

Правда сюда бы еще проверку первых трех байт (ну с этим если понадобится, буду разбираться позже)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #314 : Ноябрь 25, 2013, 04:39:01 am »
Вот так в итоге сделал:

                if (fs.readFileSync(fileName).toString("utf8",0,3) == "\ufeff")
                {
                    return fs.readFileSync(fileName).toString("utf8",3);
                }
                else
                {
                    return fs.readFileSync(fileName, "utf8");
                }