私の最近のお勉強プログラミング ― 2006年06月01日 23時48分12秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
ぼくが昨年暮れくらいかな、お勉強してた&しているのは、Common Lisp,
Prolog, Haskell, Erlang, oz。
Common LispやPrologはAI(人工知能)的手法の温故知新。
最近は、oz。なぜかといえば、改めてお勧めする、
http://www.amazon.co.jp/exec/obidos/ASIN/0262220695/showshotcorne-22/ref=nosim
Seif Haridi, Peter Van-Roy著「Concepts, Techniques, and Models of
Computer Programming」(MIT Press)
が、ozを使っているから。
この本(以下CTMCP)は、ほんといい教科書。詳しく書きたいが、時間なし。
だが、これだけはいえる。買って損なし、学んで損なし。
以前、Perl, Python, Rubyといったスクリプト言語で、プログラミング言語
を設計・実装する世界がアマチャアにも広がったと書いたが、これらが扱うの
は、スタンドアローンの世界。その先にあるのが、並行/並列、分散をいかに
簡単に扱うかの世界。これらの言語にもスレッドやネットの機能はあるが言語
機能としては低水準であって、ライブラリレベルのサポート。言語レベルでの
サポートではない。
プロの研究者の世界では、プログラミング言語のアイデアや実装は、大体
1980年代末までで出尽くしたといえるだろう。だが、並行・並列、分散の言語
のジャンルで、アマチュアが作ったPerl, Python, Rubyのような言語が出てく
るのか、出てくるとしたらどんな言語になるのかなとひそかな期待はあった。
しかし、インターネットのおかげで、Erlangやozのような言語がオープンソ
ースで簡単に手に入る以上、もう作る話じゃないのかも。
CTMCPを読むと、いろんな概念や計算モデルの本質的な部分は何かがよくわ
かるが、単に、Erlang, ozとMozartプログラミングシステムのことを知りた
いなら、
http://www.erlang.org/
Erlang
http://www.mozart-oz.org/
The Mozart Programming System
をどうぞ。
なぜ、並列・並行や分散が簡単に扱える言語のことを思っていたかといえば、
今後5年もすれば、一人で10個のプロセッサを使うのが当たり前になる。マ
ルチコアだったり、SMPだったり、ネットワークに分散したりプロセッサだっ
たりさまざまだろうが、プロセッサは身の回りにごろごろするようになる。
そこで動かすソフトをC, Java, Perl, Rubyなどのシーケンシャルな言語で
書く気にはならない。
大体、「ウェブ進化論」を読んで、Web2.0, シリコンバレー万歳、Google万
歳などと言っている奴に限って、何にもわかってない。
常識で考えて、Googleが数十万個のプロセッサや超大容量のストレージを扱
うのに、いまだにCで書いたり、ナイーブなLinuxを使っているということがあ
り得るだろうか。おれの感覚ではあり得ない。おれの定義によれば、Googleは
広告スポンサーというパトロンから金をもらってサイエンスをやっている会社
だから。早い話が株式公開して民営化された大学の研究室。
となると、つまりは、おぬしが言いたいのは、これじゃろ。
そうそう。せーの。
コネクショニズムの再来じゃ。\(^O^)/
コンカレント・パラレル・ディストリビューテッド・ファンクショナル・ロ
ジック・オブジェクトオリエンテッド・マルチパラダイムLispじゃ。\(^O^)/
---
ぼくが昨年暮れくらいかな、お勉強してた&しているのは、Common Lisp,
Prolog, Haskell, Erlang, oz。
Common LispやPrologはAI(人工知能)的手法の温故知新。
最近は、oz。なぜかといえば、改めてお勧めする、
http://www.amazon.co.jp/exec/obidos/ASIN/0262220695/showshotcorne-22/ref=nosim
Seif Haridi, Peter Van-Roy著「Concepts, Techniques, and Models of
Computer Programming」(MIT Press)
が、ozを使っているから。
この本(以下CTMCP)は、ほんといい教科書。詳しく書きたいが、時間なし。
だが、これだけはいえる。買って損なし、学んで損なし。
以前、Perl, Python, Rubyといったスクリプト言語で、プログラミング言語
を設計・実装する世界がアマチャアにも広がったと書いたが、これらが扱うの
は、スタンドアローンの世界。その先にあるのが、並行/並列、分散をいかに
簡単に扱うかの世界。これらの言語にもスレッドやネットの機能はあるが言語
機能としては低水準であって、ライブラリレベルのサポート。言語レベルでの
サポートではない。
プロの研究者の世界では、プログラミング言語のアイデアや実装は、大体
1980年代末までで出尽くしたといえるだろう。だが、並行・並列、分散の言語
のジャンルで、アマチュアが作ったPerl, Python, Rubyのような言語が出てく
るのか、出てくるとしたらどんな言語になるのかなとひそかな期待はあった。
しかし、インターネットのおかげで、Erlangやozのような言語がオープンソ
ースで簡単に手に入る以上、もう作る話じゃないのかも。
CTMCPを読むと、いろんな概念や計算モデルの本質的な部分は何かがよくわ
かるが、単に、Erlang, ozとMozartプログラミングシステムのことを知りた
いなら、
http://www.erlang.org/
Erlang
http://www.mozart-oz.org/
The Mozart Programming System
をどうぞ。
なぜ、並列・並行や分散が簡単に扱える言語のことを思っていたかといえば、
今後5年もすれば、一人で10個のプロセッサを使うのが当たり前になる。マ
ルチコアだったり、SMPだったり、ネットワークに分散したりプロセッサだっ
たりさまざまだろうが、プロセッサは身の回りにごろごろするようになる。
そこで動かすソフトをC, Java, Perl, Rubyなどのシーケンシャルな言語で
書く気にはならない。
大体、「ウェブ進化論」を読んで、Web2.0, シリコンバレー万歳、Google万
歳などと言っている奴に限って、何にもわかってない。
常識で考えて、Googleが数十万個のプロセッサや超大容量のストレージを扱
うのに、いまだにCで書いたり、ナイーブなLinuxを使っているということがあ
り得るだろうか。おれの感覚ではあり得ない。おれの定義によれば、Googleは
広告スポンサーというパトロンから金をもらってサイエンスをやっている会社
だから。早い話が株式公開して民営化された大学の研究室。
となると、つまりは、おぬしが言いたいのは、これじゃろ。
そうそう。せーの。
コネクショニズムの再来じゃ。\(^O^)/
コンカレント・パラレル・ディストリビューテッド・ファンクショナル・ロ
ジック・オブジェクトオリエンテッド・マルチパラダイムLispじゃ。\(^O^)/
コメント
_ 石川直太 ― 2006年06月05日 13時06分43秒
私は某研究所に出向し、日本で何番目かに速いコンピューターのために、Fortranでプログラムを書いています。FortranやCのプログラムからMPIライブラリーを呼び出すという方法で、複雑なプログラムを実装するのはしんどいので、もっとうまい方法はないだろうかと考えています。LISPを使う方の発想は、私から見ると新鮮です。しかし、物理学者の大部分にとっては、「プログラミング言語=Fortran」、「データ構造=配列」です。
_ 40の手習い ― 2006年06月06日 13時04分39秒
今SICPを40歳を目前にして読み始めてますが(本当に読み始めたところです)、お勧めのCTMCPとどちらを先に読むのが良いのでしょうか。SICPの内容を理解しながら進むのが脳体力的に厳しく、でも感心や驚きを感じられるのでこのまま進みたいとも思い悩んでおります。CTMCPを先にしたほうがSICPを読むのが楽とかまた、その逆とかがあるのでしょうか。
_ 中村正三郎 ― 2006年06月07日 00時09分23秒
石川さん、40の手習いさん。
ちょっとお待ちください。週末になったら何か書けるかと思います。
あと、SICPのコメントもあったなあ。
ほかにも、創価学会とか経済学とかいろいろコメントあったな。
ちょっと時間くださいね。
ちょっとお待ちください。週末になったら何か書けるかと思います。
あと、SICPのコメントもあったなあ。
ほかにも、創価学会とか経済学とかいろいろコメントあったな。
ちょっと時間くださいね。
_ 中村正三郎 ― 2006年06月07日 00時13分13秒
石川さん。
しんどいのは、どういう部分ですか。
並列実行できるところを自分で探さないといけないとかですか?
しんどいのは、どういう部分ですか。
並列実行できるところを自分で探さないといけないとかですか?
_ 石川直太 ― 2006年06月12日 14時54分20秒
お返事が遅れてすいません。MPIを使った並列アプリケーションには、次のようなコードがたくさん現れます。
call mpi_send(buf, 3, MPI_DOUBLE, myrank+1, MPI_COMM_WORLD, ierr)
倍精度型配列「buf」の先頭から3個の要素を、論理的に右隣のCPUへ送信するという意味です。
Fortran90は、そこそこ高水準ですが、MPIは、どつぼに低水準です。
注意深く書かないと、CPUの数が奇数の場合にバグが出るなんて可能性もあります。
並列版「バグ取り人生」まっしぐらです。
call mpi_send(buf, 3, MPI_DOUBLE, myrank+1, MPI_COMM_WORLD, ierr)
倍精度型配列「buf」の先頭から3個の要素を、論理的に右隣のCPUへ送信するという意味です。
Fortran90は、そこそこ高水準ですが、MPIは、どつぼに低水準です。
注意深く書かないと、CPUの数が奇数の場合にバグが出るなんて可能性もあります。
並列版「バグ取り人生」まっしぐらです。
_ かすた ― 2006年11月08日 00時41分49秒
ちょっとだけ指摘を。
> スレッドやネットはライブラリレベルで言語レベルではない
ほとんどの言語はあえてライブラリとして提供されています。
なぜか?
利用者が容易に変更可能な形で提供するためです。
例えばRubyで分散処理するための、dRubyというライブラリがあります。利用者が自分なりに変更するには、dRubyライブラリをRubyを使っていじればそれで終わりです(もちろん差分プログラミングで)。もし言語レベルで提供されていたらどうでしょう?Ruby本体をいじらなければなりません。面倒なCプログラムです。
ほとんどの言語がCで実装されていることを考えれば、ライブラリで提供するのが適していると思います。
> スレッドやネットはライブラリレベルで言語レベルではない
ほとんどの言語はあえてライブラリとして提供されています。
なぜか?
利用者が容易に変更可能な形で提供するためです。
例えばRubyで分散処理するための、dRubyというライブラリがあります。利用者が自分なりに変更するには、dRubyライブラリをRubyを使っていじればそれで終わりです(もちろん差分プログラミングで)。もし言語レベルで提供されていたらどうでしょう?Ruby本体をいじらなければなりません。面倒なCプログラムです。
ほとんどの言語がCで実装されていることを考えれば、ライブラリで提供するのが適していると思います。
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。
トラックバック
_ ホットコーナーの舞台裏 - 2007年06月18日 07時58分32秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
おれが勝手にALGOLシンタックスのLispだとわめているRubyネタ。
---
おれが勝手にALGOLシンタックスのLispだとわめているRubyネタ。
_ ホットコーナーの舞台裏 - 2007年12月03日 23時54分13秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://iiyu.asablo.jp/blog/2007/11/30/2465520
柏原正三著「プログラミング言
---
http://iiyu.asablo.jp/blog/2007/11/30/2465520
柏原正三著「プログラミング言