Подтвердить что ты не робот

Вставка текста в IRB невероятно медленная. Проблема с чтением?

Когда я вставляю следующий текст в 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 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, которую не загружает ни одна из других загрузок рубинов. Есть ли способ настроить и скомпилировать REE, чтобы игнорировать файл libreadline из MacPorts?

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

Я запустил выше script на нескольких рубиновых установках. Только нижние 2 установки (установки 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
4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

может быть установлена ​​чистая рубиновая строка?