2015-08-14 3 views
0

Я запускаю Rascal из REPL, и кажется, что для импорта некоторых модулей требуется довольно долгое время. Например, import lang::java::\syntax::Java15; занимает несколько секунд.Rascal медленно при импорте модулей

Я также заметил случаи, когда модули, которые зависят от других модулей, по-видимому, не перезагружаются, если они изменены. Например:

программы 1:

module A::A 
.... 

Программа 2:

module B::B 
import A::A; 
... 

РЕПЛ:

import A::A; 
import B::B; 

Теперь я сделал некоторые изменения в A и B, и импортировать B снова. Я бы предположил, что изменения в A будут распространяться на новую версию B (поскольку она импортирует A), но это, похоже, не происходит.

  1. Почему этот медленный импорт и есть способ ускорить его?
  2. Как импортируются пакеты с зависимостями в REPL?

Спасибо!

ответ

1

Мы недавно немного изменили эту часть реализации. Так вы могли бы рассказать нам, какую версию вы используете?

Импорт идет медленно, потому что у нас есть узкое место в инфраструктуре синтаксического анализа, насколько я помню. Ускорить его; вы можете сделать это, не используя консоль в режиме отладки (т. е. использовать «Запуск как ...»), используя больше памяти для Eclipse, также помогает (я использую кучу 1.8Gb и 80-мегабайтный стек).

REPL работает в Eclipse, контролируя, какие модули изменились с момента запуска предыдущей команды на REPL. Когда вводится новая команда, например команда импорта, сначала очищаются все модули, которые были изменены, и модули, от которых они зависят, это создает начальный рабочий список для перезагрузки, который затем выполняется с фиксированной точкой для загрузки новых модулей (каждый модуль только один раз), то, наконец, команда выполняется.

+0

Я на самом деле не запускаю REPL через Eclipse, а из командной строки через файл 'rascal-0.7.0.jar'. Я помню, что в результате одного из наших предыдущих потоков я попытался перейти на более новую версию, но это нарушило ряд вещей. Что касается второй точки, я не вижу перезагрузки модифицированных модулей. – josh

+1

привет Джош. REPL на командной строке еще не имеет функции автоматической перезагрузки. Каждый модуль, который вы редактируете, придется импортировать вручную снова. Это большая недостающая функция. О новой версии, нарушающей ряд вещей, пожалуйста, бросьте электронное письмо или проблему github, и мы можем попытаться помочь вам. Звучит интересно. – jurgenv

+0

Правильно, это имеет смысл с тем, что я видел. Я не могу точно помнить, какие из моих сообщений привели к этому, но если я получу какое-то время, я попытаюсь снова сломать вещи: -P. Если память служит мне, это был пост о создании java AST. – josh

Смежные вопросы