Вставка текста в IRB невероятно медленная.Проблема с Readline? - PullRequest
12 голосов
/ 04 сентября 2011

Когда я вставляю следующий текст в IRB или PRY под управлением ruby-enterprise-2011.03, это занимает 13 секунд.

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Вставка не замедляется при запуске irb с другими установками ruby ​​на том же компьютере.

  jruby-1.5.6
  jruby-1.6.3
  ruby-1.8.6-p420
  ruby-1.8.7-p352
  ruby-1.9.1-p431
  ruby-1.9.2-p290
  ruby-1.9.3-preview1
  or Mac OS X's default system install of 1.8.7-p249

Этот вопрос относится к Консоль Rails работает невероятно медленно при редактировании текста , но я не использую rvm, и нет медлительности при записи, редактировании или удалении текста; Только вставка идет медленно. Предложение @ fl00r работает, но это не навсегда.

Кроме того, если в вставленном тексте имеются жесткие символы новой строки, только последняя строка будет медленной. Например, вставка следующего текста занимает всего около 1,5 секунд

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
# sed do eiusmod tempor incididunt ut labore et dolore magna 
# aliqua. 

Я заметил, что REE загружает копию libreadline, которую не загружает ни одна из других установок ruby. Есть ли способ настроить и скомпилировать REE, чтобы игнорировать файл libreadline из MacPorts?

require 'readline'
puts `lsof -p #{$$} | grep -i readline | awk '{print $9}'`
puts

Я запускал приведенный выше скрипт на нескольких установках ruby. Только две нижние установки (установки REE) включают дополнительную библиотеку libreadline.

=== ruby-1.8.6-p36 ======================
/opt/ruby-1.8.6-p36/lib/ruby/1.8/i686-darwin11.2.0/readline.bundle

=== ruby-1.8.6-p420 ======================
/opt/ruby-1.8.6-p420/lib/ruby/1.8/i686-darwin11.0.1/readline.bundle

=== ruby-1.8.7-p352 ======================
/opt/ruby-1.8.7-p352/lib/ruby/1.8/i686-darwin11.0.1/readline.bundle

=== ruby-1.9.1-p431 ======================
/opt/ruby-1.9.1-p431/lib/ruby/1.9.1/i386-darwin11.0.1/readline.bundle

=== ruby-1.9.2-p290 ======================
/opt/ruby-1.9.2-p290/lib/ruby/1.9.1/x86_64-darwin11.0.1/readline.bundle

=== ruby-1.9.3-preview1 ==================
/opt/ruby-1.9.3-preview1/lib/ruby/1.9.1/x86_64-darwin11.0.1/readline.bundle

=== ruby-enterprise-1.8.7-2011.03 ========
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/i686-darwin11.0.1/readline.bundle
/opt/local/lib/libreadline.6.2.dylib

=== ruby-enterprise-1.8.7-2012.01 ========
/opt/ruby-enterprise-1.8.7-2012.01/lib/ruby/1.8/i686-darwin11.2.0/readline.bundle
/opt/local/lib/libreadline.6.2.dylib

Ответы [ 3 ]

4 голосов
/ 28 сентября 2011

Это проблема с терминалами Readline и UTF-8. Я не потратил время на то, чтобы отследить, откуда исходит настоящая проблема, однако, если вы установите для $ LANG какое-то другое значение, проблема исчезнет.

Это не постоянное решение.

Еще одно быстрое решение - ввести дополнительный символ после вставки текста.

В качестве альтернативы вы можете вернуться к использованию OSX 'editline lib, если вы перекомпилировали ruby, чтобы не использовать Readline. К сожалению, это связано с его собственными проблемами, такими как совместимость строк редактирования для потоков блоков рубли чтения.

Я должен также отметить, что эта проблема связана не только с ruby, я видел это с другими реализациями readline в OSX начиная со Snow Leopard.

0 голосов
/ 20 марта 2012

Похоже, что REE installer.rb добавляет -I/opt/local/include и -L/opt/local/lib -Wl, флаги компоновщика.После очистки этих флагов REE успешно компилируется без включения второй библиотеки readline, но результирующий ruby ​​не будет выполняться из-за других ошибок загрузки.

Решение состоит в том, чтобы временно удалить MacPorts при установке REE, чтобы он неt ссылка на дополнительную библиотеку readline.

  1. Закройте все процессы, которые обращаются к файлам MacPorts.Вы можете увидеть, какие из них работают с sudo lsof | grep /opt/local.
  2. sudo mv /opt/local /opt/localbak
  3. Откройте новый терминал, затем скомпилируйте и установите REE
  4. sudo mv /opt/localbak /opt/local

После этого установка REE будет работать правильно вместе с MacPorts.

Другие решения:

  • Удалите MacPorts навсегда и установите REE как обычно
  • Используйте MRI или другую версию Ruby вместо REE

edit : я заметил, что при установке REE с ruby-build этой проблемы не возникает

0 голосов
/ 11 февраля 2012

возможно установить чистую рубиновую readline?

...