Oberon space

General Category => Общий раздел => Тема начата: adva от Октябрь 22, 2013, 10:47:57 am

Название: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 22, 2013, 10:47:57 am
Уже мозг сломал, помогите, пожалуйста, разобраться.
Есть код (первый это класс на javascript, который хочу использовать, второй, пример как использовать). Не могу понять, как замутить это на обероне (для компилятора онлайн с сайта). В итоге хотелось бы просто функции добавлять, чтобы они динамически подтягивались к объекту. Не пойму, когда надо использовать MODULE, когда TYPE, чтобы добиться нужного эффекта.

В итоге хотелось бы получить нужный объект-наследник, с нужными процедурами (обработчиками событий)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 22, 2013, 10:51:04 am
Подозреваю, что тут надо будет использовать что-то навроде

for (var key in DredHandlerForm) {
  if ( !rabbit.hasOwnProperty(key) ) continue; // пропустить "не свои" свойства
 alert (key + " = " + DredHandlerForm[key]); // здесь надо бы динамически прикрутить свойство
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 22, 2013, 10:52:50 am
Уже мозг сломал, помогите, пожалуйста, разобраться.
Есть код (первый это класс на javascript, который хочу использовать, второй, пример как использовать). Не могу понять, как замутить это на обероне (для компилятора онлайн с сайта). В итоге хотелось бы просто функции добавлять, чтобы они динамически подтягивались к объекту. Не пойму, когда надо использовать MODULE, когда TYPE, чтобы добиться нужного эффекта.

В итоге хотелось бы получить нужный объект-наследник, с нужными процедурами (обработчиками событий)
Похоже у форума несварение от кириллицы - можно приаттачить файл с названием на латинице?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 22, 2013, 11:20:55 am
Вот
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 22, 2013, 12:16:20 pm
Подозреваю, что тут надо будет использовать что-то навроде

for (var key in DredHandlerForm) {
  if ( !rabbit.hasOwnProperty(key) ) continue; // пропустить "не свои" свойства
 alert (key + " = " + DredHandlerForm[key]); // здесь надо бы динамически прикрутить свойство
Хотя, пожалуй, в случае с обероном, свойство не должно прикручиваться динамически подобным образом, т.к. теряется типизация. Или можно?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 22, 2013, 12:26:39 pm
А в обероне можно перебрать все поля у записи в коде? (чтобы получить их наименование, а также присвоить по имени). Или наименования процедур в каком в модуле?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 22, 2013, 12:51:55 pm
А в обероне можно перебрать все поля у записи в коде? (чтобы получить их наименование, а также присвоить по имени). Или наименования процедур в каком в модуле?
В Обероне (языке) нет reflection'a.

А зачем оно тут?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Октябрь 22, 2013, 01:36:56 pm
Похоже у форума несварение от кириллицы - можно приаттачить файл с названием на латинице?

В опере 12.15 всё норм скачивается (win7)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 22, 2013, 01:40:34 pm
Похоже у форума несварение от кириллицы - можно приаттачить файл с названием на латинице?

В опере 12.15 всё норм скачивается (win7)
Ну, значит у браузера моего несварение. В любом случае какой-то мелкий косячок в движке форума.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Октябрь 22, 2013, 02:01:16 pm
Уже мозг сломал, помогите, пожалуйста, разобраться.
Есть код (первый это класс на javascript, который хочу использовать, второй, пример как использовать). Не могу понять, как замутить это на обероне (для компилятора онлайн с сайта). В итоге хотелось бы просто функции добавлять, чтобы они динамически подтягивались к объекту. Не пойму, когда надо использовать MODULE, когда TYPE, чтобы добиться нужного эффекта.

В итоге хотелось бы получить нужный объект-наследник, с нужными процедурами (обработчиками событий)

Вам нужно учитывать, что в обероне и в яваскрипте сильно разные модели ООП -- в обероне вариант, приближающийся к привычной для c#/java/delphi модели наследования, в яваскрипте же ООП -- это дополнение существующих объектов-прототипов новыми элементами. Так просто 1-в-1 скопировать не получится...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 22, 2013, 04:23:38 pm
Уже мозг сломал, помогите, пожалуйста, разобраться.

Поскольку у тебя тут предполагается наследование от некой базовой реализации, то на обероне это могло бы выглядеть так:
MODULE test;
IMPORT JS;
TYPE
    MyTestScriptForm = RECORD(JS.ScriptForm)
        disableAutoEvents: BOOLEAN;
        КоманднаяПанель1_Кнопка4: PROCEDURE();
...

Сейчас это не работает. И с таким подходом есть проблемы:
1. В жабаскрипте нет наследования и каждый фреймворк эмулирует классическое ООП наследование по-своему. Например, в твоем это "stdlib.Class.extend" - чего оно там делает и как работает зависит от прихоти разработчика конкретного фреймворка. Т.е., я не могу в компиляторе поддержать сразу все возможные реализации наследования.
2. В обероне (не допиленном) нет методов (связанных процедур), поэтому попытки их эмулировать через процедурные поля будут выглядеть крайне громоздко.

Поэтому я могу предложить зайти с обратной стороны:
1. Реализовать нужную функциональность на обероне, скомпилировать модуль в .js.
2. Потребить этот модуль из самописного .js, который отнаследуется от нужного js-класса и будет дергать нужные методы из скомпилированного в .js оберона.

Понятна идея?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: ilovb от Октябрь 22, 2013, 10:55:58 pm
А нельзя JS класс импортировать как обероновый модуль?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 02:43:17 am
А нельзя JS класс импортировать как обероновый модуль?

В жабаскрипте нет классов (еще раз :) Там есть "объекты" с полями, функции, массивы и строки (все это в утиной диамике). Все. Объекты могут быть связаны между собой "наследованием" столь специфичным, что оно не может быть отражено ни в один нормальный ОО язык :) Из этого говна можно пытаться делать (и делают) что-то более классическое (классы), но потребить это невозможно, потому что нет какого-то стандарта на то, как должен выглядеть "класс в жабаскрипте".

Поэтому, как я уже говорил, намного проще потребить из жабаскрипта обероновский модуль, скомпилированный со всеми проверками типов в .js, чем наоборот.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 03:06:09 am
Вообще да, надо допилить хотя бы до возможности хранения ссылки на объект из жабаскрипта. Как-то так:
MOULE Test;
IMPORT JS;
VAR jsObject: JS.var;
BEGIN
    jsObject := JS.makeObject();
    jsObject.method();
END test.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 04:42:38 am
Вообще да, надо допилить хотя бы до возможности хранения ссылки на объект из жабаскрипта. Как-то так:
MOULE Test;
...
Это планируется делать? Если да, то каковы примерные сроки?

Или может лучше сразу советом воспользоваться ?

Цитировать
Поэтому я могу предложить зайти с обратной стороны:
1. Реализовать нужную функциональность на обероне, скомпилировать модуль в .js.
2. Потребить этот модуль из самописного .js, который отнаследуется от нужного js-класса и будет дергать нужные методы из скомпилированного в .js оберона.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 05:58:13 am
Это планируется делать? Если да, то каковы примерные сроки?

Только что сделал :) Не знаю когда valexey обновит, но на гитхабе уже.

Или может лучше сразу советом воспользоваться ?

И это тоже. Пробуй как удобнее.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 06:48:53 am
спасибо, для меня достаточно оперативно :) . Буду дальше смотреть патихоньку
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 06:51:02 am
А можно попросить опции компилятора сделать (включать русские символы и _ в идентификатор) ? А то приходится самому изменять isLetter (хотя это наверное не совсем корректно, но ранее было такое предложение).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 06:53:00 am
Вообще да, надо допилить хотя бы до возможности хранения ссылки на объект из жабаскрипта. Как-то так:
MOULE Test;
IMPORT JS;
VAR jsObject: JS.var;
BEGIN
    jsObject := JS.makeObject();
    jsObject.method();
END test.
Это и так можно :-) Не вижу смысла в нововведении :-)

Ну, то есть я это уже ведь делал в биндинге к процессингу
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 07:16:52 am
Это и так можно :-) Не вижу смысла в нововведении :-)

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

Что-то я не увидел это в биндинге процессора (по крайней мере в примере, который тут выкладывался). Не подскажешь, где посмотреть?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 07:25:08 am
А почему сейчас ругается на код:

MODULE DredFormHandler;

IMPORT JS;

VAR
jsO: JS.var;
 
TYPE
DredForm = POINTER TO RECORD
Form_OnOpen: PROCEDURE
END;

PROCEDURE Form_OnOpen();

BEGIN
JS.alert("Form_OnOpen")
END Form_OnOpen;
 
BEGIN
 
END DredFormHandler.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 07:26:33 am
Вопрос снят, вар после типе
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 07:38:40 am
А чем является JS в сгенерированном коде? Почему-то вроде корректный код выдает ошибку при выполнении (JS не задан, как я понял)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: ilovb от Октябрь 23, 2013, 07:39:41 am
А нельзя JS класс импортировать как обероновый модуль?

В жабаскрипте нет классов (еще раз :) Там есть "объекты" с полями, функции, массивы и строки (все это в утиной диамике). Все. Объекты могут быть связаны между собой "наследованием" столь специфичным, что оно не может быть отражено ни в один нормальный ОО язык :) Из этого говна можно пытаться делать (и делают) что-то более классическое (классы), но потребить это невозможно, потому что нет какого-то стандарта на то, как должен выглядеть "класс в жабаскрипте".

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

Я в курсе, что там как в Lua. Имелся в виду объект, который вроде от модуля ни чем не отличается.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 11:14:53 am
По предыдущим вопросам нашел более простое решение, примерно как валексей предложил, оказалось, что можно было указать, из какого объекта javascript брать процедуры для обработчиков формы. Поэтому оказалось достаточно модуля с процедурами.

Теперь такой вопрос:
Как надо указывать тип "строка" в параметрах процедуры? Указал, как PROCEDURE MessageBox(ARRAY 1024 OF CHAR). Вызываю как: MessageBox("тест") компилятор ошибок не выдает. Но почему-то при загрузке скрипта выдается: "недостаточно места в стеке".

В чём может быть дело?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 11:28:55 am
Кажется понял в чем дело, вопрос пока снят
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 11:37:32 am
Да, по предыдущей ошибке догадка верна была. Новый вопрос  :)

Какой-то неожиданный результат выдается. Что надо исправить?

MODULE Global;
IMPORT JS;
 
  TYPE
  String256* = ARRAY 256 OF CHAR;

PROCEDURE MessageBox*(t: String256); (*{*)

BEGIN
JS.do("JS.alert(t)")
END MessageBox; (*}*)

BEGIN

END Global.

MODULE DredFormHandler;

IMPORT JS, gl:=Global;

BEGIN
gl.MessageBox("Привет");
END DredFormHandler.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 11:46:04 am
Я так понял, здесь функция strToArray преобразовывает строку в массив (причем даже не символов похоже, а их кодов, или еще чего), а как из этого массива снова получить строку?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 12:43:54 pm
Я так понял, здесь функция strToArray преобразовывает строку в массив (причем даже не символов похоже, а их кодов, или еще чего), а как из этого массива снова получить строку?
Символ и его код это одно и то же :-)

Написать обратную функцию на жабаскрипте.

Вообще, я сегодня постараюсь модуль для строк написать. Он мне тоже для ДОМа нужен.

Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 02:54:06 pm
Коль у меня после апгрейда OS X сломался XCode, пока он (XCode) ставится, у меня есть время на то, чтобы написать ответ.

Итак:
MOULE Test;
IMPORT JS;
VAR jsObject: JS.var;
BEGIN
    jsObject := JS.makeObject();
    jsObject.method();
END test.

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

Чтобы не быть голословным, пусть это будет тип String (именно js'ный String, а не какой-то там еще):
MODULE Js;

IMPORT JS;

TYPE
   String* = POINTER TO RECORD END;

PROCEDURE MakeStringFromCharArray*(ch : ARRAY OF CHAR) : String;
VAR
   res : String;
   c   : CHAR;
   i   : INTEGER;
BEGIN
   JS.do("res = '';");
   i := 0;
   WHILE i < LEN(ch) DO
      c := ch[i];
      JS.do("res += JS.String.fromCharCode(c)");
      INC(i);
   END;
   RETURN res
END MakeStringFromCharArray;

PROCEDURE CharCodeAt*(s : String; n : INTEGER) : INTEGER;
VAR
   res : INTEGER;
BEGIN
   JS.do("res = s.charCodeAt(n)");
   RETURN res
END CharCodeAt;
 
END Js.

То есть тут на экспорт у нас opaque-тип -- js-строка, к нему у нас самописная процедура для конвертации из оберонистых "строк" -- MakeStringFromCharArray, ну и родной "метод" - CharCodeAt.

А вот тестовый модуль который использует эту прелесть:
MODULE Test;
IMPORT Js, JS;

VAR
   str : Js.String;

BEGIN
   str := Js.MakeStringFromCharArray("hello world");
   JS.alert(str);
   JS.alert(Js.CharCodeAt(s,0));
END Test.

Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 02:56:25 pm
А можно попросить опции компилятора сделать (включать русские символы и _ в идентификатор) ? А то приходится самому изменять isLetter (хотя это наверное не совсем корректно, но ранее было такое предложение).

git pull и изменяй как хочешь. Потом еще раз git pull за последними изменениями (не скажу конкретные команды, но должно быть тривиально). Пока не хочу отвлекаться на опции (через глобальные переменные делать не буду, а по-нормальному - не совсем тривиально).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 03:02:44 pm
А можно попросить опции компилятора сделать (включать русские символы и _ в идентификатор) ? А то приходится самому изменять isLetter (хотя это наверное не совсем корректно, но ранее было такое предложение).

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

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

А в мейнстриме это пока не нужно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 03:05:27 pm
Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)

Представь, что тебе надо проассоциировать жабаскриптовый объект с обероновской записью. Т.е., у тебя общение с миром жабаскрипта не через некий синглетон, о через множество объектов. Тебе ссылки на объекты надо как-то хранить. Можно, конечно, писать что-то типа:
TYPE T = RECORD END;
VAR r: T;
...
JS.do("r.jsObject = JS.makeJsObject()");

Но как-то совсем неявно получается.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 03:08:27 pm
А чем является JS в сгенерированном коде? Почему-то вроде корректный код выдает ошибку при выполнении (JS не задан, как я понял)

JS - это глобальный объект в терминах жабаскрипта. Неработающий код в студию!
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 03:08:57 pm
Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)

Представь, что тебе надо проассоциировать жабаскриптовый объект с обероновской записью. Т.е., у тебя общение с миром жабаскрипта не через некий синглетон, о через множество объектов. Тебе ссылки на объекты надо как-то хранить. Можно, конечно, писать что-то типа:
TYPE T = RECORD END;
VAR r: T;
...
JS.do("r.jsObject = JS.makeJsObject()");

Но как-то совсем неявно получается.
Не понял. Где ты у меня синглетон нашел в коде? :-) Там как раз множество объектов.

Ну, то есть я сейчас вот буду делать привязку к DOM-API, и там, как понимаешь, узлы дерева это множество объектов (да еще разных типов и с множественным наследованием, да!) и каких-то преимуществ от нововведения в компилятор я не вижу для этой работы. Зато отлично представляю как это все написать тем методом которым я воспользовался для String'a.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 03:12:19 pm
Я в курсе, что там как в Lua. Имелся в виду объект, который вроде от модуля ни чем не отличается.

Поясни свою мысль. "IMPORT JSObjectAsModule" не будет работать просто потому, что компилятор не сможет проверить, что этот JSObjectAsModule экспортирует. Т.е., с тем же успехом можно писать IMPORT JS.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 03:21:29 pm
Не понял. Где ты у меня синглетон нашел в коде? :-) Там как раз множество объектов.

Ну конечно, ты просто кастнул (жестоко)  жабаскриптовый объект к opaque типу :)
Короче, ответ по существу такой: JS.var нужен, чтобы в каких-то местах можно было обойтись без JS.do. Потому что JS.do самое низкоуровневое средство из всех (полный аналог асмовских вставок).
Если ты боишься, что JS.var начнут расползаться по модулям, в которых нет IMPORT JS, то можно запретить экспорт таких полей и экспорт процедур с такими аргументами.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 03:27:11 pm
Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)
Нововведение пока еще не использовал, т.к. нашел другое простое решение (подошло в конкретно моем случае, про другие пока не думаю :) ).
А за подробные разъяснения спасибо. Попробую разобраться в таком подходе. Т.к. чувствую, что это еще понадобится

С ошибками в коде пока вроде разобрался, поэтому код выкладывать не буду. Отдельные ветки компилятора тоже пока делать не буду, нет так нет. Буду локально менять (копипаст одной строки не сильно пока напрягает :) )
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 03:31:11 pm
Кстати, я также не совсем понял, как использовать нововведение JS.var. Из примера не уяснил, создается новая js переменная, или как то можно использовать существующую?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 03:32:44 pm
Не понял. Где ты у меня синглетон нашел в коде? :-) Там как раз множество объектов.

Ну конечно, ты просто кастнул (жестоко)  жабаскриптовый объект к opaque типу :)
Короче, ответ по существу такой: JS.var нужен, чтобы в каких-то местах можно было обойтись без JS.do. Потому что JS.do самое низкоуровневое средство из всех (полный аналог асмовских вставок).
Если ты боишься, что JS.var начнут расползаться по модулям, в которых нет IMPORT JS, то можно запретить экспорт таких полей и экспорт процедур с такими аргументами.

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

Вообще, по крайней мере ПОКА я не боюсь что оно что-то куда-то там растекаться начнет, просто из за отсутствия пользовательской базы :-) Бояться должны те, кто этим попытаются воспользоваться, ибо в будущих версиях все это может сильно измениться (соответственно биндинги писанные в таком стиле отвялятся), а вот JS.do - останется :-)

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

Зато после наработки опыта написания биндингов через JS.do возможно станет понятны некие постоянно повторяющиеся паттерны (при написании оных биндингов), которые действительно будет иметь смысл внести в JS (в частности я чувствую что меня местами подзадолбает проверка динамических типов при биндинге к сторонним библиотекам (которые не описаны в каком-либо стандарте) - чтобы гарантировать что внезапно значение левого типа не расползлось по всей программе)..
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 03:34:33 pm
Извиняюсь за "много вопросов", но:
1) многие места хотя вроде и понятны в теории, но не понятны на практике, т.к. программировал до сих пор только на 1С;
2) надеюсь буду полезен в плане тестирования компилятора (т.к. на текущий момент принял решение использовать его в своем проектике)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 23, 2013, 03:36:44 pm
Извиняюсь за "много вопросов", но:
1) многие места хотя вроде и понятны в теории, но не понятны на практике, т.к. программировал до сих пор только на 1С;
2) надеюсь буду полезен в плане тестирования компилятора (т.к. на текущий момент принял решение использовать его в своем проектике)
Реальное использование компилятора безусловно очень важно - чем больше пользователей, тем больше ошибок выявим и быстрее напишем либы. Надеюсь что постепенно у нас появится не только компилятор, но и IDE :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 04:04:31 pm
valexey_u, я правильно понимаю, что основное преимущество в плане "типизации" в том, что твоем случае "фокус" с типизацией осуществляется в модулях биндинга (и если их корректно писать, то проблем в дальнейшем быть не должно), а в случае с JS.var , типизация может нарушаться уже в самих модулях.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 23, 2013, 04:15:04 pm
И еще такой вопрос, зачем в компиляторе строка оберона, преобразовывается в массив кодов символов? Нельзя ее оставить просто строкой?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 04:49:29 pm
Смотри, мой поинт такой, что человек пишущий биндинг, должен хорошо разбираться в том, что у него на выходе получится. То есть он должен знать и жабаскрипт и оберон. Иначе точно будет лажа. Поэтому возможность работы только через "асмовые вставки" - это хорошо. Это гарантирует что человек хотя бы js знает. И понимает что там нагенерил компилер (может это прочесть и понять).

Таки зависимость от того как именно генерит компилер ниже в случае JS.var. Кроме того, я думаю его использовать как раз для библиотеки строгих кастов:
PROCEDURE toInteger(js: JS.var): INTEGER;

Иначе придется для биндинга реюзать некий кусок жабаскрипта, а не IMPORT JSBinging;


Короче, не надо - не используй. Изъять его у конечного пользователя - это закомментить одну строчку (сам по себе такой специальный тип все равно нужен в реализации).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 04:55:46 pm
valexey_u, я правильно понимаю, что основное преимущество в плане "типизации" в том, что твоем случае "фокус" с типизацией осуществляется в модулях биндинга (и если их корректно писать, то проблем в дальнейшем быть не должно), а в случае с JS.var , типизация может нарушаться уже в самих модулях.

JS.var предназначен только для удобства написания биндинга. Собственно использовать его без IMPORT JS и не получится.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 23, 2013, 04:57:55 pm
И еще такой вопрос, зачем в компиляторе строка оберона, преобразовывается в массив кодов символов? Нельзя ее оставить просто строкой?

Потому что строки в жабаскрипте иммутабельны. А содержимое обероновского ARRAY OF CHAR может быть изменено.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 08:48:04 am
JS - это глобальный объект в терминах жабаскрипта. Неработающий код в студию!
А чем мне проинициировать JS ? (я код не в браузере запускаю, а как плагин снегопата)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 09:01:13 am
JS - это глобальный объект в терминах жабаскрипта. Неработающий код в студию!
А чем мне проинициировать JS ? (я код не в браузере запускаю, а как плагин снегопата)
Зачем его инициализировать?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 09:05:36 am
Представь, что тебе надо проассоциировать жабаскриптовый объект с обероновской записью. Т.е., у тебя общение с миром жабаскрипта не через некий синглетон, о через множество объектов. Тебе ссылки на объекты надо как-то хранить. Можно, конечно, писать что-то типа:
TYPE T = RECORD END;
VAR r: T;
...
JS.do("r.jsObject = JS.makeJsObject()");

Но как-то совсем неявно получается.
Да, нюанс - так делать нельзя.
То есть для opaque-типа T вот так делать нельзя:
TYPE T = RECORD END;

Нужно так:
TYPE T = POINTER TO RECORD END;

Просто потому, что у нас семантика указателя а не значения. Ну, в частности из процедур POINTER возвращать можно, а вот RECORD нельзя.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 09:17:46 am
Зачем его инициализировать?
Может здесь я не правильно выразился.

Хотелось бы использовать твои биндинги без доработок :)

В процедуре по получению строки из массива у тебя указано:
JS.String.fromCharCode

У меня при выполнении ругается, что объект JS.String или не имеет соответствующего метода, или равен null

Если же  просто напишу:
String.fromCharCode

То все работает. Вот и возник вопрос, как я могу оставить без изменения JS.String.fromCharCode
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 09:22:55 am
Зачем его инициализировать?
Может здесь я не правильно выразился.

Хотелось бы использовать твои биндинги без доработок :)

В процедуре по получению строки из массива у тебя указано:
JS.String.fromCharCode

У меня при выполнении ругается, что объект JS.String или не имеет соответствующего метода, или равен null

Если же  просто напишу:
String.fromCharCode

То все работает. Вот и возник вопрос, как я могу оставить без изменения JS.String.fromCharCode
Это очень странно.

Смотри, вот простейший скомпиленный код (оберонов модуль):
var test = function (JS){
    JS.alert("Hello, World!");
}(this);

Видно что это функция которая принимает в качестве аргуманта (JS) объект this. (ну и понятно что эта функция сразу вызывается после загрузки)

Этот js-код понятен?

В твоем окружении есть repl/js-консоль? Что там будет если набрать this? То есть что там вообще есть?

Скажем в Node.js таких проблем нет, хотя это ни разу не браузер.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 09:37:21 am
По консоли ничего пока не знаю, стандартно в конфигураторе 1С ее нет (а я именно в нем запускаю скрипты, используя снегопат). Попробую выяснить на форуме снегопата, почему данный код не работает
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 03:14:41 pm
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 03:21:03 pm
хотя пожалуй, пока не критично, пока модулей биндинга не критически много :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 03:23:00 pm
И нет, оказывается сработал другой код (без JS, пока ничего менять не буду)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 03:23:24 pm
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?
А это что такое вообще?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 03:24:41 pm
И нет, оказывается сработал другой код (без JS, пока ничего менять не буду)
Без JS могут быть коллизии имен, когда сущность в Оберон-модуле (например тип) совпадает с именем глобальной сущности жабаскрипта, и в результате к глобальной этой сущности обратиться никак не возможно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 03:33:55 pm
И нет, оказывается сработал другой код (без JS, пока ничего менять не буду)
Без JS могут быть коллизии имен, когда сущность в Оберон-модуле (например тип) совпадает с именем глобальной сущности жабаскрипта, и в результате к глобальной этой сущности обратиться никак не возможно.
Точно, есть такая проблема, еще кода не написал, а ошибка такая уже вылезла (по поводу нехватки памяти стека, что ли, не помню уже точную формулировку). Наверное все таки доразобраться надо, а то будут неудобства.

Может это что-то прояснит, а то на том форуме еще дольше ответов ждать:

Объект ISelfScript
Этот объект не являются частью SnegAPI, а предоставляется загрузчиком скриптов отдельно для каждого загруженного скрипта. С его помощью скрипт может получить информацию о себе, получить ссылку на себя, а также добавлять объекты в свое пространство имен. Каждый скрипт имеет доступ к этому объекту через имя SelfScript.

Свойство uniqueName
Только чтение. Строка. Уникальное имя скрипта.

Свойство displayName
Только чтение. Строка. Отображаемое имя скрипта.

Свойство fullPath
Только чтение. Строка. Полный путь к файлу скрипта.

Метод addNamedItem
Добавляет объект в пространство имен скрипта.
Синтаксис:

SelfScript.addNamedItem(Имя, Объект, [Глобально])
Параметры:

Имя. Строка. Название, под которым объект будет доступен в скрипте.
Объект. Ссылка на добавляемый объект.
[Глобально]. Необязательный. Булево. По-умолчанию false. Если передать true, объект добавиться как глобальный, т.е. к его методам и свойствам можно будет обращаться напрямую, без указания имени объекта.
Свойство self
Только чтение. Объект. Сам объект скрипта, т.е. то, как он видится со-стороны. Служит для передачи ссылки
на себя в различные методы.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 24, 2013, 03:49:22 pm
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?
А это что такое вообще?

В общем в какой-то консоли (неполноценная я так понимаю, но хоть что-то), не работает, а в самом скрипте работает. Так что вместо this стоит использовать в вызове модуля SelfScript.self

Вопрос: "А это что такое вообще?" не понятен? Где я пишу скрипты? Это скрипты для автоматизации конфигуратора 1С на основе сторонней разработки Снегопат.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 03:51:24 pm
Быстрый вопрос - какие возможности вывода есть в Снегопате? То есть console.log() есть ? alert() есть? Что-то другое?

Я попробую написать короткий тест окружения (на js) как только будет информация о том как это дело выводить :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 24, 2013, 04:02:32 pm
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?

Искать "this" в файле module.js - это оно. Поменяй его на "SelfScript.self".
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 24, 2013, 04:07:58 pm
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?

Вообще "классика" получения глобального объекта в жабаскрипте выглядит вот так:
var global = (function(){return this;})();

Но так как подобный "конструкт" больше похож на херню, чем на что-то осмысленное, то всякие анализаторы будут ругаться. Кроме того, оно вроде не работает в случае "use strict". Поэтому в компиляторе я использовал просто "this". Пока не предложат чего-то лучшего.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 24, 2013, 04:13:30 pm
Но так как подобный "конструкт" больше похож на херню, чем на что-то осмысленное...
Ну это же справедливо и для js'а, как языка, вообще :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 25, 2013, 12:30:16 am
Быстрый вопрос - какие возможности вывода есть в Снегопате? То есть console.log() есть ? alert() есть? Что-то другое?

Я попробую написать короткий тест окружения (на js) как только будет информация о том как это дело выводить :-)
Message (сообщение в текстовое окно)

MessageBox = alert

Кажется и alert тоже работает
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 25, 2013, 12:42:06 am
Быстрый вопрос - какие возможности вывода есть в Снегопате? То есть console.log() есть ? alert() есть? Что-то другое?

Я попробую написать короткий тест окружения (на js) как только будет информация о том как это дело выводить :-)
Message (сообщение в текстовое окно)

MessageBox = alert

Кажется и alert тоже работает
Хотя думаю уже не актуально, тест писать, если только еще для каких целей понадобится.
SelfScript.Self успешно заменяет this
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 25, 2013, 09:08:45 am
Что значит ошибка:
cannot export anonymous RECORD field: 'Name'

в коде

        File* = POINTER TO RECORD
Name*, BaseName*: ARRAY 256 OF CHAR;
FullName*, Path*: ARRAY 1024 OF CHAR;
Extension*: ARRAY 10 OF CHAR;
Exist*, IsDirectory*, IsFile*: PROCEDURE
END;

Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 25, 2013, 09:10:53 am
И там же вопрос. Если поля IsFile должно булево возвращать, то оформление правильно сделано, или надо как то обозначить возвращение значения? Такой же вопрос, для случая, когда надо передать параметры, они в полях должны быть обозначены?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Октябрь 25, 2013, 09:47:10 am
И там же вопрос. Если поля IsFile должно булево возвращать, то оформление правильно сделано, или надо как то обозначить возвращение значения? Такой же вопрос, для случая, когда надо передать параметры, они в полях должны быть обозначены?

Здесь у Вас все три процедуры не принимают параметров и не возвращают результат:

Exist*, IsDirectory*, IsFile*: PROCEDURE

Лучше делать так, наверное:
TYPE
  BoolProc* = PROCEDURE () : BOOLEAN;

  FileName* = ARRAY  256 OF CHAR;
  FilePath* = ARRAY 1024 OF CHAR;
 
  FilePtr*  = POINTER TO File;
  File* =
    RECORD
      Name*     : FileName;
      BaseName* : FileName;
      FullName* : FilePath;
      Path*     : FilePath;
      Extension*: ARRAY 10 OF CHAR;

      Exist*       : BoolProc;
      IsDirectory* : BoolProc;
      IsFile*      : BoolProc
    END;
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 25, 2013, 10:09:08 am
Спасибо, так вроде как компилируется.

Правда не понимаю, почему, ведь Extension осталось типа ARRAY

С процедурами понятно, а вот с полями не очень.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 25, 2013, 10:11:24 am
А, увидел главное отличие, поля сделаны для рекорда, а не для указателя, еще раз спасибо, попробую свой код переделать
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 26, 2013, 06:30:43 am
Что-то не нашел, а в формальных параметрах процедуры можно указать значения по умолчанию? Или как это сделать? И как передавать пустой параметр при вызове, просто не указывать его?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 26, 2013, 08:58:51 am
Что-то не нашел, а в формальных параметрах процедуры можно указать значения по умолчанию? Или как это сделать? И как передавать пустой параметр при вызове, просто не указывать его?
Нельзя.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Октябрь 26, 2013, 10:30:32 am
Что-то не нашел, а в формальных параметрах процедуры можно указать значения по умолчанию? Или как это сделать? И как передавать пустой параметр при вызове, просто не указывать его?

Прочитайте наконец легендарные "16 страниц" (https://github.com/vladfolts/oberonjs/blob/master/doc/Oberon07.Report.pdf) -- вопросов станет заметно меньше, и работа пойдёт куда быстрее )))
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 28, 2013, 10:59:45 pm
Не знаю, важно ли, но нижеследующий код неверно идентифицирует ошибку (или мне так кажется, что неверно). Вместо того, чтобы указать, что незакрыта скобка, указывается, что другой тип ожидается.

(*!BEGINCOMMONMODULEOBERON7*)
(* Модуль для работы с кодом Javascript *)
MODULE Js;

    IMPORT JS;

    TYPE
       String* = POINTER TO RECORD END;
   
    PROCEDURE StringFromArrayChar*(arr : ARRAY OF CHAR) : String;
    VAR
       s : String;
       i : INTEGER;
    BEGIN
       JS.do("s = ''");
       JS.do("for(mi=0; i<arr.length; i++) {s = s + JS.String.fromCharCode(arr[i])}");
       RETURN s
    END StringFromArrayChar;

PROCEDURE ArrayFromString*(s : String; VAR res: ARRAY OF CHAR);
VAR i: INTEGER;
    BEGIN
JS.do("res = RTL$.strToArray(s)");
    END ArrayFromString;

    PROCEDURE CharCodeAt(s : String; n : INTEGER) : INTEGER;
    VAR
       res : INTEGER;
    BEGIN
       JS.do("res = s.charCodeAt(n)");
       RETURN res
    END CharCodeAt;

(*  *)
PROCEDURE Replace*(s, pattern, what: String): String;
VAR
res: String;
BEGIN
JS.do("res = s.replace(pattern, what)");
RETURN res
END Replace;

(*  *)
PROCEDURE Search*(s, what: String): INTEGER;
VAR
res: INTEGER;
BEGIN
JS.do("res = s.search(what)");
RETURN res
END Search;

(*  *)
PROCEDURE Concat*(s1, s2: String): String;
VAR
res: String;
BEGIN
JS.do("res = s1 + s2");
RETURN res
END Concat;

BEGIN
 
END Js.

(* Модуль для работы с API снегопата *)
MODULE Snegopat;
   
    IMPORT Js, JS;
   
    TYPE

(* Выделение редактора текста *)
Selection* = POINTER TO SelectionRec;

SelectionRec* = RECORD
beginRow, beginCol, endRow, endCol: INTEGER
END;

(* окно редактора текста *)
TextWindow* = POINTER TO TextWindowRec;

TextWindowRec* = RECORD
text*, selectedText*: Js.String;
hwnd*: INTEGER;
multyEdit*: BOOLEAN;
linesCount*: INTEGER
END;
       
(*  *)
PROCEDURE ScriptFullPath*(): Js.String; (*{*)
VAR
res: Js.String;

BEGIN
JS.do("res = JS.SelfScript.fullPath");
RETURN res
END ScriptFullPath; (*}*)
   
    (*  *)
    PROCEDURE activeTextWindow*(): TextWindow; (*{*)
        VAR wnd: TextWindow;
       
    BEGIN
        JS.do("wnd = JS.snegopat.activeTextWindow()");
        RETURN wnd
    END activeTextWindow; (*}*)

(*  *)
PROCEDURE GetSelection*(TextWnd: TextWindow): Selection; (*{*)
VAR
res: Selection;
BEGIN
JS.do("res = TextWnd.getSelection()");
  RETURN res
END GetSelection; (*}*)

(*  *)
PROCEDURE GetCaretPos*(TextWnd: TextWindow): Selection; (*{*)
VAR
res: Selection;
BEGIN
JS.do("res = TextWnd.getCaretPos()");
  RETURN res
END GetCaretPos; (*}*)

(*  *)
PROCEDURE SetSelection*(TextWnd: TextWindow; StartLine, StartCol, EndLine, EndCol: INTEGER); (*{*)

BEGIN
JS.do("TextWnd.setSelection(StartLine, StartCol, EndLine, EndCol)")
END SetSelection; (*}*)

(*  *)
PROCEDURE SetCaretPos*(TextWnd: TextWindow; Line, Col: INTEGER); (*{*)

BEGIN
JS.do("TextWnd.setCaretPos(Line, Col)")
END SetCaretPos; (*}*)

(*  *)
PROCEDURE Line*(TextWnd: TextWindow; ind: INTEGER): Js.String; (*{*)
VAR
res: Js.String;
BEGIN
JS.do("res = TextWnd.line(ind)");
  RETURN res
END Line; (*}*)

BEGIN

END Snegopat.

(* Модуль для работы с глобальным контектом конфигуратора 1С *)
MODULE GlobalDesigner;
    IMPORT Js, JS;
 
    TYPE

(* Файл *)
File* = POINTER TO FileRec;

FileRec* = RECORD
Name*, BaseName*: ARRAY 256 OF CHAR;
FullName*, Path*: ARRAY 1024 OF CHAR;
Extension*: ARRAY 10 OF CHAR;
Exist*, IsDirectory*, IsFile*: PROCEDURE(): BOOLEAN
END;

(* Текстовый документ *)
TextDocument* = POINTER TO TextDocumentRec;

TextDocumentRec* = RECORD
InsertLine*, ReplaceLine*: PROCEDURE (i: INTEGER; s: Js.String);
Put*: PROCEDURE (textdoc: TextDocument);
AddLine*, SetText*, SetFileType*: PROCEDURE (s: Js.String);
Write*, Read*: PROCEDURE (FileName, FileType, LineSeparator: Js.String);
LineCount*: PROCEDURE(): INTEGER;
Clear*: PROCEDURE;
Show*: PROCEDURE(Title, FileName: Js.String);
GetLine*: PROCEDURE (i: INTEGER): Js.String;
GetText*: PROCEDURE (): Js.String;
DeleteLine*: PROCEDURE (i: INTEGER)
END;

    (* Предупреждение *)
    PROCEDURE MessageBox*(str: ARRAY OF CHAR); (*{*)
       
    BEGIN
        JS.do("JS.Designer.MessageBox(Js.StringFromArrayChar(str))")
    END MessageBox; (*}*)

    (* Сообщить *)
    PROCEDURE Message*(str: ARRAY OF CHAR); (*{*)
       
    BEGIN
        JS.do("JS.Designer.Message(Js.StringFromArrayChar(str))")
    END Message; (*}*)

(* КОНСТРУКТОРЫ ОБЪЕКТОВ *)

(* Файл *)
PROCEDURE  NewFile*(Name: Js.String): File; (*{*)
VAR
obj: File;

BEGIN

JS.do("obj = JS.Designer.v8New('File', Name)");
RETURN obj
END  NewFile; (*}*)

(* ТекстовыйДокумент *)
PROCEDURE NewTextDocument(): TextDocument; (*{*)
VAR
obj: TextDocument;

BEGIN
JS.do("obj = JS.Designer.v8New('TextDocument')")
RETURN obj
END NewTextDocument; (*}*)

(*  *)
PROCEDURE Find*(Str, SubStr: Js.String): INTEGER; (*{*)
VAR
res: INTEGER;
BEGIN
JS.do("res = JS.Designer.Find(Str, SubStr)");
         RETURN res
END Find; (*}*)

BEGIN

END GlobalDesigner.
(*!ENDCOMMONMODULEOBERON7*)

(* Модуль для работы с кодом *)
MODULE Tools;
    IMPORT Js, JS, gl:=GlobalDesigner, sn:= Snegopat;

CONST
BEGINMODULEOBERON7 = "BEGINMODULEOBERON7";
ENDMODULEOBERON7 = "ENDMODULEOBERON7";
BEGINCOMMONMODULEOBERON7 = "BEGINCOMMONMODULEOBERON7";
ENDCOMMONMODULEOBERON7 = "ENDCOMMONMODULEOBERON7)";

   
    (* Процедура компилирует текст активного тектового окна *)
    PROCEDURE CompileActiveTextWindow*(); (*{*)
        VAR
       
    BEGIN
        gl.MessageBox("тодо Пока не реализовано");
    END CompileActiveTextWindow; (*}*)

(* *)
PROCEDURE ExistCodeOberon(TextWnd: sn.TextWindow; VAR beginRow, endRow: INTEGER; CommModule: BOOLEAN): BOOLEAN; (*{*)
VAR
res: BOOLEAN;
ind, countRow, pos: INTEGER;
str: Js.String;
           arr: ARRAY 1024 OF CHAR;

BEGIN

beginRow := 0;
endRow := 0;
countRow := TextWnd.linesCount;
ind := 0;

WHILE ind < countRow DO
INC(ind);
str := sn.Line(TextWnd, ind);

IF CommModule THEN

IF Js.Search(str, Js.StringFromArrayChar(BEGINCOMMONMODULEOBERON7)) # -1 THEN
beginRow := ind + 1;

ELSIF Js.Search(str, Js.StringFromArrayChar(ENDCOMMONMODULEOBERON7)) # -1 THEN
endRow := ind + 1;

END;

ELSE

(*IF Js.Search(str, Js.Concat(Js.StringFromArrayChar("!"),Js.StringFromArrayChar(BEGINMODULEOBERON7)) # -1 THEN*)
IF Js.Search(str, Js.Concat(Js.StringFromArrayChar("!"),Js.StringFromArrayChar(BEGINMODULEOBERON7)) # -1 THEN
beginRow := ind + 1;

ELSIF Js.Search(str, Js.Concat(Js.StringFromArrayChar("!"),Js.StringFromArrayChar(ENDMODULEOBERON7)) # -1 THEN
endRow := ind + 1;

END;

END;
END;
IF beginRow > 0 THEN
            res := TRUE
        ELSE
            res := FALSE
        END;
        RETURN res
END ExistCodeOberon; (*}*)

(*  *)
PROCEDURE AddCodeOberon(TextWnd: sn.TextWindow; beginRow, endRow: INTEGER; CommModule: BOOLEAN); (*{*)
VAR
res: BOOLEAN;
BEGIN
(* тодо *)
END AddCodeOberon; (*}*)

    (*  *)
    PROCEDURE EditActiveTextWindow*(); (*{*)
        VAR
ActiveTextWnd: sn.TextWindow;
        FileCommonModuleO7: gl.File;
name: Js.String;
beginRow, endRow: INTEGER;

    BEGIN

ActiveTextWnd := sn.activeTextWindow();

IF ActiveTextWnd = NIL THEN

gl.MessageBox("Не выбрано окно модуля")

ELSE

IF ~ExistCodeOberon(ActiveTextWnd, beginRow, endRow, FALSE) THEN

(* добавить код оберона в конец *)
AddCodeOberon(ActiveTextWnd, beginRow, endRow, FALSE);

ELSE

(* отменить комментирование кода оберона, удалить яваскрипт после оберона *)

END;

name := Js.Replace(sn.ScriptFullPath(), Js.StringFromArrayChar("OberonTools.js"), Js.StringFromArrayChar("CommonModules.ob7"));
FileCommonModuleO7:= gl.NewFile(name);
IF FileCommonModuleO7.Exist() THEN
IF ~ExistCodeOberon(ActiveTextWnd, beginRow, endRow, TRUE) THEN
(* тодо добавить код общих модулей *)
END;
END

END;

    END EditActiveTextWindow; (*}*)

BEGIN

END Tools.

Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 29, 2013, 01:28:49 am
Не знаю, важно ли, но нижеследующий код неверно идентифицирует ошибку (или мне так кажется, что неверно). Вместо того, чтобы указать, что незакрыта скобка, указывается, что другой тип ожидается.

Там до скобок дело не доходит. Он парсит второй аргумент Js.Search, который из-за пропущенной скобки выглядит как:
Js.Concat(...) # -1

И тут уж ему не нравятся разные типы.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 29, 2013, 03:36:37 am
И тут уж ему не нравятся разные типы.
Да, я так и подумал, мне это конечно не очень критично, но если планируется и в учебных целях использовать, то про скобки было бы правильнее (на мой взгляд)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 29, 2013, 03:41:16 am
Да, я так и подумал, мне это конечно не очень критично, но если планируется и в учебных целях использовать, то про скобки было бы правильнее (на мой взгляд)

Проблема автоматически решится при переходе к многопроходности, когда семантика (соответствие типов) будет проверяться после синтаксиса (пропущенные скобки).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 29, 2013, 05:38:08 am
Я извиняюсь, а какую процедуру из oc.js сейчас требуется запускать для компиляции из текста? И какие там параметры (надо в код на обероне привязать)?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 29, 2013, 05:59:31 am
Хотя посмотрю в html файле
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 29, 2013, 07:27:42 am
Подскажите, пожалуйста, как из объекта errors (ошибки компиляции) получить текст?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 29, 2013, 07:49:22 am
Да, я так и подумал, мне это конечно не очень критично, но если планируется и в учебных целях использовать, то про скобки было бы правильнее (на мой взгляд)

Проблема автоматически решится при переходе к многопроходности, когда семантика (соответствие типов) будет проверяться после синтаксиса (пропущенные скобки).
Причем во второй проход получится упихать не всю семантику, часть семантики таки нужна для парсера :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 29, 2013, 02:44:53 pm
Подскажите, пожалуйста, как из объекта errors (ошибки компиляции) получить текст?

Не помню такого объекта, там ошибки строками ходили. В каком месте?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 29, 2013, 02:46:37 pm
Причем во второй проход получится упихать не всю семантику, часть семантики таки нужна для парсера :-)

Да, там есть пару мест где семантика непосредственно влияет на парсер.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 06:51:26 am
Что-то я не могу разобраться с компиляцией из кода.

Почему-то метод сделал как на сайте приведено:

var text = require('oc.js').compile(src, err);
Но ругается, что нет такого метода (compile есть, а где-то в нем уже ошибка). Отладчика к сожалению нет, посмотреть где именно ошибка не могу. Может я не ту функцию использую?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 09:10:53 am
посмотрел, в функциях активно используется this (с которым у меня ранее были проблемы). Может быть проблема такого же рода?

Вроде был упомнинание, что можно компилировать файлы из командной строки. Это как? Последовательность действий не подскажите?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 09:49:20 am
Конкретное место ошибки:

В var ModuleResolver в методе compile
ругается на параметр this.__resolveModule.bind(this)


Почему

хотя this.__resolveModule это функция, но вызывается без скобок? В этом случае она же вроде текст функции возвращает? Или так и надо?

Не знаю, по этой ли причине, но свойства bind у this.__resolveModule не имеется. Аналогично думаю и с другим параметром функции compile
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 09:56:41 am
Вместо отладчика использую функции вывода. Поэтому очень медленно разбор происходит. Не посоветуете, какой-нибудь простенький отладчик скриптов?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 10:47:04 am
Чувствую, что bind зачем то нужен, но у меня он не работает. Используется всего в двух местах. Его нельзя заменить чем-нибудь?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 10:52:58 am
Вот совет, как эмулировать bind

(правда не знаю, будет ли работать)

http://learn.javascript.ru/bind#кросс-браузерная-эмуляция-bind
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Октябрь 30, 2013, 10:57:49 am
Вместо отладчика использую функции вывода. Поэтому очень медленно разбор происходит. Не посоветуете, какой-нибудь простенький отладчик скриптов?

Попробуйте гуглохромный отладчик:
https://developers.google.com/chrome-developer-tools/docs/javascript-debugging
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 11:15:17 am
Да хоть IE'шный (в современном IE он вполне пристойный). Или Firebug в Firefox. Отладчик сейчас есть в любом приличном браузере.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 11:17:40 am
Конкретное место ошибки:

В var ModuleResolver в методе compile
ругается на параметр this.__resolveModule.bind(this)


Почему

хотя this.__resolveModule это функция, но вызывается без скобок? В этом случае она же вроде текст функции возвращает? Или так и надо?

Не знаю, по этой ли причине, но свойства bind у this.__resolveModule не имеется. Аналогично думаю и с другим параметром функции compile
В js функция - это объект. С полями, методами и прочим. так что тут просто у функции __resolveModule  вызывают "метод" (а на самом деле поле содержащее функцию) bind.

А текст функции, вроде как, в общем случае получить как раз нельзя. На этапе исполнения. Но могу ошибаться конечно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 30, 2013, 11:25:44 am
А хром можно использовать для яваскриптов не на web странице? (скорее всего в качестве скриптов плагинов используются  ActiveScript )

У меня как раз возвращает текст функции, если без скобок, а если со скобками, то объект (если она при этом корректна)

Но бинд я так понял, в моем случае не поддерживается, хотелось бы его заменить, но не врубился как
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 12:08:23 pm
А хром можно использовать для яваскриптов не на web странице? (скорее всего в качестве скриптов плагинов используются  ActiveScript )

Можно использовать nodejs:
http://nodejs.org/api/debugger.html
https://github.com/node-inspector/node-inspector
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 01:46:28 pm
У меня как раз возвращает текст функции, если без скобок, а если со скобками, то объект (если она при этом корректна)
Это НЕ текст, это результат "рефлекшина" - отладочная хрень, результат pretty print'a. Если б это был "текст", то есть строка, то можно было бы так: var foo = function(){return 1;}; alert(foo.length);

Должно вернуть не 0 - ведь длина текста (число символов) явно не нуль :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 30, 2013, 02:41:39 pm
Должно вернуть не 0 - ведь длина текста (число символов) явно не нуль :-)

А ты попробуй
alert(("" + foo).length);

P.S. Я не знаю что там говорит стандарт, но в каких-то случаях я видел даже сохраненные комментарии при "распечатке" функции.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 30, 2013, 02:57:01 pm
Чувствую, что bind зачем то нужен, но у меня он не работает. Используется всего в двух местах. Его нельзя заменить чем-нибудь?

bind нет в IE8 (я специально отказался от его использования в точй части компиялятора, который на страничке). Эмулируется примерно так (для твоего случая):
var result = f.bind(this);
аналолг:
var self = this; var result = function(){return f.call(self);}
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 02:58:41 pm
Должно вернуть не 0 - ведь длина текста (число символов) явно не нуль :-)

А ты попробуй
alert(("" + foo).length);

P.S. Я не знаю что там говорит стандарт, но в каких-то случаях я видел даже сохраненные комментарии при "распечатке" функции.
Извращенец! :-) Можно же так: foo.toString() , все!

Но факт что просто foo это не строка и не текст - это объект!
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 30, 2013, 03:00:26 pm
посмотрел, в функциях активно используется this (с которым у меня ранее были проблемы). Может быть проблема такого же рода?

Трудно угадать :)


Вроде был упомнинание, что можно компилировать файлы из командной строки. Это как? Последовательность действий не подскажите?

Для командной строки оно работает только для nodejs.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 03:16:19 pm
посмотрел, в функциях активно используется this (с которым у меня ранее были проблемы). Может быть проблема такого же рода?

Трудно угадать :)


Вроде был упомнинание, что можно компилировать файлы из командной строки. Это как? Последовательность действий не подскажите?

Для командной строки оно работает только для nodejs.
не пугай так! ведь можно же собрать в один этот самый oc.js и уже этот монолит гонять хоть из командной строки хоть в node.js хоть в консоль браузера пихать, хоть еще куда.

Ну, тем более что, насколько я понимаю, adva не нужен компилятор прямо в Снегопат'е, ему нужно обустроить свое рабоче-разработческое место, возможно без браузера. То есть пускать компилер через node.js вполне кошерный вариант (если туда еще отладчик жабашкрипта прикрутить)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 30, 2013, 03:19:51 pm
не пугай так! ведь можно же собрать в один этот самый oc.js и уже этот монолит гонять хоть из командной строки хоть в node.js хоть в консоль браузера пихать, хоть еще куда.

В смысле да. Из коробки только для nodejs. Для чего-то другого надо смотреть как сделаон для nodejs.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 30, 2013, 03:21:37 pm
не пугай так! ведь можно же собрать в один этот самый oc.js и уже этот монолит гонять хоть из командной строки хоть в node.js хоть в консоль браузера пихать, хоть еще куда.

В смысле да. Из коробки только для nodejs. Для чего-то другого надо смотреть как сделаон для nodejs.
Дык можно же oc.js использвать as is для всего подряд. По сути фича ноды лишь в "динамической подгрузке модулей", то есть динамический компоновщик типа. А oc.js уже статически скомпонован и ничего ему больше от этой жизни не нужно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 04:30:05 am
Ну, тем более что, насколько я понимаю, adva не нужен компилятор прямо в Снегопат'е, ему нужно обустроить свое рабоче-разработческое место, возможно без браузера. То есть пускать компилер через node.js вполне кошерный вариант (если туда еще отладчик жабашкрипта прикрутить)

Да да, именно это мне и надо, подскажите, пожалуйста, как это сделать? И компилить, и отладчик бы тоже не помещал. Сам боюсь очень долго буду разбираться, но если нет наработок по этому поводу, то разберусь. Просто уже хотелось бы нужными задачками заняться, а не обустройстом рабочего места :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 04:30:56 am
К тому же английский, далеко не родной мне язык, хотя с другой стороны тоже бы надо скилы прокачивать начинать :), хотя бы на чтение без словаря
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 05:09:19 am
Вроде есть статьи для начинающих, попробую разобраться
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 05:15:21 am
Кстати, по поводу файла oc.js . Если я в нем переименую переменную GLOBAL это ни на что не повлияет? А то у меня в снегопате уже забито это имя?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 06:07:31 am
Чувствую, что bind зачем то нужен, но у меня он не работает. Используется всего в двух местах. Его нельзя заменить чем-нибудь?

bind нет в IE8 (я специально отказался от его использования в точй части компиялятора, который на страничке). Эмулируется примерно так (для твоего случая):
var result = f.bind(this);
аналолг:
var self = this; var result = function(){return f.call(self);}

А аналог для случая, если функция имеет параметры, не приведешь, а то тоже не прокатывает?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 07:30:21 am
Что-то не могу найти, node.js обязательно должен быть установлен для его использования. Или как его использовать можно, в основном все найденные статьи для веб-разработки, может где ссылки попадались на использование не для веб (хотя пожалуй написание веб-сервера это оно и есть)?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 31, 2013, 09:33:29 am
Что-то не могу найти, node.js обязательно должен быть установлен для его использования. Или как его использовать можно, в основном все найденные статьи для веб-разработки, может где ссылки попадались на использование не для веб (хотя пожалуй написание веб-сервера это оно и есть)?
node.js это просто exeшник, скачивай его и радуйся. установка не нужна :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 11:18:55 am
Можно пример, как скомпилировать с помощью nodejs , а то боюсь сам долго разбираться буду, а мне пока с его помощью только обустроиться надо, а изучать уже потом бы хотел (чувствую что пригодиться, но позже)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 31, 2013, 11:41:09 am
Можно пример, как скомпилировать с помощью nodejs , а то боюсь сам долго разбираться буду, а мне пока с его помощью только обустроиться надо, а изучать уже потом бы хотел (чувствую что пригодиться, но позже)
Думаю сегодня разберемся :-)

Ну, то есть у меня оно уже собирает, но есть проблема - пришлось насоздавать каталогов node_modules, иначе нода не может найти подключаемые модули.

vlad: как с этим бороться? Есть какой-то хитрый ключик? Шаманить переменную окружения NODE_PATH?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 12:52:48 pm
vlad: как с этим бороться? Есть какой-то хитрый ключик? Шаманить переменную окружения NODE_PATH?

Посмотри мои батники. Там вроде с NODE_PATH чего-то делается.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 31, 2013, 01:14:19 pm
vlad: как с этим бороться? Есть какой-то хитрый ключик? Шаманить переменную окружения NODE_PATH?

Посмотри мои батники. Там вроде с NODE_PATH чего-то делается.

Ага, вижу:
@SET NODE_PATH=.;%~dp0../src
@"C:\Program Files\nodejs\node.exe" %~dp0\compile.js %*

Для общего случая не годится (если много вложенных каталогов) :-) Но принцип понять позволяет.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 01:28:03 pm
А аналог для случая, если функция имеет параметры, не приведешь, а то тоже не прокатывает?

Я там сделал эмуляцию, делай git pull, должно работать.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 01:33:12 pm
Можно пример, как скомпилировать с помощью nodejs , а то боюсь сам долго разбираться буду, а мне пока с его помощью только обустроиться надо, а изучать уже потом бы хотел (чувствую что пригодиться, но позже)

Тебе надо запустить (помощью nodejs) файл "oc_nodejs.js" - оно напишет чего оно дальше хочет.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 01:35:45 pm
Что-то не могу найти, node.js обязательно должен быть установлен для его использования. Или как его использовать можно, в основном все найденные статьи для веб-разработки, может где ссылки попадались на использование не для веб (хотя пожалуй написание веб-сервера это оно и есть)?

Хотя я не очень представляю как ьы будешь дружить nodejs и свою среду (снегопат). Так что тебе, наверное, надо все-так заходить со стороны "слинкованного" (как для брауезра) os.js и дергания из него нужных функций.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 01:38:29 pm
Кстати, по поводу файла oc.js . Если я в нем переименую переменную GLOBAL это ни на что не повлияет? А то у меня в снегопате уже забито это имя?

GLOBAL нужен, чтобы работали слинованные nodejs модули. Ты, конечно, можешь его убрать, но по факту он должен остаться глобабальным объектом или не будет работать.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 01:43:15 pm
Да да, именно это мне и надо, подскажите, пожалуйста, как это сделать? И компилить, и отладчик бы тоже не помещал. Сам боюсь очень долго буду разбираться, но если нет наработок по этому поводу, то разберусь. Просто уже хотелось бы нужными задачками заняться, а не обустройстом рабочего места :)

Отладчик должен быть там где ты все это будешь запускать. В браузере - браузерный отладчик, в снегопате - хз что там. Лично я при написании всего это дела отладчик не использовал ;) Ну только когда надо было уже в браузере заставить все это рабоать.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 31, 2013, 01:48:59 pm
Да да, именно это мне и надо, подскажите, пожалуйста, как это сделать? И компилить, и отладчик бы тоже не помещал. Сам боюсь очень долго буду разбираться, но если нет наработок по этому поводу, то разберусь. Просто уже хотелось бы нужными задачками заняться, а не обустройстом рабочего места :)

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

Вообще да, среда для исполнения js-кода (тем более такая необычная среда) без отладчика и консоли - это нонсенс. Если в Снегопате этого нет, то это какой-то позор и вообще это сильно снижает юзабельность продукта.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 02:51:34 pm
А аналог для случая, если функция имеет параметры, не приведешь, а то тоже не прокатывает?

Я там сделал эмуляцию, делай git pull, должно работать.

Спасибо, но не заработало (хотя на бинд не ругается, но почему-то compile все равно с ошибкой завершается. Буду ставить отладчик, разбираться с ним.

По поводу подружить снегопат и node.js . Сам node.js мне пока это не особо требуется. Если node.js позволяет передавать параметры через командную строку (консоль, или как там она в виндовс называется), то я бы запускал какой-нить скрипт в node.Js, и компилировал файл (который был бы указан в параметрах. Но я так и не понял, что можно делать с node.js в командной строке.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 02:56:32 pm
По поводу отладчика, сказали что можно использовать visual studio. Или Microsoft script editor из оффиса 2003 (в более поздних его нет). Ну или на крайняк microsoft script debugger ( но я чё то с ходу не разобрался, как в нем переменные просматривать, да и говорят он очень не удобный для отладки).

А так да, я отладчиком обычно пользуюсь больше для изучения чужого кода, чем для написания своего. Это как раз такой случай :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 03:05:06 pm
По поводу подружить снегопат и node.js . Сам node.js мне пока это не особо требуется. Если node.js позволяет передавать параметры через командную строку (консоль, или как там она в виндовс называется), то я бы запускал какой-нить скрипт в node.Js, и компилировал файл (который был бы указан в параметрах.

Да, именно так сейчас компилируются исходники компилятора на обероне - nodejs + скрипт (компилятор) + исходник на обероне.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Октябрь 31, 2013, 03:19:32 pm
Да, именно так сейчас компилируются исходники компилятора на обероне - nodejs + скрипт (компилятор) + исходник на обероне.

Я правильно понял, что строка запуска выглядит так:

>>>node oc.js ИмяФайлаМодуляОберона
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Октябрь 31, 2013, 03:22:54 pm
Я правильно понял, что строка запуска выглядит так:

>>>node oc.js ИмяФайлаМодуляОберона

Посмотри compile_oberon_source.cmd - оно компилит обероновские исходники компилятора.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Октябрь 31, 2013, 03:33:15 pm
Ну, я собирал так (после того как все пути поборол):
node.exe oc_nodejs.js outputDir Test.ob
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 12:33:56 am
Ну, я собирал так (после того как все пути поборол):
node.exe oc_nodejs.js outputDir Test.ob
А я чё то не осилил пути (если мы об одних и тех же).
В общем пытался разобратья, у меня compile_oberon_source.cmd выдает что нет такого пути. Попробую и твой вариант.

Парни, спасибо, что до сих пор возитесь со мной :)

Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 12:58:24 am
У меня в данном случае ругается, что не найден модуль node.js хотя указываю oc_node.js

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

F:\oberonjs-master\src>node oc_nodejs.js Out test.ob

module.js:340
    throw err;
          ^
Error: Cannot find module 'nodejs.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (F:\_adva\GoogleDisk\_snegopat\_OberonScript\oberonjs-
master\src\oc_nodejs.js:3:14)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

F:\oberonjs-master\src>node oc_nodejs.j
s Out test.ob
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 02:46:11 am
У меня в данном случае ругается, что не найден модуль node.js хотя указываю oc_node.js

У тебя должен быть прописан каталог с исходными модулями компилятора (<path to project root>/src) в переменной окружения NODE_PATH. Или ты должен запускать все из этого каталога.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 02:51:29 am
F:\oberonjs-master\src>node oc_nodejs.js Out test.ob

Похоже просто запуск из правильного каталога не помогает, пробуй NODE_PATH.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 03:07:12 am
Поменял NODE_PATH не помогло

По этому пути какие файлы должны находиться?

Или может перезагрузка требуется (устанавливал через Переменные среды... в windows)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 03:55:16 am
О заменил в NODE_PATH слеши на обратные, node.js нашелся, но теперь говорит, что нету RTL$.js
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 04:14:40 am
Указал NODE_PATH, скопировал туды все файлы (без подпапок), и усё получилось, спасибо огромное
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 04:16:22 am
Я таким образом могу модули независимо компилировать, или как в браузере надо, если есть импорт, то должен быть и модуль?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 04:18:52 am
И еще, у cmd  файла есть какое нибудь возвращаемое значение? Или как мне можно получить, код ошибки/успеха?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 01, 2013, 04:29:25 am
Я таким образом могу модули независимо компилировать, или как в браузере надо, если есть импорт, то должен быть и модуль?

Обероны не поддерживают же независимую компиляцию, это же не си...
А при раздельной компиляции либо нужны definition modules как в модуле-2, либо sym-файлы, которых в этом компиляторе нет, либо исходные коды самих импортированных модулей...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 01, 2013, 04:35:18 am
И еще, у cmd  файла есть какое нибудь возвращаемое значение? Или как мне можно получить, код ошибки/успеха?

Записывать число в переменную %ERRORLEVEL% и потом её анализировать (в других cmd-файлах)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 04:37:29 am
Может можно из яваскрипта задать/записать переменную окружения? Это было бы проще
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 04:39:29 am
Хотя пожалуй даже вывод в файл подойдет. Вроде в node есть работа с файловой системой, попробую реализовать
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 05:27:01 am
Изменил файл oc_nodejs.js на так:
"use strict";

var nodejs = require("nodejs.js");
var fs = require("fs");

function main(){
    if (process.argv.length <= 3){
        console.info("Usage: <oc_nodejs> <output dir> <input oberon module file(s)>");
        return -1;
    }

    var outDir = process.argv[2];
    var sources = process.argv.slice(3);
    var errors = "";
    nodejs.compile(sources, function(e){errors += e;}, outDir);
    if (errors.length){
fs.writeFile('error.txt', errors, function (err) {
  if (err) throw err;
  console.log('It\'s saved!');
});       
        console.error(errors);
return -2;
    }

    console.info("OK!");
    return 0;
}

process.exit(main());

Файл ошибок при этом формируется, но пустой (хотя сообщение об ошибке выдается в консоль), на какое значение надо заменить errors в fs.writeFile ?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 05:49:43 am
Даже если строку туда задаю, все равно файл пустой
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 06:13:51 am
В общем пока могу пожалуй ошибку смотреть в консоли без обработки (без перехода на строку ошибки), но если вдруг подскажите, как в файл выводить, то буду признателен. Но это уже не срочный вопрос.

Спасибо еще раз.

Пока перейду к более актуальным задачам
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 06:40:01 am
Все таки еще раз прощу уточнить про "раздельную" (на самом деле имел в виду другое) компиляцию, я могу компилировать через node модуль, если у меня оберонмодуля будут лежать в отдельных файлах? Или надо сначала получить общий файл?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 06:47:56 am
И еще такой вопрос, можно ли возвращать не -2 а -№ строки ошибки?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 07:06:11 am
Про раздельную компиляцию выявил, компилируется, при наличии соответствующего файла (с названием модуля). Вопрос снят.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 08:43:43 am
Вопрос: если сделаю отдельную ветку по компилятору (или как там это называется, имею в виду исходники на гитхабе). То при изменении основной ветки если конфликтов не будет, ветка будет автоматически обновляться?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 01, 2013, 09:57:20 am
Вопрос: если сделаю отдельную ветку по компилятору (или как там это называется, имею в виду исходники на гитхабе). То при изменении основной ветки если конфликтов не будет, ветка будет автоматически обновляться?
Нет, надо руками обновлять (но это в общем то не так уж с тяжело)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 02:01:06 pm
О заменил в NODE_PATH слеши на обратные, node.js нашелся, но теперь говорит, что нету RTL$.js

Надо еще путь к подкаталогу oberon.js прописать.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 02:56:04 pm
О заменил в NODE_PATH слеши на обратные, node.js нашелся, но теперь говорит, что нету RTL$.js

Надо еще путь к подкаталогу oberon.js прописать.
Да, так тоже работает, спасибо, так не придется структуру каталогов менять после обновления компилятора. Просто не сразу разобрался, как сразу 2 каталога в переменной среды прописать, были ссылки на линукс, а там разделителем двоеточие являлось, что в винде не работало.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:01:16 pm
Я таким образом могу модули независимо компилировать, или как в браузере надо, если есть импорт, то должен быть и модуль?

Нет, не можешь. Если бы были символьые файлы - тогда можно былор бы раздельно компилировать. Сейчас процесс выглядит так:
- на входе список файлов .ob, которые входят в твою программу
- в процессе компиляции если компилятор натыкается на IMPORT еще не скомпилированного файла .ob - он его компилит (процесс повторяется рекурсивно)
- все файлы можно не указывать, если они импортятся модулями из оригинального списка
- когда все скомпилировано генерится RTL$.js с нужной подеержкой времени исполнения для всех скомпилированных файлов

Я не считаю этот механизм правильным (можно не критиковать), просто на данном этапе это то, что мне нужно для переписывания кусков компилятора на оберон.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:04:58 pm
И еще, у cmd  файла есть какое нибудь возвращаемое значение? Или как мне можно получить, код ошибки/успеха?

Лично я, когда у меня возникают подобные вопросы, переписываю батник на питон ;)

P.S. Считайте это рекламой питона.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 01, 2013, 03:06:24 pm
Я таким образом могу модули независимо компилировать, или как в браузере надо, если есть импорт, то должен быть и модуль?

Нет, не можешь. Если бы были символьые файлы - тогда можно былор бы раздельно компилировать. Сейчас процесс выглядит так:
- на входе список файлов .ob, которые входят в твою программу
- в процессе компиляции если компилятор натыкается на IMPORT еще не скомпилированного файла .ob - он его компилит (процесс повторяется рекурсивно)
- все файлы можно не указывать, если они импортятся модулями из оригинального списка
- когда все скомпилировано генерится RTL$.js с нужной подеержкой времени исполнения для всех скомпилированных файлов

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

Ну, то есть в переводе на русский, если есть некий модуль Main который импортит еще модули A,B,C,D, которые в свою очередь импортят модуль Foo, то компилятору достаточно дать аргументом Main.ob, а остальное он по цепочке сам найдет (если они есть) и скомпилирует?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:08:48 pm
Файл ошибок при этом формируется, но пустой (хотя сообщение об ошибке выдается в консоль), на какое значение надо заменить errors в fs.writeFile ?

По идее должно работать. Посмотри у меня там используется fs.writeFileSync - оно точно работает.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:34:19 pm
То при изменении основной ветки если конфликтов не будет, ветка будет автоматически обновляться?

Автоматически - да, в том смысле, что тебе не придется самому мерджить.
Вручнок = тоже да, в том смысле, что тебе надо будет делать git pull или гуйню какую-нибудь запускать
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:41:09 pm
Ну, то есть в переводе на русский, если есть некий модуль Main который импортит еще модули A,B,C,D, которые в свою очередь импортят модуль Foo, то компилятору достаточно дать аргументом Main.ob, а остальное он по цепочке сам найдет (если они есть) и скомпилирует?

Да.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 03:44:21 pm
Ну, то есть в переводе на русский, если есть некий модуль Main который импортит еще модули A,B,C,D, которые в свою очередь импортят модуль Foo, то компилятору достаточно дать аргументом Main.ob, а остальное он по цепочке сам найдет (если они есть) и скомпилирует?
Как минимум, один импортируемый файл скомпилился, далее пока не проверял.

Но есть пожелание, можно ли, искать модули оберона для этого в заданных каталогах, да пусть хоть тот же NODE_PATH ? А то придется все файлы в одном месте держать, что не очень. И при этом либо чтобы соблюдалась структура каталогов, в выходном каталоге, либо можно компилить прям туда же, где лежат модули оберона (расширение то все равно другое)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 01, 2013, 03:47:08 pm
И вот так плавно и не заметно мы переходим к обсуждению билд-системы для Оберона :-) А оттуда не далеко и до менеджера пакетов!

Дайошь все на autotools'ах!!1
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:47:46 pm
Но есть пожелание, можно ли, искать модули оберона для этого в заданных каталогах

Все можно :) Просто не все сразу
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 01, 2013, 03:50:34 pm
И вот так плавно и не заметно мы переходим к обсуждению билд-системы для Оберона :-) А оттуда не далеко и до менеджера пакетов!

Дайошь все на autotools'ах!!1

ТруЪ обероновский инструментарий должен делать только на труЪ оберонах :) А не на старинны юниксовых костылях.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 01, 2013, 03:57:44 pm
Ладно, ладно, я умерю свой зуд :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 01, 2013, 04:07:33 pm
И вот так плавно и не заметно мы переходим к обсуждению билд-системы для Оберона :-) А оттуда не далеко и до менеджера пакетов!

Дайошь все на autotools'ах!!1

ТруЪ обероновский инструментарий должен делать только на труЪ оберонах :) А не на старинны юниксовых костылях.
Ну, вообще, наверно имеет смысл посмотреть как это сделано у свежих языков - у Go, Haskell и Modula-3. У них у всех все весьма прилично с точки зрения сборки.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 02, 2013, 03:28:02 am
Выявил ошибку (?): если вдруг окажется, что в NODE_PATH указан и oberon.js и выходной каталог, то ругается на метод RTL$.assert . Похоже потому, что два RTL$.js файла образуются
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 02, 2013, 03:29:33 am
И еще кажется юникодную кодировку файла не воспринимает. Только ANSI ?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 02, 2013, 05:22:46 am
Подскажите, пожалуйста, куда в node.js надо добавить строку, чтобы она в скомпилированно файле попала в первую строку?
Если в prolog добавляю, то в случае наличия require(RTL ...), она оказывается ниже него
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 02, 2013, 05:32:43 am
И еще у меня при выполнении ругается на отсутсвие exports . Это что-то глобальное для node?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 02, 2013, 02:09:15 pm
Выявил ошибку (?): если вдруг окажется, что в NODE_PATH указан и oberon.js и выходной каталог, то ругается на метод RTL$.assert . Похоже потому, что два RTL$.js файла образуются

Не понял - откуда там два RTL$.js?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 02, 2013, 02:15:46 pm
Выявил ошибку (?): если вдруг окажется, что в NODE_PATH указан и oberon.js и выходной каталог, то ругается на метод RTL$.assert . Похоже потому, что два RTL$.js файла образуются

Не понял - откуда там два RTL$.js?

А. Понял. У меня просто 2 отдельных батника для запуска компиляции и для запуска скомпилированного. С разными NODE_PATH. Поэтому коллизий не происходит.

Я это фиксну со временем - будет один RTL$.js (не будет генерироваться отдельно каждый раз) .
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 02, 2013, 02:17:46 pm
И еще кажется юникодную кодировку файла не воспринимает. Только ANSI ?

Кодировки файлов - это в доки/гугл nodejs. Я не в курсе что там для этого.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 02, 2013, 02:23:56 pm
Кодировки файлов - это в доки/гугл nodejs. Я не в курсе что там для этого.

Там вот есть такая строчка:
fs.readFileSync(fileName, "utf8")

Очевидно у тебя не utf8 или utf8 не работает по какой-то причине.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 02, 2013, 02:28:25 pm
Подскажите, пожалуйста, куда в node.js надо добавить строку, чтобы она в скомпилированно файле попала в первую строку?
Если в prolog добавляю, то в случае наличия require(RTL ...), она оказывается ниже него

Попробуй перед "if (rtlCodeWatcher.used())"
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 02, 2013, 02:32:04 pm
И еще у меня при выполнении ругается на отсутсвие exports . Это что-то глобальное для node?

Да, это, собственно, механизм экспорта. Если хочешь экспортировать в глобальное пространство - можешь попробовать прописать var exports = GLOBAL; (или какой там у тебя там глобал).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 04, 2013, 04:31:22 am
Кодировки файлов - это в доки/гугл nodejs. Я не в курсе что там для этого.

Там вот есть такая строчка:
fs.readFileSync(fileName, "utf8")

Очевидно у тебя не utf8 или utf8 не работает по какой-то причине.

Как-то надо победить. А то исходники в ANSI и при компиляции русские строки превращаются в крякозяблики (хотя может это надо делать не массив кодов, а массив символов) ?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 04, 2013, 03:05:44 pm
Как-то надо победить. А то исходники в ANSI и при компиляции русские строки превращаются в крякозяблики (хотя может это надо делать не массив кодов, а массив символов) ?

Вообще русских буковок не бывает в ANSI... Я не в курсе твоей специфики, но я бы предлжил просто перегнать все в UTF8 (уже вроде все среды его держат). Но если UTF8 использовать нельзя, то посмотри тут как народ извращается: http://stackoverflow.com/questions/14551608/cant-find-encodings-for-node-js
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 04, 2013, 03:40:00 pm
Вообще русских буковок не бывает в ANSI... Я не в курсе твоей специфики, но я бы предлжил просто перегнать все в UTF8 (уже вроде все среды его держат). Но если UTF8 использовать нельзя, то посмотри тут как народ извращается: http://stackoverflow.com/questions/14551608/cant-find-encodings-for-node-js

Если я перегонял в utf8, то компилятор ругался сразу на 1ую строку 'syntax error' . Даже разбор не производил. Попробуй, пожалуйста, компилиться ли через "node oc_nodejs.js OutDir Module.ob". Если да, то попробую еще поразбираться.

На текущий момент изменил в nodejs.js кодировку чтения и сохранения на  'binary'. Исходники и выходные файлы получаются в ANSI. При этом русские буквы сохраняются. Вроде у меня в любых кодировках воспринимаются файлы (в крайнем случае в снегопате перекодирую в нужную мне, пока не пробовал, но думаю сработает)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 04, 2013, 03:46:04 pm
И еще момент, или может я чего напутал, изменяя nodejs.js . Но не во всех файлах (модулях) создаются строки вида

var RTL$ = stdlib.require("RTL$.js").RTL$;

В результате ругается на отсутствие объекта RTL

Хотя может на это повлияло комментирование exports. ... ?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 04, 2013, 04:01:37 pm
Вообще русских буковок не бывает в ANSI... Я не в курсе твоей специфики, но я бы предлжил просто перегнать все в UTF8 (уже вроде все среды его держат). Но если UTF8 использовать нельзя, то посмотри тут как народ извращается: http://stackoverflow.com/questions/14551608/cant-find-encodings-for-node-js

Если я перегонял в utf8, то компилятор ругался сразу на 1ую строку 'syntax error' . Даже разбор не производил. Попробуй, пожалуйста, компилиться ли через "node oc_nodejs.js OutDir Module.ob". Если да, то попробую еще поразбираться.
А результат перевода был с BOM или без BOM?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 04, 2013, 04:12:28 pm
Если я перегонял в utf8, то компилятор ругался сразу на 1ую строку 'syntax error' .

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

На текущий момент изменил в nodejs.js кодировку чтения и сохранения на  'binary'. Исходники и выходные файлы получаются в ANSI. При этом русские буквы сохраняются. Вроде у меня в любых кодировках воспринимаются файлы (в крайнем случае в снегопате перекодирую в нужную мне, пока не пробовал, но думаю сработает)

Можно пока оставить binary - компилятору все равно, это важно прежде всего для редактирования.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 04, 2013, 04:14:00 pm
И еще момент, или может я чего напутал, изменяя nodejs.js . Но не во всех файлах (модулях) создаются строки вида
var RTL$ = stdlib.require("RTL$.js").RTL$;

Это бага. Поправлю чуть позже.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 04, 2013, 04:17:47 pm
Если я перегонял в utf8, то компилятор ругался сразу на 1ую строку 'syntax error' .

Вот это, наверное, оно: https://github.com/joyent/node/issues/1918
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 04, 2013, 05:03:34 pm
Если я перегонял в utf8, то компилятор ругался сразу на 1ую строку 'syntax error' .

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

А пока просто в редакторе указать чтобы сохранял без BOM и всего делов. :-)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 05, 2013, 12:41:04 am
А пока просто в редакторе указать чтобы сохранял без BOM и всего делов. :-)
Пробовал оба варианта, не прокатывало, еще раз буду пробовать позже
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 05, 2013, 10:31:55 am
Подскажите, пожалуйста, куда ключевые слова добавить, чтобы он ругался, если их задействуешь в качестве идентификаторов?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 05, 2013, 10:46:13 am
Подскажите, пожалуйста, куда ключевые слова добавить, чтобы он ругался, если их задействуешь в качестве идентификаторов?

Так он же и так ругается! о_О Или у Вас есть код, на котором он не ругается?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 05, 2013, 11:16:33 am
Мне надо несколько новых ключевых слов добавить, чтобы он на них ругался тоже
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 05, 2013, 03:45:41 pm
Подскажите, пожалуйста, куда ключевые слова добавить, чтобы он ругался, если их задействуешь в качестве идентификаторов?

Поищи "reserverdWords".
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 02:39:46 am
Не сталкивались случайно, почему ругается на

commandString.search("\\")?

Хотя при этом делает

commandString.replace("\\", "/")

регулярные выражения здесь, буду в крайнем случае использовать, хотелось бы пока без них обойтись
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 03:11:45 am
И на примере подсовывания и строки и рег. выражения не подскажете, как прописать функцию биндинга, чтобы она принимала оба типа? Или это невозможно? Как каст делается?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 06, 2013, 05:59:49 am
Не сталкивались случайно, почему ругается на

commandString.search("\\")?

Наверное потому, что у строки нет метода search? Попробуй indexOf.

Хотя при этом делает

commandString.replace("\\", "/")

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

Не обойдешься. Без регулярных выражений replace заменит тебе только первое вхождение. И это не то, чего обычно хотят нормальные люди - я по этому поводу уже возмущался :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 06, 2013, 06:02:31 am
И на примере подсовывания и строки и рег. выражения не подскажете, как прописать функцию биндинга, чтобы она принимала оба типа? Или это невозможно? Как каст делается?

Не очень понял о чем речь. В обероне нет регулярных выражений. Так что и биндить вроде как нечего.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 07:35:27 am
Не обойдешься. Без регулярных выражений replace заменит тебе только первое вхождение. И это не то, чего обычно хотят нормальные люди - я по этому поводу уже возмущался :)

Да, хотел в цикле по условию на search заменить через replace со строкой, но т.к. не победил ошибку, то через регулярки сделал. Кажется со вторым вопросом тоже разобрался. Пока снят
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 08:24:24 am
Я правильно понял, что если

есть типы:
Тип1
и
Тип2 (базовый Тип1)

То

можно присваивать
перемТип1 := перемТип2;

а наоборот нельзя?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 08:26:39 am
И если правильно, то как можно заменить обратное присваивание?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 08:38:26 am
Я правильно понял, что если

есть типы:
Тип1
и
Тип2 (базовый Тип1)

То

можно присваивать
перемТип1 := перемТип2;

а наоборот нельзя?

Переменной расширенного типа (в данном случае Тип2) нельзя присваивать значения базового типа (Тип1), иначе будет ошибка доступа к памяти при попытке обращения к полям типа Тип2, которых нет в типе Тип1.

Обратное присваивание -- логическая (или семантическая?) ошибка в программе.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 08:41:11 am
И если правильно, то как можно заменить обратное присваивание?

А зачем это нужно? Приведите конкретную задачу...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 08:48:21 am
И если правильно, то как можно заменить обратное присваивание?

А зачем это нужно? Приведите конкретную задачу...

Возможно только для биндинга (до другого еще пока не дошел)

Имеем, функцию (которую надо биндить), возвращающий разные объекты в зависимости от строкового параметра функции), хотелось бы оставить именно в виде одной функции, но судя по всему, придется делать отдельными функциями для каждого возвращаемого объекта
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 09:50:35 am
Имеем, функцию (которую надо биндить), возвращающий разные объекты в зависимости от строкового параметра функции), хотелось бы оставить именно в виде одной функции, но судя по всему, придется делать отдельными функциями для каждого возвращаемого объекта

Ну а в чём проблема? Расширяемые записи с этим вполне справятся...

Вот пример для акроновского компилятора оберона:
MODULE Records;
IMPORT RTL, In, Out;

TYPE
  PBaseType = POINTER TO BaseType;
  BaseType  = RECORD END;

  PIntVal   = POINTER TO IntVal;
  IntVal    = RECORD (BaseType) value: INTEGER END;

  PRealVal  = POINTER TO RealVal;
  RealVal   = RECORD (BaseType) value: REAL    END;

  PCharVal  = POINTER TO CharVal;
  CharVal   = RECORD (BaseType) value: CHAR    END;

PROCEDURE Foo(x: INTEGER) : PBaseType;
VAR
  ret : PBaseType;
  int : PIntVal;
  real: PRealVal;
  char: PCharVal;
BEGIN
  NEW(int);  int .value := -123;
  NEW(real); real.value := 3.14;
  NEW(char); char.value := "a";

  CASE x OF
  | 1: ret := int
  | 2: ret := real
  | 3: ret := char
  ELSE ret := NIL
  END
RETURN ret
END Foo;

PROCEDURE Boo(x: PBaseType);
BEGIN
  IF    x IS PIntVal THEN
    Out.String("[INTEGER] "); Out.Int (x(PIntVal) .value, 0)
  ELSIF x IS PRealVal THEN
    Out.String("[REAL] ");    Out.Real(LONG(x(PRealVal).value), 0)
  ELSIF x IS PCharVal THEN
    Out.String("[CHAR] ");    Out.Char(x(PCharVal).value)
  ELSE
    Out.String("NIL-value");
  END
END Boo;

BEGIN
  In.Open;  Out.Open;

  Out.String("x = 0, value = "); Boo(Foo(0)); Out.Ln;
  Out.String("x = 1, value = "); Boo(Foo(1)); Out.Ln;
  Out.String("x = 2, value = "); Boo(Foo(2)); Out.Ln;
  Out.String("x = 3, value = "); Boo(Foo(3)); Out.Ln;

  In.Ln
END Records.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 06, 2013, 10:47:48 am
О, спасибо, за понятный пример. А что получается, что при присваивании базовому типу расширенного, ему присваиваются и расширенные поля (те которые не входят изначально в базовый тип)?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 06, 2013, 11:05:45 am
...
Вот пример для акроновского компилятора оберона:
...
  CASE x OF
  | 1: ret := int
  | 2: ret := real
  | 3: ret := char
  ELSE ret := NIL
  END
...

Замечу, что это не Оберон - в Обероне нет варианта ELSE в CASE statement. См. грамматику. Все варианты должны быть перечислены явным образом.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 11:20:26 am
О, спасибо, за понятный пример. А что получается, что при присваивании базовому типу расширенного, ему присваиваются и расширенные поля (те которые не входят изначально в базовый тип)?

Кстати да, пока речь идёт об указателях на записи -- всё понятно.
А как быть с записями-значениями?
MODULE test;
IMPORT JS;
 
TYPE
  BaseRec = RECORD END;
  Rec2    = RECORD (BaseRec) x : INTEGER END;

VAR
  br : BaseRec;
  r2 : Rec2;
 
BEGIN
  r2.x := 42;
  br := r2;
END test.
OberonJS это с удовольствием компилирует, но не происходит ли тут нарушения памяти?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 11:32:06 am
...
Вот пример для акроновского компилятора оберона:
...
  CASE x OF
  | 1: ret := int
  | 2: ret := real
  | 3: ret := char
  ELSE ret := NIL
  END
...

Замечу, что это не Оберон - в Обероне нет варианта ELSE в CASE statement. См. грамматику. Все варианты должны быть перечислены явным образом.

Да, и правда, а как же быть в подобных случаях? о_О
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 11:42:10 am
У акроновского компилятора ещё и операция проверки типа отличается от описания последней ревизии оберона -- вторым параметром требует имя типа указателя на запись вместо имени типа записи...
Вот доработанная версия для OberonJS:
MODULE Records;
IMPORT JS;

TYPE
  PBaseType = POINTER TO BaseType;
  BaseType  = RECORD END;

  PIntVal   = POINTER TO IntVal;
  IntVal    = RECORD (BaseType) value: INTEGER END;

  PRealVal  = POINTER TO RealVal;
  RealVal   = RECORD (BaseType) value: REAL    END;

  PCharVal  = POINTER TO CharVal;
  CharVal   = RECORD (BaseType) value: CHAR    END;

PROCEDURE Foo(x: INTEGER) : PBaseType;
VAR
  ret : PBaseType;
  int : PIntVal;
  real: PRealVal;
  char: PCharVal;
BEGIN
  NEW(int);  int .value := -123;
  NEW(real); real.value := 3.14;
  NEW(char); char.value := "a";

  CASE x OF
  | 1: ret := int
  | 2: ret := real
  | 3: ret := char
  END
RETURN ret
END Foo;

PROCEDURE Boo(x: PBaseType);
BEGIN
  IF    x IS IntVal  THEN JS.alert(x(PIntVal ).value)
  ELSIF x IS RealVal THEN JS.alert(x(PRealVal).value)
  ELSIF x IS CharVal THEN JS.alert(x(PCharVal).value)
  ELSE                    JS.alert("Oops!");
  END
END Boo;

BEGIN
  Boo(Foo(0));
  Boo(Foo(1));
  Boo(Foo(2));
  Boo(Foo(3))
END Records.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 06, 2013, 11:47:44 am
...
Вот пример для акроновского компилятора оберона:
...
  CASE x OF
  | 1: ret := int
  | 2: ret := real
  | 3: ret := char
  ELSE ret := NIL
  END
...

Замечу, что это не Оберон - в Обероне нет варианта ELSE в CASE statement. См. грамматику. Все варианты должны быть перечислены явным образом.

Да, и правда, а как же быть в подобных случаях? о_О
Или IF .. ELSEIF .. ELSE, или указывать диапазон покрывающий все остальные значения.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: valexey_u от Ноябрь 06, 2013, 12:50:06 pm
По поводу CASE - самое смешное, что если результат expression'a не соответствует ни одному из label, то программа спокойно продолжает работать. То есть HALT'а не будет:
x := 42;
CASE x OF
    1: ret := int
  | 2: ret := real
  | 3: ret := char
END

Это абсолютно валидный рабочий код с точки зрения современного Оберона.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 01:02:24 pm
По поводу CASE - самое смешное, что если результат expression'a не соответствует ни одному из label, то программа спокойно продолжает работать. То есть HALT'а не будет:
x := 42;
CASE x OF
    1: ret := int
  | 2: ret := real
  | 3: ret := char
END

Это абсолютно валидный рабочий код с точки зрения современного Оберона.

Ну а почему здесь должен быть HALT?
Ведь раз CASE OF просто синтаксических сахар для IF-ELSIF, то этот код эквивалентен такому:
x := 42;
IF    x = 1 THEN ret := int
ELSIF x = 2 THEN ret := real
ELSIF x = 3 THEN ret := char
END
Тут же всё в порядке, ветка ELSE не является обязательной...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: akron1 от Ноябрь 06, 2013, 01:28:28 pm
У акроновского компилятора ещё и операция проверки типа отличается от описания последней ревизии оберона -- вторым параметром требует имя типа указателя на запись вместо имени типа записи...
Не совсем так. В моей реализации первый и второй параметры должны соответствовать. Если первый параметр -- запись, то требуется имя типа-записи. В репорте написано:

Цитировать
v IS T stands for "v is of type T" and is called a type test. It is applicable, if
1. T is an extension of the declared type T0 of v, and if
2. v is a variable parameter of record type or v is a pointer.

Из этого не ясно, является ли тип T записью или указателем. И должен ли он соответствовать типу v.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 06, 2013, 03:49:10 pm
OberonJS это с удовольствием компилирует, но не происходит ли тут нарушения памяти?

Копируется кусок объекта. Нормальная ситуация при условии понимания, что это именно то, чего ты хочешь.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 06, 2013, 03:57:38 pm
OberonJS это с удовольствием компилирует, но не происходит ли тут нарушения памяти?

Копируется кусок объекта. Нормальная ситуация при условии понимания, что это именно то, чего ты хочешь.

А как же инварианты объектов? Они же вряд ли сохранятся при подобном частичном копировании...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 06, 2013, 04:05:05 pm
А как же инварианты объектов? Они же вряд ли сохранятся при подобном частичном копировании...

Они сохраняются, если ты делаешь все в рамках правильного ООП - наследники специализируют базу, т.е. накладывают дополнительные инварианты (а не снимают базовые) - ты не наследуешь прямоугольник от квадрата и т.п.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 03:01:06 am
Вот доработанная версия для OberonJS:
MODULE Records;
...
END Records.

Ну вот, вроде был понял, еще раз огромное спасибо
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 04:18:15 am
Почему то в моем коде RTL$.typeGuard не корректно отрабатывает. Какие функции, чтобы тип переменной вывести? typeof(переменная) или как то еще?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 04:19:48 am
Может быть потому, что я не использую NEW для функции биндинга?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 07, 2013, 05:16:51 am
И еще момент, или может я чего напутал, изменяя nodejs.js . Но не во всех файлах (модулях) создаются строки вида

var RTL$ = stdlib.require("RTL$.js").RTL$;

В результате ругается на отсутствие объекта RTL

Фикснул. И RTL$.js теперь не генерится отдельно - используется rtl.js из исходников компилятора.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 07, 2013, 05:19:26 am
Может быть потому, что я не использую NEW для функции биндинга?

Попробуй привести код, на котором это видно. По твоему описанию непонятно, что там не так.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 05:21:11 am
Попробуй привести код, на котором это видно. По твоему описанию непонятно, что там не так.

Сначала попробую переписать, как думаю будет правильно, если не поможет, тогда уточню
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 06:55:17 am
А в новой версии с NODE_PATH изменений не было, а то чё-то у меня выдает: системе не удалось найти указанный пусть?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 06:58:45 am
Извиняюсь, я напутал, с путями все в порядке
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 07:17:36 am
Фикснул. И RTL$.js теперь не генерится отдельно - используется rtl.js из исходников компилятора.
Я правильно понял, что теперь оно постоянное (ну относительно конечно, пока новая версия не выйдет)?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 07:27:33 am
Ругается, что нету RTL$.strToArray

Правда я в RTL закомментил строку где export присваивается. Это может быть связано?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 07:30:48 am
Похоже связано, а как мне можно вместо exports присвоить самому скрипту методы переменной impl?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 07:36:26 am
Вроде с експортом разобрался.

Но вот вопрос по охраннику типа остался.

У меня объект подменяется на объект яваскрипта (т.к. биндинг). И естественно он имеет другой тип. Мне отрубить охранника, или для биндингов не могу использовать присвоение указателю базового типа, указателя расширенного типа?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 07:38:55 am
Или может там можно сделать так: "ИЛИ это тип Object яваскрипта"?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 07, 2013, 07:46:27 am
В общем подскажите, как это сделать "идеологически" правильнее (чтобы проверка типизации не нарушилась)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 07, 2013, 03:50:38 pm
Но вот вопрос по охраннику типа остался.

У меня объект подменяется на объект яваскрипта (т.к. биндинг). И естественно он имеет другой тип. Мне отрубить охранника, или для биндингов не могу использовать присвоение указателю базового типа, указателя расширенного типа?

Если у тебя объект пришел из жабаскрипта и этот объект не был получен (в жабаскрипте) через Class.extend, то обероновские проверки типа к нему неприменимы. Потому что в жабаскрипте нет классов (о чем я писал). Классы (типы) искусственно создаются и поддерживаются в мирке oberonjs, все что пришло извне - никаких типов (в терминах оберона) не имеет.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 07, 2013, 03:52:58 pm
Или может там можно сделать так: "ИЛИ это тип Object яваскрипта"?

Таки нужен код, чтобы понять, что у тебя происходит.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 08, 2013, 03:29:30 am
Или может там можно сделать так: "ИЛИ это тип Object яваскрипта"?

Таки нужен код, чтобы понять, что у тебя происходит.
Примерно следующее:

...
TYPE
  Base = POINTER TO BaseRec;
  BaseRec = RECORD END;

  BaseExt = POINTER TO BaseExtRec;
  BaseExtRec = RECORD (BaseRec)
    run: PROCEDURE();
  END;


VAR
  v1: Base;

PROCEDURE getBase(): Base;
  VAR
    res: Base;
BEGIN
   JS.do("res = JSObject";
END getBase;

BEGIN

  v1 := getBase();
  v1(BaseExt).Run();

...

здесь

для v1(BaseExt).Run() при выполнении прозводится проверка типа (через RTL). Которая не проходит. Ты уже объяснил почему. Вопрос: можно ли как-то изменить эту проверку? Или выход только один, написать для каждого типа getBaseExt... ?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 08, 2013, 03:31:20 pm
Вопрос: можно ли как-то изменить эту проверку?

Можно пойти до конца и подменить сгенерированное для оберона объявление типа на жабоскриптовое:
JS.do("BaseExtRec = SomeJSClass");

У меня заработало.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 08, 2013, 05:52:15 pm
Можно пойти до конца и подменить сгенерированное для оберона объявление типа на жабоскриптовое:
JS.do("BaseExtRec = SomeJSClass");

У меня заработало.
А это сработает, если это будет ole объект (или как он там называется), а не объект JS ? И может быть имеет сделать смысл какой-то префикс (навероде [winapi] у КП) процедуры или объекта, сообщающие, что они содержат объект, который не надо проверять?

P.S. Похоже я чего-то не так делаю, не сработало, позже буду еще разбираться
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 08, 2013, 05:56:24 pm
Или при этом защиту типа тоже надо изменить?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 08, 2013, 06:28:18 pm
А это сработает, если это будет ole объект (или как он там называется), а не объект JS ?

Это сработает, если сработает жабаскриптовый "x instanceof ClassX" - общепринятый в жабаскрипте способ проверки типа.

И может быть имеет сделать смысл какой-то префикс (навероде [winapi] у КП) процедуры или объекта, сообщающие, что они содержат объект, который не надо проверять?

Ты и так может вызывать что угодно не проверяя через JS.anyObject.anyMethod(). Возможно такое же поведение надо сделать для переменных JS.var.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 10, 2013, 07:33:18 am
а объекты nodejs можно ли как нибудь вызывать как функции dll . Или только можно запустить локально веб-сервер на nodejs, и к нему обращаться через http-запросы (подобное я пока не осилю)?

Снегопат судя по всему использует движок JS, который используется и internt explorer ом в винде (вроде бы этот же движок используется и windows script host).

Вот и хотелось бы как-то из скриптов на этом движке, взаимодействовать со скриптами на nodejs (желательно без http запросов). Или может быть данные запросы не очень сложны в написании?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 10, 2013, 01:44:49 pm
Да, честно скажу, что писать на обероне мне намного тяжелее, чем на 1С . Но некоторые преимущества типизации видны невооруженным взглядом :) . Действительно, уже на этапе компиляции большая часть ошибок выдается.

Понимаю, почему процедуры на обероне должны быть короткими (малострочными): чтобы была видна в них секция VAR: какого типа переменные используются. Исходя из типа уже обычно смысл переменных виден. Названия самих переменных можно и удобнее (без автокомплита), делать короче. Читабельность при этом не сильно страдает (хотя в 1С короткие переменные сводили бы с ума :) , хотя реально код "захламляют"). Хотя в 1С тоже "желательны" короткие процедуры, но оберон сам по себе, да еще и без автокомплита, очень этому способствует.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 10, 2013, 10:29:24 pm
Какие-то манипуляции в Notepad++ (правда не последней версии) в виндовс 8, выдали окно ошибки (даже несколько), причем никакие манипуляции мышкой не смогли его закрыть. Через диспетчер задач, тоже не удалось, одно из окон нотепада всегда было поверх остальных.

Возможно помогл бы выбор на панели окон "закрыть окно", но теперь уже проверить не могу, т.к. закрыл через альт+ф4.

Вот так хваленая винда 8 (понимаю конечно что виноват нотепад, но тем не менее).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 11, 2013, 03:18:48 am
а объекты nodejs можно ли как нибудь вызывать как функции dll . Или только можно запустить локально веб-сервер на nodejs, и к нему обращаться через http-запросы (подобное я пока не осилю)?

Ничего не могу сказать - читай доки по nodejs.

Снегопат судя по всему использует движок JS, который используется и internt explorer ом в винде (вроде бы этот же движок используется и windows script host).

Вот и хотелось бы как-то из скриптов на этом движке, взаимодействовать со скриптами на nodejs (желательно без http запросов). Или может быть данные запросы не очень сложны в написании?

Не очень понимаю зачем тебе взаимодействие между двумя джаваскриптовыми движками. Что мешает все это запускать под одним снегопатом?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 11, 2013, 05:00:52 am
Не очень понимаю зачем тебе взаимодействие между двумя джаваскриптовыми движками. Что мешает все это запускать под одним снегопатом?

Хотел бы логику сделать на nodejs, а в снегопате чисто интерфес (чтобы потом можно было безболезненно переделать интерфес уже чисто на веббраузер). Наверное для этого все же надо будет разобраться в http запросах (или чем еще, чтобы веб сервер сделать).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 11, 2013, 05:07:39 am
Вот тут есть примеры каких-то настрольных веб-приложений, похоже так можно будет сделать.
http://habrahabr.ru/qa/47986/
Значит позже начну разбираться
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 11, 2013, 08:27:20 am
а подскажите, пожалуйста, есть ли в компиляторе код/объект, который бы мог использоваться для создания автокомплита по оберону?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 11, 2013, 11:15:00 am
Как всегда глупый вопрос:

Можно ли каким-то образом передавать в процедуру переменную (или что это такое) модуля?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 11, 2013, 11:34:57 am
КП в плане того, что процедуры не надо присваивать, удобнее конечно
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 11, 2013, 03:15:46 pm
Хотел бы логику сделать на nodejs, а в снегопате чисто интерфес (чтобы потом можно было безболезненно переделать интерфес уже чисто на веббраузер). Наверное для этого все же надо будет разобраться в http запросах (или чем еще, чтобы веб сервер сделать).

Все равно не понял. Пиши логику без завязок на специфику снегопата, зачем для этого  nodejs Почему это проблема? Что есть в nodejs из того, чего нет в снегопате?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 11, 2013, 03:18:38 pm
Да, честно скажу, что писать на обероне мне намного тяжелее, чем на 1С . Но некоторые преимущества типизации видны невооруженным взглядом :) . Действительно, уже на этапе компиляции большая часть ошибок выдается.

Ну на тебя еще сваливаются все проблемы первопроходцев :) Отсутствие готовых биндингов и глюки.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 11, 2013, 03:20:35 pm
а подскажите, пожалуйста, есть ли в компиляторе код/объект, который бы мог использоваться для создания автокомплита по оберону?

Пока нет. Но хочется. Когда-нибудь будет, если проект не загнется :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 11, 2013, 03:22:14 pm
КП в плане того, что процедуры не надо присваивать, удобнее конечно

Да, процедуры будут добавлены одними их первых в расширение языка. Хотя бы по по образу и подобию КП.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 12, 2013, 03:30:50 pm
В текущей версии жабаскриптовые строки можно не конверить в массив при передаче как ARRAY OF CHAR - будет работать.
PROCEDURE f*(s: ARRAY OF CHAR);
...
var s = "abc";
oberonModule.f(s);

Также можно попробовать поддержать обратный сценарий (если надо) - чтобы обероновский ARRAY OF CHAR  выглядел для жабаскрипта почти как строка (перегрузить toString в rtl.js).
VAR s: ARRAY 10 OF CHAR;
BEGIN
    s := "abc";
    JS.alert(s);
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 12, 2013, 03:34:14 pm
    JS.alert(s);

Cейчас показывает 97,98,99,0,0,0...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 14, 2013, 01:48:31 pm
Подскажите, пожалуйста, как исключения обрабатываются? Или ключевые слова, которые по этому поводу посмотреть. Или подобного вообще нет?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 14, 2013, 02:15:54 pm
Подскажите, пожалуйста, как исключения обрабатываются? Или ключевые слова, которые по этому поводу посмотреть. Или подобного вообще нет?


Будет после методов ;) Пока можно кидать и ловить из жабаскрипта.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 06:29:35 am
Ладно, пока жабаскриптом буду.

Такой вопрос, не нашел как объявлять форвардные объявления процедур. Или это уже не требуется?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 15, 2013, 06:36:37 am
Такой вопрос, не нашел как объявлять форвардные объявления процедур. Или это уже не требуется?

Вирт выпилил. Если есть взаиморекурсивные процедуры - то только через дополнительную процедурную переменную.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 06:40:04 am
А где нибудь есть описание стандартных библиотек (чтобы реализацию для снегопата можно было бы использовать и в других средах)?

Наверное поэтому вопрос и возник, по поводу написания логики с использованием node. Чтобы потом можно было использовать код и в браузере.

Сейчас вижу, что достаточно реализовывать стандартные библиотеки, и работать через них. Чтобы потом также легко перейти на браузер.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 06:43:37 am
Вирт выпилил. Если есть взаиморекурсивные процедуры - то только через дополнительную процедурную переменную.
Ясно.
А при этом процедурное переменной можно присваивать только процедуры текущего модуля? А то пытаюсь присвоить из другого, выдает ошибку
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 06:57:18 am
Кстати, судя по ответу на оберонкоре, там исключение вроде как через системную библиотеку сделано, здесь наверное тоже самое надо.

Может приведете, интерфейс (чтобы на яваскрипте пока у себя написал)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 15, 2013, 09:27:16 am
А при этом процедурное переменной можно присваивать только процедуры текущего модуля? А то пытаюсь присвоить из другого, выдает ошибку

Можно:
MODULE test1;

TYPE
   Proc* = PROCEDURE(x: INTEGER): INTEGER;
 
VAR
   proc: Proc;

PROCEDURE SetProc*(p: Proc);
BEGIN
   proc := p;
END SetProc;   

PROCEDURE TestProc*(x: INTEGER): INTEGER;
BEGIN
   RETURN proc(x)
END TestProc;   

END test1.

MODULE test;
IMPORT JS, test1;
 
PROCEDURE Add1(x: INTEGER): INTEGER;
BEGIN
   RETURN x + 1
END Add1;   
 
PROCEDURE Mul2(x: INTEGER): INTEGER;
BEGIN
   RETURN 2 * x
END Mul2;   
 
PROCEDURE Sqr(x: INTEGER): INTEGER;
BEGIN
   RETURN x * x
END Sqr;   
 
BEGIN
   test1.SetProc(Add1);  JS.alert(test1.TestProc(5));
   test1.SetProc(Mul2);  JS.alert(test1.TestProc(5));
   test1.SetProc(Sqr);   JS.alert(test1.TestProc(5))
END test.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 09:36:39 am
Я делал как-то так:

MODULE test;
 
PROCEDURE Add1*(x: INTEGER): INTEGER;
BEGIN
   RETURN x + 1
END Add1;   
 
BEGIN
 
END test.


MODULE test1;
IMPORT JS, test;

TYPE
   Proc* = PROCEDURE(x: INTEGER): INTEGER;
 
VAR
   proc: Proc;

PROCEDURE SetProc*(p: Proc);
BEGIN
   proc := p;
END SetProc;   

BEGIN
 
  SetProc(test.Add1);
  JS.alert(Proc(5));

END test1.

Сейчас тоже ошибка выдается, но как-то по другому
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 09:38:17 am
Наверное как всегда глупость сделал, позже попробую разобраться сам
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 15, 2013, 10:22:30 am
Я делал как-то так:

MODULE test;
 
PROCEDURE Add1*(x: INTEGER): INTEGER;
BEGIN
   RETURN x + 1
END Add1;   
 
BEGIN
 
END test.


MODULE test1;
IMPORT JS, test;

TYPE
   Proc* = PROCEDURE(x: INTEGER): INTEGER;
 
VAR
   proc: Proc;

PROCEDURE SetProc*(p: Proc);
BEGIN
   proc := p;
END SetProc;   

BEGIN
 
  SetProc(test.Add1);
  JS.alert(Proc(5));

END test1.

Сейчас тоже ошибка выдается, но как-то по другому

В строке

JS.alert(Proc(5));

указано имя типа вместо имени процедуры. Надо так:

JS.alert(proc(5));
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 15, 2013, 02:06:14 pm
А где нибудь есть описание стандартных библиотек (чтобы реализацию для снегопата можно было бы использовать и в других средах)?

Стандартных библиотек чего? Если oberonjs - то еще не написали :) Если nodejs - то nodejs.org.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 15, 2013, 02:18:29 pm
Кстати, судя по ответу на оберонкоре, там исключение вроде как через системную библиотеку сделано, здесь наверное тоже самое надо.

Может приведете, интерфейс (чтобы на яваскрипте пока у себя написал)

Можно посмотреть как здесь сделано: https://github.com/vladfolts/oberonjs/blob/master/src/oberon/Errors.ob#L6

Что касается try/catch, то пока можно отбиться JS вставками:
    JS.do("try {");
    JS.do("throw new Error('test')");
    JS.do("} catch (x) { error = x; }");
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 15, 2013, 02:25:14 pm
указано имя типа вместо имени процедуры. Надо так:

Завел баг на диагностику: https://github.com/vladfolts/oberonjs/issues/40
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 09:46:22 pm
Стандартных библиотек чего? Если oberonjs - то еще не написали :) Если nodejs - то nodejs.org.
Ну скажем не библиотек, а требований к ним (и желательно интерфейса, которого придерживаться)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 09:48:21 pm

В строке

JS.alert(Proc(5));

указано имя типа вместо имени процедуры. Надо так:

JS.alert(proc(5));

А еще, переменную можно так задавать?

VAR
    p: PROCEDURE ()

Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 15, 2013, 11:06:32 pm
Что-то это вроде уже обсуждалось, но не смог найти.

Я правильно понял, что нельзя после вызова процедуры писать через точку?

Например так:
Функция1().Функция2().значение

Если да, то почему?

Это не приравнивается разыменованию?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 16, 2013, 01:02:54 am
Ну скажем не библиотек, а требований к ним (и желательно интерфейса, которого придерживаться)

Ну мы тут обсуждали стиль и табы. А так - надо сначала написать, потом можно покритиковать...
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 16, 2013, 01:06:57 am
А еще, переменную можно так задавать?

VAR
    p: PROCEDURE ()

Можно. Почему нет?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 16, 2013, 01:14:32 am
Что-то это вроде уже обсуждалось, но не смог найти.

Я правильно понял, что нельзя после вызова процедуры писать через точку?

Например так:
Функция1().Функция2().значение

Если да, то почему?

Нельзя. Вирту не нужно было - вот он и не сделал. Низкоуровневый подход - обычно надо обработать результат вызова процедуры и подготовиться к вызову следующей. В отсутствие исключений практически каждый вызов может завершиться возвратом ошибки, которую надо обработать. Поэтому такой случай вызовов подряд - довольно редок. Глубокой идеи тут никакой нет.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: kkkk от Ноябрь 16, 2013, 12:07:27 pm
Поэтому такой случай вызовов подряд - довольно редок. Глубокой идеи тут никакой нет.
Не это ли и есть глубокая идея Оберона?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 16, 2013, 04:18:15 pm
Поэтому такой случай вызовов подряд - довольно редок. Глубокой идеи тут никакой нет.
Не это ли и есть глубокая идея Оберона?

Да, это глубокая идея оберона. Я просто хотел акцентировать то, что за пределами оберона в его текущем состоянии это может быть вполне нормальный конструкт. В отличие, например, от goto и прочих неструктурных ужасов, которые были выпилены из оберона намеренно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: Geniepro от Ноябрь 16, 2013, 05:11:53 pm
Поэтому такой случай вызовов подряд - довольно редок. Глубокой идеи тут никакой нет.

Не это ли и есть глубокая идея Оберона?

Отсутствие глубоких идей?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 16, 2013, 08:17:19 pm
Отсутствие глубоких идей?

Давайте не будем портить тему.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 18, 2013, 06:43:58 am
Что-то или я чего натворил, или до этого не заметил (как-то упустились подробности).

Но использую такой код:

IObject1C* = RECORD (Js.ObjectRec) END;

Компилируется в такой:

var IObject1C = ObjectRec.extend({

Причем при выполнении ругается, что нету ObjectRec. Не могли бы проверить? Может конечно я чего-лишнего в компиляторе закомментил.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 18, 2013, 07:29:36 am
кстати, рассылку об обнолении компилятора как нить можно получить?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 18, 2013, 01:06:48 pm
Компилируется в такой:

var IObject1C = ObjectRec.extend({

Это бага, буду фиксить.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 18, 2013, 01:20:19 pm
Это бага, буду фиксить.

Починил в ветке "release". Проведу в основную чуть позже.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 18, 2013, 03:09:32 pm
Как использовать релиз? Заменил файлы, у меня перестало компилиться, в nodejs.js ругается на oc.js (что нет метода compileModules). Изменил на compileModule, стало ругаться на еще чего то.

Или релиз отличается от основной ветки? Ладно, подожду основуню
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 18, 2013, 04:45:40 pm
Или релиз отличается от основной ветки? Ладно, подожду основуню

Релиз - стабильная ветка, там нет поддержки компиляции nodejs.
Слил с основной - пробуй.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 18, 2013, 04:48:07 pm
кстати, рассылку об обнолении компилятора как нить можно получить?

Там на гитхабе есть "watchers" и "stargazers" - поэкспериментируй, наверное это оно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 03:11:20 am
Там на гитхабе есть "watchers" и "stargazers" - поэкспериментируй, наверное это оно.
Это региться надо обязательно?
Не нашел такого, если можно, ссылку или скрин
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 03:37:04 am
Со строками чё-нибудь делалось, чё то у меня перестало работать, что раньше работало? (вроде перестало преобразовываться в массив)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 19, 2013, 03:52:03 am
Это региться надо обязательно?
Не нашел такого, если можно, ссылку или скрин

Приаттачил. Наверное надо регистрироваться.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 03:53:55 am
Да, похоже региться надо, ладно позже попробую зарегисться


Как теперь работать со строками (константами и прочим)? Какие операции будут поддерживаться,  ( а то я до этого с ними через объект яваскрипта рабоатл)?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 19, 2013, 03:56:32 am
Как теперь работать со строками (константами и прочим)? Какие операции будут поддерживаться,  ( а то я до этого с ними через объект яваскрипта рабоатл)?

Э... Что значит "работать"? Никаких расширений языковых я не делал специально для строк.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 04:14:45 am
Хорошо, попробую, пока поработаю, по строкам пока вопросы снимаю, будут конкретные, тогда и задам
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 04:45:44 am
Пытаюсь присвоить процедурному полю процедуру. Выдает ошибку:

File "D:\GoogleDisk\_snegopat\scripts\Oberon\SnegAPI.ob", line 352: type mismatc
h: 'res.RunApp' is
'PROCEDURE(ARRAY OF CHAR, ARRAY OF CHAR, BOOLEAN, VAR INTEGER)' and cannot be assigned to
'PROCEDURE(ARRAY OF CHAR, ARRAY OF CHAR, BOOLEAN, VAR INTEGER)' expression

Чего не так делаю? До этого работало
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 04:46:28 am
Правда ранее там в параметрах были не ARRAY OF CHAR, а Js.String
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 19, 2013, 05:42:43 am
Чего не так делаю? До этого работало

Все правильно делаешь. Починил :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 06:41:04 am
Елки, до этого функцией возвращал указатель на строку, а теперь надо как то возвращать массив символов. Или это только через параметр-переменную можно?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 06:49:47 am
Похоже поспешил переделывать параметры на ARRAY OF CHAR (с яваскрипт строкой проще было работать).

Или подскажите, как функцией можно вернуть ARRAY OF CHAR ? (пусть даже через поле записи, но такие поля тоже задаются жестко заданного размера)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 06:54:43 am
Чё-то без динамического массива я "стушевался" :)
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 07:56:46 am
Пока вернул всё "взад" :) . Вопросы по строкам снимаются

Еще раз, напомните, пожалуйста, чего-то найти не смогу, как задать тип/переменную, чтобы по ней не делалась проверка типа (т.к. объекты относятся к внешним объектам по отношению к оберону).
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 01:18:22 pm
И по прежнему: при указании в качестве базового типа из другого модуля имеем следующее:
var IObject1C = Js.ObjectRec.extend({
init: function IObject1C(){
ObjectRec.prototype.init.call(this);
}
});

Js.ObjectRec у нас имеется, а ObjectRec нет.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 01:19:14 pm
Хотя не исключаю, что я чего-то недообновил
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 01:36:16 pm
Кажется на что-то другое у меня ругается, пока вопрос снимаю, если что, позже уточню
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 19, 2013, 01:41:44 pm
ilovb, не подскажешь, какая кодировка в виде строки, соответсвует ANSI в текстовом документе ?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: ilovb от Ноябрь 19, 2013, 01:58:16 pm
Если про сишную локаль (гуглить "isalpha"), то так ".1251"
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 19, 2013, 05:43:06 pm
Пока вернул всё "взад" :) . Вопросы по строкам снимаются

Да, работа со строками в обероне - для суровых последователей :)

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

Было как-то так:
TYPE T = RECORD END;
...
JS.do("T = JavaScriptType");
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 19, 2013, 05:45:41 pm
И по прежнему: при указании в качестве базового типа из другого модуля имеем следующее:
var IObject1C = Js.ObjectRec.extend({
init: function IObject1C(){
ObjectRec.prototype.init.call(this);
}
});

Js.ObjectRec у нас имеется, а ObjectRec нет.

Недофиксал. Поправлю, но чуть позже.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 20, 2013, 02:41:28 am
И по прежнему: при указании в качестве базового типа из другого модуля имеем следующее:
Js.ObjectRec у нас имеется, а ObjectRec нет.
Недофиксал. Поправлю, но чуть позже.

Поправил.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 20, 2013, 03:14:01 am
Было как-то так:
TYPE T = RECORD END;
...
JS.do("T = JavaScriptType");

Кажется у меня тот вариант не сработал (т.к. JavaScriptType внешний даже по отношению к яваскрипту как это правильно, com-объект что-ли). Позже еще раз попробую конечно.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: adva от Ноябрь 20, 2013, 03:15:10 am
Или яваскрипт позволяет расширять com-объекты?
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 20, 2013, 03:33:23 pm
Кажется у меня тот вариант не сработал (т.к. JavaScriptType внешний даже по отношению к яваскрипту как это правильно, com-объект что-ли). Позже еще раз попробую конечно.

Тут тебе надо покопать на тему того как работает instanceof в JS (забористая трава, сам никак не могу до конца вкурить). Потому что компилятор ничего умного не делает, кроме этого instanceof для проверки типа.
Название: Re: Вопрос по биндингу ? Или что тут еще требуется?
Отправлено: vlad от Ноябрь 20, 2013, 03:38:11 pm
Или яваскрипт позволяет расширять com-объекты?


Что ты понимаешь под "расширять com-объекты"? COM оперирует только наследованием интерфейсов. COM-объект - это объект с определенным набором интерфейсов. Его можно или использовать непосредственно или агрегировать. Вроде все (давно это было).