Today アクセスカウンター Yesterday アクセスカウンター

ホワット・ア・ワンダフル・ワールド

私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ

全記事一覧 << 2008/07 12345678910111213141516171819202122232425262728293031 2008/09 >>

プロフィール

あろは (alohakun)

  • Author:あろは (alohakun)
  • 若槻俊宏 (WAKATSUKI toshihiro)

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun

    abstract

    プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.

    具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.

    もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.

    キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map









    FC2 BLOG RANKING

FC2カウンター

ブロとも申請フォーム

この人とブロともになる

lablgtk はじめるにき

2006/12/10(日) 14:38:29

lablgtk の API は,もはや Gtk とは別物なような… Ruby とかの素朴なバインディングとは異なり,名前も,呼び出しかたも独自.

OCaml:lablGTK

まぁ,そのぶん,異常にソースが簡潔になるわけなんですが.C であんなにタラタラ書いてたのが馬鹿馬鹿しくなりますな.とりあえずインラインでコールバックを書ける (クロージャ渡せる) のが素晴らしすぎる.あと型推論万歳.OCaml のコンパイルの時のエラーメッセージはけっこうわかりやすい気がする.

以下,ソース.型推論初心者にありがちな,型が合わないからとりあえず () 返しとけ !! OCaml 小学生にありがちな,とりあえず let 〜 in しとけ !! lablgtk の API がわかんなかったらとりあえず変数をグローバルにしとけ !! 的ななげやり感が随所に見えてほほえましいですね.


(* vim: set encoding=utf8:
コンパイル方法 :
$ ocamlopt -w s -I +lablgtk2 lablgtk.cmxa gtkInit.cmx edit.ml -o edit
$ ./edit
*)
open GMain
let window = GWindow.window ()
let vbox = GPack.vbox ~packing:window#add ()
let toolbar = GButton.toolbar ~packing:vbox#pack ()
let notebook = GPack.notebook ~packing:vbox#pack ()
let create_new_buffer () =
let scrollwin = GBin.scrolled_window ~width:300 ~height:300 ~packing:notebook#append_page () in
GText.view ~packing:scrollwin#add ()

let init_editor_window () =
window#connect#destroy ~callback:Main.quit;
let tooltips = GData.tooltips () in
let b = GButton.tool_button ~stock:`ADD ~packing:toolbar#insert () in
b#set_tooltip tooltips "新しいバッファを作ります" "" ;
b#connect#clicked ~callback: (fun () -> create_new_buffer (); ());
window#show ()
let _ =
init_editor_window ();
create_new_buffer (); (* たぶん,この間の一瞬のもたつきが見えちゃってる *)
GMain.main ()


vim のいい加減な OCaml モードでダンプしたもの (要 UTF8 保存.というか,OCaml で UTF8 が素直に通るとは思わなんだ.素晴らしい ← 英語圏で作られた処理系を信用しなさすぎ).

# 追記 : ブログ上でコメントを書き足した時に,全角スペースが入ってた… orz (uim を設定してなかった… というか,全角スペースぐらいちゃんとパースして欲しいのう (ムチャ))

なんか,起動した時に,一瞬もたつくのが気になる.OCaml に特有の現象なのか,俺のコードが葛すぎるのかは今後の調査が待たれるところです (他人事) たぶん,(show_all 相当の API が見付からなかったんだけど),ウィジットが作られるたびに show されてるから,一瞬残像が残るのだろうと思う (普通は,全部オブジェクト作ってから show するんだけど… lablgtk の API がよーわからんのじゃ).

ocaml_edit0.png


今回はガワだけしか作ってません.ボタンを押すと,新しいバッファが開くだけ.まだ何も実用的な機能は実装されていません.まぁ,サンプルコードが Web 上に少な過ぎるので,こういうのをちょこちょこ公開してみるだけでも,微妙に誰かの役に立つかもしれないし,誰も興味を持たないかもしれない (OCaml,Gtk,なおかつ資料が少ない独自 API というマイナー三重苦 !厳しすぎる !!)

参考文献

GTK+ 2.0 Tutorial using Ocaml (Gtk のチュートリアルを,まんま OCaml + lablgtk に翻訳したもの.よくやるわ…)
lablgtk リファレンス (2.4.0 なのでちょっと古い)
あと,ソースの中のサンプル (lablgtk-2.6.0/examples) (これが一番素晴らしい)
OCamlTB:0CM:6 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!
コメント
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
#|2008/07/15(火) 17:18 [ 編集 ]

そもそも Mac だと Gtk は使えないと思います.
あと,私は Mac を一台も持ってないので,ソフトウェアのインストール方法などはわからないです.すいません
あろは #wNX6xxGw|2008/07/15(火) 18:20 [ 編集 ]
Gtk
Xがあるので、MacでGtkが使えないってことは無いですよ。
lablgtkが使えたかは、ちょっとわかりませんが。
soutaro #-|2008/07/15(火) 21:10 [ 編集 ]
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
#|2008/07/16(水) 08:24 [ 編集 ]
> soutaro さん
あ,ネイティブ GUI ツールキット対応の Gtk が無い,って意味でした.

確かに,何とかなりそうな気もしますが,私は Mac 持ってないのでナントモ

# やっぱり,Mac 一台ぐらい買うべきかなぁ.デスクトップならば比較的安そうだし

> 某さん

ところで,質問などは,なるべく非公開コメントは止めて欲しいです.非公開コメントは,返事を期待しないオフトピのつぶやきや,見られたらマズいタレコミ用途ということで (いちいち質問コメントにメールで答えるのは大変ですし,そういうサポートブログじゃありませんし)
あろは #wNX6xxGw|2008/07/16(水) 08:59 [ 編集 ]
Gtk
ま,そうですよね… > ネイティブが
ちなみにmacportにlablgtkはあるようですので,Xでよければインストールは簡単みたいですね.
# port install lablgtk2
soutaro #-|2008/07/16(水) 15:42 [ 編集 ]
コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://alohakun.blog7.fc2.com/tb.php/581-f3222667

最近のコメント

リンク

このブログをリンクに追加する

最近のトラックバック

人生の残り日数

日本人男性の平均寿命は 28700日.

RSSフィード

カテゴリー