RubyのJIS規格化・ISO規格化を祝って
4
0
0
全文
(2) プログラミング言語を学ぶときに. require 'socket'. 障害になるかもしれない.. load("./make1d.rb"). また,Ruby では,配列の要素. def show_result(result) puts("\033[H\033[J") puts('===================================================') for i in 1..9 if result[i]>0 puts(i.to_s() + ' ' + ('*' * result[i]) ) end end puts('===================================================') end. の型は問わないので,「配列とは. def update(result, n, o) result[n] = result[n] + 1 if o != 0 result[o] = result[o] - 1 end show_result(result) end. はこういう配列を,ついつい,使. def serve(s, log, result) addr = s.peeraddr[3] sel = s.gets() i = sel.to_i() if i < 1 || i > 9 s.puts('error: illegal selection') else if log.fetch(addr, 0) != 0 s.puts('updated') update(result, i, log.fetch(addr) ) else s.puts('ok') update(result, i, 0) end log.store(addr, i) end s.close() end. ころが便利である.また,gem と. 同じ種類のデータが並んだもの」 という説明が嘘になるところは辛 い.上述の授業では, [1, "hello", true] のような配列は用いないように心 がけているが,Ruby プログラマ ってしまうものらしい. 教育以外に関していうと,実は Ruby はとても重宝している.特 に,ライブラリが完備していると いうインストーラもよくできてい る.たとえば,個人的な話で恐 縮だが,最近になって,メーラ ー を mew か ら thunderbird に 移 行した.その際,mh 形式のメー ルを mbox 形式のメールに変換す る必要が生じたが,mhdir2mbox. rb という Ruby プログラムを使わ せていただいたという次第であ る.また,twitter の API,imap の API,mediawiki の API など, 各種の API をどこかの誰かが実. def collect() log = Hash.new() result = make1d(10) gs = TCPServer.new(12345) while true s = gs.accept() serve(s, log, result) end end. 装してくれているので,ネットワ ーク・プログラミングをする際に, Ruby はかなり有力な言語という べきだろう.. Object orientation. 図 -1 Ruby プログラムの例.このプログラムは簡単なオンライン投票システムの サーバである.. 上述した駒場の授業のカリキュ ラムにも,最後の方にオブジェク. 徹底的に動的なところも,その徹底しているとこ. ト指向が入っているのだが,実際の授業では,なか. ろが潔いと思う.ただし,配列の添え字の上限を超. なかそこまでは辿りつかない.したがって,オブジ. えると,配列が勝手に伸びてしまうところは,他の. ェクト指向はこの授業の必修の題材とはしていない.. 832 情報処理 Vol.53 No.8 Aug. 2012. 5308-hagi.indd 832. 12/06/26 14:11.
(3) Ruby の JIS 規格化・ISO 規格化を祝って. require 'socket' def vote(sel, addr) s = TCPSocket.new(addr, 12345) s.puts(sel) r = s.gets() s.close() r end 図 -2 クライアント. ラムであったが,さすがにスレッドまでこの授業で 教えることは不可能なので,このような形に縮退し たのである. ライブラリのおおよその使い方を説明してから, 実際にこのプログラムを使って簡単な実習を行い, 最後に,プログラムを改造するという課題を出した. 具体的には,サーバとクライアントに投票以外の機 能を追加してもらった.もちろん,そのためにはク ライアントからサーバへのメッセージの形式を拡張. とはいっても,Ruby を教材に使っていて,オブジ. せねばならない.. ェクト指向をまったく教えないとしたら,かなり後. ちょっとやりすぎのきらいはあったが,興味を持. ろめたいものを感じてしまうだろう.. ってくれた学生も多数いたようである.もう少し時. 教科書では, 「レコードとオブジェクト」という. 間があれば,ライブラリの機能を 1 つずつ確かめる. 章で,まずレコードについて説明し,レコードの問. ようなことをすればよかったかもしれない.. 題点を述べた後に,オブジェクト指向の話に入って いく .題材としては,少し月並みかもしれないが,. Ruby and future. グラフィック・オブジェクトを用いている.実に教. さて,Ruby もいよいよ JIS 規格化・ISO 規格化. 科書的な展開(教科書なので当たり前か)だが,実. され,他の有力言語と肩を並べるプログラミング言. 際の授業では,そのような悠長なことをやっている. 語になった.喜ばしい限りである.. 時間がまったくない.. では,Ruby はプログラミング言語として「確立」. 概して,オブジェクト指向を教えるとは,どうし. した(establish された)のであろうか.少なくと. ても,クラス定義を教えることになってしまいがち. も,実用的な言語,そして,教育用の言語としては. である.しかし, (いまの私のような市井の)Ruby. 確立したのかもしれない.しかし,私が思うに,プ. プログラマにとっては,オブジェクト指向とは,ラ. ログラミング言語が「確立」したことの 1 つの証は,. イブラリを使うことにほかならない.Ruby のライ. そのプログラミング言語をもとに新しいプログラミ. ブラリはすべてオブジェクトとして提供されている. ング言語が,もとのコミュニティとは独立のコミュ. からだ.オブジェクト指向の本質を理解しようがし. ニティから出てくることではないか,と思っている.. まいが,オブジェクトを生成してそのメソッドを呼. たとえば,平木氏を中心に High Performance Ruby. び出す,という考えが身についていなければ,実用. が開発されているが,その開発者に笹田氏が入って. 的な Ruby のプログラムは 1 行たりとも書けないだ. いるので,厳格にはこの定義に当てはまらない.. ろう.. つまり,プログラミング言語は,あまたある言語. そこで,昨年の情報科学の授業では,ライブラリ. の総体として,永遠に発展し続けているのであるか. を使うことに焦点をあててオブジェクト指向を教え. ら,1 つのプログラミング言語が確立するとは,そ. ることにした.図 -1 と図 -2 はその題材である.こ. の言語がプログラミング言語全体の歴史の中で,デ. れは,もともとは,Ruby の開発者の 1 人である笹. ッドエンドになっていない,つまり,歴史の中で特. 田氏が作成したプログラムで,授業中に学生に対し. 定の役割を演じ,その役割が永遠に残る,というこ. て選択式の質問をして,その答えをサーバ・クライ. とではないだろうか.そのように私は思うのである.. アント方式により集計するものである(図 -3).も. たとえば,C から C++ が生まれ,Java へと継承. ちろん,もとはスレッドを使った(サーバ)プログ. されている.たとえ C が滅んでも(そういうこと. 2). 情報処理 Vol.53 No.8 Aug. 2012. 5308-hagi.indd 833. 833. 12/06/26 14:11.
(4) require 'socket' load("./make1d.rb"). 3 ok require 'socket' def vote(sel, addr) s = TCPSocket.new(addr, 12345) s.puts(sel) r = s.gets() s.close() r end. def show_result(result) puts("¥033[H¥033[J") puts('=============== for i in 1..9 if result[i]>0 puts(i.to_s() + ‘ ’ + (‘*‘ end end puts('=============== …. サーバ. require 'socket' def vote(sel, addr) s = TCPSocket.new(addr, 12345) s.puts(sel) r = s.gets() s.close() r end 別のクライアント. クライアント 図 -3 サーバ・クライアントの模式図. はないだろうが),Java の中に C が生き続けると言. 式にサポートされる.ひょっとすると,Scheme の. える.Java からも Scala などが生まれた.もちろん,. 正統的継承者は Emacs Lisp になるのだろうか.. Java 自身も進化を続けている.. 戯 言 が 過 ぎ た よ う で あ る. 要 す る に,C や. もう 1 つ,Scheme を例としてあげることがで. Scheme の よ う な 言 語 に Ruby が な れ る か ど う. きるかもしれない.SICP(Structure and Inter. か,いまが正念場のような気がしている.つまり,. pretation of Computer Programs)で使われている. Ruby があったからこそ,この言語が生まれた,と. ように教育用言語としての Scheme は現役だが,実. いうような言語が出てこなければならない.今後,. 用的な言語としては,とうの昔に Common Lisp に. Ruby をもとに,新しい言語が登場することを祈っ. その地位を譲ったというのが定説だろう.しかし,. ている.ひょっとすると,それは,いまの常識から. Scheme から Common Lisp が生まれたという意味. すると,「言語」と呼べるようなものではないかも. で,Scheme は確立した,ということができる.特. しれないが.. に,静的スコープの概念は Common Lisp に正統的 に継承された.では,Common Lisp はどうだろうか. 残念ながら,オブジェクト指向も飲み込んだこのモ ンスター言語(ただし現在の基準から眺めると全然 モンスターではないかもしれない)は,正直のとこ. 参考文献 増原英彦 : プログラミング,何をどう教えているか プロ 1) グラミングを教える・プログラミングで教える,情報処理, Vol.51, No.12, pp.1627-1629 (Dec. 2010). 2) 増原英彦,東京大学情報教育連絡会 : 情報科学入門─ Ruby を 使って学ぶ,東京大学出版会 (2010). (2012 年 5 月 28 日受付). ろ,デッドエンドになってしまっているのかもしれ ない.そんなことに思いをめぐらせていると,何と, Emacs Lisp に静的スコープが導入された,という ニュースが入ってきた.mew を捨てようとしてい たところに寝耳に水のようである.Emacs24 はま だ正式リリースが出ていないが,静的スコープが正. 萩谷 昌己(正会員) [email protected] 昭和 57 年東京大学大学院理学系研究科情報科学専攻修士課程修了. 京都大学数理解析研究所を経て,現在,東京大学大学院情報理工学 系研究科教授(コンピュータ科学専攻).計算システムをモデル化し, 特に演繹的な方法を用いて,その性質を計算機上で検証することに興 味を持っている.最近では,電子計算機からなる計算システム以外に も,生物系や分子系も研究の対象としている.特に,分子ロボティク スの研究を行っている.. 834 情報処理 Vol.53 No.8 Aug. 2012. 5308-hagi.indd 834. 12/06/26 14:11.
(5)
図
関連したドキュメント
いしかわ医療的 ケア 児支援 センターで たいせつにしていること.
帰ってから “Crossing the Mississippi” を読み返してみると,「ミ
○金本圭一朗氏
巣造りから雛が生まれるころの大事な時 期は、深い雪に被われて人が入っていけ
雇用契約としての扱い等の検討が行われている︒しかしながらこれらの尽力によっても︑婚姻制度上の難点や人格的
賠償請求が認められている︒ 強姦罪の改正をめぐる状況について顕著な変化はない︒
これからはしっかりかもうと 思います。かむことは、そこ まで大事じゃないと思って いたけど、毒消し効果があ
単に,南北を指す磁石くらいはあったのではないかと思