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

vlad

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

JS.var предназначен только для удобства написания биндинга. Собственно использовать его без IMPORT JS и не получится.

vlad

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

Потому что строки в жабаскрипте иммутабельны. А содержимое обероновского ARRAY OF CHAR может быть изменено.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #47 : Октябрь 24, 2013, 08:48:04 am »
JS - это глобальный объект в терминах жабаскрипта. Неработающий код в студию!
А чем мне проинициировать JS ? (я код не в браузере запускаю, а как плагин снегопата)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #48 : Октябрь 24, 2013, 09:01:13 am »
JS - это глобальный объект в терминах жабаскрипта. Неработающий код в студию!
А чем мне проинициировать JS ? (я код не в браузере запускаю, а как плагин снегопата)
Зачем его инициализировать?
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

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

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #50 : Октябрь 24, 2013, 09:17:46 am »
Зачем его инициализировать?
Может здесь я не правильно выразился.

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

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

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

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

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

valexey_u

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

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #52 : Октябрь 24, 2013, 09:37:21 am »
По консоли ничего пока не знаю, стандартно в конфигураторе 1С ее нет (а я именно в нем запускаю скрипты, используя снегопат). Попробую выяснить на форуме снегопата, почему данный код не работает

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #53 : Октябрь 24, 2013, 03:14:41 pm »
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #54 : Октябрь 24, 2013, 03:21:03 pm »
хотя пожалуй, пока не критично, пока модулей биндинга не критически много :)

adva

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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #56 : Октябрь 24, 2013, 03:23:24 pm »
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?
А это что такое вообще?
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #57 : Октябрь 24, 2013, 03:24:41 pm »
И нет, оказывается сработал другой код (без JS, пока ничего менять не буду)
Без JS могут быть коллизии имен, когда сущность в Оберон-модуле (например тип) совпадает с именем глобальной сущности жабаскрипта, и в результате к глобальной этой сущности обратиться никак не возможно.
Y = λf.(λx.f (x x)) (λx.f (x x))

adva

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

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

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

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

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

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

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

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

Имя. Строка. Название, под которым объект будет доступен в скрипте.
Объект. Ссылка на добавляемый объект.
[Глобально]. Необязательный. Булево. По-умолчанию false. Если передать true, объект добавиться как глобальный, т.е. к его методам и свойствам можно будет обращаться напрямую, без указания имени объекта.
Свойство self
Только чтение. Объект. Сам объект скрипта, т.е. то, как он видится со-стороны. Служит для передачи ссылки
на себя в различные методы.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Вопрос по биндингу ? Или что тут еще требуется?
« Ответ #59 : Октябрь 24, 2013, 03:49:22 pm »
Так. Выяснил, что в качестве параметра функции вместо this в качестве глобального контекста надо использовать SelfScript.self ? Где мне в компиляторе чего поменять, а то боюсь долго искать буду?
А это что такое вообще?

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

Вопрос: "А это что такое вообще?" не понятен? Где я пишу скрипты? Это скрипты для автоматизации конфигуратора 1С на основе сторонней разработки Снегопат.