Автор Тема: Вопрос по биндингу ? Или что тут еще требуется?  (Прочитано 107437 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #15 : Октябрь 23, 2013, 05:58:13 am »
Это планируется делать? Если да, то каковы примерные сроки?

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

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

И это тоже. Пробуй как удобнее.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #16 : Октябрь 23, 2013, 06:48:53 am »
спасибо, для меня достаточно оперативно :) . Буду дальше смотреть патихоньку

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #17 : Октябрь 23, 2013, 06:51:02 am »
А можно попросить опции компилятора сделать (включать русские символы и _ в идентификатор) ? А то приходится самому изменять isLetter (хотя это наверное не совсем корректно, но ранее было такое предложение).

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #18 : Октябрь 23, 2013, 06:53:00 am »
Вообще да, надо допилить хотя бы до возможности хранения ссылки на объект из жабаскрипта. Как-то так:
MOULE Test;
IMPORT JS;
VAR jsObject: JS.var;
BEGIN
    jsObject := JS.makeObject();
    jsObject.method();
END test.
Это и так можно :-) Не вижу смысла в нововведении :-)

Ну, то есть я это уже ведь делал в биндинге к процессингу
Y = λf.(λx.f (x x)) (λx.f (x x))

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #19 : Октябрь 23, 2013, 07:16:52 am »
Это и так можно :-) Не вижу смысла в нововведении :-)

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

Что-то я не увидел это в биндинге процессора (по крайней мере в примере, который тут выкладывался). Не подскажешь, где посмотреть?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #20 : Октябрь 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.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #21 : Октябрь 23, 2013, 07:26:33 am »
Вопрос снят, вар после типе

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #22 : Октябрь 23, 2013, 07:38:40 am »
А чем является JS в сгенерированном коде? Почему-то вроде корректный код выдает ошибку при выполнении (JS не задан, как я понял)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #23 : Октябрь 23, 2013, 07:39:41 am »
А нельзя JS класс импортировать как обероновый модуль?

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

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

Я в курсе, что там как в Lua. Имелся в виду объект, который вроде от модуля ни чем не отличается.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #24 : Октябрь 23, 2013, 11:14:53 am »
По предыдущим вопросам нашел более простое решение, примерно как валексей предложил, оказалось, что можно было указать, из какого объекта javascript брать процедуры для обработчиков формы. Поэтому оказалось достаточно модуля с процедурами.

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

В чём может быть дело?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #25 : Октябрь 23, 2013, 11:28:55 am »
Кажется понял в чем дело, вопрос пока снят

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #26 : Октябрь 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.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #27 : Октябрь 23, 2013, 11:46:04 am »
Я так понял, здесь функция strToArray преобразовывает строку в массив (причем даже не символов похоже, а их кодов, или еще чего), а как из этого массива снова получить строку?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #28 : Октябрь 23, 2013, 12:43:54 pm »
Я так понял, здесь функция strToArray преобразовывает строку в массив (причем даже не символов похоже, а их кодов, или еще чего), а как из этого массива снова получить строку?
Символ и его код это одно и то же :-)

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

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

Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #29 : Октябрь 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.

Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)
Y = λf.(λx.f (x x)) (λx.f (x x))