[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...

はじめまして。

12 messages 2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法 — "U.Nakamura" <usa@...> 2009/12/17

こんにちは、なかむら(う)です。

[ruby-list:46668] Re: Ruby/TkのTkHTMLを扱う際にsegmentation fault

From: Hidetoshi NAGAI <nagai@...>
Date: 2009-12-20 03:14:34 UTC
List: ruby-list #46668
永井@知能.九工大です.

From: 上野宏法 <ronor.u@gmail.com>
Subject: [ruby-list:46667] Ruby/TkのTkHTMLを扱う際にsegmentation fault
Date: Sun, 20 Dec 2009 03:59:33 +0900
Message-ID: <a35720ac0912191059r6b1729a7gab4553fefbe93462@mail.gmail.com>
> Ruby/TkのTk拡張ライブラリにあるTkHTMLウィジェットを扱おうとした際、プログラムが強制終了してしまいます。

報告をありがとうございます.

> 動作環境はXubuntu9.10、Ruby1.9.1p243で、Tcl/Tk8.4.19をパッケージからインストールしています。
> TkHTML(http://tkhtml.tcl.tk/index.html)は、Version3 alpha-16をソースからインストールしています。
    (snip)
> Ready : tkHTML/htmlwidget.rb : require->{"Tkhtml"=>"3.0"}
    (snip)
> このような環境で、http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/145630のコードを参考に、
    (snip)
> といったプログラムを書いて実行させると、以下のメッセージとともに強制終了しました。
> 
> /usr/lib/ruby/1.9.1/tk.rb:1186: [BUG] Segmentation fault

まず最初にですが,tkextlib/SUPPORT_STATUS にあるように,
現時点では,Tkhtml は Ver.2.0 までしかサポートしていません.
これは,以前に Ver.3 をテストした際に,
Tcl/Tk 上でもまともに動作しなかったためです.
Ver.3 は alpha 版なのでそれも仕方ないかと思い放置しておりました.

今回報告いただいて,念のため alpha-16 をダウンロードして試したのですが,
少なくとも私の環境では make test で SEGV で落ちてしまいます.
それを承知でインストールを強行し,Tcl/Tk の wish 上で
上野さんのスクリプトが実行しているのと同じ内容を実行してみましたが,
hv.parse(doc) の実行に当たる処理で SEGV となりました.

# 早く Ver.3 がまともに使えるようになってほしいとは思います.

Ruby/Tk は Tcl/Tk のライブラリを利用する関係上,
少なくとも Tcl/Tk の上で正常に動作しなければ
Ruby/Tk の上でも同じように正常には動作しません.
ただし,もし上野さんの wish 上で
--------------------------------------------
package require Tkhtml
html .hv
pack .hv
set doc "<html><head><title>Test</title></head><body><p>Test</p></body></html>"
hv parse $doc
--------------------------------------------
が Ver.3 でエラーなく動作するようなら,
もう少し原因を追求する必要があります.

詳細には追っていませんが,Tcl/Tk の native thread サポート
(Tcl/Tk の configure 時の --enable-threads) との相性が
悪いのかもしれません.
だとすると,最近の Tcl/Tk のバイナリパッケージでは 
--enable-threads が普通のようですから,
Ver.3 に手を出すのは早いのかもしれません.
また,仮に Tcl/Tk を --disable-threads でコンパイルして
その上で Tkhtml Ver.3 が正常に動作したとしても,
Ruby 1.9 は native thread 必須ですので,
そちらとの相性問題が生じるかもしれません.

「…かもしれません」ばかりで申し訳ないのですが,
前述したように,いずれにしても Tcl/Tk 上で正常に動作してもらえなければ
Ruby/Tk 上ではどうしようもありません.
申し訳ありませんが,その点,御容赦いただけますと幸いです.
-- 
永井 秀利  (nagai@ai.kyutech.ac.jp)
九州工業大学 大学院情報工学研究院 知能情報工学研究系 知能情報メディア部門

In This Thread