Вообще вы так говорите, будто Оберон в принципе конкурировать с js не способен :-)
Я надеюсь найти вариант их симбиотического сосуществования.
Усложнять взаимодействие с внешним миром (JS) нельзя, особенно на первоначальном этапе. Потому что:
- взаимодействовать придется много (все уже написано на JS)
- нет ресурсов для расписывания кошерного маршаллинга/биндинга
Кроме того, последующие обнаружение "идеологически неправильных мест" тривиально - текстовый поиск "IMPORT JS". Архитектуру перекалбашивать не надо.
Более того, текущее решение (JS.do("some js code here")) не меняет синтаксис языка, то есть модуль остается синтаксически правильным с точки зрения Оберона, и может быть проверен на синтаксис любым другим компилятором Оберона-07, либо вообще сторонним инструментом (например не слетает подсветка синтаксиса в редакторах). Более того, этот модуль может быть даже скомпилирован, компилятором скажем akorn1, если добавить модуль-заглушку JS такого вида:
MODULE JS;
PROCEDURE do(js : ARRAY OF CHAR);
BEGIN
ASSERT(FALSE); (* or other runtime check/runtime reporting *)
END do;
END JS.
Таким образом становится возможным плавный перенос модулей туда-сюда. Таковой перенос намного менее болезненнен чем, скажем, перенос системозависимых модулей между ББ и GPCP (ибо BB и GPCP для взаимодействия с внешним миром меняют язык на уровне грамматики).
Чем больше я думаю о JS.do, тем больше убеждаюсь во мнении, что именно так и есть правильно.