From: Keita Yamaguchi Date: 2008-07-20T15:04:15+09:00 Subject: [ruby-dev:35598] Re: [Ruby 1.8 - Bug #212] Issues with Readline in Mac OS X 山口と申します。 2008/7/19 Takao Kouji : > 私の手元の環境である Mac OSXのlibedit、 > Mac OSX で MacPorts で入れた GNU Readline 5.2 でしか > 動作を確認できていません。 > そこで、 [ruby-dev:35553] で報告があった Ubuntu 8.04 の libedit や > Mac OSX 10.4 の libedit で試していただける方を募集します。 Ubuntu 8.04 において - GNU Readline 5.2 - libedit(2.9.cvs.20050518) に対するテストを実施致しましたので状況を報告致します。 1. GNU Readline 5.2 keita% ./ruby -I .ext/i686-linux/ -rreadline test/readline/test_readline_history.rb Loaded suite test/readline/test_readline_history Started ................. Finished in 0.047366958 seconds. 17 tests, 159 assertions, 0 failures, 0 errors 以上、Ubuntu 8.04 の GNU Readline 5.2 では一切問題ありません。 2. libedit(2.9.cvs.20050518) Loaded suite test/readline/test_readline_history Started EEEEEEEEEEEEEEEEE Finished in 0.001803326 seconds. 1) Error: test_delete_at(Readline::TestHistory): NotImplementedError: pop() function is unimplemented on this machine test/readline/test_readline_history.rb:234:in `pop' test/readline/test_readline_history.rb:234:in `clear_history' test/readline/test_readline_history.rb:12:in `setup' 以下17まで同様なので略しますが、以上のように全てのテストに失敗します。 このエラーの原因は、 setup から HISTORY.pop が呼ばれる際に最終的に remove_history が呼ばれるのですが、 remove_history は Ubuntu 8.04 の 2.9.cvs.20050518 版に存在しないからです (libedit に remove_history が追加されたのは 2005/07/14 になります)。 参考までに --enable-libedit した場合に生成される extconf.h の内容は次のようになります。 keita% cat ext/readline/extconf.h #ifndef EXTCONF_H #define EXTCONF_H #define HAVE_EDITLINE_READLINE_H 1 #define HAVE_RL_COMPLETION_MATCHES 1 #define HAVE_RL_DEPREP_TERM_FUNCTION 1 #define HAVE_RL_COMPLETION_APPEND_CHARACTER 1 #define HAVE_RL_BASIC_WORD_BREAK_CHARACTERS 1 #define HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS 1 #define HAVE_RL_COMPLETER_QUOTE_CHARACTERS 1 #define HAVE_RL_ATTEMPTED_COMPLETION_OVER 1 #define HAVE_RL_LIBRARY_VERSION 1 #endif このように HAVE_REMOVE_HISTORY が存在しないため、 rb_remove_history において rb_notimplement が呼ばれます。 このためにテストの setup 時において1-17の全てが失敗します。 remove_history に限らず、 2.9.cvs.20050518 では他にもいくつかヒストリ系の関数が欠けているようです。 このため Ubuntu 8.04 のように古い libedit を使用している環境では、 ひょっとするとヒストリ系の操作はそもそもうまくいかないのかも知れません。 以上です。 現実的には Ubuntu における libedit の状況を考慮する 必要性は一切ないと思いますが、一応報告致します。 --- 山口慶太