Автор Тема: OberonJS  (Прочитано 72225 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #75 : Февраль 22, 2017, 05:42:24 am »
Влад, а тут Comdiv интересовался, почему проверка индексов так много времени занимает?

Потому что не считать выход за границы ошибкой одно из многих идиотских решений в джаваскрипте :)

Он пример накидал, что разница в 10 раз получается:
https://models.molpit.org/model/59

Да, если есть тест на котором хорошо видно разницу - гляну.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #76 : Февраль 22, 2017, 02:20:16 pm »
Добавил обработчики мыши, получился слайдер
https://models.molpit.org/model/52

Слайдер не работает на мобиле. А вот все остальное работает. Профит! :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #77 : Февраль 22, 2017, 02:55:26 pm »
Влад, я сделал модуль для базовых операций со строками. Но вот ASSERT когда срабатывает, нельзя ли указывать в какой он процедуре сработал?

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

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #78 : Февраль 22, 2017, 03:09:44 pm »
Влад, я сделал модуль для базовых операций со строками. Но вот ASSERT когда срабатывает, нельзя ли указывать в какой он процедуре сработал?

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

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: OberonJS
« Ответ #79 : Февраль 22, 2017, 09:39:40 pm »
Можно заголовки у страницы настроить.
<meta http-equiv="Cache-Control" content="no-cache">

Или заголовки у http-ответа указать.
Это плохая идея, так как компилятор пол мегабайта весит :)
Во-первых, сервер сжимает передаваемые данные (или его можно настроить, чтобы он сжимал). Так что это после распаковки будет пол мегабайта.
Во-вторых, есть <frame> и <iframe>. Как я понимаю, с их помощью можно разбить страницу на несколько частей, которые будут иметь свои заголовки. Но это надо проверить. У меня был где-то пример. Если найду, то сообщу.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #80 : Февраль 23, 2017, 09:10:35 am »
Валерий, не парьтесь, проблема решена на стороне сервера. У меня были слишком агрессивные настройки кэширования. Теперь все ок.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #81 : Март 01, 2017, 04:05:22 am »
Ну вот Валера Шипков и Дмитрий Дагаев добавили примеров тоже :)
У меня пока пауза по работе, но мне дали много рекомендаций как улучшить интерфейс для мобилы и для ПК. Так что в середине марта вернусь с новой силой к проекту.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #82 : Март 01, 2017, 04:07:24 am »
Я не знаю подписан ли кто-то из вашей компании на мой новостной канал по Бэкбоксу и Оберону.
Если нет, то подписывайтесь, и предлагайте для него новости, при необходимости что-то осветить :)
https://t.me/BlackBoxOberon

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #83 : Март 19, 2017, 02:14:19 pm »
Столкнулся с тем, что CHAR транслятор понимает как числа.
PROCEDURE Char*(arg: CHAR);
BEGIN
JS.do("document.getElementById('log').innerHTML = document.getElementById('log').innerHTML + arg")
END Char;

Выводятся числа...

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #84 : Март 19, 2017, 02:59:38 pm »
Еще хочется понять как выполнять преобразования типов. Мне надо четыре байта переделать в INTEGER.
В вики написано:
No SYSTEM module
А как делать тогда?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #85 : Март 20, 2017, 01:27:29 am »
Столкнулся с тем, что CHAR транслятор понимает как числа.

На это были причины. Для твоего случая надо просто сделать String.fromCharCode(arg)

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #86 : Март 20, 2017, 01:57:05 am »
С преобразованием типов вроде разобрался, спасибо, Comdiv.

 PROCEDURE GetInt4(a: ARRAY OF CHAR; pos: INTEGER): INTEGER;
BEGIN
ASSERT(ORD(a[pos + 3]) < 128)
RETURN ORD(a[pos]) + (ORD(a[pos+1]) + (ORD(a[pos+2]) + ORD(a[pos+3]) * 0100H ) * 0100H) * 0100H
END GetInt4;

PROCEDURE GetInt2(a: ARRAY OF CHAR; pos: INTEGER): INTEGER;
BEGIN
ASSERT(ORD(a[pos + 1]) < 128)
RETURN ORD(a[pos]) + ORD(a[pos+1]) * 0100H
END GetInt2;

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #87 : Март 20, 2017, 02:02:43 am »
Еще хочется понять как выполнять преобразования типов. Мне надо четыре байта переделать в INTEGER.
В вики написано:
No SYSTEM module
А как делать тогда?

Модуль JS вместо SYSTEM. Но в твоем случае можно обойтись обычным обероном:
    result := b1 + LSL(b2, 8) + LSL(b3, 16) + LSL(b4, 24);

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #88 : Март 20, 2017, 02:04:56 am »
Столкнулся с тем, что CHAR транслятор понимает как числа.

На это были причины. Для твоего случая надо просто сделать String.fromCharCode(arg)
Firefox почему-то ругается
String.fromCharCode is not a function

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #89 : Март 20, 2017, 02:24:40 am »
Модуль JS вместо SYSTEM. Но в твоем случае можно обойтись обычным обероном:
    result := b1 + LSL(b2, 8) + LSL(b3, 16) + LSL(b4, 24);
Спасибо, попдправил
PROCEDURE GetInt4(a: ARRAY OF CHAR; pos: INTEGER): INTEGER;
BEGIN
  RETURN ORD(a[pos]) + LSL(ORD(a[pos+1]), 8) + LSL(ORD(a[pos+2]), 16) + LSL(ORD(a[pos+3]), 24)
END GetInt4;

  PROCEDURE GetInt2(a: ARRAY OF CHAR; pos: INTEGER): INTEGER;
BEGIN
  RETURN ORD(a[pos]) + LSL(ORD(a[pos+1]), 8)
END GetInt2;