Hatena::ブログ(Diary)

Functional Emacser RSSフィード

2010-03-20

[] Rubyのための開発補助ツール、RSenseをリリースしました 23:51  Rubyのための開発補助ツール、RSenseをリリースしましたを含むブックマーク

未踏プロジェクトの援助を受けて、ここ数ヶ月集中して開発していた、Rubyのための開発補助ツールRSenseをようやくリリースしました!配布物やドキュメントは次のURLから入手できます。

http://cx4a.org/software/rsense/index.ja.html

RSenseの最大の特徴は、他の開発環境(IDE)では実現できていない高精度なコード補完を実現しているところです。周知のことだと思いますがRubyは動的型付け言語です。そのためプログラムを実際に実行してみないと、ほとんどの式の型は分からないのです。型情報からユーザーの入力を補助するコード補完機能の分野では、これはかなり致命的な問題です。RSenseは型推論の技術を応用することで、この問題を解決しました。上記のURLにもありますが、以下に実際のスクリーンショットやデモが貼っておくので、ぜひご覧ください。

f:id:m2ym:20100320234611p:image

D

現在利用できるエディタEmacsVimだけです。バックエンドをうまく分離しているので、理論的にはEclipseTextMateなどの他のエディタにも対応できるはずです。フロントエンド対応したいという方がいらっしゃましたら、僕に連絡ください。可能な限り手助けいたします。TextMateここを読む限り、案外簡単に実装できそうですが、OS Xをもっていないので何もできません。

あと未踏の成果報告の関連で利用者の声というのを募集しています。一行でいいので、何かコメントがあるかたがいしゃっらいましたら、僕に連絡ください。

メールアドレスは tomo@cx4a.org です。

将来的には静的コードチェック機能や、ソースコードジャンプ機能、リファクタリング機能を実装したいと考えています。ただ現状では以下のような制限事項があるので、まずはこちらから解決することになるでしょう。

  • evalのあるソースコードを正しく解析できない
  • proc, lambda, callcc, structが未対応
  • raise, catchが解析できない
  • 多くの標準ライブラリが未対応
  • パフォーマンスの問題
  • 構文エラー時の補完ができない

PlusPlus 2010/03/21 16:21 Plus と申します。
資料中で1点気になる箇所がありますので、コメントさせて頂きます。

http://cx4a.org/pub/emacs-lisp-for-scripting.ja.html#.E4.BF.9D.E5.AD.98
バッファ → 保存 の最後の例(gnulize2.el)中で
replace-string 関数を使用されていますが、この間数は

This function is usually the wrong thing to use in a Lisp program.

です。スクリプトとして使用するならば問題なさそうに思えますが、
本資料で学習された方が自分の .emacs 等に同様の処理を追加するという場合に
まずそうなので、修正した方がよろしいかと思います。

m2ymm2ym 2010/03/21 17:43 コメントありがとうございます。

「この方法は正攻法ですが、直感的には、Emacsには文字列置換機能があるのだから、それに関連した関数があるはずだと考えます。そしてreplace-stringなる便利な関数を見つけるのです。」という文があるので大丈夫だと思ってますがどうでしょう。

なひなひ 2010/03/22 07:13 面白いプロダクトをありがとうございます。1.8.7のType Annotationについては、標準化できたらいいですね。きっとみな同じことやっていると思うので。
一点、JRubyのpatch部分について、ライセンスの記述があるとよいと思います。

m2ymm2ym 2010/03/22 19:53 コメントありがとうございます。標準化となると色々大変そうですが、ドキュメントとはうまく調和したいと考えています。ライセンスに関しては記述しておきます。

PlusPlus 2010/03/23 02:31 Plus です。

> 「この方法は正攻法ですが、直感的には、Emacsには文字列置換機能があるのだから、
> それに関連した関数があるはずだと考えます。
> そしてreplace-stringなる便利な関数を見つけるのです。」
> という文があるので大丈夫だと思ってますがどうでしょう。

最初に必要な関数を探し出す際には、直感的でいい表現だと思います。
ただし、replace-string に限らず、 previous-line, next-line,
beginning-of-buffer, end-of-buffer あたりはプログラム中で使用すると
副作用がありますので、
「中には副作用のある関数があるので注意が必要です」等の
警告文があればよいかと思います。

ただ、ここの説明が replace-match → replace-string の流れなので
ちょっとややこしいですね。下記の流れだと説明しやすいのですが。
・文字列の置換手段として replace-string があります。
・ただし副作用があります。
・なのでプログラム中では replace-match を使用しましょう。