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

vlad

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

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

valexey_u

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

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

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

А в мейнстриме это пока не нужно.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #32 : Октябрь 23, 2013, 03:05:27 pm »
Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)

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

Но как-то совсем неявно получается.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #33 : Октябрь 23, 2013, 03:08:27 pm »
А чем является JS в сгенерированном коде? Почему-то вроде корректный код выдает ошибку при выполнении (JS не задан, как я понял)

JS - это глобальный объект в терминах жабаскрипта. Неработающий код в студию!

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #34 : Октябрь 23, 2013, 03:08:57 pm »
Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)

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

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

Ну, то есть я сейчас вот буду делать привязку к DOM-API, и там, как понимаешь, узлы дерева это множество объектов (да еще разных типов и с множественным наследованием, да!) и каких-то преимуществ от нововведения в компилятор я не вижу для этой работы. Зато отлично представляю как это все написать тем методом которым я воспользовался для String'a.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #35 : Октябрь 23, 2013, 03:12:19 pm »
Я в курсе, что там как в Lua. Имелся в виду объект, который вроде от модуля ни чем не отличается.

Поясни свою мысль. "IMPORT JSObjectAsModule" не будет работать просто потому, что компилятор не сможет проверить, что этот JSObjectAsModule экспортирует. Т.е., с тем же успехом можно писать IMPORT JS.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #36 : Октябрь 23, 2013, 03:21:29 pm »
Не понял. Где ты у меня синглетон нашел в коде? :-) Там как раз множество объектов.

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

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #37 : Октябрь 23, 2013, 03:27:11 pm »
Ну а теперь объясните мне - нафига это нововведение в компиляторе было сделано? :-)
Нововведение пока еще не использовал, т.к. нашел другое простое решение (подошло в конкретно моем случае, про другие пока не думаю :) ).
А за подробные разъяснения спасибо. Попробую разобраться в таком подходе. Т.к. чувствую, что это еще понадобится

С ошибками в коде пока вроде разобрался, поэтому код выкладывать не буду. Отдельные ветки компилятора тоже пока делать не буду, нет так нет. Буду локально менять (копипаст одной строки не сильно пока напрягает :) )

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #38 : Октябрь 23, 2013, 03:31:11 pm »
Кстати, я также не совсем понял, как использовать нововведение JS.var. Из примера не уяснил, создается новая js переменная, или как то можно использовать существующую?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #39 : Октябрь 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 (в частности я чувствую что меня местами подзадолбает проверка динамических типов при биндинге к сторонним библиотекам (которые не описаны в каком-либо стандарте) - чтобы гарантировать что внезапно значение левого типа не расползлось по всей программе)..
Y = λf.(λx.f (x x)) (λx.f (x x))

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #40 : Октябрь 23, 2013, 03:34:33 pm »
Извиняюсь за "много вопросов", но:
1) многие места хотя вроде и понятны в теории, но не понятны на практике, т.к. программировал до сих пор только на 1С;
2) надеюсь буду полезен в плане тестирования компилятора (т.к. на текущий момент принял решение использовать его в своем проектике)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #41 : Октябрь 23, 2013, 03:36:44 pm »
Извиняюсь за "много вопросов", но:
1) многие места хотя вроде и понятны в теории, но не понятны на практике, т.к. программировал до сих пор только на 1С;
2) надеюсь буду полезен в плане тестирования компилятора (т.к. на текущий момент принял решение использовать его в своем проектике)
Реальное использование компилятора безусловно очень важно - чем больше пользователей, тем больше ошибок выявим и быстрее напишем либы. Надеюсь что постепенно у нас появится не только компилятор, но и IDE :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #42 : Октябрь 23, 2013, 04:04:31 pm »
valexey_u, я правильно понимаю, что основное преимущество в плане "типизации" в том, что твоем случае "фокус" с типизацией осуществляется в модулях биндинга (и если их корректно писать, то проблем в дальнейшем быть не должно), а в случае с JS.var , типизация может нарушаться уже в самих модулях.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #43 : Октябрь 23, 2013, 04:15:04 pm »
И еще такой вопрос, зачем в компиляторе строка оберона, преобразовывается в массив кодов символов? Нельзя ее оставить просто строкой?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #44 : Октябрь 23, 2013, 04:49:29 pm »
Смотри, мой поинт такой, что человек пишущий биндинг, должен хорошо разбираться в том, что у него на выходе получится. То есть он должен знать и жабаскрипт и оберон. Иначе точно будет лажа. Поэтому возможность работы только через "асмовые вставки" - это хорошо. Это гарантирует что человек хотя бы js знает. И понимает что там нагенерил компилер (может это прочесть и понять).

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

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


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