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

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
OberonJS
« : Январь 04, 2017, 07:24:59 pm »
Всех с Новым Годом!

Вопрос к Алексею по OberonJS. На первом Дне Оберона я сильно вдохновился вашим компилятором в плане разработки демонстрационных графических моделей. Мы помню, обсуждали, что возможно сделать несложную демонстрацию как использовать компилятор для создания контекста для рисования и рисования на нем несложных рисунков с текстами.

Алексей, если у тебя будет время на это, то я прошу провести для меня такой мастер-класс. Мы можем записать по итогу какую-то демку на видео, если хочешь.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: OberonJS
« Ответ #1 : Январь 05, 2017, 09:00:32 pm »
Транслятор разрабатывал vlad2.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #2 : Январь 06, 2017, 12:19:05 am »
Транслятор разрабатывал vlad2.

Тем не менее, valexey главный по PR ;) И демки у него хорошо получались. Применительно к графике valexey скрещивал oberonjs с http://processingjs.org/.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: OberonJS
« Ответ #3 : Январь 06, 2017, 11:31:11 am »
Я пока в местах, где с интернетом туго, окончательно вернусь примерно через неделю.

А так да, можно будет провести мастер-класс.
Y = λf.(λx.f (x x)) (λx.f (x x))

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #4 : Январь 06, 2017, 08:09:40 pm »
Я пока в местах, где с интернетом туго, окончательно вернусь примерно через неделю.

А так да, можно будет провести мастер-класс.
Ну тогда через недельку напишу, надо накидать пару примеров. На самом деле у компилятора большая ниша в области образования и науки. По сути у него нет альтернатив... Но надо дописать правильные обертки над графической частью и сделать несколько демонстраций.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #5 : Январь 21, 2017, 06:46:06 pm »
Влад и Алексей, сделайте хотя бы минимальную документацию.
Я просто не понимаю как пользоваться компилятором.

Алексей, выложи демки свои с Дня Оберона?

https://youtu.be/KlHMOCbmtf0?t=19m51s

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #6 : Январь 22, 2017, 04:55:33 pm »
Влад и Алексей, сделайте хотя бы минимальную документацию.
Я просто не понимаю как пользоваться компилятором.

Минимальная там есть, вполне в духе оберона :) У тебя build.py заработал? _out/os.js собрался? Ты его в каком виде хочешь использовать? На вебе или вместе с Node.js?

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #7 : Январь 23, 2017, 04:01:25 pm »
Я почти разобрался и даже нашел примеры с канвасами тут на форуме.

Вопрос. Как скомпилированный код, загрузить в HTML для повторного использования?

Вот начал делать образовательный проект по биофизическим моделям.
http://molpit.org/models

Начинаю с разработки модуля Log.
http://molpit.org/models/Log.js

require("Log.js"); не помогает
<script src="Log.js"></script>тоже


Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: OberonJS
« Ответ #8 : Январь 23, 2017, 05:29:22 pm »
у меня работает
<html>
<head><script src="Log.js"></script></head>
<body onLoad="this.Log.String('yyy');">
<div id="log"></div>
</body>
</html>

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #9 : Январь 23, 2017, 05:39:43 pm »
Я почти разобрался и даже нашел примеры с канвасами тут на форуме.

Вопрос. Как скомпилированный код, загрузить в HTML для повторного использования?

Вот начал делать образовательный проект по биофизическим моделям.
http://molpit.org/models

Начинаю с разработки модуля Log.
http://molpit.org/models/Log.js

require("Log.js"); не помогает
<script src="Log.js"></script>тоже

Не очень понял, попробую угадать, что ты хочешь:
- скомпилировать обероновский модуль (Log) в js.
- импортировать скомпилированный модуль из HTML, чтобы скомпилировать еще один обероновскм

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #10 : Январь 23, 2017, 05:48:42 pm »
Я почти разобрался и даже нашел примеры с канвасами тут на форуме.

Вопрос. Как скомпилированный код, загрузить в HTML для повторного использования?

Вот начал делать образовательный проект по биофизическим моделям.
http://molpit.org/models

Начинаю с разработки модуля Log.
http://molpit.org/models/Log.js

require("Log.js"); не помогает
<script src="Log.js"></script>тоже

Не очень понял, попробую угадать, что ты хочешь:
- скомпилировать обероновский модуль (Log) в js.
- импортировать скомпилированный модуль из HTML, чтобы скомпилировать еще один обероновский модуль из текста ввведенного на этой HTML

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #11 : Январь 23, 2017, 05:56:05 pm »
Читать импортируемые модули примерно так: https://github.com/vladfolts/oberonjs/blob/master/src/nodejs.js#L67
return oc.compileModules(
            sources,

            // вот эта функция по имени импортируемого модуля должна вернуть его исходный текст
            function(name){
                var fileName = name;
                if (!path.extname(fileName).length)
                    fileName += ".ob";
               
                readPath = calcPath(fileName);
                return fs.readFileSync(readPath, "utf8");
            },
...

"fs.readFileSync" в браузере нет (как и вообще доступа к файловой системе, это nodejs), тебе придется заменить его на что-то другое.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #12 : Январь 23, 2017, 06:39:40 pm »
Спасибо за советы. Попробую сделать как Владислав написал, чтобы сохраненные готовые модули (фреймворк) копировались в начало рекурсивно.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: OberonJS
« Ответ #13 : Январь 23, 2017, 07:37:50 pm »
Спасибо за советы. Попробую сделать как Владислав написал, чтобы сохраненные готовые модули (фреймворк) копировались в начало рекурсивно.

На самом деле еще проще: запихни все библиотечные модули текстуально до компилируемого и все заработает без бубнов с настройкой компилятора. Т.е.:
oc.compile(libModulesText + userEnteredText);

Несколько неэстетично, зато дешево надежно и практично.

P.S. Порядок модулей в тексте должен быть строго в порядке зависимостей.

Ivan Denisov

  • Jr. Member
  • **
  • Сообщений: 67
    • Просмотр профиля
Re: OberonJS
« Ответ #14 : Январь 23, 2017, 08:24:34 pm »
Пока примерно так и сделал:
http://model.molpit.org/model/49
Демка работает.

Но задумка несколько шире. Чтобы пользователь для каждой модели смог свой фреймворк дорабатывать.

Есть базовый набор модулей. Есть пользовательский набор для ряда моделей, и есть набор для каждой модели.

Модули хранятся а базе данных. Сделал уже, но пока без сохранения. Только Log положил в базу данных.