Автор Тема: Online компилятор Oberon-07/11.  (Прочитано 165146 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #210 : Сентябрь 03, 2013, 12:31:45 pm »
Я полагаю что скорость исполнения будет неотличима (ибо инлайн функций с последующей jit-компиляцией)....
ни фига не понимаю.. какой может быть инлайн в  платформенном компиляторе выдающем js -код акромя вызова непосредственно этого кода вложенного в Оберонный сырец? эта вставка (в частном случае ЛЮБОЙ вызов обьекта JS - окружения) и есть инлайн, разве нет?

Я про то, что в js скорее всего вот такое:
var a = function(s){console.log(s)}

while (true) {
    a("hello");
}
По эффективности будет скорее всего не отличимо от такого:
while (true) {
    console.log("hello")
}
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #211 : Сентябрь 03, 2013, 12:34:06 pm »
Я всего лишь хотел обратить ваше внимание на особенности работы с целыми числами OberonJS, поскольку зависит от спецификаций EcmaScript.
Завел баг: https://github.com/vladfolts/oberonjs/issues/19
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #212 : Сентябрь 03, 2013, 01:00:34 pm »
Я всего лишь хотел обратить ваше внимание на особенности работы с целыми числами OberonJS, поскольку зависит от спецификаций EcmaScript.
ну (  :) если честно) по сообщению этого не скажешь - в любом случае.. надеемся , что препятствия на этом пути (обращения нашего внимания "на особенности работы с целыми числами OberonJS") удалось помочь преодолеть.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #213 : Сентябрь 03, 2013, 03:11:41 pm »
Кстати, Vlad, возможно стоит в качестве платформенной фичи(регулируемой опцией компилятора)
дать возможность делать псевдонимы на обьекты JS наподобие
....
IMPORT con:=JS.console;
...
con.log("Hello!");
.....
вроде один фиг всегда создаются их экземпляры с одной стороны, с другой - они внешние и недоразумений при комбинировании быть не должно....

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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #214 : Сентябрь 04, 2013, 06:00:19 am »
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D

Проблем с реализацией агрегата console внутри JS для процедур ввода-вывода...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #215 : Сентябрь 04, 2013, 10:50:15 am »
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D

Проблем с реализацией агрегата console внутри JS для процедур ввода-вывода...
C точки зрения Оберона функция console.log имеет невозможную сигнатуру.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #216 : Сентябрь 04, 2013, 10:54:14 am »
Good news for everyone! Влад пофиксил мерзкий баг номер 15! Что было в нем мерзкого? А то, что по сути не работал экспорт типов из модулей. Причем ладно бы оно не компилялось, ломалась кодогенерация. Подробней о побежденном монстре можно глянуть тут: https://github.com/vladfolts/oberonjs/issues/15

Теперь можно осторожно пробовать писать библиотеки (но пока без полиморфизма, потому что еще жив другой монстр: https://github.com/vladfolts/oberonjs/issues/16 ).
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #217 : Сентябрь 04, 2013, 12:19:51 pm »
Да проблем-то нет...
ЕСТЬ, сможете найти пяток навскидку ?  :D

Проблем с реализацией агрегата console внутри JS для процедур ввода-вывода...
C точки зрения Оберона функция console.log имеет невозможную сигнатуру.
это только один момент - другой, более неприятный - это то, что компилятор не  проверяет наличие обьекта  консоль в JS, да и JS ни разу не является модулем, хотя выглядит похоже. Так что остается одно -честно выносить все то что связано с JS за пределы понятийной сферы Оберона.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #218 : Сентябрь 04, 2013, 12:25:04 pm »
это только один момент - другой, более неприятный - это то, что компилятор не  проверяет наличие обьекта  консоль в JS, да и JS ни разу не является модулем, хотя выглядит похоже. Так что остается одно -честно выносить все то что связано с JS за пределы понятийной сферы Оберона.

Тут ситуация аналогична псевдомодулю SYSTEM -- он же тоже по сути не является нормальным модулем.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #219 : Сентябрь 04, 2013, 03:08:41 pm »
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #220 : Сентябрь 04, 2013, 03:14:24 pm »
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
А где там объектные типы? У js есть примитивные типы - целые (с некоторой натяжкой конечно, но тем не менее) и числа с плавающей запятой. То есть это именно примитивные типы, не Object'ы.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #221 : Сентябрь 04, 2013, 03:35:51 pm »
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
А где там объектные типы? У js есть примитивные типы - целые (с некоторой натяжкой конечно, но тем не менее) и числа с плавающей запятой. То есть это именно примитивные типы, не Object'ы.
проблема динамической природе JS - сейчас он простой обьект, через секунду  к нему прилеплен  доп. метод, или его тип сменился на другой простой. Как бы  то не было компилятор трактует значение как тип ANY (и это правильно) - только  мне с означенным вопросом от этого не легче.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #222 : Сентябрь 04, 2013, 04:06:24 pm »
Vlad, как планируется кастовать значения обьектных типов JS в примитивные типы оберона (скажем, чтобы сделать бинд к Math.sin())
А где там объектные типы? У js есть примитивные типы - целые (с некоторой натяжкой конечно, но тем не менее) и числа с плавающей запятой. То есть это именно примитивные типы, не Object'ы.
проблема динамической природе JS - сейчас он простой обьект, через секунду  к нему прилеплен  доп. метод, или его тип сменился на другой простой. Как бы  то не было компилятор трактует значение как тип ANY (и это правильно) - только  мне с означенным вопросом от этого не легче.

Не понимаю проблемы. Вот примерно так будет (Math и Out модули + тестовый модуль, этот весь код можно скопипастить в онлайн-компилер и погонять):

MODULE Math;
IMPORT JS;

PROCEDURE Random*() : REAL;
VAR
  res : REAL;
BEGIN
  JS.do("res = JS.Math.random();")
  RETURN res
END Random;

END Math.

MODULE Out;
IMPORT JS;

CONST
  console* = 0;
  alert  * = 1;

VAR
  Mode* : INTEGER;

PROCEDURE Real*(v : REAL);
BEGIN
  CASE Mode OF
      console : JS.do("JS.console.log(v);")
    | alert   : JS.do("JS.alert(v)")
  END
END Real;

PROCEDURE SetMode*(m : INTEGER);
BEGIN
  Mode := m
END SetMode;

BEGIN
  Mode := alert
END Out.

MODULE Test;
IMPORT Out, Math;

BEGIN
  Out.Real(Math.Random());
  Out.SetMode(Out.console);
  Out.Real(Math.Random())
END Test.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Online компилятор Oberon-07/11.
« Ответ #223 : Сентябрь 04, 2013, 04:17:05 pm »

Не понимаю проблемы. Вот примерно так будет (Math и Out модули + тестовый модуль, этот весь код можно скопипастить в онлайн-компилер и погонять):

в отсутствии гарантии, что будет  создано значение простого типа. Впрочем, возможно. эта проблема надумана. Я ответ получил (не знал о наличии процедуры do ).

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #224 : Сентябрь 04, 2013, 04:26:02 pm »

Не понимаю проблемы. Вот примерно так будет (Math и Out модули + тестовый модуль, этот весь код можно скопипастить в онлайн-компилер и погонять):

в отсутствии гарантии, что будет  создано значение простого типа. Впрочем, возможно. эта проблема надумана. Я ответ получил (не знал о наличии процедуры do ).
Значит надо проверять в рантайме. JS это не только псевдомодуль для Оберона, но и объект с набором функций для javascript, в частности туда можно добавить проверялки типов. Будет что-то вроде: JS.do("JS.CheckReal(JS.Math.random())"); если там вдруг не то что нужно (либо функции random нет вообще) то будет ошибка во время выполнения. В первом приближении аналогичная выполнения ASSERT(FALSE).
Y = λf.(λx.f (x x)) (λx.f (x x))