Oberon space

General Category => Общий раздел => Тема начата: Madzi от Июнь 18, 2013, 11:07:15 am

Название: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 11:07:15 am
А можно кратко рассказать о целях создания (примерный Roadmap) транслятора Оберона в JS ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 11:53:42 am
Так roadmap (то есть план разработки), или цель создания? :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 12:17:49 pm
Одно вытекает из другого.

Цель создания, как я понимаю - интерес к онлайн компиляции.
В своё время на оберон-коре было сообщение о подобном проекте OberonScript (http://www.ralphsommerer.com/obn.htm), который не только компилировался в JS, но и умел работать с DOM и т.п.

Поэтому интересно какие цели у онлайн компиляции? Как планируется развивать проект ?
Может быть будет общий интерес и повод посотрудничать.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 18, 2013, 12:27:22 pm
[Оффтоп]
Посмотрел на фотку Ralph Sommerer (автор OberonScript)
(http://www.ralphsommerer.com/ralpi.jpg)

что за такая высокомерная оберонщицкая рожа ?
о_О
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 12:41:32 pm
Одно вытекает из другого.

Цель создания, как я понимаю - интерес к онлайн компиляции.
В своё время на оберон-коре было сообщение о подобном проекте OberonScript (http://www.ralphsommerer.com/obn.htm), который не только компилировался в JS, но и умел работать с DOM и т.п.
OberonScript - это вообще не оберон. Это js с синтаксисом похожим на Оберон. Там же динамическая типизация!

Одной из целей oberonjs является получить статически типизированный язык для браузера, частично заменяющий оный js. Ибо достало. Но поскольку полностью заменить не выйдет, то транслироваться оно должно в человекочитаемый код, а не как обычно.

Другая цель - глубоко изучить Oberon-07/11. В процессе написания (vlad'ом) оного транлятора, и моего периодического консультирования, было расковырено много хм.. нюансов языка. Изучение языка через использование существующих реализаций (того же Astrobe) - это совсем не то.

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

Дальняя цель: потихоньку построить среду, в чем-то похожую на ОберонОСь в браузере, основываясь на DOM. Собственно прямо сейчас для начала этой работы не хватает поддержки статической модульности (то есть проверки на этапе компиляции). Динамическая модульность там делается внешними средствами и проблем не составляет.

Как-то так.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 12:50:16 pm
Понятно. А как же различные CoffeScript и иже с ними ?...

Для статической типизации в JS я использую YUI фреймворк. Там можно задать тип свойства и фреймворк будет следить за этим свойством. Для меня проблема была бы полностью решена, если бы существовала среда, которая позволяла бы осуществлять такую проверку в момент написания кода. Т.е. надстройка над JS.

А вот среда в браузере это дело интересное.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 01:08:30 pm
Понятно. А как же различные CoffeScript и иже с ними ?...

Для статической типизации в JS я использую YUI фреймворк. Там можно задать тип свойства и фреймворк будет следить за этим свойством. Для меня проблема была бы полностью решена, если бы существовала среда, которая позволяла бы осуществлять такую проверку в момент написания кода. Т.е. надстройка над JS.
КофеШкрипт и иже с ним - динамически типизированные. Там вообще везде беда - они мало того что динамически, так еще и слабо типизированы.

YUI, насколько я понимаю, статическую типизацию не вводит. То есть проверки опять таки все в рантайме. А статическая типизация - это когда у тебя на этапе компиляции (на самом деле автоматической верификации, ну да не суть) тебе проверяют соответствие типов, и это гарантирует (без проверок!) в рантайме корректность.

А вот среда в браузере это дело интересное.
Ну, сред как таковых в браузере полно в общем-то. И пока не слишком понятно насколько IDE в браузере востребованы и перспективны (хотя их уже довольно много, в том числе и для java - еклипс в браузере тоже бывает). Так что Оберон тут пока не обгоняет, но хотя бы догоняет остальных.

Вообще, иметь возможность продемонстрировать и дать попробовать язык сразу в браузере - это да, большое дело. Сильно снижает порог вхождения. Над этим и работаем. В плане обучения (да и просто фана) тут можно множество всякого интересного построить. И это будет доступно каждому с любого устройства где есть браузер.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 01:28:41 pm
Статическая типизация есть в TypeScript (версии JavaScript от Microsoft). Поскольку изменить JavaScript уже нет возможности, то среда имеющая статическую проверку кода JS была бы крайне полезна разработчикам. И таких сред пока нет.

На счёт среды для обучения (с возможностью сразу попробовать язык - полностью согласен), важное и нужное дело.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 18, 2013, 01:31:22 pm
Ну, сред как таковых в браузере полно в общем-то. И пока не слишком понятно насколько IDE в браузере востребованы и перспективны (хотя их уже довольно много, в том числе и для java - еклипс в браузере тоже бывает). Так что Оберон тут пока не обгоняет, но хотя бы догоняет остальных.

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

WDE для PascalABC.NET (http://pascalabc.net/WDE/) -- зачётная вещь для тех кто изучает или как-то пользуется обычным паскалем. Не нужно ничего устанавливать, простенькие примеры не нужно нигде сохранять -- написал, запустил, потестил -- и закрыл браузер ))
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 01:33:53 pm
Ну, сред как таковых в браузере полно в общем-то. И пока не слишком понятно насколько IDE в браузере востребованы и перспективны (хотя их уже довольно много, в том числе и для java - еклипс в браузере тоже бывает). Так что Оберон тут пока не обгоняет, но хотя бы догоняет остальных.

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

WDE для PascalABC.NET (http://pascalabc.net/WDE/) -- зачётная вещь для тех кто изучает или как-то пользуется обычным паскалем. Не нужно ничего устанавливать, простенькие примеры не нужно нигде сохранять -- написал, запустил, потестил -- и закрыл браузер ))
Я видел. Компиляция на стороне сервера, исполнение приложения - тоже (причем подвиндой). Со всеми вытекающими. Нет, это не наш путь :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 18, 2013, 01:35:30 pm
Компиляция на стороне сервера, исполнение приложения - тоже (причем подвиндой). Со всеми вытекающими.

Да это всё фигня. Главное -- идея ))
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 01:42:03 pm
Статическая типизация есть в TypeScript (версии JavaScript от Microsoft).
У TypeScript'а статическая типизация опциональна (как например и у ActionScript'a). Причем типизация, по моему, там так и осталась слабой. В общем, в топку.

Поскольку изменить JavaScript уже нет возможности,
Насколько я помню, тот же TypeScript по сути есть реализация новых фич жабаскрипта, которые в жабаскрипт еще не вошли.

то среда имеющая статическую проверку кода JS была бы крайне полезна разработчикам. И таких сред пока нет.
Такие среды в принципе не возможны. Для того, чтобы узнать тип переменной у языка с динамической типизацией, в общем случае необходимо приложение исполнить. Из за этого же у языков с динамической типизацией невозможен и точный автокомплит. Оберон - решает эти проблемы (но не покрывает полностью все области применения жабаскрипта в браузере, то есть в проекте сколько-то js-кода останется).

На счёт среды для обучения (с возможностью сразу попробовать язык - полностью согласен), важное и нужное дело.
Спасибо. Будем пилить.

Впрочем, можете присоединяться - все же в открытом доступе, мы не оберонкор с их тайными ложами. Для начала нужно облагородить хотя бы редактор кода. Скажем вкрутить туда Code Mirror (http://codemirror.net/) добавив туда поддержку Оберон-синтаксиса. Это чисто работа на фронтенд (то есть js).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 02:10:46 pm

На счёт среды для обучения (с возможностью сразу попробовать язык - полностью согласен), важное и нужное дело.
Спасибо. Будем пилить.

Впрочем, можете присоединяться - все же в открытом доступе, мы не оберонкор с их тайными ложами. Для начала нужно облагородить хотя бы редактор кода. Скажем вкрутить туда Code Mirror (http://codemirror.net/) добавив туда поддержку Оберон-синтаксиса. Это чисто работа на фронтенд (то есть js).
  боюсь , что только для этого и сгодится , с некоторыми оговорками,   - необходимо иметь ПОЛНОСТЬЮ некоторый минимум функционала реализованный на достаточно ВЫСОКОМ  уровне..  без этого, в современной реальности нельзя всерьез говорить о "среде для обучения".
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 02:13:26 pm

На счёт среды для обучения (с возможностью сразу попробовать язык - полностью согласен), важное и нужное дело.
Спасибо. Будем пилить.

Впрочем, можете присоединяться - все же в открытом доступе, мы не оберонкор с их тайными ложами. Для начала нужно облагородить хотя бы редактор кода. Скажем вкрутить туда Code Mirror (http://codemirror.net/) добавив туда поддержку Оберон-синтаксиса. Это чисто работа на фронтенд (то есть js).
  боюсь , что только для этого и сгодится , с некоторыми оговорками,   - необходимо иметь ПОЛНОСТЬЮ некоторый минимум функционала реализованный на достаточно ВЫСОКОМ  уровне..  без этого, в современной реальности нельзя всерьез говорить о "среде для обучения".

Дорогу осилит идущий :-) Тем более что это ж фан.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 02:50:05 pm
Цель создания, как я понимаю - интерес к онлайн компиляции.

Я там на виках (https://github.com/vladfolts/oberonjs/wiki) в двух предложения попытался сформулировать. Да, хотелось бы пощупать в каком виде может быть статическая типизация на вебе (на client side). А реализация всего этого на мерзком жабаскрипте делает такую реализацию доступной везде и для всех :)

В своё время на оберон-коре было сообщение о подобном проекте OberonScript (http://www.ralphsommerer.com/obn.htm), который не только компилировался в JS, но и умел работать с DOM и т.п.

valexey правильно откаментил - OberonScript оказался совсем не тем, чем мог бы быть. Так что пришлось пилить свое :)

Поэтому интересно какие цели у онлайн компиляции? Как планируется развивать проект ?

Если помечтать, то конечная цель - иметь нормальный промышленный язык в браузере на client side. В смысле мне нужен такой язык непосредственно для рабочих проектов, а не just for fun.
Сейчас по факту это на 100% исследовательский проект. Ближайшие планы - загрузка модулей и эксперименты как это может выглядеть в браузере. Работа с учебными примерами из виртовских книжек. После этого можно говорить о логическом завершении проекта "компилятор оберон-07/11 на вебе".
После - хочу поэкспериментировать непосредственно с языком на предмет приближения к прмышленному виду. Прежде всего на предмет включения хорошо зарекомендовавших себя решений (посмотреть как они влияют на язык в целом). Для начала, наверное, даже без изменения оригинального синтаксиса, только расширяя его. Куда потом -  трудно сказать, туда где будет интересно :)

Может быть будет общий интерес и повод посотрудничать.

Давай, давай! :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 02:58:06 pm
Ну, сред как таковых в браузере полно в общем-то. И пока не слишком понятно насколько IDE в браузере востребованы и перспективны (хотя их уже довольно много, в том числе и для java - еклипс в браузере тоже бывает). Так что Оберон тут пока не обгоняет, но хотя бы догоняет остальных.

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

WDE для PascalABC.NET (http://pascalabc.net/WDE/) -- зачётная вещь для тех кто изучает или как-то пользуется обычным паскалем. Не нужно ничего устанавливать, простенькие примеры не нужно нигде сохранять -- написал, запустил, потестил -- и закрыл браузер ))
это классный пример того,  что даже грамотная реализация  UI  не спасает от хреновой основы...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 03:26:53 pm
Цель создания, как я понимаю - интерес к онлайн компиляции.

Я там на виках (https://github.com/vladfolts/oberonjs/wiki) в двух предложения попытался сформулировать. Да, хотелось бы пощупать в каком виде может быть статическая типизация на вебе (на client side). А реализация всего этого на мерзком жабаскрипте делает такую реализацию доступной везде и для всех :)
Не уверен, что для этого подходит Oberon в том виде, в котором он сейчас существует, но в целом - поддерживаю.

В своё время сам пытался сделать нечто подобное (http://opcl.madzi.ru/), но для Active Oberon. Реализовал сканер, часть парсера. Потом понял бесперспективность идеи и отложил проект.

Если помечтать, то конечная цель - иметь нормальный промышленный язык в браузере на client side. В смысле мне нужен такой язык непосредственно для рабочих проектов, а не just for fun.
Сейчас по факту это на 100% исследовательский проект. Ближайшие планы - загрузка модулей и эксперименты как это может выглядеть в браузере. Работа с учебными примерами из виртовских книжек. После этого можно говорить о логическом завершении проекта "компилятор оберон-07/11 на вебе".
В целом звучит привлекательно, но стоит вспомнить о GWT и прочих подобных вещах. В своё время был большой бум по их поводу, но потом всё сошло на нет, а сейчас на проекты с GWT смотрят мягко говоря "странно". Интересно почему ?

Я себе пока вижу такую цель - создать приятную онлайн среду для работы с обероном (без упора на компиляцию в js). Пойду смотреть, что там в MirrorCode надо подкрутить :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 03:32:22 pm
Вроде там (http://codemirror.madzi.ru/mode/oberon07/) всё просто. Но оформление кода просто ужасно :(.

Печально смотреть на мешанину, когда привык к хорошему (YUI). :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 03:42:56 pm
Вроде там (http://codemirror.madzi.ru/mode/oberon07/) всё просто. Но оформление кода просто ужасно :(.

Печально смотреть на мешанину, когда привык к хорошему (YUI). :)
Круто. А почему стандартные типы не подсвечиваются?

github'ом владеешь? Сможешь изменить нашу дефолтную страничку и сделать пул-реквест? (https://github.com/vladfolts/oberonjs , файлик странички конкретно вот: https://github.com/vladfolts/oberonjs/blob/master/browser/oberonjs.html )
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 03:45:07 pm
На всякий случай, вот что зарезервировано в Oberon-07/11. То есть ключевые слова и символы:

+ := ARRAY IMPORT THEN
- ^ BEGIN IN TO
* = BY IS TRUE
/ # CASE MOD TYPE
~ < CONST MODULE UNTIL
& > DIV NIL VAR
. <= DO OF WHILE
, >= ELSE OR
; .. ELSIF POINTER
| : END PROCEDURE
( ) FALSE RECORD
[ ] FOR REPEAT
{ } IF RETURN
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 03:45:45 pm
Да, запулю, но чуть попозже (когда до дома доберусь).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 03:49:43 pm
На всякий случай, вот что зарезервировано в Oberon-07/11. То есть ключевые слова и символы:

+ := ARRAY IMPORT THEN
- ^ BEGIN IN TO
* = BY IS TRUE
/ # CASE MOD TYPE
~ < CONST MODULE UNTIL
& > DIV NIL VAR
. <= DO OF WHILE
, >= ELSE OR
; .. ELSIF POINTER
| : END PROCEDURE
( ) FALSE RECORD
[ ] FOR REPEAT
{ } IF RETURN

Поправил по этому списку. А куда LOOP дели ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 04:11:07 pm
На всякий случай, вот что зарезервировано в Oberon-07/11. То есть ключевые слова и символы:

+ := ARRAY IMPORT THEN
- ^ BEGIN IN TO
* = BY IS TRUE
/ # CASE MOD TYPE
~ < CONST MODULE UNTIL
& > DIV NIL VAR
. <= DO OF WHILE
, >= ELSE OR
; .. ELSIF POINTER
| : END PROCEDURE
( ) FALSE RECORD
[ ] FOR REPEAT
{ } IF RETURN

Поправил по этому списку. А куда LOOP дели ?
Выпилили :-) Зато теперь TRUE/FALSE это ключевые слова, а не предопределенные идентификаторы.

Правда вот INTEGER и прочие стандартные типы - это предопределенные идентификаторы, которые могут быть перекрыты локальными определениями.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 04:21:18 pm
Правда вот INTEGER и прочие стандартные типы - это предопределенные идентификаторы, которые могут быть перекрыты локальными определениями.

Вообще в репорте не написано (как обычно) - могут или не могут :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 04:26:29 pm
Правда вот INTEGER и прочие стандартные типы - это предопределенные идентификаторы, которые могут быть перекрыты локальными определениями.

Вообще в репорте не написано (как обычно) - могут или не могут :)

Ну, поскольку они там ничем не выделяются среди других идентификаторов (кроме того, что предопределенный процедуры-функции нельзя сувать в процедурные типы), то должны действовать общие правила. Ну, то есть как минимум в данной конкретной функции точно локальным определением их можно перекрыть. А вот что будет на уровне модуля - хз. Возможно должна быть коллизия.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 04:29:42 pm
Вообще эта пляска с типами мне не очень понятна. Я бы сделал предопределённые типы INT8, INT16, INT32, INT64, ..., а INTEGER - переопределяемым, который смотрел бы (по умолчанию), на определённый тип (например, INT32).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 04:36:06 pm
Основное правило - что не запрещено ,  то разрешено.. если не вступает в противоречие с другими определениями определенными ЯВНО , и их  прямыми следствиями
(кроме того, что предопределенный процедуры-функции нельзя сувать в процедурные типы)
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 04:38:41 pm
Вообще эта пляска с типами мне не очень понятна. Я бы сделал предопределённые типы INT8, INT16, INT32, INT64, ..., а INTEGER - переопределяемым, который смотрел бы (по умолчанию), на определённый тип (например, INT32).
Там вообще всё печально с этим. Ведь в Обероне-07/11 это и руками не сделать. Если раньше можно было написать TYPE Foo = INTEGER, то теперь нельзя. Алиасы теперь возможны только для структурных типов (массивы, записи).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 04:45:08 pm
Ну, поскольку они там ничем не выделяются среди других идентификаторов (кроме того, что предопределенный процедуры-функции нельзя сувать в процедурные типы), то должны действовать общие правила.

Нет общих правил. Я ж говорил - там  с областями видимости Вирт откровенно сэкономил. В моей реализации предопределенные идентификаторы присутсвуют в текущей области видимости. Так что ты получишь соответсвующую ошибку :) И это, наверное, правильно. Потому как смысла перекрывать стандартные штуки (при том, что их и так немного) вроде как нет никакого.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 04:47:43 pm
Обычно наоборот, что не запрещено - то разрешено.

Вообщем, всё печально :(... :) но это не огорчает
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 04:47:57 pm
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 05:01:27 pm
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Это жесть. В погоне за простотой инструмента рискуют выплеснуть ребёнка вместе с водой. Всё-таки трансляцию лучше оставить оптимизирующему компилятору. Для такого статически сильного языка как Оберон, компиляторная оптимизация должна быть очень высока, а Вирт пытается её свести на нет... Почему ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 18, 2013, 05:06:10 pm
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Это жесть. В погоне за простотой инструмента рискуют выплеснуть ребёнка вместе с водой. Всё-таки трансляцию лучше оставить оптимизирующему компилятору. Для такого статически сильного языка как Оберон, компиляторная оптимизация должна быть очень высока, а Вирт пытается её свести на нет... Почему ?
Чтобы не усложнять компилятор :-) У него же идея - язык который эффективно реализуется посредством простой (почти наивной) реализации компилятора. Поэтому inline функций и не предполагается.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 05:06:50 pm
не понял, что я  не могу вызвать, скажем  S:=Sum(a, b, step, ABS); ?

Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
по большому счету пофигу..  с одной стороны ничего не стоит сделать обертку и вызвать S:=Sum(a, b, step, abs); , с другой стороны, предопределенных функций настолько мало и они, слишком специфичны, для того чтобы всерьез жалеть об этом.
Гораздо более гнилая проблема - отсутствие стандартной библиотеки...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 05:25:50 pm
Угу. Явно оговорено. Видимо подразумевается, что стандартные функции транслируются напрямую в инструкции машины, поэтому указателя может и не быть.
Это жесть. В погоне за простотой инструмента рискуют выплеснуть ребёнка вместе с водой.

Ребенка уже выплеснули: oberon07/11 это ни разу не "general purpose language" (не смотря на то, что сам Вирт в репорте его так позиционирует). Это болванка для  general purpose language :) Поэтому я его и взял для экспериментов. Хотя наличие в репорте узкоспециализированных вещей типа PACK/UNPK ставят под сомнение даже такое утверждение. Т.е., это болванка, где нет ничего лишнего, но все же с хорошей поправкой на то, что было нужно Вирту для реализации его очередного проекта. Последняя более-менее успешная попытка сделать general purpose language из оберона при постулируемой максимальной простоте языка/компилятора - это КП/ББ.

Всё-таки трансляцию лучше оставить оптимизирующему компилятору.

Оптимизирующий компилятор сам по себе противорчеит идеям оберона. info21 подтвердит :) Хотя, конечно, никаких проблем с тем, чтобы генерить заглушки для стандартных функций в случае получения сслыки на них нет.
Или вот, например, отсутствие forward declaration для процедур в современном ЯВУ выглядит тоже весьма беспощадно... Хотя компилтяор усложняется совсем чуть-чуть.

Для такого статически сильного языка как Оберон, компиляторная оптимизация должна быть очень высока, а Вирт пытается её свести на нет... Почему ?

Вирт ничего не пытается. Он решает свои задачи. С оглядкой на свой же предыдущий опыт. Оптимизирующие компилятооры, очевидно, его интересуют мало :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 05:39:31 pm
Вирт ничего не пытается. Он решает свои задачи. С оглядкой на свой же предыдущий опыт. Оптимизирующие компилятооры, очевидно, его интересуют мало :)

Да, еще я так понимаю, он студентов учит. Разработка компилятора подмножества оберона - неплохая практика и по силам студентам.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 18, 2013, 05:46:59 pm
Правда вот INTEGER и прочие стандартные типы - это предопределенные идентификаторы, которые могут быть перекрыты локальными определениями.

Вообще в репорте не написано (как обычно) - могут или не могут :)

Предопределённые идентификаторы могут быть перекрыты по определению.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 05:53:31 pm
Предопределённые идентификаторы могут быть перекрыты по определению.

Ссылку на определение плз.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 18, 2013, 06:01:25 pm
Предопределённые идентификаторы могут быть перекрыты по определению.

Ссылку на определение плз.
А нету ссылки  :)   К тому же, наличие ссылки ещё не гарантирует её истинность.

Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули. В остальном они подчиняются общим правилам видимости, принятым в языках с блочной структурой. То есть могут быть перекрыты в любом блоке.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 06:11:19 pm

Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули
очень , очень дерьмовая аналогия (концепция модулей отличается от концепции пространства имен), кроме того , оберон 07 не имеет блочной структуры (как СИ\С++)..  а имеет  четко выраженную унифицированную секционную структуру...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 06:13:24 pm
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

Объясняю. Когда я реализовывал предопределенные идентификаторы я их "представил" как включенные в каждую новую область видиморсти (scope). Еще можно себе представить, что каждый scope наследуется от базового scope, в котором есть эти идентификаторы. А перекрываться могут только идентификаторы из родительского scope (впрочем даже этого у Вирта не описано, хе-хе). Почему мое "представление" противоречит определению и какому?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 18, 2013, 06:16:36 pm
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 06:18:30 pm
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
на здоровье  ;)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 06:24:49 pm
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

Объясняю. Когда я реализовывал предопределенные идентификаторы я их "представил" как включенные в каждую новую область видиморсти (scope). Еще можно себе представить, что каждый scope наследуется от базового scope, в котором есть эти идентификаторы. А перекрываться могут только идентификаторы из родительского scope (впрочем даже этого у Вирта не описано, хе-хе). Почему мое "представление" противоречит определению и какому?
если это явно не запрещено и не противоречит другим явным определениям и следствиям из них то они должны перекрываться... гыыы например:
PROCEDURE ABS(X:REAL):REAL;
BEGIN
....
RETURN ABS(X)
END ABS;
должна восприниматься как нормальная рекурсия...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 06:26:42 pm
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)

Ага. Собственно "области видимости" это вообще громко сказано. По факту они появляются только в процедурах и вложенных процедурах (прям как в жабаскрипте - ха-ха). А поскольку вложенные процедуры Вирт собирался выпилить... то можно будет только говорить об области процедуры и охватывающего ее модуля... и все.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 06:32:03 pm
По факту они появляются только в процедурах и вложенных процедурах (прям как в жабаскрипте - ха-ха). А поскольку вложенные процедуры Вирт собирался выпилить... то можно будет только говорить об области процедуры и охватывающего ее модуля... и все.
именно так... только одно уточнение .. все идентификаторы объявляются в секциях....(либо модулей, либо процедур)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 06:34:41 pm
если это явно не запрещено и не противоречит другим явным определениям и следствиям из них то они должны перекрываться... гыыы например:

Да нет там в репорте нормальных определенний про области видимости. Нет.
Цитировать
The scope extends textually from the point of the declaration to the end of the block (procedure or module) to which the declaration belongs and hence to which the object is local.

Дальше каждый понимает в меру своей испорченности. Я ж говорю - даже про перекрытие имен явно не сказано что должно быть - ошибка компиляции или локальное перекрывает глобальное. А если придираться - то даже не сказано о том, что из локального скопа виден глобальный (ладно, это можно списать на "common sense").
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 06:42:33 pm
если это явно не запрещено и не противоречит другим явным определениям и следствиям из них то они должны перекрываться... гыыы например:

Да нет там в репорте нормальных определенний про области видимости. Нет.
Цитировать
The scope extends textually from the point of the declaration to the end of the block (procedure or module) to which the declaration belongs and hence to which the object is local.

Дальше каждый понимает в меру своей испорченности. Я ж говорю - даже про перекрытие имен явно не сказано что должно быть - ошибка компиляции или локальное перекрывает глобальное. А если придираться - то даже не сказано о том, что из локального скопа виден глобальный (ладно, это можно списать на "common sense").
этот же "common sense " и требует перекрытия.. коль скоро явно не декларируется обратное, но имеются отношения глобальный- локальный...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 06:45:59 pm
впрочем, давайте назовем это особенностью реализации Влада.. и успокоимся... только Влад..- с вас список  этих "особенностей"  :D
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 18, 2013, 07:00:19 pm
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

Объясняю. Когда я реализовывал предопределенные идентификаторы я их "представил" как включенные в каждую новую область видиморсти (scope). Еще можно себе представить, что каждый scope наследуется от базового scope, в котором есть эти идентификаторы. А перекрываться могут только идентификаторы из родительского scope (впрочем даже этого у Вирта не описано, хе-хе). Почему мое "представление" противоречит определению и какому?
При компиляции модуля в процессе инициализации создаётся новая область видимости, затем туда добавляются все предопределённые идентификаторы, и потом уже выполняется всё остальное. То есть предопределённые идентификаторы обычно включают не в "каждую новую область видимости", а в область видимости каждого модуля. Это не одно и то же, потому что свои scope есть и у процедур и функций (у блоков). Так как все блоки могут находиться только в модулях, то получается, что предопределённые идентификаторы видны отовсюду, и, следовательно, могут быть перекрыты в любом блоке.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 18, 2013, 07:06:33 pm
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
Наверно стОит пояснить, что именно забавно. Как так, блоки есть, правила видимости есть, а язык фдрук "не имеет блочной структуры"?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 07:07:26 pm
Так как все блоки могут находиться только в модулях, то получается, что предопределённые идентификаторы видны отовсюду, и, следовательно, могут быть перекрыты в любом блоке.

Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)? Если существующие реализации такое позволяют, то я бы предположил, что это только потому, что его было проще реализовать так как рассказывает igor - как некий root scope. Мне было проще по-другому. Мало того, я считаю, что по-моему - правильнее :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 18, 2013, 07:28:32 pm
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист Вася вообще не знаком с тригонометрией  :), но ему позарез нужен этот идентификатор для чего-то своего. Он пишет своё объявление Pi, которое автоматически перекрывает предопределённое, и никаких проблем не возникает (по крайней мере до тех пор, пока ему не понадобится число пи).

Что касается идентификатора INTEGER, то я бы его сделал ключевым словом. Возможно, Н.Вирт не хотел портить численные характеристики своего языка (раздувать список ключевых слов)  :)

Мне было проще по-другому. Мало того, я считаю, что по-моему - правильнее :)
Возможно. Не вижу смысла с Вами спорить. Всё, что сказано выше мной, - это просто моё мнение.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 18, 2013, 07:34:03 pm
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
Наверно стОит пояснить, что именно забавно. Как так, блоки есть, правила видимости есть, а язык фдрук "не имеет блочной структуры"?
конечно.. стоит - просто посмотрите на описание ЯП и убедитесь что блоков кода - в том смысле , как они понимаются в
СИ подобных яву -  нет (операторные скобки), более того,  нет их даже в смыслеПаскаля ( Begin... End) - разумеется можно назвать секции обьявлений (TYPE.. VAR) - блоками..  но это не то.. обратите внимание на приведенный Владом кусок описания О7 - в нем Вирт использует слово block просто как сокращение связки (procedure or module)... без всякого доп. смысла.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 07:42:40 pm
Проверте репозитории. Я залил подсветку.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 09:01:53 pm
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист

Это все правда, но в обероне нет "Pi". Есть пара десятков зарезервированных идентификаторов, причем КАПСОМ. Представить ситуацию, когда их надо будет позарез переопределить - не могу. Проблемы, конечно, могут быть при добавлении чего-то нового в следующей ревизии языка... Но Вирт обычно убирает, а не добавляет ;) И вообще не парится обратной совместимостью.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 18, 2013, 09:03:07 pm
Проверте репозитории. Я залил подсветку.

Спасибо! Только оно почему-то мерджить автоматом не хочет. Буду разбираться.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Июнь 18, 2013, 09:23:18 pm
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист Вася вообще не знаком с тригонометрией  :), но ему позарез нужен этот идентификатор для чего-то своего. Он пишет своё объявление Pi, которое автоматически перекрывает предопределённое, и никаких проблем не возникает (по крайней мере до тех пор, пока ему не понадобится число пи).

Что касается идентификатора INTEGER, то я бы его сделал ключевым словом. Возможно, Н.Вирт не хотел портить численные характеристики своего языка (раздувать список ключевых слов)  :)

Мне было проще по-другому. Мало того, я считаю, что по-моему - правильнее :)
Возможно. Не вижу смысла с Вами спорить. Всё, что сказано выше мной, - это просто моё мнение.

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

А не лучше ли использовать namespace, который автоматом даётся в модуле.

Пример
В самом модуле Math
CONST
  Pi = 3.14+100500
IMPORT Math;

A := Math.Pi;
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Июнь 18, 2013, 09:28:25 pm
А почему вы хотите реализовать именно oberon 07? Можно взять оберон 2, он не так сильно урезан. И type foo = integer; есть.

На каком уровне будет совместимость?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 18, 2013, 09:50:31 pm
А почему вы хотите реализовать именно oberon 07? Можно взять оберон 2, он не так сильно урезан. И type foo = integer; есть.

На каком уровне будет совместимость?
Потому что 07 проще, соответственно  проще реализовать и проще обкатывать свои идеи.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 19, 2013, 08:14:45 am
То есть эдакая мина, вроде область передвижения свободная, но где то может рвануть.

А не лучше ли использовать namespace, который автоматом даётся в модуле.

Пример
В самом модуле Math
CONST
  Pi = 3.14+100500
IMPORT Math;

A := Math.Pi;
Я правильно Вас понял (?), что Вы предпочли бы писать так:
VAR a: Types.INTEGER;

Непонятно, Вы против предопределённых идентификаторов вообще, или Вам не понравился мой пример с идентификатором Pi?
Полезность предопределённых идентификаторов у меня не вызывает сомнения. Но FALSE, TRUE, INTEGER и пр. должны быть ключевыми словами (ИМХО).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 19, 2013, 08:34:07 am
На самом деле, прежде чем куда-то расширять Оберон-07/11 нужно просто и банально переписать репорт, где, не скупясь на страницы, описать все те тонкости и механизмы о которых Вирт умолчал. Те же области видимости например. Работу с памятью. И так далее. Ну будет репорт не 16, а 50 страниц, зато не будет неоднозначности толкования языка.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 19, 2013, 08:45:33 am
На самом деле, прежде чем куда-то расширять Оберон-07/11 нужно просто и банально переписать репорт, где, не скупясь на страницы, описать все те тонкости и механизмы о которых Вирт умолчал. Те же области видимости например. Работу с памятью. И так далее. Ну будет репорт не 16, а 50 страниц, зато не будет неоднозначности толкования языка.
ну нет..  а куда вы денете сформировавшийся (в коровнике) и нарождающийся (у нас ) штат "Оберапостолов" и "Виртомессий"?  :D - ведь сдохнут же без хавки...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 19, 2013, 10:59:01 am
На самом деле, прежде чем куда-то расширять Оберон-07/11 нужно просто и банально переписать репорт, где, не скупясь на страницы, описать все те тонкости и механизмы о которых Вирт умолчал. Те же области видимости например. Работу с памятью. И так далее. Ну будет репорт не 16, а 50 страниц, зато не будет неоднозначности толкования языка.
Поддерживаю. Такому стандарту будут куда более рады, чем 16 страницам. По крайней мере он обеспечит единство реализации и у желающих не будет опасения, что написанная библиотека окажется не валидной со следующей реализацией компилятора.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 19, 2013, 12:22:51 pm
На самом деле, прежде чем куда-то расширять Оберон-07/11 нужно просто и банально переписать репорт, где, не скупясь на страницы, описать все те тонкости и механизмы о которых Вирт умолчал. Те же области видимости например. Работу с памятью. И так далее. Ну будет репорт не 16, а 50 страниц, зато не будет неоднозначности толкования языка.
Поддерживаю. Такому стандарту будут куда более рады, чем 16 страницам. По крайней мере он обеспечит единство реализации и у желающих не будет опасения, что написанная библиотека окажется не валидной со следующей реализацией компилятора.

Осталось только найти энтузазистов, готовых сделать всё это )))
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Kemet от Июнь 19, 2013, 01:03:54 pm
Совершенно бессмысленно рассматривать Оберон-07 в отрыве от Оберона, и сложившихся подходов при проектировании и реализации оберонистых компиляторов, подменяя общепринятые нормы своими представлениями. Как из компилятора языка Оберон получить компилятор Оберон-07 описано самим Виртом, и из этого описания очевидно, что модификация никак не меняет основополагающих механизмов
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 19, 2013, 01:07:43 pm
Вот только сообщение о языке Оберон-07 не содержит отсылки к сообщениям о языках Оберон*. Таким образом, разработчик не знакомый ранее с Оберонами будет строить реализацию Оберона-07 на основе собственных догадок.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 19, 2013, 01:14:39 pm
Вот только сообщение о языке Оберон-07 не содержит отсылки к сообщениям о языках Оберон*. Таким образом, разработчик не знакомый ранее с Оберонами будет строить реализацию Оберона-07 на основе собственных догадок.
Значит, по мнению Kemet'а, этот разработчик будет заниматься совершенно бессмысленным занятием )))
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 19, 2013, 01:21:29 pm
Совершенно бессмысленно рассматривать Оберон-07 в отрыве от Оберона, и сложившихся подходов при проектировании и реализации оберонистых компиляторов, подменяя общепринятые нормы своими представлениями. Как из компилятора языка Оберон получить компилятор Оберон-07 описано самим Виртом, и из этого описания очевидно, что модификация никак не меняет основополагающих механизмов
Описано где? (кроме того, название Oberon-07/11 по факту придумано сообществом, сам Вирт его называет просто Oberon - просто это самая свежая ревизия яп. оберона - полная, не урезанная версия)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: igor от Июнь 19, 2013, 02:10:16 pm
(кроме того, название Oberon-07/11 по факту придумано сообществом, сам Вирт его называет просто Oberon - просто это самая свежая ревизия яп. оберона - полная, не урезанная версия)

Самая свежая, пожалуй, Oberon-12 (по моим данным от 01.07.2012).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 19, 2013, 02:17:38 pm
(кроме того, название Oberon-07/11 по факту придумано сообществом, сам Вирт его называет просто Oberon - просто это самая свежая ревизия яп. оберона - полная, не урезанная версия)

Самая свежая, пожалуй, Oberon-12 (по моим данным от 01.07.2012).
Я имел ввиду из официально опубликванных на сайте университета. Черновики не в счет.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 20, 2013, 02:09:56 pm
Изменения доехали. Можно пощупать: http://oberspace.dyndns.org/oberonjs.html
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 20, 2013, 02:13:06 pm
По ощущениям - значительно лучше чем было, чуть лучше чем редактор в ББ. Но по удобству пока не дотягивает до специализированного редактора Astrobe или редактора от akron1. :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 20, 2013, 02:16:56 pm
Теперь осталось написать компилятор оберона-07 на обероне-07 (или доработать кодогенератор компилятора akron'а) и скомпилировать его этим js-ным компилятором и затем заменить! Небось ашыпки исправятся при этом...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 20, 2013, 02:20:43 pm
Теперь осталось написать компилятор оберона-07 на обероне-07 (или доработать кодогенератор компилятора akron'а) и скомпилировать его этим js-ным компилятором и затем заменить! Небось ашыпки исправятся при этом...
Компилятор - довольно специфическая задача, так что львиная доля ошибок будет пропущена. Поэтому я бы предпочел просто использовать компилятор для прикладных нужд :-) Как показывает практика, именно там ошибки и вылезают (горячий пример - GPCP писан на КП и компилит сам себя. Несмотря на это я напоролся там на банальную ошибку как только попробовал его использовать для решения простейшей задачи. Аналогично с ББ).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 20, 2013, 02:47:27 pm
Я имел ввиду из официально опубликванных на сайте университета. Черновики не в счет.
Тем не менее черновики содержат наиболее передовые мысли (траекторию развития продукта).

Так что я начал перевод черновика на гуглах (для последующего обсуждения и дополнения). Если есть желающие присоединится - присылайте PM с гугловской электронкой.

Как будем обсуждать ?

Там у Вирта такие перлы (недо)понимания имеются. Например, хотите реализовывать модуль SYSTEM - реализуйте, но можете не реализовывать. Или тип T является расширением типа T0, если он равен типу T0.

Вообщем, welcome.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Июнь 20, 2013, 05:03:10 pm
Как написать компилятор языка оберон 07, без самого стандарта на язык оберон 07. :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 20, 2013, 05:55:06 pm
Как написать компилятор языка оберон 07, без самого стандарта на язык оберон 07. :)
Ну так несколько его компиляторов уже написаны, значит это возможно ))
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 20, 2013, 06:19:47 pm
Тем не менее черновики содержат наиболее передовые мысли (траекторию развития продукта).

Я смотрел черновик и "откатился" к репорту 2011. Потому что домысливать/исправлять в черновике надо больше, и все равно не угадаешь чего там Вирт хотел. По поводу обсуждения - я уже пытался вот здесь: https://sites.google.com/site/oberonreport/question-list-regarding-to-oberon-07-report-to-be-clarified-by-wirth
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 20, 2013, 07:18:16 pm
Тем не менее черновики содержат наиболее передовые мысли (траекторию развития продукта).

Я смотрел черновик и "откатился" к репорту 2011. Потому что домысливать/исправлять в черновике надо больше, и все равно не угадаешь чего там Вирт хотел. По поводу обсуждения - я уже пытался вот здесь: https://sites.google.com/site/oberonreport/question-list-regarding-to-oberon-07-report-to-be-clarified-by-wirth

По поводу твоих вопросов:
1. однозначно нельзя (не VAR параметр не может участвовать в присвоении слева)

2. В целом присвоение таким переменным возможно, но не для параметров процедур.

3. В данном случае строка является выражением, которые допустимы как формальный параметр процедуры.

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

5. В присвоении участвуют переменные одного типа. ARRAY 4 OF CHAR и ARRAY 8 OF CHAR - разные типы, но копирование между ними должно существовать (можно написать цикл, но процедура COPY рассматривается как низкоуровневая реализация такого цикла).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 20, 2013, 07:23:08 pm
Тем не менее черновики содержат наиболее передовые мысли (траекторию развития продукта).

Я смотрел черновик и "откатился" к репорту 2011. Потому что домысливать/исправлять в черновике надо больше, и все равно не угадаешь чего там Вирт хотел. По поводу обсуждения - я уже пытался вот здесь: https://sites.google.com/site/oberonreport/question-list-regarding-to-oberon-07-report-to-be-clarified-by-wirth

По поводу твоих вопросов:
1. однозначно нельзя (не VAR параметр не может участвовать в присвоении слева)

2. В целом присвоение таким переменным возможно, но не для параметров процедур.

3. В данном случае строка является выражением, которые допустимы как формальный параметр процедуры.

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

5. В присвоении участвуют переменные одного типа. ARRAY 4 OF CHAR и ARRAY 8 OF CHAR - разные типы, но копирование между ними должно существовать (можно написать цикл, но процедура COPY рассматривается как низкоуровневая реализация такого цикла).
Нет, так не пойдет :-) Любое утверждение должно подкрепляться ссылкой на выдержку из Oberon-07/11 report.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Июнь 20, 2013, 08:13:45 pm
По поводу твоих вопросов:
1. однозначно нельзя (не VAR параметр не может участвовать в присвоении слева)

Там речь не о VAR параметре, а об указателях. Если смотреть prior art - то "константный указатель" (не-VAR массив/рекорд) и "указатель на константу" (нет такого в обероне) совсем разные вещи. По константному указателю менять объект можно (C++).

2. В целом присвоение таким переменным возможно, но не для параметров процедур.

Просто надо нормально прописать ссылки, чтоб не скакать по репорту в догадках.

3. В данном случае строка является выражением, которые допустимы как формальный параметр процедуры.

В репорте про это - ни слова. И вообще с описанием "что такое строка" очень плохо.

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

А вот ребята на другом форуме (ссылка пробегала) думают с точностью до наоборот.

5. В присвоении участвуют переменные одного типа. ARRAY 4 OF CHAR и ARRAY 8 OF CHAR - разные типы, но копирование между ними должно существовать (можно написать цикл, но процедура COPY рассматривается как низкоуровневая реализация такого цикла).

Процедура COPY рассматривается (буквально) как "v := x". Все. Почему и возник вопрос - может она таки чем-нибудь отличается от такого определения (например, копирует массивы разных размеров и если да, то как). В своем компиляторе я ее таки реализовал (из любви к букве репорта), но делает она именно то, что прописано в репорте - v := x.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Июнь 21, 2013, 01:56:00 am
По поводу компилятора (который онлайн):
Не знаю, правильно ли выражаюсь (не силен в терминологии):
1) его можно будет встроить в код (плагин), работающий на js? Если да, то насколько это сложно, и вкратце механизм бы (ну или где об этом почитать)
2) в нем можно использовать любые файлы js скриптов? (имею в виду не браузер, а если встроить в свое ПО из п.1.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 21, 2013, 03:19:43 am
По поводу компилятора (который онлайн):
Не знаю, правильно ли выражаюсь (не силен в терминологии):
1) его можно будет встроить в код (плагин), работающий на js? Если да, то насколько это сложно, и вкратце механизм бы (ну или где об этом почитать)
2) в нем можно использовать любые файлы js скриптов? (имею в виду не браузер, а если встроить в свое ПО из п.1.
Сам компилятор написан на обычном js и он из оберона генерирует обычный же js-код. Соответственно с ним (компилятором) и с тем что он сгенерировал (из обероновских модулей) можно делать в точности то же самое что и с рукописным js-кодом.

Соответственно браузеру для выполнения этого кода никаких плагинов не нужно.

Если у вас есть десктоп-приложение, которое исполняет js-код, то оно же сможет и исполнять тот код который получается после компиляции/трансляции Оберона-07/11, ибо на выходе там обычный js-код.

Из Оберона, через "псевдомодуль" JS можно дергать любой js-код. А про файлы js ничего не знает (да и модулей в js не существует).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 21, 2013, 05:35:55 am
А есть документация на этот компилятор и его библиотеки? В частности, на псевдомодуль JS...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 21, 2013, 05:40:45 am
А есть документация на этот компилятор и его библиотеки? В частности, на псевдомодуль JS...
А нет библиотек (помимо оберонрепортовских) :-) Есть только JS.  А в JS есть только вызов произвольной же js-функции. JS.jsFunctionName(arg1,arg2,...);

Для чего-то более заковыристого можно воспользоваться тем, что в js есть функция eval.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 21, 2013, 05:44:24 am
А есть документация на этот компилятор и его библиотеки? В частности, на псевдомодуль JS...
А нет библиотек (помимо оберонрепортовских) :-) Есть только JS.  А в JS есть только вызов произвольной же js-функции. JS.jsFunctionName(arg1,arg2,...);

Для чего-то более заковыристого можно воспользоваться тем, что в js есть функция eval.

"Дубовые требования" будете реализовывать?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 21, 2013, 06:00:07 am
А есть документация на этот компилятор и его библиотеки? В частности, на псевдомодуль JS...
А нет библиотек (помимо оберонрепортовских) :-) Есть только JS.  А в JS есть только вызов произвольной же js-функции. JS.jsFunctionName(arg1,arg2,...);

Для чего-то более заковыристого можно воспользоваться тем, что в js есть функция eval.

"Дубовые требования" будете реализовывать?
В планах вроде нет. С одной стороны дубовые требования заточаны под другой язык - под Оберон-2, а с другой они совершенно не достаточны в качестве стандартной либы. Ну и наконец он и совершенно не учитывают специфику js-окружения и вообще браузерного бытия.

Но ты можешь попробовать реализовать :-) Они же не в компилятор вшиваются.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 21, 2013, 09:34:02 am
А куда багрепорты слать? (Только без всяких там регистраций в гитхабах и прочей мутотени)...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 21, 2013, 10:17:27 am
А куда багрепорты слать? (Только без всяких там регистраций в гитхабах и прочей мутотени)...
Регистрация на какой-нибудь багзилле все равно нужна, так что да, на гитхаб. Сюда: https://github.com/vladfolts/oberonjs/issues

В общем то всё аналогично багрепортам gpcp.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 21, 2013, 10:27:39 am
мне багрепорты/пожелания можно сюда (http://trac.mysvn.ru/madzi/Oberon/report) отправлять.
Вроде без регистрации работает.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 21, 2013, 10:36:34 am
А куда багрепорты слать? (Только без всяких там регистраций в гитхабах и прочей мутотени)...
Регистрация на какой-нибудь багзилле все равно нужна, так что да, на гитхаб. Сюда: https://github.com/vladfolts/oberonjs/issues

В общем то всё аналогично багрепортам gpcp.

Хотя конечно никто не запрещает о баге написать на форуме. Просто через гитхаб удобней всего - все баги в одном месте.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 21, 2013, 03:34:40 pm
А вот и одна из целевых платформ данного компилятора: http://www.opennet.ru/opennews/art.shtml?num=37241
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 22, 2013, 08:33:19 am
Улучшенную версию подсветки синтаксиса можно посмотреть тут (http://codemirror.madzi.ru/mode/oberon07/).
А через пару минут в репозиториях всех участников.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 23, 2013, 07:46:00 pm
Улучшенную версию подсветки синтаксиса можно посмотреть тут (http://codemirror.madzi.ru/mode/oberon07/).
А через пару минут в репозиториях всех участников.
Изменения благополучно интегрированы в мейнстрим, ну и на демо-страничке всё обновилось. Можно пробовать: http://oberspace.dyndns.org/oberonjs.html
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Berserker от Июнь 23, 2013, 08:22:57 pm
Опера 12.01. Демо-страница онлайн компилятора. Лексема «BEGIN» чёрная, а не фиолетовая.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 23, 2013, 09:04:23 pm
Опера 12.01. Демо-страница онлайн компилятора. Лексема «BEGIN» чёрная, а не фиолетовая.
Да, это же и в хроме. А вот если после BEGIN там воткнуть пробел - всё становится ок.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 23, 2013, 09:05:36 pm
Опера 12.01. Демо-страница онлайн компилятора. Лексема «BEGIN» чёрная, а не фиолетовая.
Да, это же и в хроме. А вот если после BEGIN там воткнуть пробел - всё становится ок.
То же самое касается и других ключевых слов - если после них только лишь конец строки, то они не распознаются. Например VAR.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 23, 2013, 10:39:39 pm
Пофиксил, плюс добавил автоматический отступ строк.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 24, 2013, 06:13:34 pm
Пофиксил, плюс добавил автоматический отступ строк.
Интегрировано.

Два вопроса:
1) можно ли сделать автоотступ не в один пробел? Обычно все же хотя бы 3, или 4.
2) не смотрел, можно ли в codemirror сделать так, чтобы ключевое слово набранное не капсом автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом сразу после того как после него ставят пробел, если пробел либо конец строки, если ни того ни другого не случилось - не капсим).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 24, 2013, 07:34:13 pm
не смотрел, можно ли в codemirror сделать так, чтобы ключевое слово набранное не капсом автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом сразу после того как после него ставят пробел, если пробел либо конец строки, если ни того ни другого не случилось - не капсим).
плохое решение- как вы будете вводить End? лучше сажать на комбинацию клавиш  с раскрытием конструкций (как у  черных боксеров)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 24, 2013, 07:39:11 pm
не смотрел, можно ли в codemirror сделать так, чтобы ключевое слово набранное не капсом автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом сразу после того как после него ставят пробел, если пробел либо конец строки, если ни того ни другого не случилось - не капсим).
плохое решение- как вы будете вводить End? лучше сажать на комбинацию клавиш  с раскрытием конструкций (как у  черных боксеров)
Это хорошее, опробованное решение. См. Astrobe и среду от akron1. А какие проблемы с END? Да, еще нужно по вводу ';' и '.' капсить. В общем, см. как у akorn1 сделано. Очень удобно.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 24, 2013, 07:56:31 pm

Это хорошее, опробованное решение. См. Astrobe и среду от akron1. А какие проблемы с END? Да, еще нужно по вводу ';' и '.' капсить. В общем, см. как у akorn1 сделано. Очень удобно.
а смысл... практически  все капсовые слова связаны с небольшим числом  конструкций.. скажем так.. я в период развлечения с ББ  немного адаптировал под себя подсистему от Инфо21  + добавил реакцию на ctrl+space (или shift  точно не помню, не забыв в очередной раз отматерить гениальных создателей ББ, поскольку на какую то из этих комбинаций нельзя было повесить эту фичу без гоношения с исходниками) и был вполне доволен...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 24, 2013, 07:58:30 pm

Это хорошее, опробованное решение. См. Astrobe и среду от akron1. А какие проблемы с END? Да, еще нужно по вводу ';' и '.' капсить. В общем, см. как у akorn1 сделано. Очень удобно.
а смысл... практически  все капсовые слова связаны с небольшим числом  конструкций.. скажем так.. я в период развлечения с ББ  немного адаптировал под себя подсистему от Инфо21  + добавил реакцию на ctrl+space (или shift  точно не помню, не забыв в очередной раз отматерить гениальных создателей ББ поскольку на какую то из этих комбинаций нельзя было повесить эту фичу без гоношения с исходниками) и был вполне доволен...
Ну, факт в том, что это действительно очень удобно. То есть абсолютно стираются если не все, то процентов 90 от негативных эффектов капса в синтаксисе языка. Пишешь как пишешь, а оно само приводится к капсу. Ни одного лишнего нажатия на клавиатуру.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 24, 2013, 08:05:55 pm

Это хорошее, опробованное решение. См. Astrobe и среду от akron1. А какие проблемы с END? Да, еще нужно по вводу ';' и '.' капсить. В общем, см. как у akorn1 сделано. Очень удобно.
а смысл... практически  все капсовые слова связаны с небольшим числом  конструкций.. скажем так.. я в период развлечения с ББ  немного адаптировал под себя подсистему от Инфо21  + добавил реакцию на ctrl+space (или shift  точно не помню, не забыв в очередной раз отматерить гениальных создателей ББ поскольку на какую то из этих комбинаций нельзя было повесить эту фичу без гоношения с исходниками) и был вполне доволен...
Ну, факт в том, что это действительно очень удобно. То есть абсолютно стираются если не все, то процентов 90 от негативных эффектов капса в синтаксисе языка. Пишешь как пишешь, а оно само приводится к капсу. Ни одного лишнего нажатия на клавиатуру.
зачем писать.. если можно этого не делать, кроме того, возможно появятся лишние (исчезнут желаемые) пробелы... впрочем , по моим оценкам.. ввод с помощью конструкций в O7 будет поэффективней  чем в ББ при правильной реализации(практически не будет возвратов курсора). но это понятно, что дело вкуса.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: akron1 от Июнь 25, 2013, 02:16:08 am
Автокапс срабатывает, если слово набрано полностью строчными буквами, и введенный после слова символ принадлежит множеству {[space]  [enter]  '('  ')'  ','  ';'  '|'}. Автокапс не срабатывает внутри строковых констант и комментариев.

Да, кстати, насчет строковых констант: online-редактор подсвечивает строки ярко-красным цветом, как незавершенные, если строковая константа находится в конце строки (после нее нет пробела либо другого символа), а также он подсвечивает строки, заключенные в апострофы (в 07/11 строки записываются только в кавычках).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Июнь 25, 2013, 07:46:08 am
Вечером пофикшу строки.
Отступ настраивается. Можно поставить любое желаемое число.
Автокапс штука весьма спорная. Но посмотрим что можно сделать.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Губанов Сергей Юрьевич от Июнь 26, 2013, 09:46:40 am
автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом
И как же тогда писать идентификаторы type, procedure, begin, end... если их невозможно будет набрать (будучи набранными они автоматом превратятся в TYPE, PROCEDURE, BEGIN, END...)?  :o  :o :o
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Губанов Сергей Юрьевич от Июнь 26, 2013, 09:49:29 am
Ну, факт в том, что это действительно очень удобно. То есть абсолютно стираются если не все, то процентов 90 от негативных эффектов капса в синтаксисе языка. Пишешь как пишешь, а оно само приводится к капсу. Ни одного лишнего нажатия на клавиатуру.
Какие ещё негативные эффекты капса в синтаксисе языка? Вообще-то, от капса одни только позитивные эффекты  :o :o :o
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 26, 2013, 09:58:16 am
автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом
И как же тогда писать идентификаторы type, procedure, begin, end... если их невозможно будет набрать (будучи набранными они автоматом превратятся в TYPE, PROCEDURE, BEGIN, END...)?  :o  :o :o
А ты попробуй :-) Всё там возможно. (не говоря уже о том, что это довольно редкий случай)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Июнь 26, 2013, 10:01:46 am
Ну, факт в том, что это действительно очень удобно. То есть абсолютно стираются если не все, то процентов 90 от негативных эффектов капса в синтаксисе языка. Пишешь как пишешь, а оно само приводится к капсу. Ни одного лишнего нажатия на клавиатуру.
Какие ещё негативные эффекты капса в синтаксисе языка? Вообще-то, от капса одни только позитивные эффекты  :o :o :o
Да ладно. От капса вон, даже флот США отказывается :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июнь 26, 2013, 10:06:08 am
автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом
И как же тогда писать идентификаторы type, procedure, begin, end... если их невозможно будет набрать (будучи набранными они автоматом превратятся в TYPE, PROCEDURE, BEGIN, END...)?  :o  :o :o
Как вариант, Ctrl-Z -- отмена последнего приведения к верхнему регистру, как в ворде отмена капитализации последнего набранного слова в начале строки...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Июнь 26, 2013, 11:43:11 am
автоматически приводилось к капсу? То есть begin->BEGIN (становится капсом
И как же тогда писать идентификаторы type, procedure, begin, end... если их невозможно будет набрать (будучи набранными они автоматом превратятся в TYPE, PROCEDURE, BEGIN, END...)?  :o  :o :o
Как вариант, Ctrl-Z -- отмена последнего приведения к верхнему регистру, как в ворде отмена капитализации последнего набранного слова в начале строки...
то же вариант.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Июль 02, 2013, 07:43:21 pm
WDE для PascalABC.NET (http://pascalabc.net/WDE/) -- зачётная вещь для тех кто изучает или как-то пользуется обычным паскалем. Не нужно ничего устанавливать, простенькие примеры не нужно нигде сохранять -- написал, запустил, потестил -- и закрыл браузер ))
это классный пример того,  что даже грамотная реализация  UI  не спасает от хреновой основы...

Всё хотел спросить, да всё забывал.
А что там, по-Вашему, хреново в основе? Паскаль? Так это же вроде классика... Что-то другое?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 23, 2013, 10:18:59 am
Компилятор на страничке обновлен до текущей версии. В частности в новой версии имеется поддержка модулей.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Август 23, 2013, 11:34:40 am
WDE для PascalABC.NET (http://pascalabc.net/WDE/) -- зачётная вещь для тех кто изучает или как-то пользуется обычным паскалем. Не нужно ничего устанавливать, простенькие примеры не нужно нигде сохранять -- написал, запустил, потестил -- и закрыл браузер ))
это классный пример того,  что даже грамотная реализация  UI  не спасает от хреновой основы...

Всё хотел спросить, да всё забывал.
А что там, по-Вашему, хреново в основе? Паскаль? Так это же вроде классика... Что-то другое?
2 проблемы :
1. Техническая - .net - как следствие завязка на серверные системы от MS, со всем говном из этого следующим
2. Концептуальная - автор ( С.С. Михалкович) в порыве "осовременить" язык (ИМХО) - перешел ту границу, когда еще возможно контролировать с помощью доступных ресурсов
проект, как  результат  -куча багов как идиотских, так весьма хитрожопых - которые вводят меня (как пользователя) в ярость.
1
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 02:53:21 pm
Компилятор на страничке обновлен до текущей версии. В частности в новой версии имеется поддержка модулей.
А как этим пользоваться? Писать модули в одно окно?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 23, 2013, 03:00:47 pm
Компилятор на страничке обновлен до текущей версии. В частности в новой версии имеется поддержка модулей.
А как этим пользоваться? Писать модули в одно окно?
Пока - да.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 03:02:08 pm
Решил написать заглушку для модуля Out, но не понял, как вывести строку на печать.
MODULE Out;
IMPORT JS;
PROCEDURE String*(s : ARRAY OF CHAR);
BEGIN
JS.alert(s)
END String;
END Out.
Вот это выводит список ASCII-кодов
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 03:07:05 pm
MODULE Out;
IMPORT JS;
PROCEDURE String*(s : ARRAY 20 OF CHAR);
BEGIN
JS.alert(s)
END String;
END Out.
Вот это возвращает ошибку
Цитировать
line 3: END expected (MODULE)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 03:09:15 pm
Предыдущий пример валится на компиляции: ошибка указана после первого окна.
MODULE Out;
IMPORT JS;
PROCEDURE Int*(i : INTEGER);
BEGIN
JS.alert(i)
END Int;
PROCEDURE String*(s : ARRAY OF CHAR);
BEGIN
JS.alert(s)
END String;
END Out.

MODULE test;
IMPORT Out;
BEGIN
Out.Int(42);
    Out.String("Hello, World!")
END test.
Вот это тоже не компилируется:
Цитировать
SyntaxError: missing } after property list
Ошибка указывается после второго окна
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 03:16:56 pm
Проблемка заключена вreturn {
Int: Int
String: String
}
Не хватает запятой.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 23, 2013, 03:43:50 pm
Проблемка заключена вreturn {
Int: Int
String: String
}
Не хватает запятой.

Это фикснул (issue #13). Ждем обновления странички.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 23, 2013, 03:48:09 pm
PROCEDURE String*(s : ARRAY 20 OF CHAR);

Должен быть открытый массив. А диагностика хреновая, да.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 23, 2013, 03:51:48 pm
Вот это выводит список ASCII-кодов

Потому что оно транслируется в жабаскриптовый массив (жабаскриптовые строки не могут быть использованы для ARRAY OF CHAR - они иммутабельны). Пока остается только ручками делать маршаллинг в жабаскрипте (идти по массиву и собирать строку).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 03:55:13 pm
Это фикснул (issue #13). Ждем обновления странички.
Вы ж так не пугайте. Я уж подумал, что у меня глюки начались. Нашёл я файл в репозитории, в котором экспорт генерится, а там запятая есть. Снова попробовал свой примерчик - а оно работает... Только потом заметил, что время коммита позже моего сообщения.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 23, 2013, 03:56:33 pm
Потому что оно транслируется в жабаскриптовый массив (жабаскриптовые строки не могут быть использованы для ARRAY OF CHAR - они иммутабельны). Пока остается только ручками делать маршаллинг в жабаскрипте (идти по массиву и собирать строку).
Ничего страшного. Там всё равно JS импортируется.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 25, 2013, 10:22:05 am
С другой стороны, импорт JS ничего полезного не принёс.

Я тут глянул в исходник: символы представлены числами, а не строками длиной в один символ. Если не вдаваться в подробности, то oberonjs реализует машину js не в должной мере, чтобы у него была возможность выводить символьные данные. Чтобы такая возможность появилась, нужна либо подходящая предопределённая процедура, либо встроенный модуль (например, Streams).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 25, 2013, 01:38:32 pm
Возможная реализация канала исходящих данных.
var OutputChannel = function(name) {
  this.chan = document.getElementById(name);
  this.Int = function (i) {
    var item = document.createTextNode(i);
    this.chan.appendChild(item);
  }
  this.String = function (str) {
    var item = document.createTextNode(String.fromCharCode.apply(this, str));
    this.chan.appendChild(item);
  }
  this.Char = function (ch) {
    var item = document.createTextNode(String.fromCharCode(ch));
    this.chan.appendChild(item);
  }
  this.Ln = function () {
    var item = document.createElement("br");
    this.chan.appendChild(item);
  }
}
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 25, 2013, 01:55:34 pm
Полагаю, что в следующем "релизе" у нас появится возможность "асмовых" (то есть JS'ных) вставок. Как-то так:
MODULE Test;
IMPORT JS;

BEGIN
   JS.Code("console.log("hello world")")
END Test.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 25, 2013, 02:49:27 pm
Тогда смысл использования oberonjs пропадёт. Даже, если административно принудить использовать этот язык вместо js, то все всюду такие вот вставки делать будут, и смысл перехода на oberonjs исчезнет, потому что при его использовании будут те же проблемы, что и в js (собственно, из-за его - js - использования проблемы и будут).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 25, 2013, 03:43:59 pm
Тогда смысл использования oberonjs пропадёт. Даже, если административно принудить использовать этот язык вместо js, то все всюду такие вот вставки делать будут, и смысл перехода на oberonjs исчезнет, потому что при его использовании будут те же проблемы, что и в js (собственно, из-за его - js - использования проблемы и будут).
Эти вставки - чисто для написания системных модулей/либ. Для маршалинга и так далее. Считай это налогом SYSTEM :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Илья Ермаков от Август 26, 2013, 12:34:08 pm
Вообще, для скриптиков всяких смысла нет...

Вот для цельных приложений в браузере (типа, как Qooxdoo и им подобные фреймворки дают) - уже можно, но нужно фреймворк делать. И ХЗ, насколько Оберон-07 будет удобен без методов и обычного ООП для таких задач.

В свете появления WebGL появилась ниша 3D-приложений - вот там, возможно, раздолье. В силу процедурного характера GL-интерфейсов, думаю, и Оберон-07 будет удобен.

P.S. Вообще, я не говорю, что "без обычного ООП не жизнь", просто удобные схемы в таком стиле как-то не наработаны, за пределами Project Oberon.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 26, 2013, 12:41:22 pm
Вообще, для скриптиков всяких смысла нет...

Вот для цельных приложений в браузере (типа, как Qooxdoo и им подобные фреймворки дают) - уже можно, но нужно фреймворк делать. И ХЗ, насколько Оберон-07 будет удобен без методов и обычного ООП для таких задач.

В свете появления WebGL появилась ниша 3D-приложений - вот там, возможно, раздолье. В силу процедурного характера GL-интерфейсов, думаю, и Оберон-07 будет удобен.

P.S. Вообще, я не говорю, что "без обычного ООП не жизнь", просто удобные схемы в таком стиле как-то не наработаны, за пределами Project Oberon.
Ну, мы попробуем. Одно из направлений, да, графика. И это все именно для приложений в браузере, а не мелкого скриптинга страничек. В (больших)приложениях динамически типизированный, да еще такой кривой как js, язык предлагает широкий выбор граблей.

Собственно мы и не собираемся полностью изжить js, будет мирное сосуществоание каждый на своем месте :-) Почти как asm и какой-нибудь ЯВУ. ;-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: kkk от Август 26, 2013, 03:51:54 pm
Вы же против Dart.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 26, 2013, 03:56:16 pm
Вы же против Dart.

В смысле? К чему это?

PS. Дарт действительно какашка.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: kkk от Август 26, 2013, 04:20:27 pm
Вы же против Dart.

В смысле? К чему это?

PS. Дарт действительно какашка.
Ну, к рассуждениям про применимость оберонжыэс в разных направлениях бровсерной активности.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 26, 2013, 04:22:57 pm
Вы же против Dart.

В смысле? К чему это?

PS. Дарт действительно какашка.
Ну, к рассуждениям про применимость оберонжыэс в разных направлениях бровсерной активности.

Ну, дык, Dart какашка поэтому будет Оберон-07, все очень просто :-) А затем, возможно, и КП.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 26, 2013, 05:02:00 pm
Эти вставки - чисто для написания системных модулей/либ. Для маршалинга и так далее. Считай это налогом SYSTEM :-)
Это придётся говорить каждому первому. Удобство использования низкоуровневых средств в Модуле сделало их использование повсеместным. А тут ещё в добавок результат трансляции - высокоуровневый язык. Смысл думать о правильной реализации, если можно "быстро и удобно" наколбасить на js? Уже предчувствую использование модуля JS в каждой процедуре.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 26, 2013, 05:33:31 pm
Эти вставки - чисто для написания системных модулей/либ. Для маршалинга и так далее. Считай это налогом SYSTEM :-)
Это придётся говорить каждому первому. Удобство использования низкоуровневых средств в Модуле сделало их использование повсеместным. А тут ещё в добавок результат трансляции - высокоуровневый язык. Смысл думать о правильной реализации, если можно "быстро и удобно" наколбасить на js? Уже предчувствую использование модуля JS в каждой процедуре.
В том то и дело, что на js не удобно :-) Тем кому на js удобно - те на js и пишут изначально и оберон им не нужен.

Алсо, что мешает в железнячном Обероне сплошь и рядом SYSTEM использовать? Это ж надо каждому первому объяснять что SYSTEM это почему-то плохо ;-)

И да, нет никакого смысла заставлять кого-то писать на pure-oberon добавляя неудобств во взаимодействии с js-кодом.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 26, 2013, 06:12:39 pm
Если человек решил, что ему излишняя динамичность js надоела, а в том проекте, где он работает, только один человек занимается программированием на js (он), то объединять Оберон и js можно в любых пропорциях. Но если есть ещё хотя бы один человек для js, которому, к тому же, нравится писать страшные вещи, то даже административное указание использовать Оберон не поможет получить сколько-нибудь ощутимую помощь от Оберона.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 26, 2013, 07:25:55 pm
Смысл думать о правильной реализации, если можно "быстро и удобно" наколбасить на js? Уже предчувствую использование модуля JS в каждой процедуре.

Может таки зайти со стороны пряника? Т.е., чтоб на обероне (допиленном) было еще быстрее и удобнее? Жабаскрипт, сам по себе, не сильно быстрый и удобный (даже если отбросить все грабли) - например тот же питон (хотя и того же динамического класса) на порядок лучше.

P.S. История точно такая же как и с SYSTEM. Можно и административно запретить IMPORT JS (почему нет?)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 26, 2013, 07:35:34 pm
Если человек решил, что ему излишняя динамичность js надоела, а в том проекте, где он работает, только один человек занимается программированием на js (он), то объединять Оберон и js можно в любых пропорциях. Но если есть ещё хотя бы один человек для js, которому, к тому же, нравится писать страшные вещи, то даже административное указание использовать Оберон не поможет получить сколько-нибудь ощутимую помощь от Оберона.
Если в проекте два человека и они не могут друг с другом договориться на счет такой фигни, как использование либ и стиля кодирования, то проекту уже ничто не поможет вне зависимости от используемого ЯП.

Это не та проблема которую можно и должно решать на уровне языка и компилятора. Это чисто проблема взаимодействия людей и их организации. Максимум что тут можно сделать - помочь выявлять проблемные места с помощью спец. тулзы. Ну, например в (web)IDE, в перечне имеющихся модулей, те модули которые импортируют JS, будут отображаться красным цветом. Что будет как бэ намекать. Возможны и другие, более развесистые тулзы. Но это именно внешние, относительно компилятора и языка, тулзы. И, опять же, пользоваться ими, и как ими пользоваться - решают люди в проекте сообща.

Мы не должны им что-либо безальтернативно в этом плане. Можно лишь задать модную тенденцию и тренд как надо писать. Например "стандартной" либой (когда человек начинает писать на новом ЯП и среде - он ориентируется на существующий код и перенимает стиль оттуда), готовыми приложениями/примерами и так далее. Намерянно делать пакости и делать что-то неудобно в компиляторе - смысла нет никакого, это чистой воды вредительство.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Август 27, 2013, 08:19:44 am
А что планируется использовать на серверной стороне? OberonJS+NodeJS или что-то типа компилятора от akron1?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 27, 2013, 10:34:26 am
А что планируется использовать на серверной стороне? OberonJS+NodeJS или что-то типа компилятора от akron1?

Не понял вопроса. Зачем серверная сторона? Без нее все отлично работает :-)

Если вопрос о том, что использовать вне браузера, то ответ зависит от поставленной задачи, то есть выбирать программисту. Либо компилятор akorn1 (он генерирует нативный Win-бинарь!), либо, если нужны js-либы и http/tcp готовый стек, node.js.

Собственно курс на совместимость и переносимость модулей между разными компиляторами, что, вероятно, повлечет за собой уточенную версию оберон-репорта (и пофиг на 16 страниц), а затем и, быть может, расширенную ревизию Оберона (например явно нехватает структурных литералов).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Август 27, 2013, 12:05:25 pm
Собственно курс на совместимость и переносимость модулей между разными компиляторами, что, вероятно, повлечет за собой уточенную версию оберон-репорта (и пофиг на 16 страниц), а затем и, быть может, расширенную ревизию Оберона (например явно нехватает структурных литералов).
не пойдет на это Вирт.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 27, 2013, 12:46:04 pm
Собственно курс на совместимость и переносимость модулей между разными компиляторами, что, вероятно, повлечет за собой уточенную версию оберон-репорта (и пофиг на 16 страниц), а затем и, быть может, расширенную ревизию Оберона (например явно нехватает структурных литералов).
не пойдет на это Вирт.
Ну и ладно. Уточнить можно Annex'ами, а там посмотрим. Без уточнения невозможно достигнуть переносимости модулей между компиляторами.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Август 27, 2013, 01:07:37 pm
А что планируется использовать на серверной стороне? OberonJS+NodeJS или что-то типа компилятора от akron1?

Не понял вопроса. Зачем серверная сторона? Без нее все отлично работает :-)

Что значит "всё работает"? Веб-приложения состоят не только из клиентской части, но и из серверной.

Если вопрос о том, что использовать вне браузера, то ответ зависит от поставленной задачи, то есть выбирать программисту. Либо компилятор akorn1 (он генерирует нативный Win-бинарь!), либо, если нужны js-либы и http/tcp готовый стек, node.js.

Вот я и спрашиваю, есть ли какие планы в этом направлении? Road-map там какой?
Компилятор от akron1 ведь вроде как выдаёт однопоточный код, для серверов же желательна многопоточность. Видимо, следует как-то ориентироваться на связку nodeJS+oberonJS...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 27, 2013, 01:46:22 pm
А что планируется использовать на серверной стороне? OberonJS+NodeJS или что-то типа компилятора от akron1?

Не понял вопроса. Зачем серверная сторона? Без нее все отлично работает :-)

Что значит "всё работает"? Веб-приложения состоят не только из клиентской части, но и из серверной.
Это немного не те веб-приложения о которых я говорил :-) Сейчас тренд на веб-приложения которые (после загрузки в браузере, или куда-то еще) спокойно работают полностью автономно, без интернета. В частности таким "веб-приложением" является например сам компилятор. Загрузилась страничка - после этого можно смело отрубать интернет, компилятор работать будет нормально. Ну или еще вот это "веб-приложение": http://www.opennet.ru/opennews/art.shtml?num=37452 оно также работает без сервера и без интернета. Не говоря уже о играх например.

Если вопрос о том, что использовать вне браузера, то ответ зависит от поставленной задачи, то есть выбирать программисту. Либо компилятор akorn1 (он генерирует нативный Win-бинарь!), либо, если нужны js-либы и http/tcp готовый стек, node.js.

Вот я и спрашиваю, есть ли какие планы в этом направлении? Road-map там какой?
Компилятор от akron1 ведь вроде как выдаёт однопоточный код, для серверов же желательна многопоточность. Видимо, следует как-то ориентироваться на связку nodeJS+oberonJS...
Дык, node.js тоже однопоточный :-D Многопоточность веб-серверу (если он не занимается тяжелыми вычислениями, вроде кодирования h264) нафиг не нужна, нужна асинхронность.

Планы такие, что вначале нужно сделать хорошо для автономных приложений в браузере, то есть работающих без сети (сюда же относятся приложения для WinPhone 8, Tizen, FirefoxOS, Ubuntu touch, Sailfish OS). А там посмотрим.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 27, 2013, 01:48:51 pm
Планы такие, что вначале нужно сделать хорошо для автономных приложений в браузере, то есть работающих без сети (сюда же относятся приложения для WinPhone 8, Tizen, FirefoxOS, Ubuntu touch, Sailfish OS). А там посмотрим.
Черт. Зачем-то сузил область. Не WinPhone8 конечно же, а вся платформа Windows 8 (Phone&Desktop) целиком, в части Modern Windows UI.

Ну и не только Ubuntu touch, а Ubuntu вообще (в юнити предпочтительный ЯП - js), ну и гномошел тоже (там тоже предпочтительный ЯП это js теперь).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 27, 2013, 02:01:09 pm
Да, на всякий случаю нюанс - веб-серверу нужна удобная асинхронность. Желательно оформленная либо через "легковесные потоки" либо через continuations какие-нибудь.

И еще момент - какой-то особой поддержки в компиляторе oberon'a node.js не нуждается. Так что искаропки оно будет работать сразу (только биндинги к нужным либам сделать и все). Но собственно это выбор программиста на чем ему писать серверную часть. Может он вообще на ерланге захочет :-)

Компилятор akron1 тоже можно использовать, как я уже говорил, курс на совместимость и переносимость модулей между современными реализациями Оберона-07. Но для этого компилятора придется написать tcp-биндинг и http-либу как минимум.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Август 27, 2013, 04:01:18 pm
Но собственно это выбор программиста на чем ему писать серверную часть. Может он вообще на ерланге захочет :-)

Если программист для серверной части выберет тот же Ерланг, то логично будет и для клиентской части взять ерланговский фреймворк/вебсервер, которых уже куча -- всякие YAWS, Nitrogen, ChikagoBoss и прочие...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Август 27, 2013, 04:04:29 pm
Сейчас тренд на веб-приложения которые (после загрузки в браузере, или куда-то еще) спокойно работают полностью автономно, без интернета. В частности таким "веб-приложением" является например сам компилятор. Загрузилась страничка - после этого можно смело отрубать интернет, компилятор работать будет нормально.
т.е. речь идет о приложениях ориентированных на выполнение в изолированной среде - "песочнице", со всеми вытекающими из этого достоинствами и ограничениями.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 27, 2013, 04:07:39 pm
Но собственно это выбор программиста на чем ему писать серверную часть. Может он вообще на ерланге захочет :-)

Если программист для серверной части выберет тот же Ерланг, то логично будет и для клиентской части взять ерланговский фреймворк/вебсервер, которых уже куча -- всякие YAWS, Nitrogen, ChikagoBoss и прочие...
YAWS/Nitrogen/ChikagoBoss - это все СЕРВЕРНЫЕ фреймворки. Приложения в браузере с помощью них (без js) не реализовать в принципе. Максимум что там есть - это шаблонный движок который отрабатывает НА СТОРОНЕ СЕРВЕРА, и генерит там html-страничку которая грузится уже в браузер.

На этом веб-приложение (в тех терминах которых я описал) не написать. Ну, то есть попробуй написать там хотя бы тетрис. Ну, или, арканоид. Или компилятор, работающий в браузере а не на сервере (то есть работающий без интернета).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Август 27, 2013, 05:26:38 pm
Но собственно это выбор программиста на чем ему писать серверную часть. Может он вообще на ерланге захочет :-)

Если программист для серверной части выберет тот же Ерланг, то логично будет и для клиентской части взять ерланговский фреймворк/вебсервер, которых уже куча -- всякие YAWS, Nitrogen, ChikagoBoss и прочие...
YAWS/Nitrogen/ChikagoBoss - это все СЕРВЕРНЫЕ фреймворки. Приложения в браузере с помощью них (без js) не реализовать в принципе. Максимум что там есть - это шаблонный движок который отрабатывает НА СТОРОНЕ СЕРВЕРА, и генерит там html-страничку которая грузится уже в браузер.

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

Я имел в виду, что желательно ограничивать набор инструментария. В веб-программировании он и так уже черезчур большой -- html+css+js, ты предлагаешь ещё и oberonjs.
Успех asp.net и nodeJS показывает, что следует пользоваться одним языком как на серверной части, так и на клиентской. Если уж клиентскую часть предлагается делать с использованием оберона, то и серверную тоже желательно на нём же...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 09:59:02 am
Таки новая версия - vlad добавил JS.do, то есть js-вставки. Теперь можно писать модули ввода-вывода, маршалинга и пробовать делать биндинги.

Выглядит это так:
MODULE MyModule;
IMPORT JS;
 
PROCEDURE Test;
VAR
  i : INTEGER;
BEGIN
  i := 42;
  JS.do("alert('hello world '+i)")
END Test;
 
BEGIN
  Test;
END MyModule.

Превращается в:
var MyModule = function (JS){

function Test(){
var i = 0;
i = 42;
alert('hello world '+i);
}
Test();
}(this);

Кстати, всвязи с тем, что у нас кода вскоре может стать довольно много, нужно решить, какого стиля кодирования придерживаемся? То есть отступы/именования и проч.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Август 29, 2013, 10:52:33 am
Таки новая версия - vlad добавил JS.do, то есть js-вставки. Теперь можно писать модули ввода-вывода, маршалинга и пробовать делать биндинги.

...

Кстати, всвязи с тем, что у нас кода вскоре может стать довольно много, нужно решить, какого стиля кодирования придерживаемся? То есть отступы/именования и проч.
Не вижу смысла. Это не будет Оберон "в чистом виде", поэтому он не будет пересекаться с другой кодовой базой. Как тут уже справедливо заметили, что подобный подход "поощряет" и если сначала будет 80% обероновского кода против 20% JS, то через некоторое время будет 20% обероновского и 80% JS. Потому что на JS проще/удобнее/быстрее/привычнее/... (подставить по желанию).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 10:58:02 am
Не вижу смысла. Это не будет Оберон "в чистом виде", поэтому он не будет пересекаться с другой кодовой базой.
Будет.

Как тут уже справедливо заметили, что подобный подход "поощряет" и если сначала будет 80% обероновского кода против 20% JS, то через некоторое время будет 20% обероновского и 80% JS. Потому что на JS проще/удобнее/быстрее/привычнее/... (подставить по желанию).
Кому проще писать на JS тот пусть на JS и пишет, наш компилятор ему ни к чему. А нам удобней, в ряде приложений, использовать статически типизированный язык. Оберон.

Вообще вы так говорите, будто Оберон в принципе конкурировать с js не способен :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 11:01:22 am
Так. Обнаружилась (при попытке написать что-то полезное :-) ) новая бага:

Не экспортируется "указательный" тип:
MODULE A;
TYPE AA* = POINTER TO RECORD END;
END A.

MODULE B;
IMPORT A;
VAR a : A.AA; (* error, identifier 'AA' is not exported by module 'A' *)
END B.

Завел багу на гитхабе: https://github.com/vladfolts/oberonjs/issues/14
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Август 29, 2013, 11:14:09 am
Вообще вы так говорите, будто Оберон в принципе конкурировать с js не способен :-)
Я надеюсь найти вариант их симбиотического сосуществования.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 29, 2013, 02:26:56 pm
Вообще вы так говорите, будто Оберон в принципе конкурировать с js не способен :-)
Я надеюсь найти вариант их симбиотического сосуществования.

Усложнять взаимодействие с внешним миром (JS) нельзя, особенно на первоначальном этапе. Потому что:
- взаимодействовать придется много (все уже написано на JS)
- нет ресурсов для расписывания кошерного маршаллинга/биндинга

Кроме того, последующие обнаружение "идеологически неправильных мест" тривиально - текстовый поиск "IMPORT JS". Архитектуру перекалбашивать не надо.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 02:38:30 pm
Вообще вы так говорите, будто Оберон в принципе конкурировать с js не способен :-)
Я надеюсь найти вариант их симбиотического сосуществования.

Усложнять взаимодействие с внешним миром (JS) нельзя, особенно на первоначальном этапе. Потому что:
- взаимодействовать придется много (все уже написано на JS)
- нет ресурсов для расписывания кошерного маршаллинга/биндинга

Кроме того, последующие обнаружение "идеологически неправильных мест" тривиально - текстовый поиск "IMPORT JS". Архитектуру перекалбашивать не надо.

Более того, текущее решение (JS.do("some js code here")) не меняет синтаксис языка, то есть модуль остается синтаксически правильным с точки зрения Оберона, и может быть проверен на синтаксис любым другим компилятором Оберона-07, либо вообще сторонним инструментом (например не слетает подсветка синтаксиса в редакторах). Более того, этот модуль может быть даже скомпилирован, компилятором скажем akorn1, если добавить модуль-заглушку JS такого вида:

MODULE JS;

PROCEDURE do(js : ARRAY OF CHAR);
BEGIN
  ASSERT(FALSE); (* or other runtime check/runtime reporting *)
END do;

END JS.

Таким образом становится возможным плавный перенос модулей туда-сюда. Таковой перенос намного менее болезненнен чем, скажем, перенос системозависимых модулей между ББ и GPCP (ибо BB и GPCP для взаимодействия с внешним миром меняют язык на уровне грамматики).

Чем больше я думаю о JS.do, тем больше убеждаюсь во мнении, что именно так и есть правильно.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 29, 2013, 04:32:23 pm
А нам удобней, в ряде приложений, использовать статически типизированный язык.
"Нам"? Это кому?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 29, 2013, 04:35:57 pm
Чем больше я думаю о JS.do, тем больше убеждаюсь во мнении, что именно так и есть правильно.
За остальных не скажу, но я считаю, что - да, это очень хорошее решение на техническом уровне. Но есть ещё и человеческий фактор.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 06:45:11 pm
А нам удобней, в ряде приложений, использовать статически типизированный язык.
"Нам"? Это кому?
Как минимум мне и Владу.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 06:57:46 pm
Чем больше я думаю о JS.do, тем больше убеждаюсь во мнении, что именно так и есть правильно.
За остальных не скажу, но я считаю, что - да, это очень хорошее решение на техническом уровне. Но есть ещё и человеческий фактор.
Про человеческий фактор в данном случае я уже все что хотел, сказал. Это проблема не может решаться на уровне языка. Это чисто организационная проблема.

Ссылки по теме:
http://mymaster.livejournal.com/388437.html

Ну и до кучи: http://mymaster.livejournal.com/320114.html
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 29, 2013, 07:00:17 pm
Как минимум мне и Владу.
У вас есть совместный проект?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 07:09:02 pm
Как минимум мне и Владу.
У вас есть совместный проект?
Совместный проект - развитие OberonJS. Цели OberonJS как академические так и прикладные.

Прикладные цели у нас схожи - и мне и ему, в том числе по работе, приходится сталкиваться с необходимостью писать приложения под js-среду (это не обязательно браузер, это и сервера тоже), js как язык, штука довольно мерзкая при рефакторинге, поэтому нам нужен статически типизированный язык, чтобы использовать его там, где это уместно. То есть именно для приложений в js-среде, а не скриптов.

Вообще, по моему, мы уже про это писали где-то в этой теме.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 29, 2013, 10:06:26 pm
В таком случае, это не "мы".
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 29, 2013, 10:45:50 pm
В таком случае, это не "мы".
Предлагаешь при каждом упоминании писать не "мы" а полностью перечислять тех кто заинтересован, что нас связывает, и какие перед нами задачи? :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 30, 2013, 02:11:27 pm
Ну вот, благодаря JS.do я начал активней пользоваться компилятором, в результате обнаружил горку багов, что не может не радовать :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 30, 2013, 02:32:27 pm
... а полностью перечислять тех кто заинтересован...
Просто, в ваших рассуждениях те, кто заинтересован, кому удобно и кто будет использовать - это один и тот же человек.

То есть, это язык для проектов, где будет один разработчик.

Ну, вот вы закончите oberonjs, и он не будет содержать багов. Потом вы покажете его кому-нибудь, и среди любопытствующих всегда найдётся такой человек, который кажет, что это хуже, чем js. Аргументирует он это тем, что js "гибкий" (и прочая пурга), а испортить всю программу, полученную из вашего компилятора, можно простой js-вставкой, которая поломает всю программу. И большинство тех, кто прочтёт этот диалог, запомнят эту фразу. И в силу взглядов на js как на язык они решат, что от oberonjs толку нет.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 30, 2013, 02:39:09 pm
Причём, я не пытаюсь сказать, что JS.do - это вещь, которой не надо пользоваться, просто это вещь, которой пользоваться разумно сможет далеко не каждый. И проблема даже не в этом, а в том, что в команде страдать от этой неразумности по большей части будет именно тот, кому Оберон был нужен. Тому, кто пишет как курица лапой, будет, в общем-то, по барабану.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 30, 2013, 02:58:49 pm
Причём, я не пытаюсь сказать, что JS.do - это вещь, которой не надо пользоваться, просто это вещь, которой пользоваться разумно сможет далеко не каждый. И проблема даже не в этом, а в том, что в команде страдать от этой неразумности по большей части будет именно тот, кому Оберон был нужен. Тому, кто пишет как курица лапой, будет, в общем-то, по барабану.
А зачем они тогда вообще Оберон выбрали для проекта? :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 30, 2013, 03:10:05 pm
... а полностью перечислять тех кто заинтересован...
Просто, в ваших рассуждениях те, кто заинтересован, кому удобно и кто будет использовать - это один и тот же человек.

То есть, это язык для проектов, где будет один разработчик.

Ну, вот вы закончите oberonjs, и он не будет содержать багов. Потом вы покажете его кому-нибудь, и среди любопытствующих всегда найдётся такой человек, который кажет, что это хуже, чем js. Аргументирует он это тем, что js "гибкий" (и прочая пурга), а испортить всю программу, полученную из вашего компилятора, можно простой js-вставкой, которая поломает всю программу. И большинство тех, кто прочтёт этот диалог, запомнят эту фразу. И в силу взглядов на js как на язык они решат, что от oberonjs толку нет.
А испортить программу всю на C# можно банальным unsafe-модулем (c адресной арифметикой там и так далее - оно там по сути разновидность Си реализует), а стройную программу на С++ можно легко разрушить ассемблерной вставкой (так, что там совсем крышу снесет). Да и в AO и ББ тоже асм можно втыкать.

При этом аргументация может быть ровно та же - асм (особенно макроасм) гибче и мощнее (больше возможностей) чем С++, или там АО.

Короче, волков бояться - в лес не ходить. Продавать oberonjs мы вроде бы не планируем, мы просто делаем инструмент for fun и для собственного удобства.

А показывать и доказывать его преимущества и фичи нужно не на пальцах, а демонстрируя что-то написанное на нем.

И еще раз - oberon он не для тех кто нежно любит js и считает его самым великолепным ЯП в мире. Если кто-то в проекте будет писать код состоящий на 10% из оберона, а остальное на js - отлично, значит оберон уже пригодился, ибо раньше этот код писался бы на 100% на js.

Люди всегда, или почти всегда, обучаются подражая. Для того, чтобы новые люди писали правильно на Oberon (под js-среду) нужно подать им пример, то есть должна быть правильно написанная стандартная либа, среда разработки и по крайней мере примеры приложений. И тогда JS.do будет использоваться либо js-никами которые тыкают палочкой свой первый статически типизированный язык, либо только тогда когда это действительно необходимо.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 30, 2013, 03:18:56 pm
Да, поэтому таки предлагаю немного забыть про JS.do, и решить что у нас с coding style. Отступы, именования и так далее. Потому как сразу после того, как будут пофикшены текущие баги (https://github.com/vladfolts/oberonjs/issues?state=open) (и если не появятся новые не менее суровые) сразу начнется написание стандартной либы. Хотелось бы писать её сразу в едином стиле. Вот.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 30, 2013, 03:35:24 pm
А зачем они тогда вообще Оберон выбрали для проекта? :-)
А почему сразу "они выбрали"? Могло так статься (компании заведено), что выбирает тим.лид. Или проект начинался в одиночку, а потом потребовалось расширить "команду".
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 30, 2013, 03:46:58 pm
А зачем они тогда вообще Оберон выбрали для проекта? :-)
А почему сразу "они выбрали"? Могло так статься (компании заведено), что выбирает тим.лид. Или проект начинался в одиночку, а потом потребовалось расширить "команду".
Плохую команду (в которой не могут договориться даже о такой элементарщине) язык не поможет. Ну а инструментально то элементарно можно запретить JS.do, на уровне IDE. А еще можно запретить на уровне git'a (или какую там они систему контроля версий используют?) - банально прекоммит хук пишется и все. Более того, там можно запретить использовать JS.do одним, а разрешить другим (типо вот Вася у нас пишет биндинги - и соответственно только он может JS.do использовать). Хотя это, опять таки, будет попытка технического решения организационной проблемы, что не есть правильно. Но это все равно лучше, чем корячить на уровне языка или компилятора.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 30, 2013, 03:47:39 pm
...А испортить программу всю на C# можно ... на С++ можно...
Программист на C# не станет этого делать потому, что писать на другом языке менее удобно, тяжелее. А плюсы такого подхода нивелируются его минусами. Поэтому, программист станет прибегать к нему в крайних случаях.
Вряд ли веб-программист будет стоять в таких же условиях. Те, кто использует js и плюётся, здесь не рассматриваются: были бы такими все - и я даже и не начинал бы. А вот с остальными проблема. Приходят они в новый проект, а там oberonjs. В котором даже цикла с брейком нет! Или процедура возвращает данные последним оператором (никаких return из середины цикла или if-а)! Так нивапрос же. Зато есть JS.do. Долго ли они думать будут?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Август 30, 2013, 03:49:32 pm
...то элементарно можно запретить JS.do, на уровне IDE. А еще можно запретить на уровне git'a...
Ну, разве что так...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Август 30, 2013, 03:56:08 pm
...А испортить программу всю на C# можно ... на С++ можно...
Программист на C# не станет этого делать потому, что писать на другом языке менее удобно, тяжелее. А плюсы такого подхода нивелируются его минусами. Поэтому, программист станет прибегать к нему в крайних случаях.
Вряд ли веб-программист будет стоять в таких же условиях. Те, кто использует js и плюётся, здесь не рассматриваются: были бы такими все - и я даже и не начинал бы. А вот с остальными проблема. Приходят они в новый проект, а там oberonjs. В котором даже цикла с брейком нет! Или процедура возвращает данные последним оператором (никаких return из середины цикла или if-а)! Так нивапрос же. Зато есть JS.do. Долго ли они думать будут?
Описываемая ситуация - это rich man problem :-) До этого нужно еще дожить, что бы веб-приложения на Обероне в вебе разрослись до такого размера, что js'нику таки пришлось бы над ним работать, ибо альтернатив нет :-)

Людей, которым не нравится js, но которым приходится таки под js-среду что-то писать, на самом деле достаточно много, и именно они одна из целевых аудиторий сабжа. А еще есть info21 со своими мелкими падаванами, и, похоже, ему тоже это дело слегка интересно. А еще есть народ который рад начать программировать что-то наглядное и прикольное, но к сюрпризам js не готовы, равно как не готовы и толмуды C# изучать и вообще в шеле ковыряться, не говоря уже о C++. Этим мы тоже сможешь помочь, я думаю. А есть (начинающие)электронщики, которые тоже в программировании ни бум-бум, но что-то потыкать им хочется (светодиодиком помигать, там машинкой порулить), а тут можно и в браузере не отходя от кассы алгоритмы поковырять, и в микроконтроллер (Astrobe) залить.

В общем, спокойно. Мы не идем войной на мир js-разработчиков, мы просто обкусываем этот мир по краям :-)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Kemet от Август 30, 2013, 05:05:22 pm
В общем, спокойно. Мы не идем войной на мир js-разработчиков, мы просто обкусываем этот мир по краям :-)
Так то да - на покусанный жабаскрипт, как и на пошарпаный с желающие всегда найдутся. Главное, чтобы была межпространственная связь.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Август 30, 2013, 07:45:02 pm
А как мне с онлайнового компилятора получить AST и таблицу символов (SYM файл) ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 30, 2013, 10:16:33 pm
А как мне с онлайнового компилятора получить AST и таблицу символов (SYM файл) ?

Ну и вопросы у вас... Неудобно даже :) А зачем?

P.S. Это простой однопроходный компилятор. Он даже AST не строит (я вроде писал).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Август 31, 2013, 08:20:55 am
Хочу генерить свой вариант JS. У меня есть идеи как реализовать аналог ББ на JS. При этом как обойтись вообще без JS вставок. Модули можно будет писать и на Обероне и на JS (в особом стиле), и использовать их из Оберона. Т.е что-то типа.
MODULE TestDom;

VAR
    node : SysDom.Node;

IMPORT
    SysDom;

PROCEDURE DemoAlert* (x : ARRAY OF CHAR);
BEGIN
    SysDom.setHTML(node, x);
END DemoAlert;

BEGIN
    node := SysDom.create('<div>Hello wolrd!</div>');
END TestDom.
Где SysDom - системный модуль в отдельном файле написанный на JS.
А в модуле, написанном на JS можно будет вызывать код, созданный из Оберона:
    Y.O7.TestDom.DemoAlert('New message');
...
    requires: [
        ...
        'o7-TestDom',
        ...
    ]
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Илья Ермаков от Август 31, 2013, 03:00:13 pm
А еще есть народ который рад начать программировать что-то наглядное и прикольное, но к сюрпризам js не готовы,

Из этой ниши - как раз педагогическая среда. Активно юзающая флеш как для фана детишкам, так и для создания всяких пособий.
Вот их-то OberonJS-ом, да на фоне WebGL-я, SVG и прочих, и надо окультуривать.

Снимется, кстати, глубокое драматическое противоречие для тех учителей, кто понимает, что флеш - г-но, непригодное для обучения и вообще ни для чего; но не знает, чем можно так же легко закрыть вот эти задачки визуализации, каких-то мини-приложений-пособий, да чтоб они ещё веб-публикабельны были (ну, типа, как коллекции http://school-collection.edu.ru/ или http://fcior.edu.ru/).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Август 31, 2013, 09:27:55 pm
Хочу генерить свой вариант JS.

Выделеного бакенда сейчас нет. Как я уже говорил - компилятор максимально простой и однопроходный (код генерится непосредственно в процессе парсинга). В ближайшее время переделывать в этом плане ничего не собираюсь. Но исходники открыты ;)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Romiras от Сентябрь 02, 2013, 11:13:41 pm
Вот такой код не комплируется:
MODULE Test;
IMPORT JS;
PROCEDURE Do*;
 VAR x: INTEGER;
BEGIN
 x:=MAX(INTEGER);
 JS.alert(x);
 x:=07FFFFFFFH +1;
 JS.alert(x);
 x:=0FFFFFFFFH * 2;
 JS.alert(x);
END Do;
END Test.
Цитировать
undeclared identifier: 'MAX'

P.S. А нельзя ли хотя бы добавить базовый модуль Out?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 02, 2013, 11:20:52 pm
Вот такой код не комплируется:
MODULE Test;
IMPORT JS;
PROCEDURE Do*;
 VAR x: INTEGER;
BEGIN
 x:=MAX(INTEGER);
 JS.alert(x);
 x:=07FFFFFFFH +1;
 JS.alert(x);
 x:=0FFFFFFFFH * 2;
 JS.alert(x);
END Do;
END Test.
Цитировать
undeclared identifier: 'MAX'

P.S. А нельзя ли хотя бы добавить базовый модуль Out?
1.  :) а что  такое MAX  в  07?
2.  Куда должны по= вашему выводить процедуры модуля  Out?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Madzi от Сентябрь 03, 2013, 04:41:32 am
В консоль вестимо.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 04:49:56 am
Вот такой код не комплируется:
MODULE Test;
IMPORT JS;
PROCEDURE Do*;
 VAR x: INTEGER;
BEGIN
 x:=MAX(INTEGER);
 JS.alert(x);
 x:=07FFFFFFFH +1;
 JS.alert(x);
 x:=0FFFFFFFFH * 2;
 JS.alert(x);
END Do;
END Test.
Цитировать
undeclared identifier: 'MAX'
И не должен. MAX действительно в Обероне нет: http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf

P.S. А нельзя ли хотя бы добавить базовый модуль Out?
Будет в стандартной библиотеке. Но в язык вшит не будет.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 05:29:08 am
В консоль вестимо.
Какую консоль... Если имеется ввиду  отладочная консоль JS - то нет проблем
используйте
JS.console.log()  только не забудьте активировать ее в соответствующем браузере - все прекрасно работает
 примеры:
...
VAR s:INTEGER;
....
JS.console.log("Привет МИР!");
s:=45;
JS.console.log(s*5);
....
 ;) когда я задавал вопрос , я подспудно-паскудно намекал на нечто другое  :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 06:04:41 am
Кстати, Vlad, возможно стоит в качестве платформенной фичи(регулируемой опцией компилятора)
дать возможность делать псевдонимы на обьекты JS наподобие
....
IMPORT con:=JS.console;
...
con.log("Hello!");
.....
вроде один фиг всегда создаются их экземпляры с одной стороны, с другой - они внешние и недоразумений при комбинировании быть не должно....
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 06:35:43 am
А еще есть народ который рад начать программировать что-то наглядное и прикольное, но к сюрпризам js не готовы,

Из этой ниши - как раз педагогическая среда. Активно юзающая флеш как для фана детишкам, так и для создания всяких пособий.
Вот их-то OberonJS-ом, да на фоне WebGL-я, SVG и прочих, и надо окультуривать.

Снимется, кстати, глубокое драматическое противоречие для тех учителей, кто понимает, что флеш - г-но, непригодное для обучения и вообще ни для чего; но не знает, чем можно так же легко закрыть вот эти задачки визуализации, каких-то мини-приложений-пособий, да чтоб они ещё веб-публикабельны были (ну, типа, как коллекции http://school-collection.edu.ru/ или http://fcior.edu.ru/).

Ну, не только. Десктоп-приложения (точнее их GUI) сейчас уже очень часто также пишутся с помощью html/js. Ну, скажем недавний пример: http://forum.oberoncore.ru/viewtopic.php?f=47&t=4470&p=82127

Приложение LeaderTask. GUI этого приложение построено на html (c небольшой добавкой js) с помощью HTMLayout (http://en.wikipedia.org/wiki/HTMLayout). Само приложение (логика), насколько я понимаю, писано на С++. Данные хранятся в sqlite 3.

Еще про HTMLayout: http://habrahabr.ru/post/62330/
Ну и офиц. сайт: http://www.terrainformatica.com/htmlayout/
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Сентябрь 03, 2013, 06:43:34 am
Кстати, Vlad, возможно стоит в качестве платформенной фичи(регулируемой опцией компилятора)
дать возможность делать псевдонимы на обьекты JS наподобие
....
IMPORT con:=JS.console;
В обероне это запрещено же, qualident в именах модулей нельзя использовать.
А жаль, можно было бы иерархии модулей выстраивать. Тогда JS.console был бы просто модулем console в папке JS...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 06:48:15 am
Кстати, Vlad, возможно стоит в качестве платформенной фичи(регулируемой опцией компилятора)
дать возможность делать псевдонимы на обьекты JS наподобие
....
IMPORT con:=JS.console;
В обероне это запрещено же, qualident в именах модулей нельзя использовать.
А жаль, можно было бы иерархии модулей выстраивать. Тогда JS.console был бы просто модулем console в папке JS...
Евгений, причем тут Оберон - читайте внимательней, я говорю про РЕГУЛИРУЕМУЮ настройками компилятора ПЛАТФОРМЕННУЮ фичу ВНЕШНИХ по отношению к Оберону объектов, другое дело, что есть определенные  нюансы...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 06:51:02 am
но как бы то не было (по моим прикидкам) реализовать эту фичу гораздо проще, чем std библиотеки, и однозначно , это решение будет гораздо эффективнее...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Сентябрь 03, 2013, 07:27:22 am
но как бы то не было (по моим прикидкам) реализовать эту фичу гораздо проще, чем std библиотеки, и однозначно , это решение будет гораздо эффективнее...

valexey упрётся -- ведь это нарушит переносимость программ, создаст ещё один несовместимый диалект оберона ))
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 07:31:28 am
но как бы то не было (по моим прикидкам) реализовать эту фичу гораздо проще, чем std библиотеки, и однозначно , это решение будет гораздо эффективнее...

valexey упрётся -- ведь это нарушит переносимость программ, создаст ещё один несовместимый диалект оберона ))
  какой в п.. ду "диалект Оберона" ведь не смущает же вызов JS.alert("Hello") и  JS.alert(a*5) c позиции этого самого "диалекта" - сие есть обычная ПЛАТФОРМЕННАЯ особенность.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 07:33:43 am
и потом, это всего лишь предложение  :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Илья Ермаков от Сентябрь 03, 2013, 08:36:17 am
Да проблем-то нет... Даже и без платформенных особенностей...
Представьте, что console - это RECORD  с процедурными полями, внутри модуля JS.... Типа.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 08:51:52 am
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 09:47:03 am
но как бы то не было (по моим прикидкам) реализовать эту фичу гораздо проще, чем std библиотеки, и однозначно , это решение будет гораздо эффективнее...
Я бы не торопился с вводом такой фичи. Мне кажется введение этой фичи будет стратегической ошибкой, которая приведет как минимум к замедлению темпов разработки стандартной библиотеки для Оберона, а также приведет к повсеместному использованию динамической типизации в Обероне через JS-модуль, ведь использование функций JS будет смотреться в коде вполне нативно.

Как сказал один финский товарищ: "...это все равно, что мочиться в штаны, как это делают финские мальчики с целью согреться. "Это принесло бы минутное облегчение, но не избавило бы от проблем в будущем"". Правда компания совету этого товарища в результате не последовала.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 10:00:45 am
но как бы то не было (по моим прикидкам) реализовать эту фичу гораздо проще, чем std библиотеки, и однозначно , это решение будет гораздо эффективнее...
Я бы не торопился с вводом такой фичи. Мне кажется введение этой фичи будет стратегической ошибкой, которая приведет как минимум к замедлению темпов разработки стандартной библиотеки для Оберона, а также приведет к повсеместному использованию динамической типизации в Обероне через JS-модуль, ведь использование функций JS будет смотреться в коде вполне нативно.

она у вас (динамическая типизация и нарушение правил интерпретации ЯВУ) И ТАК в наличии имеется более того (см. пример с консолью), смотрится это дело весьма "наитивно" хотя, никаких проверок на существование обьекта console  не производится. Но плюсом является псевдо проверка засылаемых в обьект значений.  С другой стороны нужно отдавать себе отчет, что эта реализация  ЧИСТО платформенная, а одной из важнейших платформенных особенностей JS является взаимодействие с  ОПРЕДЕЛЕННЫМИ (на  уровне интерфейса) обьектами реализуемыми клиентским окружением (браузерами) и лишать возможность взаимодействия с ними напрямую имхо... это пендаль на эффективность решений получаемых с помощью Оберона.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 10:20:22 am
но как бы то не было (по моим прикидкам) реализовать эту фичу гораздо проще, чем std библиотеки, и однозначно , это решение будет гораздо эффективнее...
Я бы не торопился с вводом такой фичи. Мне кажется введение этой фичи будет стратегической ошибкой, которая приведет как минимум к замедлению темпов разработки стандартной библиотеки для Оберона, а также приведет к повсеместному использованию динамической типизации в Обероне через JS-модуль, ведь использование функций JS будет смотреться в коде вполне нативно.

она у вас (динамическая типизация и нарушение правил интерпретации ЯВУ) И ТАК в наличии имеется более того (см. пример с консолью), смотрится это дело весьма "наитивно" хотя, никаких проверок на существование обьекта console  не производится. Но плюсом является псевдо проверка засылаемых в обьект значений.  С другой стороны нужно отдавать себе отчет, что эта реализация  ЧИСТО платформенная, а одной из важнейших платформенных особенностей JS является взаимодействие с  ОПРЕДЕЛЕННЫМИ (на  уровне интерфейса) обьектами реализуемыми клиентским окружением (браузерами) и лишать возможность взаимодействия с ними напрямую имхо... это пендаль на эффективность решений получаемых с помощью Оберона.
Порядок появления фич имеет значение. Если эта фича появится после стандартной библиотеки, то возможно вреда она и не нанесет, а нанесет наоборот пользу.

Про JS.alert("hello") и ему подобных – в свете наличия JS.do(), я бы вообще это дело выпилил бы. Но поскольку сейчас у нас библиотеки ввода-вывода пока нет, а пользоваться JS.do("alert('hello world')") таки сложнее и не удобней чем JS.alert("hello world"), то пусть пока будет.

На счет эффективности - думаю что эффективность с биндингом или без, будет примерно одна и та же. Впрочем, чтобы утверждать однозначно, нужно провести тесты.

Поэтому предлагаю пока в этом плане ничего не трогать - пусть будет как есть сейчас. После того как компилятор дозреет до состояния когда на нем можно будет писать полноценные модули (там для этого осталось две баги пофиксить: 1 (https://github.com/vladfolts/oberonjs/issues/15), 2 (https://github.com/vladfolts/oberonjs/issues/16)), в том числе модули-биндинги, вот тогда проведем тесты и посмотрим что получится. Ну и вообще, посмотрим что у нас выходит с библиотекой ввода-вывода и всяким разным стандартным иным.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 10:28:35 am
Ну и вообще, посмотрим что у нас выходит с библиотекой ввода-вывода и всяким разным стандартным иным.
  а что там нахрен смотреть... пример.  которого так не хватает Ромирасу модуль Out -  пять процедур  в теле каждой один и тот же вызов JS.console.log().... модуль про модуль Math говорить что-то нужно?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 10:38:53 am
Ну и вообще, посмотрим что у нас выходит с библиотекой ввода-вывода и всяким разным стандартным иным.
  а что там нахрен смотреть... пример.  которого так не хватает Ромирасу модуль Out -  пять процедур  в теле каждой один и тот же вызов JS.console.log().... модуль про модуль Math говорить что-то нужно?
Если ты говоришь о скорости исполнения - то да, нужно проверять. Я полагаю что скорость исполнения будет неотличима (ибо инлайн функций с последующей jit-компиляцией). Либо уточни плиз, что именно ты под эффективностью подразумеваешь.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Romiras от Сентябрь 03, 2013, 12:17:22 pm
Я всего лишь хотел обратить ваше внимание на особенности работы с целыми числами OberonJS, поскольку зависит от спецификаций EcmaScript.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 12:22:26 pm
Я всего лишь хотел обратить ваше внимание на особенности работы с целыми числами OberonJS, поскольку зависит от спецификаций EcmaScript.
Да, мы учитывали это (по этому поводу нас даже спрашивали: https://github.com/vladfolts/oberonjs/issues/9 ), но видимо не везде учли. Таки баг.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 12:27:35 pm
Я полагаю что скорость исполнения будет неотличима (ибо инлайн функций с последующей jit-компиляцией)....
ни фига не понимаю.. какой может быть инлайн в  платформенном компиляторе выдающем js -код акромя вызова непосредственно этого кода вложенного в Оберонный сырец? эта вставка (в частном случае ЛЮБОЙ вызов обьекта JS - окружения) и есть инлайн, разве нет?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 12:31:45 pm
Я полагаю что скорость исполнения будет неотличима (ибо инлайн функций с последующей jit-компиляцией)....
ни фига не понимаю.. какой может быть инлайн в  платформенном компиляторе выдающем js -код акромя вызова непосредственно этого кода вложенного в Оберонный сырец? эта вставка (в частном случае ЛЮБОЙ вызов обьекта JS - окружения) и есть инлайн, разве нет?

Я про то, что в js скорее всего вот такое:
var a = function(s){console.log(s)}

while (true) {
    a("hello");
}
По эффективности будет скорее всего не отличимо от такого:
while (true) {
    console.log("hello")
}
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 03, 2013, 12:34:06 pm
Я всего лишь хотел обратить ваше внимание на особенности работы с целыми числами OberonJS, поскольку зависит от спецификаций EcmaScript.
Завел баг: https://github.com/vladfolts/oberonjs/issues/19
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 03, 2013, 01:00:34 pm
Я всего лишь хотел обратить ваше внимание на особенности работы с целыми числами OberonJS, поскольку зависит от спецификаций EcmaScript.
ну (  :) если честно) по сообщению этого не скажешь - в любом случае.. надеемся , что препятствия на этом пути (обращения нашего внимания "на особенности работы с целыми числами OberonJS") удалось помочь преодолеть.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 03, 2013, 03:11:41 pm
Кстати, Vlad, возможно стоит в качестве платформенной фичи(регулируемой опцией компилятора)
дать возможность делать псевдонимы на обьекты JS наподобие
....
IMPORT con:=JS.console;
...
con.log("Hello!");
.....
вроде один фиг всегда создаются их экземпляры с одной стороны, с другой - они внешние и недоразумений при комбинировании быть не должно....

Оно конечно тривиально с точки зрения реализации, но я бы пока отложил любые расширения за исключением тех, без которых ну никак (типа недавно реализованного JS.do).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Илья Ермаков от Сентябрь 04, 2013, 06:00:19 am
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D

Проблем с реализацией агрегата console внутри JS для процедур ввода-вывода...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 04, 2013, 10:50:15 am
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D

Проблем с реализацией агрегата console внутри JS для процедур ввода-вывода...
C точки зрения Оберона функция console.log имеет невозможную сигнатуру.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 04, 2013, 10:54:14 am
Good news for everyone! Влад пофиксил мерзкий баг номер 15! Что было в нем мерзкого? А то, что по сути не работал экспорт типов из модулей. Причем ладно бы оно не компилялось, ломалась кодогенерация. Подробней о побежденном монстре можно глянуть тут: https://github.com/vladfolts/oberonjs/issues/15

Теперь можно осторожно пробовать писать библиотеки (но пока без полиморфизма, потому что еще жив другой монстр: https://github.com/vladfolts/oberonjs/issues/16 ).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 12:19:51 pm
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D

Проблем с реализацией агрегата console внутри JS для процедур ввода-вывода...
C точки зрения Оберона функция console.log имеет невозможную сигнатуру.
это только один момент - другой, более неприятный - это то, что компилятор не  проверяет наличие обьекта  консоль в JS, да и JS ни разу не является модулем, хотя выглядит похоже. Так что остается одно -честно выносить все то что связано с JS за пределы понятийной сферы Оберона.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Сентябрь 04, 2013, 12:25:04 pm
это только один момент - другой, более неприятный - это то, что компилятор не  проверяет наличие обьекта  консоль в JS, да и JS ни разу не является модулем, хотя выглядит похоже. Так что остается одно -честно выносить все то что связано с JS за пределы понятийной сферы Оберона.

Тут ситуация аналогична псевдомодулю SYSTEM -- он же тоже по сути не является нормальным модулем.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 03:08:41 pm
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 04, 2013, 03:14:24 pm
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
А где там объектные типы? У js есть примитивные типы - целые (с некоторой натяжкой конечно, но тем не менее) и числа с плавающей запятой. То есть это именно примитивные типы, не Object'ы.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 03:35:51 pm
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
А где там объектные типы? У js есть примитивные типы - целые (с некоторой натяжкой конечно, но тем не менее) и числа с плавающей запятой. То есть это именно примитивные типы, не Object'ы.
проблема динамической природе JS - сейчас он простой обьект, через секунду  к нему прилеплен  доп. метод, или его тип сменился на другой простой. Как бы  то не было компилятор трактует значение как тип ANY (и это правильно) - только  мне с означенным вопросом от этого не легче.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 04, 2013, 04:06:24 pm
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
А где там объектные типы? У js есть примитивные типы - целые (с некоторой натяжкой конечно, но тем не менее) и числа с плавающей запятой. То есть это именно примитивные типы, не Object'ы.
проблема динамической природе JS - сейчас он простой обьект, через секунду  к нему прилеплен  доп. метод, или его тип сменился на другой простой. Как бы  то не было компилятор трактует значение как тип ANY (и это правильно) - только  мне с означенным вопросом от этого не легче.

Не понимаю проблемы. Вот примерно так будет (Math и Out модули + тестовый модуль, этот весь код можно скопипастить в онлайн-компилер и погонять):

MODULE Math;
IMPORT JS;

PROCEDURE Random*() : REAL;
VAR
  res : REAL;
BEGIN
  JS.do("res = JS.Math.random();")
  RETURN res
END Random;

END Math.

MODULE Out;
IMPORT JS;

CONST
  console* = 0;
  alert  * = 1;

VAR
  Mode* : INTEGER;

PROCEDURE Real*(v : REAL);
BEGIN
  CASE Mode OF
      console : JS.do("JS.console.log(v);")
    | alert   : JS.do("JS.alert(v)")
  END
END Real;

PROCEDURE SetMode*(m : INTEGER);
BEGIN
  Mode := m
END SetMode;

BEGIN
  Mode := alert
END Out.

MODULE Test;
IMPORT Out, Math;

BEGIN
  Out.Real(Math.Random());
  Out.SetMode(Out.console);
  Out.Real(Math.Random())
END Test.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 04:17:05 pm

Не понимаю проблемы. Вот примерно так будет (Math и Out модули + тестовый модуль, этот весь код можно скопипастить в онлайн-компилер и погонять):

в отсутствии гарантии, что будет  создано значение простого типа. Впрочем, возможно. эта проблема надумана. Я ответ получил (не знал о наличии процедуры do ).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 04, 2013, 04:26:02 pm

Не понимаю проблемы. Вот примерно так будет (Math и Out модули + тестовый модуль, этот весь код можно скопипастить в онлайн-компилер и погонять):

в отсутствии гарантии, что будет  создано значение простого типа. Впрочем, возможно. эта проблема надумана. Я ответ получил (не знал о наличии процедуры do ).
Значит надо проверять в рантайме. JS это не только псевдомодуль для Оберона, но и объект с набором функций для javascript, в частности туда можно добавить проверялки типов. Будет что-то вроде: JS.do("JS.CheckReal(JS.Math.random())"); если там вдруг не то что нужно (либо функции random нет вообще) то будет ошибка во время выполнения. В первом приближении аналогичная выполнения ASSERT(FALSE).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 05:47:12 pm
а вот и иллюстрация того, что не нравится:
MODULE Math;
IMPORT JS;

PROCEDURE Random*() : INTEGER;
VAR
  res : INTEGER;
BEGIN
  JS.do("res = JS.Math.random();")
  RETURN res
END Random;

END Math.

MODULE Out;
IMPORT JS;

CONST
  console* = 0;
  alert  * = 1;

VAR
  Mode* : INTEGER;

PROCEDURE Real*(v : INTEGER);
BEGIN
  CASE Mode OF
      console : JS.do("JS.console.log(v);")
    | alert   : JS.do("JS.alert(v)")
  END
END Real;

PROCEDURE SetMode*(m : INTEGER);
BEGIN
  Mode := m
END SetMode;

BEGIN
  Mode := alert
END Out.

MODULE Test;
IMPORT Out, Math;

BEGIN
  Out.Real(Math.Random());
  Out.SetMode(Out.console);
  Out.Real(Math.Random())
END Test.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 04, 2013, 06:00:14 pm
а вот и иллюстрация того, что не нравится:
PROCEDURE Random*() : INTEGER;
VAR
  res : INTEGER;
BEGIN
  JS.do("res = JS.Math.random();")
  RETURN res
END Random;
[/quote]
Ну, тут дело такое - пишешь биндинг - будь внимателен. Точно также можно поломать Оберон или Си функцией с асмовой вставкой. Ну, или почти также (эффекты там все же несколько другие будут - там будет целочисленный мусор или сегфолт, в зависимости от нюансов).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 04, 2013, 06:04:39 pm
Теперь можно осторожно пробовать писать библиотеки (но пока без полиморфизма, потому что еще жив другой монстр: https://github.com/vladfolts/oberonjs/issues/16 ).

Оно частично фикснуто. Не закрываю, потому что осталось фикснуть диагностику для случая, когда пытаются кастать переменную или не-VAR параметр (оно тебе не должно мешать).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 04, 2013, 06:08:33 pm
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())

Я планировал просто пытаться приводить к нужному обероновскому типу. Сейчас "v := JS.Math.sin()" просто ругается о том, что функция не имеет результата. Т.е., можно только писать JS.do("v = Math.sin()") со всеми "небезопасными" последствиями.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 06:10:08 pm
Вы не совсем поняли - речь идет о том, что ожидаемой надежности и строгости в построения (т.е. продуктов выполняемых на это языке) - Оберон не предоставляет (правда это в моем понимании   :( ) - а количество подобных казусов херово уловимых (по сути дела была "прошита" система контроля типов) , прямо пропорционально количеству дуканий как ни крути.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 04, 2013, 06:16:04 pm
Вы не совсем поняли - речь идет о том, что ожидаемой надежности и строгости в построения (т.е. продуктов выполняемых на это языке) - Оберон не предоставляет (правда это в моем понимании   :( ) - а количество подобных казусов херово уловимых (по сути дела была "прошита" система контроля типов) , прямо пропорционально количеству дуканий как ни крути.

Никто не обещал безопасность и строгость при использовании SYSTEM. Ни в одном из оберонов. Тут только один ответ может быть - не использовать SYSTEM (особенно в JS.do() виде). JS.method - нужно сделать контроллируемым (в виде АВОСТ в случае невозможности приведения к ожидаемому типу), чтобы упростить написание биндингов.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Сентябрь 04, 2013, 06:23:26 pm

Никто не обещал безопасность и строгость при использовании SYSTEM. Ни в одном из оберонов. Тут только один ответ может быть - не использовать SYSTEM (особенно в JS.do() виде). JS.method - нужно сделать контроллируемым (в виде АВОСТ в случае невозможности приведения к ожидаемому типу), чтобы упростить написание биндингов.
а без него нельзя поскольку характер плаформы такой что будут активно понужаться внешние обьекты, возможно стоит задуматься о нормальном модуле SYSTEM.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 08, 2013, 06:07:11 pm
А еще есть народ который рад начать программировать что-то наглядное и прикольное, но к сюрпризам js не готовы,

Из этой ниши - как раз педагогическая среда. Активно юзающая флеш как для фана детишкам, так и для создания всяких пособий.
Вот их-то OberonJS-ом, да на фоне WebGL-я, SVG и прочих, и надо окультуривать.

Снимется, кстати, глубокое драматическое противоречие для тех учителей, кто понимает, что флеш - г-но, непригодное для обучения и вообще ни для чего; но не знает, чем можно так же легко закрыть вот эти задачки визуализации, каких-то мини-приложений-пособий, да чтоб они ещё веб-публикабельны были (ну, типа, как коллекции http://school-collection.edu.ru/ или http://fcior.edu.ru/).

А вот флеш и детишки: http://habrahabr.ru/post/192968/

Черт, бедные дети. Там же еще и Lua. Для мобильников. Ужоз!
(самое смешное что флеш, ActionScript - язык статически типизированный, но от этого не менее убогий)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: ilovb от Сентябрь 08, 2013, 06:54:29 pm
Там же еще и Lua. Для мобильников.
А что такого в Lua?
Такие средства разработки как CoronaSDK - это мейнстрим вроде сейчас. Для игр просто идеально.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Сентябрь 09, 2013, 10:10:38 am
Предлагаю, переименовать компилятор в оберон 2 и запилить нормальные массивы. Плюс ещё строки в стиле паскаль, s1 + s2.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 09, 2013, 10:32:55 am
Предлагаю, переименовать компилятор в оберон 2 и запилить нормальные массивы. Плюс ещё строки в стиле паскаль, s1 + s2.
И как это поможет для, например, map'ов? Ну и других типов контейнеров.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Сентябрь 09, 2013, 12:14:23 pm
Там же еще и Lua. Для мобильников.
А что такого в Lua?
Динамическая типизация, как и в js или питоне.

Такие средства разработки как CoronaSDK - это мейнстрим вроде сейчас. Для игр просто идеально.
Смотря для каких игр.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 09, 2013, 01:49:20 pm
Предлагаю, переименовать компилятор в оберон 2 и запилить нормальные массивы. Плюс ещё строки в стиле паскаль, s1 + s2.

Любые расширения синтаксиса/семантики (если будут сделаны) будут оформлены явно - опцией компилятора или еще как. Дабы любители минимализма/хардкора/квинтэссенции_императивного_программирования всегда имели возможность пощупать оригинал.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Сентябрь 17, 2013, 02:52:08 pm
Я конечно уже задавал вопрос, но на тот момент вникать не стал, т.к. не было программы, на которой можно было попробовать.

Сейчас снова (правда немного другой вопрос):

Есть программа, которая подгружает файлы js скриптов, не браузер.
Что надо сделать, чтобы в нее включить компилятор, и как оформлять код на обероне, чтобы он компилировался?

Или это невозможно данным компилятором. Если вдруг это возможно, то по мере наличия времени начну тестировать компилятор (правда со временем ужасно туго).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Сентябрь 17, 2013, 02:54:46 pm
И да, я тупой 1сник :) (думаю не такой как ilovb , в смысле отличаюсь от него в противоположную сторону :) ), поэтому ответы прошу излагать доступно
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Сентябрь 17, 2013, 03:01:09 pm
из html страницы я не понял, как извлечь, а изучать html пока не в приоритете

И вроде бы я так понял, "прикручивается" какой-то графический движок. Где бы про него почитать? Ну и не помешают ссылки на доступную литературу по js (хотя это само по себе тоже не хотелось бы изучать, блин, как прав инфо21, и его источники, когда говорят про наименьшее сопротивление :) ).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 17, 2013, 06:26:36 pm
Есть программа, которая подгружает файлы js скриптов, не браузер.

См. build.cmd - оно "линкует" результирующий .js с компилятором (то, что тебе нужно) и заодно .html (тебе не нужно). Получившийся .js содержит функцию, которую можно вызывать с текстом на обероне и получить резльтирующий .js (в виде строки). Результирующий .js можно выполнить (запустить программу) через eval или еще как. Вроде все. Какую функцию и как вызывать - см. код внутри html, там все просто.

Если "не браузер" - это nodejs, то ничего "линковть" не надо - оно уже готово к использованию - require("oc.js") и вперед.

Что надо сделать, чтобы в нее включить компилятор, и как оформлять код на обероне, чтобы он компилировался?

Оформлять код как обычно - в виде обероновских модулей. А вся связь с внешним миром через IMPORT JS.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 17, 2013, 06:32:01 pm
И вроде бы я так понял, "прикручивается" какой-то графический движок. Где бы про него почитать?

http://processingjs.org/

Эта жабаскриптовая либа. Компилятор сам по себе для работы ее не требует. Но если ты хочешь чего-то такое забабахать тут же на страничке - то можно импортнуть биндинг этой либы (valexey написал) и использовать эту жабаскриптовую либу из обероновского модуля.

Ну и не помешают ссылки на доступную литературу по js (хотя это само по себе тоже не хотелось бы изучать, блин, как прав инфо21, и его источники, когда говорят про наименьшее сопротивление :) ).

По идее js сам по осебе тебе не нужен. Пока ты не захочешь биндинги писать или там со страничкой что-то делать (DOM  и т.д.).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Сентябрь 19, 2013, 12:10:43 am
См. build.cmd
Только там на питоне, в котором понимаю немного меньше, чем ничего. Хотя кажется с этим разбираться не придется.

Если "не браузер" - это nodejs, то ничего "линковть" не надо - оно уже готово к использованию - require("oc.js") и вперед.
Какое то require есть. Подцепить оберонскрипт смогу. Но вот совсем не понял, как быть с модулями? Я так понял в оберонскрипт addScript добавляет узел html документа. А мне как быть, если у меня не html? Там правда есть строка: "par.appendChild(scp)//this will also execute the code" . Что она обозначает?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Сентябрь 19, 2013, 12:16:43 pm
Поразмыслив, пришел к выводу, что можно попытаться обойтись html документом. Единственное вопрос, он имеет какие-нибудь связи с внешним миром? Экспортирует переменные, или хотя бы файлы на диск пишет/считывает? Конечно интересует прежде всего поле html документа для 1С, но думаю, там не сильно отличаться будет от html в целом, хотя конечно не факт.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 19, 2013, 05:00:38 pm
Только там на питоне, в котором понимаю немного меньше, чем ничего. Хотя кажется с этим разбираться не придется.

Питон там только для того, чтобы слепить файлы nodejs "модулей" (модулей как таковых в самом жабаскрипте нет) в одну большую простыню жабаскрипта, понятную браузеру. Готовой тулзы я не нашел (хотя это очень странно), поэтому пришлось самому написать на питоне. Короче, оно нужно только для сборки компилятора (для запуска не под nodejs). Тебе надо просто установить какой-нибудь питон, все.

Какое то require есть. Подцепить оберонскрипт смогу. Но вот совсем не понял, как быть с модулями? Я так понял в оберонскрипт addScript добавляет узел html документа. А мне как быть, если у меня не html? Там правда есть строка: "par.appendChild(scp)//this will also execute the code" . Что она обозначает?

Опиши подробнее под чем ты все это хочешь использовать. В общем случае достаточно любого хоста, который умеет ранить жабаскрипт. Ничего браузерно-специфичного не используется. Я работаю с компилятором в консоли, используя nodejs. Загрузку обероновских модулей тебе надо будет делать самому - компилятор только компилирует. На вход - оберон (строка), на выходе - жабаскрипт (строка). Как именно подавать обероновский текст на вход и что делать со скомпилированным жабаскриптом - решать тебе. Страничка online-компилятора берет обероновский текст из текстового поля, отдает его компилятору и помещает результат в другое тектовое поле. Все, никакой магии.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 19, 2013, 05:02:59 pm
Поразмыслив, пришел к выводу, что можно попытаться обойтись html документом. Единственное вопрос, он имеет какие-нибудь связи с внешним миром? Экспортирует переменные, или хотя бы файлы на диск пишет/считывает? Конечно интересует прежде всего поле html документа для 1С, но думаю, там не сильно отличаться будет от html в целом, хотя конечно не факт.

Какой там жабаскрипт в 1С я вообще не в курсе. ilovb тебе в помощь :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Сентябрь 19, 2013, 06:03:31 pm
Опиши подробнее под чем ты все это хочешь использовать.
Интересует проект Снегопат для конфигуратора 1С, а конкретно написание скриптов для него https://snegopat.ru/

Не знаю, какой именно там движок яваскрипта.

Из овтета понял, что генерится другой скрипт по  build.cmd, значит буду заново разбираться. Думаю в нем найду нужную функцию :) . Был уверен, что тот, который скачал в архиве, как раз и есть сгенерированный.

Я правильно понял, чтобы динамически подключить модуль скрипта, требуется выполнить eval(строкаскрипта) ? А затем уже к методам можно будет обращаться по имени модуля оберона?

Вроде начинает проясняться в голове помаленьку. Спасибо за ответы.

Судя по проблемам, с которыми сталкиваются судя по гуглу с html и  скриптами на 1С , там проще не будет. Поэтому пока продолжу разбираться с текущим вариантом. Главное с подключением разобраться, дальше думаю проще будет.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Сентябрь 19, 2013, 09:17:39 pm
Из овтета понял, что генерится другой скрипт по  build.cmd, значит буду заново разбираться. Думаю в нем найду нужную функцию :) . Был уверен, что тот, который скачал в архиве, как раз и есть сгенерированный.

Да, в исходниках готового скрипта нет - только модули для nodejs. Готовый можешь утащить со странички онлайн компилятора (если не хочешь заморчаиваться с питоном).

Я правильно понял, чтобы динамически подключить модуль скрипта, требуется выполнить eval(строкаскрипта) ? А затем уже к методам можно будет обращаться по имени модуля оберона?

Да. eval того, что выдаст компилятор.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Октябрь 10, 2013, 07:20:49 pm
Единственное вопрос, он имеет какие-нибудь связи с внешним миром? Экспортирует переменные, или хотя бы файлы на диск пишет/считывает?

В текущей ревизии появился батник compile.cmd - на вход берет имя исходного файла с обероном. Компилирует с поддержкой импортов (ищет файлы по названию импортиованного модуля + расширение .ob), на выходе исполняемый "a.js". Может тебе в таком виде будет проще разобраться. Работает все из консоли (требуется установленный nodejs).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 11, 2013, 05:06:18 am
В текущей ревизии появился батник compile.cmd - на вход берет имя исходного файла с обероном. Компилирует с поддержкой импортов (ищет файлы по названию импортиованного модуля + расширение .ob), на выходе исполняемый "a.js". Может тебе в таком виде будет проще разобраться. Работает все из консоли (требуется установленный nodejs).
Спасибо, я уже понял принцип, как мне работать сразу с кодом оберона. Просто пока не получились чисто какие-то яваскриптовые вещи. На текущий момент, пока отложил ковыряние, т.к. решил сначала сделать прототип на 1С (это мне все же проще). Как заработает на 1С, тогда вернусь уже к реализации на js, по срокам пока неопределенность, т.к. последнее время по работе нагрузка повысилась (пока на прототип отвожу полгода).

А так хорошо, что на данный компилятор строите планы, очень надеюсь, что мне он пригодится в дальнейшем (даже уже в текущем виде)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 11, 2013, 06:53:00 am
Тут подумал, что неплохо бы прототип писать, максимально приближенно к типам оберона 07. На русском случайно нет сообщения о языке?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 11, 2013, 07:01:12 am
Хотя пожалуй не требуется, слишком сообщение маленькое, если что, в компонентном паскале подсмотрю :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 14, 2013, 09:33:29 am
Тут обнаружил, ранее не известные мне возможности, из-за которых прототип решил делать сразу на javascript (можно будет почти все объекты 1С использовать в коде). А значит прототип тоже буду делать на javascript. Я правильно понял, что кириллица не допускается в идентификаторах данного компилятора?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Октябрь 14, 2013, 11:15:56 am
Я правильно понял, что кириллица не допускается в идентификаторах данного компилятора?

В последних описаниях оберона указано:

ident = letter {letter | digit}.
letter = "A" | "B" | … | "Z" | "a" | "b" | … | "z".
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

то есть для идентификаторов только латиница годится.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 15, 2013, 07:55:13 am
то есть для идентификаторов только латиница годится.
Про сам язык догадывался, а компилятор получается строго по сообщению о языке?

Опционально можно сделать, чтобы русские идентификаторы тоже были, или это слишком усложнит? Не помешали бы и русские эквиваленты ключевых слов (или как они там называются). А то не очень удобно с раскладки на раскладку переключаться.

Еще вопрос про биндинг. Не совсем понимаю, что он из себя представляет, а тут требуется некоторые яваскриптовые библиотеки использовать. Где бы пример посмотреть кратенький?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Октябрь 15, 2013, 10:31:32 am
то есть для идентификаторов только латиница годится.
Про сам язык догадывался, а компилятор получается строго по сообщению о языке?

Опционально можно сделать, чтобы русские идентификаторы тоже были, или это слишком усложнит? Не помешали бы и русские эквиваленты ключевых слов (или как они там называются). А то не очень удобно с раскладки на раскладку переключаться.

Еще вопрос про биндинг. Не совсем понимаю, что он из себя представляет, а тут требуется некоторые яваскриптовые библиотеки использовать. Где бы пример посмотреть кратенький?
Биндинг -жаргонное слово , обозначающее связывание, привязку (bind) функциональности сторонних библиотек (обычно написанных на другом ЯВУ, либо распространяемых в виде откомпилированных модулей - тех же DLL) для использования ее в своих продуктах.  "тут" это где? и какие библиотеки? - доступ к стандартным возможностям JS осуществляется через псевдо модуль JS - примеры смотрите в этой ветки (реализация пары функций гипотетического модуля MATH), более продвинутый пример http://oberspace.dyndns.org/index.php/topic,541.0.html (http://oberspace.dyndns.org/index.php/topic,541.0.html) - здесь, реализован биндинг к библиотеке processing.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Октябрь 15, 2013, 01:06:03 pm
Про сам язык догадывался, а компилятор получается строго по сообщению о языке?

Первая версия компилятора - строго по репорту. Все дальнейшие возможные расширения - строго по опциям.

Опционально можно сделать, чтобы русские идентификаторы тоже были, или это слишком усложнит?

Можно. См. lexer.js, функция isLetter.

Не помешали бы и русские эквиваленты ключевых слов (или как они там называются). А то не очень удобно с раскладки на раскладку переключаться.

См. grammar.js - все элементы грамматики, включая ключевые слова, там.

Еще вопрос про биндинг. Не совсем понимаю, что он из себя представляет, а тут требуется некоторые яваскриптовые библиотеки использовать. Где бы пример посмотреть кратенький?

См. ответ Дизера.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 15, 2013, 05:33:30 pm
Спасибо за ответы, Дизер и Влад, многое прояснилось.

Вот еще вопрос: скачал с сайта свежий архив комплиятора, запустил build.cmd выдало ошибку:
"Не удается найти "_out\oberonjs.html". Проверьте, правильно ли указано имя и повторите попытку."

Попробовал запустить буилд из предыдущего скачанного архива (скачивал 19.09.13), ошибок не было, и в каталоге Out появлялись нужные файлы.

Чего не так делаю?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Октябрь 15, 2013, 05:42:26 pm
Чего не так делаю?

Наверное сломали, позже гляну.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Октябрь 16, 2013, 04:14:01 am
Вот еще вопрос: скачал с сайта свежий архив комплиятора, запустил build.cmd выдало ошибку:
"Не удается найти "_out\oberonjs.html". Проверьте, правильно ли указано имя и повторите попытку."

Сейчас проверил последний релиз отсюда:
https://github.com/vladfolts/oberonjs/archive/v1.1.zip
Все работает.

Чего не так делаю?

А что в консоль пишет?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 16, 2013, 06:18:09 am
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\_OberonScript\oberonjs-1.1>build.cmd

C:\_OberonScript\oberonjs-1.1>build.py _out --no-git

python: failed to set __main__.__loader__

C:\_OberonScript\oberonjs-1.1>start _out\oberonjs.ht
ml
Не удается найти файл _out\oberonjs.html.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Октябрь 16, 2013, 12:57:14 pm
python: failed to set __main__.__loader__

Чего-то с питоном случилось. Посмотри вот здесь, чего народ делает:
http://stackoverflow.com/questions/12696151/failed-to-set-main-loader-in-python
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 17, 2013, 04:39:13 am
С питоном пока времени нет разбираться, тогда позже разберусь, а не можешь выложить сгенеренные файлы?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 17, 2013, 05:43:53 am
Хотя уже не надо, попробовал воспользоваться первым советом по ссылке, все получилось.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 18, 2013, 07:47:07 am
А есть где-нибудь описание отличий оберона7 от КП из блекбокса?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 18, 2013, 07:48:45 am
Или хотя бы так поставлю вопрос: будет ли компилиться код, написанный на Оберон7 в блекбоксе?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 18, 2013, 07:59:52 am
И я правильно понял, что импортируемые модули должны присутствовать при компиляции (а значит модули нельзя по отдельности компилировать? Или как то можно?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Октябрь 18, 2013, 10:41:49 am
Или хотя бы так поставлю вопрос: будет ли компилиться код, написанный на Оберон7 в блекбоксе?

Компонентный Паскаль сильно отличается от Оберона, вот несколько таких отличий:

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

Многие примитивные типы отличаются по разрядности, могут быть проблемы с этим.

В КП нет Цикла Дейкстры, могут быть проблемы с компиляцией оператора WHILE.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Октябрь 18, 2013, 10:44:06 am
И я правильно понял, что импортируемые модули должны присутствовать при компиляции (а значит модули нельзя по отдельности компилировать? Или как то можно?

Без информации об импортированных модулях невозможна раздельная компиляция, а независимой (как в сях) обероны не поддерживают.
Такая информация в оберонах имеется только в самих модулях, значит без этих импортированных модулей компиляция невозможна.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Октябрь 18, 2013, 10:47:00 am
Или хотя бы так поставлю вопрос: будет ли компилиться код, написанный на Оберон7 в блекбоксе?

В принципе можно выделить общее для этих двух языков подмножество и делать переносимые между этими двумя языками программы, но это будет означать отказ от разных возможностей из этих языков, например от наследования записей или "Цикла Дейкстры".
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Октябрь 18, 2013, 11:47:29 am
Без информации об импортированных модулях невозможна раздельная компиляция, а независимой (как в сях) обероны не поддерживают.
Такая информация в оберонах имеется только в самих модулях, значит без этих импортированных модулей компиляция невозможна.
Эта информация содержится в символьных файлах, которые в общем случае не привязаны к откомпилированному модулю. То есть, наличия символьного файла должно хватить для компиляции.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 18, 2013, 11:49:51 am
Без информации об импортированных модулях невозможна раздельная компиляция, а независимой (как в сях) обероны не поддерживают.
Такая информация в оберонах имеется только в самих модулях, значит без этих импортированных модулей компиляция невозможна.
Эта информация содержится в символьных файлах, которые в общем случае не привязаны к откомпилированному модулю. То есть, наличия символьного файла должно хватить для компиляции.
Народ, это все уже детали реализации. К языку это имеет весьма слабое отношение.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Октябрь 18, 2013, 12:15:22 pm
Без информации об импортированных модулях невозможна раздельная компиляция, а независимой (как в сях) обероны не поддерживают.
Такая информация в оберонах имеется только в самих модулях, значит без этих импортированных модулей компиляция невозможна.
Эта информация содержится в символьных файлах, которые в общем случае не привязаны к откомпилированному модулю. То есть, наличия символьного файла должно хватить для компиляции.

Ну конкретно в обсуждаемом онлайн-компиляторе этим объектных (символьных) файлов нет.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Октябрь 18, 2013, 01:17:50 pm
Но там и результат компиляции не объектный файл, а исходник, который интерпретируется. А для исполнения программы присутствие используемых модулей логично.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 18, 2013, 01:18:47 pm
Но там и компиляции по сути нет. Сразу исполнение. А для исполнения логично присутствие используемых модулей.
Конкретно компиляция там как раз есть.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Октябрь 18, 2013, 01:20:53 pm
Не успел поменять. : ). Ну, если составление коллажей из картинок считать компиляцией, то и здесь она тоже есть.
P.S. Мои Л.С. доходят?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: DddIzer от Октябрь 18, 2013, 01:35:10 pm
Но там и компиляции по сути нет. Сразу исполнение. А для исполнения логично присутствие используемых модулей.
Конкретно компиляция там как раз есть.
я для таких обозначения таких вещей использую слово трансляция.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 18, 2013, 01:39:07 pm
Ну, если составление коллажей из картинок считать компиляцией, то и здесь она тоже есть.
Это и есть компиляция в том самом смысле :-)
Цитировать
КОМПИЛЯЦИЯ
КОМПИЛЯЦИЯ (от лат. compilatio, букв. -ограбление) - сочинительство на основе чужих исследований или произведений (литературная К.) без самостоятельной обработки источников; работа, составленная таким методом.
Причем без разницы из каких кусочков ты собираешь результат - из кусочков js-кода или из кусочков машкодов. Принцип один и тот же. То есть я не вижу там никакой существенной разницы. Единственная сложность в случае машкодов/асма - это написание рантайма, а конкретно - GC. Больше там ничего интересного в общем то и нет.

Цитировать
P.S. Мои Л.С. доходят?
А ты какому пользователю пишешь?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Октябрь 18, 2013, 02:27:51 pm
Это и есть компиляция в том самом смысле :-)
Это определения общего случая. То есть, оно правильное, но я обычно использую частный случай, который на интуитивном уровне звучит примерно так "из читаемого набора байт получить нечитаемый". С парой уточнений.

[/quote]
А ты какому пользователю пишешь?
[/quote]Чёрт! Я отправлял на valexey.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 18, 2013, 02:56:20 pm
Это определения общего случая. То есть, оно правильное, но я обычно использую частный случай, который на интуитивном уровне звучит примерно так "из читаемого набора байт получить нечитаемый". С парой уточнений.
Погоди, я правильно понимаю, что ты только что код на js назвал "читаемым набором байт"? :-) Как по мне - это вполне себе нечитаемый набор байт, ну не более читаемыей чем асм скажем :-) Впрочем, сделать его совсем нечитаемым не просто, а очень просто. :-)

А если серьезно, то, по моему, в русскоязычной терминологии сложились довольно извращенные традиции. Если пойти к истокам, то мы увидим, что транслятор - это сложная штука - переводчик, вникающая в семантику написанного и делающая то, что не сводится к простой компиляции. Скажем fortran - это именно что formula translator (точнее - The IBM Mathematical Formula Translating System). На входе высокоуровневый код, выходе был машкод.

А вот компилятором я бы назвал (если забыть про извращенные терминологические традиции) штуку которая занимается трансляцией (переводом) на основе просто регулярных выражений - работающая чисто с синтаксисом, без разбора семантики исходного и целевого языков.

Исходя из этих определений - "компилятор" Вирта и Oberonjs это именно что трансляторы, ибо разборки с синтаксисом там занимают лишь малую часть кода - самое сложное и интересное таки в сементике.

А вот Сишный препроцессор - это именно что компилятор, ибо занимается тупой подстановкой на уровне синтаксиса.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 19, 2013, 08:06:23 am
что значит ошибка: TypeError: Object #<PointerType> has no method 'findSymbol' ?

И есть ли описание ошибок?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 09:47:56 am
что значит ошибка: TypeError: Object #<PointerType> has no method 'findSymbol' ?

И есть ли описание ошибок?
Это сильно похоже на ошибку компилятора. На каком исходнике это вылезает?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 19, 2013, 01:11:57 pm
В принципе код брал из КП, понимаю, что без переделки он не валиден, просто хотелось бы более внятной ошибки:

Вот код (проблема в типе v):

MODULE test;
IMPORT JS;
 TYPE
    p = POINTER TO RECORD END;
    v = POINTER TO RECORD (p)
      m:INTEGER;
    END;
 
BEGIN

END test.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 01:20:22 pm
В принципе код брал из КП, понимаю, что без переделки он не валиден, просто хотелось бы более внятной ошибки:

Вот код (проблема в типе v):

MODULE test;
IMPORT JS;
 TYPE
    p = POINTER TO RECORD END;
    v = POINTER TO RECORD (p)
      m:INTEGER;
    END;
 
BEGIN

END test.

p не является записью, запись не может быть наследована от указателя.
MODULE test;
IMPORT JS;
 TYPE
    r0 = RECORD END;
    r1 = RECORD (r0) m : INTEGER END;
    p = POINTER TO r0;
    v = POINTER TO r1;
 
BEGIN
END test.

PS. Но ошибочка в компиляторе все равно есть.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 19, 2013, 01:35:04 pm
А как быть, если:

указатель "p" задан в другом модуле (именно как указателевый тип без указания рекодрда). И унаследоваться надо от него? (может я тут чушь сморозил, но все еще пытаюсь для себя совместить КП и О7)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 01:46:38 pm
А как быть, если:

указатель "p" задан в другом модуле (именно как указателевый тип без указания рекодрда). И унаследоваться надо от него? (может я тут чушь сморозил, но все еще пытаюсь для себя совместить КП и О7)
Если тебе не экспортировали сам тип-RECORD, значит считается что нечего плодить иерархию наследования :-) То есть создатель базового типа считает что наследование вне его модуля запрещено.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 01:48:26 pm
А как быть, если:

указатель "p" задан в другом модуле (именно как указателевый тип без указания рекодрда). И унаследоваться надо от него? (может я тут чушь сморозил, но все еще пытаюсь для себя совместить КП и О7)
Вообще, очень странно было бы наследоваться от opaque-типа.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 19, 2013, 02:13:32 pm
Если тебе не экспортировали сам тип-RECORD, значит считается что нечего плодить иерархию наследования :-) То есть создатель базового типа считает что наследование вне его модуля запрещено.
В КП там просто указатель на абстрактную запись (которую надо реализовать). И судя по всему, таким образом и происходит ее реализация (если я правильно суть уловил).

Посмотреть можно в модуле Models, который генерится автоматом при создании подсистемы в ББ. Тип

Op = POINTER TO RECORD (Stores.Operation)
  model: StdModel;
END;


Ну или я не понял, чего это такое
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 02:36:25 pm
Если тебе не экспортировали сам тип-RECORD, значит считается что нечего плодить иерархию наследования :-) То есть создатель базового типа считает что наследование вне его модуля запрещено.
В КП там просто указатель на абстрактную запись (которую надо реализовать). И судя по всему, таким образом и происходит ее реализация (если я правильно суть уловил).

Посмотреть можно в модуле Models, который генерится автоматом при создании подсистемы в ББ. Тип

Op = POINTER TO RECORD (Stores.Operation)
  model: StdModel;
END;


Ну или я не понял, чего это такое

На самом деле тут нужно смотреть конкретную задачу и её уже решать. Вполне вероятно что решаться она на Обероне будет существенно иначе нежели на КП.

Вообще, в качестве примера использования Оберона (правда предыдущей ревизии) я бы советовал прочесть http://www.ozon.ru/context/detail/id/8218517/
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 02:47:10 pm
Да, а багрепорт я написал.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 19, 2013, 07:12:20 pm
Vlad баг пофиксил, я страничку компиляторную обновил. Так что теперь все хорошо - компилятор в случае попытки унаследоваться от не того что нужно теперь ругается внятно, понятно и посылает по нужному адресу.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 21, 2013, 09:17:46 am
Извиняюсь, а чё значит ошибка:

"RECORD type is expected as a base type, got 'Model'"?

До исправления на эту строку вроде как не ругался (или может не доходил до нее).

И не совесем понял, ошибка вроде выдается, а код на яваскрипт вроде формируется (не успел разобраться, весь ли)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 21, 2013, 10:08:32 am
Извиняюсь, а чё значит ошибка:

"RECORD type is expected as a base type, got 'Model'"?

До исправления на эту строку вроде как не ругался (или может не доходил до нее).

И не совесем понял, ошибка вроде выдается, а код на яваскрипт вроде формируется (не успел разобраться, весь ли)
это на каком коде?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 21, 2013, 10:42:55 am
Пока не скажу, на каком коде, решил отказаться от идеи совместить КП и О7. Поэтому предыдущий код удалил (версии пока не храню), буду отписываться по мере возникновения новых непоняток.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 21, 2013, 11:21:09 am
Пока не скажу, на каком коде, решил отказаться от идеи совместить КП и О7. Поэтому предыдущий код удалил (версии пока не храню), буду отписываться по мере возникновения новых непоняток.
Это существенно осложняет поиск ошибки в компиляторе.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 21, 2013, 12:21:12 pm
Это существенно осложняет поиск ошибки в компиляторе.
Что именно осложняет?

Такой вопрос возник, и что-то у меня не ругается на код вида

PROCEDURE (op: Op) Do
...

Но судя по всему, подобные процедуры не компилируются
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 21, 2013, 12:36:54 pm
это на каком коде?
код, с данной ошибкой, отправил в ЛС.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 21, 2013, 12:59:34 pm
Это существенно осложняет поиск ошибки в компиляторе.
Что именно осложняет?
Отсутствие примера кода на котором комплятор странно себя ведет.

Такой вопрос возник, и что-то у меня не ругается на код вида

PROCEDURE (op: Op) Do
...

Но судя по всему, подобные процедуры не компилируются
Эмм... А тело у этой функции есть ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 21, 2013, 12:59:58 pm
это на каком коде?
код, с данной ошибкой, отправил в ЛС.
Спасибо!
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 21, 2013, 01:03:33 pm
это на каком коде?
код, с данной ошибкой, отправил в ЛС.
Глянул. Все правильно - в коде два модуля. Ошибка во втором модуле, соответственно собрался первый модуль (именно его код видно в окошке js-кода), а второй не собрался.

Ну а ошибка в коде ровно та же - попытка наследоваться не от RECORD'a, а от POINTER'a. Ошибки в комиляторе нет.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Октябрь 21, 2013, 01:15:13 pm
Такой вопрос возник, и что-то у меня не ругается на код вида

PROCEDURE (op: Op) Do
...

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

У меня ругается, только весьма туманно  - "END expected (MODULE)". Но номер строки правильный.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 21, 2013, 04:10:45 pm
У меня ругается, только весьма туманно  - "END expected (MODULE)". Но номер строки правильный.
Да, извиняюсь, у меня оказывается в комментарии код был (просто почему-то не подкрашивалось как комментарий)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Октябрь 21, 2013, 04:13:06 pm
А скорее всего подсвечивался комментарий, но я по какой-то причине не заметил (воспроизвести не получается).

Пока вопросов больше нет
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Октябрь 21, 2013, 04:14:28 pm
У меня ругается, только весьма туманно  - "END expected (MODULE)". Но номер строки правильный.
Да, извиняюсь, у меня оказывается в комментарии код был (просто почему-то не подкрашивалось как комментарий)
Вот поэтому IDE/редактор обязан понимать исходник программы в точности также как компилятор, следовательно код у них должен быть един. К этому и движемся.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Romiras от Ноябрь 23, 2013, 05:47:04 pm
Вы не совсем поняли - речь идет о том, что ожидаемой надежности и строгости в построения (т.е. продуктов выполняемых на это языке) - Оберон не предоставляет (правда это в моем понимании   :( ) - а количество подобных казусов херово уловимых (по сути дела была "прошита" система контроля типов) , прямо пропорционально количеству дуканий как ни крути.

Никто не обещал безопасность и строгость при использовании SYSTEM. Ни в одном из оберонов. Тут только один ответ может быть - не использовать SYSTEM (особенно в JS.do() виде). JS.method - нужно сделать контроллируемым (в виде АВОСТ в случае невозможности приведения к ожидаемому типу), чтобы упростить написание биндингов.
Я не нашёл объяснения почему вместо в качестве принятого в Оберонах непереносимого модуля вместо "SYSTEM" он был назван "JS"?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Ноябрь 23, 2013, 06:16:24 pm
Я не нашёл объяснения почему вместо в качестве принятого в Оберонах непереносимого модуля вместо "SYSTEM" он был назван "JS"?
Потому что кроме названия к SYSTEM'у оно бы никакого отношения не имело. Название должно быть таким, чтобы было понятно что там будет. SYSTEM описанный в репорте (который к счастью является опциональным) для js-vm не реализовать.

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

Вообще, валить в SYSTEM абсолютно все - и непереносимое и опасное одновременно, это не есть правильно. Зависящий от платформы модуль должен называться PlatformName. Это легче читается, проще понимается и порождает ошибки компиляции. И это хорошо.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Romiras от Ноябрь 23, 2013, 08:30:51 pm
Я не нашёл объяснения почему вместо в качестве принятого в Оберонах непереносимого модуля вместо "SYSTEM" он был назван "JS"?
Потому что кроме названия к SYSTEM'у оно бы никакого отношения не имело. Название должно быть таким, чтобы было понятно что там будет. SYSTEM описанный в репорте (который к счастью является опциональным) для js-vm не реализовать.

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

Вообще, валить в SYSTEM абсолютно все - и непереносимое и опасное одновременно, это не есть правильно. Зависящий от платформы модуль должен называться PlatformName. Это легче читается, проще понимается и порождает ошибки компиляции. И это хорошо.
Ну, не всё. Насколько мне известно, назначение модуля SYSTEM - это низкоуровневые операции в низлежащей среде исполнения.
По аналогии с БлэкБоксом можно было вынести в SYSTEM такие операции, как выполнение "ассемблерных инструкций" на JavaScript, которые в этой реализации Оберона именуются "JS.do". А в модуль JS (аналог подсистемы Win) поместить высокоуровневые  операции для работы с самой средой исполнения - работа с DOM, AJAX - посредством JavaScript.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Ноябрь 23, 2013, 08:37:43 pm
Если не можешь реализовать SYSTEM такой как описан в репорте - не реализуй никакой. Иначе у пользователя будут проблемы.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Ноябрь 23, 2013, 09:00:44 pm
По аналогии с БлэкБоксом можно было вынести в SYSTEM такие операции, как выполнение "ассемблерных инструкций"

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

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

P.S. Название меняется правкой одной строки в исходнике компилятора.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Ноябрь 25, 2013, 02:44:27 am
Поднимал вопрос, пока обходился, но все же нужно следущее решение: модули оберона хранятся в UTF8 , в таком виде они не компилятся, надо бы как-то сделать считывание их как UTF8 без BOM . Для этого, как я понял, надо всего лишь проверить и заменить (или удалить) первые пару байт.

Для записи в UTF8 из UTF8 без BOM достаточно добавить в начало строки "\uFEFF"
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Ноябрь 25, 2013, 02:48:42 am
Кстати типовые средства 1С это не позволяют (народ извращается, но не факт, что эти извращения будут работать на новых платформах).

К тому же хотел бы компилить не только из 1с, но из нотепада (а менять кодировку цепочки модулей руками не очень хочется)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Ноябрь 25, 2013, 03:48:05 am
Вернее там 3 байта
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Ноябрь 25, 2013, 04:32:14 am
Вроде можно так решить:
fs.readFileSync(fileName).toString("utf8",3)

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

Правда сюда бы еще проверку первых трех байт (ну с этим если понадобится, буду разбираться позже)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Ноябрь 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");
                }
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Romiras от Ноябрь 25, 2013, 12:04:51 pm
Корявое решение, на мой взгляд. Чую, что можно сделать лучше.

Кроме того,
Цитата: bryanmac
Also, just so you're aware, you should never call readFileSync in a node express/webserver since it will tie up the single thread loop while I/O is performed. You want the node loop to process other requests until the I/O completes and your callback handling code can run.
http://stackoverflow.com/questions/17604866/difference-between-readfile-and-readfilesync
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Ноябрь 25, 2013, 02:18:05 pm
Корявое решение, на мой взгляд. Чую, что можно сделать лучше.
...
Если это мне, то мысль не уловил.

А если предложение сделать компиляцию асинхронной, то лично я не вижу пока еще смысла в этом, на мой взгляд, "усложнении", но это уж конечно как нащальника скажет :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Ноябрь 25, 2013, 03:23:20 pm
Корявое решение, на мой взгляд. Чую, что можно сделать лучше.

Кроме того,
Цитата: bryanmac
Also, just so you're aware, you should never call readFileSync in a node express/webserver since it will tie up the single thread loop while I/O is performed. You want the node loop to process other requests until the I/O completes and your callback handling code can run.
http://stackoverflow.com/questions/17604866/difference-between-readfile-and-readfilesync

Я так понимаю у adva там ни разу не вебсервер (да еще и однопоточный :) Так что все эти коллбэки нафиг не сдались.
Если уж критиковать решение, что я бы обратил внимание на то, что читать файл надо все-таки один раз (в переменную). Уж очень в глаза бросается.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Декабрь 31, 2013, 07:40:42 am
На какое-то время пришлось отложить работу с компилятором, вопрос, он как-то дорабатывался в связи c выявленными новшествами CASE и пр. ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Декабрь 31, 2013, 07:53:39 am
На какое-то время пришлось отложить работу с компилятором, вопрос, он как-то дорабатывался в связи c выявленными новшествами CASE и пр. ?

Нет, ждем официального репорта.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 03, 2014, 06:38:22 am
Что-то я не понял, в каком виде подсовывать теперь опции файлу oc_nodejs.js ?

Пример приведите, пожалуйста.

А то указал в таком виде, не работает:

CompileJs\node CompileJs\oc_nodejs.js --out-dir=%CD% --import-dir=%CD% %1
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 03, 2014, 03:29:20 pm
А то указал в таком виде, не работает:

Вроде все правильно. Что говорит?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 04, 2014, 01:45:15 am
выяснил что имя файла не верно передал, предыдущий вопрос снят.

Но в итоге у меня почему-то не появилось аналогичного файла js, или что должно было появиться?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 04, 2014, 01:55:07 am
Извиняюсь, вопрос тоже снят, забыл что не по имени файла, а по имени модуля файлы образуются.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 04, 2014, 02:17:19 am
Код, который ранее компилился без ошибок, перестал:

имеем:

Date* = POINTER TO IDate;
IDate* = RECORD (ObjectRec)
    getTime: PROCEDURE (): INTEGER
END;

d.getTime()  (* здесь d имеет тип Date *)
ругается, что IDate не имеет данного поля
File "D:\GoogleDisk\_snegopat\scripts\Oberon\Tools.ob", line 67: type 'IDate' ha
s no 'getTime' field
D:\GoogleDisk\_snegopat\scripts\Oberon>pause
Для продолжения нажмите любую клавишу . . .

Как надо переделать, или какую опцию запустить, чтобы сработало?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 04, 2014, 02:22:11 am
Код, который ранее компилился без ошибок, перестал:

Надо экспортнуть поле:

IDate* = RECORD (ObjectRec)
    getTime*: PROCEDURE (): INTEGER
END;

Раньше работало в результате бага :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 04, 2014, 08:03:55 am
Ясно, точно :)

Тогда еще вот вопрос:

Object* = POINTER TO ObjectRec;
ObjectRec* = RECORD
     toString*: PROCEDURE (): String
END;

В этом коде ругается:
cannot declare field, record already has method 'toString' . Это мне у себя чего искать, или так задумано?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Valery Solovey от Январь 04, 2014, 04:00:52 pm
А ObjectRec никто не расширяет?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 04, 2014, 11:10:56 pm
В этом коде ругается:
cannot declare field, record already has method 'toString' . Это мне у себя чего искать, или так задумано?

Хм. Интересно. Это видимо потому, что "toString" есть у всех объектов в JS. Попробую пофиксить.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 07, 2014, 07:20:38 am
имеем вложенную процедуру, которую вызываем после BEGIN внешней процедуры. Передаем параметры, количеством отличающимся (ругается, что количество параметров не то, но при этом указывает на первую строку, в результате очень сложно обнаружить ошибку)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 09, 2014, 07:37:15 am
Хотя кажется не для вложенных процедур, тоже всегда указывает на 1ую строку (по крайней мере ошибка попадалась). Если надо, попробую более точно определить (может я чего не догрузил из репозитария)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 10, 2014, 04:32:44 pm
Хотя кажется не для вложенных процедур, тоже всегда указывает на 1ую строку (по крайней мере ошибка попадалась). Если надо, попробую более точно определить (может я чего не догрузил из репозитария)

Да, я видел такое не одни раз. Все руки не дошли. Если наткнешься на конкретный пример - запиши в issue плз.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 11:35:52 am
Такой код, компилится и выполняется.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 3;
M[I] := 5;
 JS.alert(M[I]);
END test.

Выводит 5. JS увеличивает сам массив?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 11:39:51 am
Ещё забавнее.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.


Всё работает, ответ 5.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Январь 22, 2014, 12:08:31 pm
Ещё забавнее.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.


Всё работает, ответ 5.
В этом случае I почему-то принимает значение 0, хотя в предыдущем -- 503...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 12:13:33 pm
Ещё забавнее.

MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.


Всё работает, ответ 5.
В этом случае I почему-то принимает значение 0, хотя в предыдущем -- 503...

Происходит переполнение, потому и сбрасывается в ноль, предположение. Возможно проверка есть в динамике. Но лучше такое ловить на стадии компиляции. Так как такое значение, нереально для диапазона INTEGER. Ну и выдавать сообщение об ошибке.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 12:27:34 pm

var test = function (JS){
var M = RTL$.makeArray(10, 0);
var I = 0;
var J = 0;
J = 500;
I = J + 1e+54 | 0;
M = 5;
JS.alert(M);
}(this);


JS динамический язык, странно, что сам интерпритатор JS не сообщает об ошибке. Или в JS  это нормально?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Январь 22, 2014, 12:42:38 pm

var test = function (JS){
var M = RTL$.makeArray(10, 0);
var I = 0;
var J = 0;
J = 500;
I = J + 1e+54 | 0;
M = 5;
JS.alert(M);
}(this);


JS динамический язык, странно, что сам интерпритатор JS не сообщает об ошибке. Или в JS  это нормально?
Эмм.. Какой ошибки?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 22, 2014, 02:07:54 pm
JS динамический язык, странно, что сам интерпритатор JS не сообщает об ошибке. Или в JS  это нормально?

Да, это нормально для JS. Думал об этой проблеме, но пока не знаю что делать. Проверку на уровне JS не врубить, делать вручную - будет крайне неэффективно.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 22, 2014, 02:10:29 pm
Происходит переполнение, потому и сбрасывается в ноль, предположение. Возможно проверка есть в динамике. Но лучше такое ловить на стадии компиляции. Так как такое значение, нереально для диапазона INTEGER. Ну и выдавать сообщение об ошибке.

Там используется какая-то стандартная JS функция для парсинга числа. Вот ей пофиг на переполнения (как обычно в JS). Надо переписывать на свою реализацию.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 02:47:14 pm
JS динамический язык, странно, что сам интерпритатор JS не сообщает об ошибке. Или в JS  это нормально?

Да, это нормально для JS. Думал об этой проблеме, но пока не знаю что делать. Проверку на уровне JS не врубить, делать вручную - будет крайне неэффективно.

По умолчанию, компилировать со всеми проверками. Добавить флаг, компилировать без проверок. Написал потестил, и скомпилировал без проверок. Особенно когда циклов много, ищи где там, что переполнилось.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 22, 2014, 04:05:39 pm
По умолчанию, компилировать со всеми проверками. Добавить флаг, компилировать без проверок. Написал потестил, и скомпилировал без проверок. Особенно когда циклов много, ищи где там, что переполнилось.

Да, есть такая проблема. Просто она не приоритетная. Потому что:
1. Сам репорт ничего не говорит про проверки. Т.е., текущая реализация никак не противоречит оригинальному репорту. Так что вообще говоря лучше начинать с убеждения Вирта в важности таких проверок и необходимости включения их в репорт.
2. В случае компиляции в JS получаемый undefined behavior конечно неприятен, но не настолько фатален как в случае native кода - память не портится (пресловутая герметичность сохраняется).
3. Решение этой проблемы сильно зависит от того, к чему придет компилятор в плане генерации кода. И от того к чему придут браузеры. В JS уже есть типизированные массивы, возможно добавят и возможность проверки индексов - в этом случае проблема решится автоматически.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 04:25:20 pm
Цитата: vlad
Да, есть такая проблема. Просто она не приоритетная. Потому что:
1. Сам репорт ничего не говорит про проверки. Т.е., текущая реализация никак не противоречит оригинальному репорту. Так что вообще говоря лучше начинать с убеждения Вирта в важности таких проверок и необходимости включения их в репорт.

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

Цитата: vlad
2. В случае компиляции в JS получаемый undefined behavior конечно неприятен, но не настолько фатален как в случае native кода - память не портится (пресловутая герметичность сохраняется).

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

Цитата: vlad
3. Решение этой проблемы сильно зависит от того, к чему придет компилятор в плане генерации кода. И от того к чему придут браузеры. В JS уже есть типизированные массивы, возможно добавят и возможность проверки индексов - в этом случае проблема решится автоматически.

Идею понял. С тем же успехом можно ждать пока в браузеры встроят поддержку оберон.
Неужели данная проверка сложнее, чем уже написанный компилятор, или это личное убеждение?

Самое главное, данные ошибки отлавливаются в рунтайме. Программист при ошибке, получает вменяемое сообщение. Упрощается поиск ошибки, не нужно лопатить код.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 04:34:35 pm
MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.

Возможность компиляции такого кода, явно не соответствует рапорту. :)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Jordan от Январь 22, 2014, 04:48:28 pm
Статья Вирта в переводе.

Хорошие идеи: взгляд из Зазеркалья (http://citforum.ru/programming/digest/wirth/)

Цитировать
Аналогичным примером является инструкция проверки границ массива. Она сравнивала индекс массива с нижней и верхней границами массива и вызывала системное прерывание, если значение индекса не находилось в этом диапазоне, объединяя, тем самым, две инструкции сравнения и две инструкции ветвления.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: valexey_u от Январь 22, 2014, 04:49:44 pm
MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.

Возможность компиляции такого кода, явно не соответствует рапорту. :)
Какому именно пункту репорта противоречит?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 22, 2014, 05:05:58 pm
Неужели данная проверка сложнее, чем уже написанный компилятор, или это личное убеждение?

Проверку добавить не сложно. Так же как и кучу других хороших вещей. Проверка обяазна быть в хорошем современном языке (js - говно еще раз). Просто оно неприоритетное. Если кого-то сильно парит - можно всегда скачать исходниги и добавить.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 26, 2014, 05:29:19 am
В случае зацикливания модулей, ругается на переполнение стека (если не ошибаюсь, на память привожу)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 26, 2014, 05:53:58 am
Хотя возможно мне обновиться надо. Не исправлялась ли подобного рода ошибка в этом месяца: в случае если в процедуре указывалась секция VAR var: expMod.; (т.е. не до конца указывался тип переменной), то в качестве строки ошибки указывалась строка начала модуля (со словом MODULE)

Просто в онлайн компиляторе не смог воспроизвести, а в предыдущей локальной версии (где то начала января) воспроизводится. Если исправилась, то обновился бы
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 26, 2014, 05:55:10 am
Локально примерно на таком коде ошибка не правильно выдавалась
MODULE v;
 
TYPE
 t* = POINTER TO RECORD END;
 
BEGIN
 
END v.

MODULE test;
IMPORT JS, v;
 
TYPE
 
 s = POINTER TO RECORD END;

PROCEDURE k();
 
END k;
 
 PROCEDURE T* ();
 
 VAR
  k: s;
  t: v.;
 
 BEGIN
 
 END;
BEGIN
 
  T ();
    JS.alert("Hello, World!")
END test.

Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 26, 2014, 05:57:11 am
хотя нет, именно на этом коде локально ругается как и в онлайн компиляторе, значит что-то еще надо добавить, попробую разобраться
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 26, 2014, 06:27:30 am
Не знаю в чем дело, но попробовал скопировать проблемный модуль в новый файл, в нем ошибку выдавало правильно, может какие-нибудь скрытые символы не скопировались при этом. Пока не знаю, что еще можно проверить, если еще раз возникнет подобная ситуация, попробую доразбираться. Компилятор похоже не причём
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 29, 2014, 12:05:35 am
Если я правильно понял, то "локальный" компилятор, состоящий из нескольких файлов, собирается в "онлайн" компилятор, содержащий один файл. Чем это делается? Или как мне можно объединить полученные компилятором файлы в 1. Если нет инструмента, то хотя бы принцип раскажите.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Февраль 02, 2014, 05:20:32 pm
Если я правильно понял, то "локальный" компилятор, состоящий из нескольких файлов, собирается в "онлайн" компилятор, содержащий один файл. Чем это делается? Или как мне можно объединить полученные компилятором файлы в 1. Если нет инструмента, то хотя бы принцип раскажите.

Это делает browser/linkjs.py. build.cmd строит страничку.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 07, 2014, 09:25:04 am
Не знаю, разумно ли будет следущее предложение:

Можно ли параметр this в параметрах процедур вообще пропускать (естественно он должн идти последним, а в теле процедур, так и писать как this . Или это чего то порушит?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Февраль 07, 2014, 03:11:52 pm
Можно ли параметр this в параметрах процедур вообще пропускать (естественно он должн идти последним, а в теле процедур, так и писать как this . Или это чего то порушит?

Можно пример - а то непонятно о чем речь.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 08, 2014, 04:52:38 am
Сейчас если написать например так:
PROCEDURE T ( this : Type );
BEGIN
   this.Property := 5;
END T;

на выходе вместо  this выдается this$

А хотелось бы чтобы в заголовке процедуры этого параметра не было вообще, а в теле так и остался this

Хотя понимаю, что в яваскрипт значение this меняется в зависимости от контекста, и не всегда это будет правильно скорее всего (хотя смотря какой код, для методов это вроде всегда ссылка на объект метода)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 08, 2014, 05:02:50 am
Или расскажу свою задачу, может есть еще решение (без JS.do ( "var = this" );

Есть внешний объект, который генерирует события, и ищет обработчики события в объекте по имени метода. Параметры метода жестко заданы. В методе мне надо получить/ свойство объекта

Можно конечно, использовать переменные модуля вместо свойства объекта, но если я правильно понимаю, будет одна такая переменная на каждый экземляр объекта, а мне нужно на каждый свою.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Февраль 08, 2014, 05:41:40 am
Сейчас если написать например так:
PROCEDURE T ( this : Type );
BEGIN
   this.Property := 5;
END T;

на выходе вместо  this выдается this$

Так а ебероновские методы не подойдут?
TYPE
    Type = RECORD
        PROCEDURE T();
        Property: INTEGER
    END;

PROCEDURE Type.T();
BEGIN
    SELF.Property := 5; (* вот это странслируется в this.Property = 5 *)
END Type.T;
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 08, 2014, 06:51:17 am
Спасибо, Не знаю, надо попробовать. Для этого какие-то опции компилятора нужны, или так можно (хотя мне скорее всего надо будет обновляться)?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 08, 2014, 07:13:13 am
Вроде без обновления работает, посмотрю, поможет ли в моем случае. Спасибо
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 08, 2014, 07:26:26 am
Тогда такой вопрос, а то проверить до конца не могу, как по конкретному RECORDу получить POINTER на него? Чё то не нашел такой процедуры. Если такого нет, то думаю смогу обойтись, но не хотелось бы много переделывать
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Февраль 08, 2014, 11:04:12 pm
Тогда такой вопрос, а то проверить до конца не могу, как по конкретному RECORDу получить POINTER на него? Чё то не нашел такой процедуры. Если такого нет, то думаю смогу обойтись, но не хотелось бы много переделывать

Нельзя. Потому что RECORD может быть на стеке, а POINTER указывает на объекты в куче. В случае жабаскрипта, конечно, не актуально - там все динамическое.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 12, 2014, 11:08:37 am
Не отметил сразу eberon методы оказались именно тем, что нужно.

В связи с этим еще один вопрос:

Вроде какой-то редактор дорабатывался (или плагин к редактору писался). Он корректно сворачивает процедуры с учетом eberon методов (а то использовал NO2 от Ильина А. для notepad++, он не учитывает)? Если да, то подскажите, чего скачать надо.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Февраль 12, 2014, 04:04:45 pm
Не отметил сразу eberon методы оказались именно тем, что нужно.

Я их поэтому первыми и сделал - без них вообще никак :)

В связи с этим еще один вопрос:
Вроде какой-то редактор дорабатывался (или плагин к редактору писался).

valexey писал примочку к Сублиму. Она не работает с методами eberon'а (надо допиливать). Я планировал туда влезть когда компилятор будет выдавать синтаксическое дерено - на предмет автокомплита и прочего.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 22, 2019, 07:24:01 am
По теме и нет:
Есть такой редактор atom. Он вроде как на node.js

У меня появилась мысль использовать его для написания кода вместо конфигуратора 1C.

1) Кто-нибудь использовал этот редактор? Есть отзывы?
2) Скрипты для редактора вроде пишутся на кофескрипте, а это, как я понял, подмножетсво javascript. В связи с этим, можно ли прикрутить eberon к этому редактору для написания скриптов?

Ну или может другой редактор кода посоветуете, с возможностью написания скриптов (и желательно чтобы команды системы умел запускать).
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 22, 2019, 07:28:31 am
И еще желательно, чтобы он был портабельный
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Январь 22, 2019, 03:46:48 pm
Есть такой редактор atom. Он вроде как на node.js
У меня появилась мысль использовать его для написания кода вместо конфигуратора 1C
Atom уже давно не в моде, самый распространённый редактор для программеров -- это VSCode (https://code.visualstudio.com) (после него идут IDEA, Emacs, Vim, Sublime).
Плагины для VSCode пишутся на TypeScript, хотя, вроде, и на Javascript должно быть можно.
Доступ к терминалу, командной строке -- это есть.
Работает в винде, линупсе и макоси...
Название: Re: Online компилятор Oberon-07/11.
Отправлено: vlad от Январь 22, 2019, 03:55:36 pm
Плагины для VSCode пишутся на TypeScript, хотя, вроде, и на Javascript должно быть можно.

Прикрутить oberonjs теоретически можно, поскольку это JS. Но практического смысла мало, если ты только не собрался писать плагины на поток, поскольку большую часть времени промучаешься с "прикручиванием", чем с написанием логики плагина.
Название: Re: Online компилятор Oberon-07/11.
Отправлено: Geniepro от Январь 22, 2019, 04:14:13 pm
Есть такой редактор atom. Он вроде как на node.js
У меня появилась мысль использовать его для написания кода вместо конфигуратора 1C
Есть даже какой-то плагин для VSCode для работы с кодом для 1С:
https://marketplace.visualstudio.com/items?itemName=xDrivenDevelopment.language-1c-bsl
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 23, 2019, 02:44:04 am
Спасибо за подсказки. Попробую для начала на самом тайпскрипте написать необходимые плагины, а далее видно будет
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 30, 2019, 11:22:54 am
На яваскрипте тоже плагины можно писать для vsc, и используется для компиляции node.js. Так что думаю прикручу как время появится, к тому же для раскраски оберона есть расширение
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 31, 2019, 07:54:54 am
Попытался скомпилить файл модуля, выдало ошибку:

Error: Cannot find module '...\vsc_oberon\CompileJs\oc_nodejs.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
The terminal process terminated with exit code: 1

До этого устанавливал переменную среды SET NODE_PATH=...\\git\\oberonjs\\src

oberonjs обязательно помещать в рабочую директорию? Или я чего-то в NODE_PATH, не то прописал?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 31, 2019, 07:58:35 am
Сама команда компиляции (а то упустил):

node ПутьКомпилятора\oc_nodejs.js --out-dir=ПутьИсходников --import-dir=ПутьИсходников ИмяФайла
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Январь 31, 2019, 08:00:33 am
Т.к. ПутьКомпилятора и ПутьИсходников разные, то \vsc_oberon\CompileJs\ не верный поиск пути (vsc_oberon - то как раз путь к исходникам)
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 01, 2019, 04:45:44 pm
Указал полные пути, где вроде требовалось, сейчас ругается на то, что не найден модуль cast.js. Глянул, он есть в архиве в bin, но его нет в src. Он должен автоматом создаваться? Или надо использовать вместо src именно bin ? Куда тогда распаковать архив, он почему-то имеет только файлы без папок
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 03, 2019, 04:35:52 am
Разобрался, из bin выложил все в src\js, стало компилироваться
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 03, 2019, 04:43:22 am
После сообщения ОК, выдало также такую строку. Не знаю, насколько она критична. Она наверное к коду компилятора относится

(node:48872) [DEP0016] DeprecationWarning: 'GLOBAL' is deprecated, use 'global'
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 04, 2019, 04:52:07 am
Что-то не могу сообразить, как биндиг к библиотеке node.js написать? Модуль должен по другому называться? Или надо называть нужным именем, а затем просто удалять скомпилинный файл биндинга на js ?
Название: Re: Online компилятор Oberon-07/11.
Отправлено: adva от Февраль 04, 2019, 04:53:32 am
или require будет искать именно среди модулей node.js, а не в локальном проекте?