kiyokaのブログアーカイブ

Archive of old blog posts

「言語」カテゴリの記事

俺言語処理系開発に挑戦したいなら「見るまえに跳べ」

Peter Norvig のエッセイを読んだのだが、自分の過去ならどう感じただろうかと思ったので… 俺言語処理系を作ってみた後では、当時高い壁だと思っていたものが、そうでも無いことを知った。 少しでも興味がある人は実際にトライしてみるべきだと思う。

Programming in Lua 読了

Programming in Lua プログラミング言語Lua公式解説書 著者: Roberto Ierusalimschy, 新丈 径 Amazonで見る – 第1部 言語(最初の一歩型と値ほか) – 第2部 テーブルとオブジェクト(データ構造データファイルと永続化ほか) – 第3部 標準ライブラリ(数学ライブラリテーブルライブラリほか) – 第4部 C API(C APIの概要アプリケーションの拡張ほか) – 第5部 付録:Luaリファレンスマニュアル(言語アプリケーションプログラムインターフェイスほか)

プログラミング学習リハビリ

最近こんな本を図書館でゲットした。 図書購入依頼していたのが届いた。購入依頼は同時期に届くのがやっかいだなあ…

Pythonのlambda

Pythonのlambda - 西尾泰和のはてなダイアリー The fate of reduce() in Python 3000 Why drop lambda? Most Python users are unfamiliar with Lisp or Scheme, so the name is confusing; also, there is...

LLTVを見てきた

LLTVを見てきた。 朝まで生テレビが一番おもしろかった。 パネリストの3人の話を聞いていると、現状のLLというのがコンピューティングのあるレイヤーを担っているだけのチッポケな存在だということを感じた。 但し、LLは人間にとって、より高い表現力を手に入れる為の進化をつづけており、より簡潔な表現でプログラムを構築するという意味では非常に重要なポジションを担っている。 最近では、並列化に対する要求が高まっており、LLが並列処理の記述を自然にサポートする時代が来るのだろう。 今はその過渡期なので、いろんな言語が並列化表現に挑戦しては新しい発見をしていくだろうと思う。 何かちょっと未来が垣間見れてよかった。

JRubyの開発者がオレ言語も作っている件

InfoQ: JVMで動く言語Ioke:分かりやすい構文で、LispとRubyの力を持つ言語 Ola Bini氏は、JRuby開発の中心人物であり、Practical JRuby on Rails Projectsの著者である。その彼が、IokeというJVMの上で動く新しい言語を開 発している。

そろそろオレ言語でもやっておくか(11)

このClojureのtutorialが非常に参考になる。本家のドキュメントではないけどたいへん分かりやすい。 Clojure Tutorial For the Non-Lisp Programmer | Moxley Stratton ClojureがJavaのClassライブラリをアクセスする構文を持っている。 対して、NendoはRubyのClassライブラリをアクセスする必要があるので、言語仕様を考える上でClojureの例は大変参考になる。

Rubyがいろんなプラットフォームに広がっている件

独SAP、自社VMでRuby処理系のサポート追加へ/@IT 独SAPは3月27日、同社のWebアプリケーションサーバで動くRubyの実験実装 「Blue Rubyプロジェクト」について明らかにしている。ABAP(Advanced Business Application Programming)は、独SAPが提供するWebアプリケーショ ンサーバ「SAP NetWeaver Application Server」は、J2EEと独自言語ABAPによ るアプリケーション開発が可能なVMを備えている。 IronRubyやJRuby以外にもどんどん使える環境が広がっている。 MacRubyもLLVM化したりして、高速化競争も始まっており、Rubyプラットフォームの普及は最終段階に来ているのかも。 JRuby 50倍速、MacRubyはすでに到達域 - 竹内関数 | エンタープライズ | マイコミジャーナル 今開発しているおもちゃ言語のNendoもいろんな場所で動くと思うと楽しみになってくる。 あとは、Google App EngineでRubyが使える様になると色々遊べそうだ。Googleはいつ対応するのかなぁ。

そろそろオレ言語でもやっておくか(10)

nendoにlet構文を追加しようとして、ふと立ち止まる。 先にquasiquoteを実装して、その構文の上にletを構築するか、それともletを素直にRubyで書いたevaluatorで実装するか。 まずは段階的にRubyで書いてみようかな。 書いては捨て、捨てては書いてというのを繰返していきながら、一番いいやりかたを探していこうと思う。

RedLisp改めNendo

昨日書いた通り、なんとredlispは既にあった!ということで、Nendoという名前に変更した。 [CodeRepos]の中で何度もディレクトリ名変えてすみません。 やっぱりプロジェクトの最初の方ではこういうドタバタは何度もある。 [CodeRepos]に入れるのはもうちょっと先にしたほうが良かったかな…

そろそろオレ言語でもやっておくか(9)

オレ言語にRedLispという名前をつけたのだけど… なんと、redlispは既にあった! 名前がカブっていたのだ。 先日Google検索した時は、『日本語のページを検索』のラジオボタンにチェックが入っていたという初歩的な失敗をした。 Googleで検索しておけばグローバルに検索されるので間違い無いと思い込んでいた。思い込みとは怖い。 気をとりなおして別の名前にすることにしたぞ。 候補は子供のころから粘土細工が好きだったこと、S式でプログラミングをしている時の自分の心理状態が粘土でコネコネしているのと似ているような気がしているので、『粘土』というキーワードをどこかに入れたい。 そのまま粘土(nendo)にするのもありかな。候補は、 nendo craylang rubycray rcray もちろんnendoというSNSが存在することも、nendoというデザイン会社が存在することもnendo.orgというドメインがあることも知っている。(そんでもって、TMにはなってなさそう) でも、プログラミング言語でカブなければよしとするしかない。 プログラミング言語の名前としてはArcとかIoというような短い名前は沢山ある。カブることを気にしていたら切りがないのだ。

そろそろオレ言語でもやっておくか(8)

Rubyで書いたLisp処理系の RedLisp 開発の続き。 lambdaとifの二つのスペシャルフォームを実装した結果、fact(階乗計算)関数が動くようになった。 $ ./redlisp redlisp> (def fact (lambda (n) (if (= n 1) 1 (* n (fact (- n 1)))))) rubyExp=<<<fact = lambda { |n| if ( _eq.call(n...

そろそろオレ言語でもやっておくか(7)

RubyでLisp系言語処理系を作りはじめた 現段階でRubyのコードで大体500行くらい。 RedLispという名前にした。Googleで検索したところ、同じ名前のものは無かったのでこれにした。RedはRubyが赤いから。ナント安易な… 赤色というのは、プレゼンの時にシャア専用とか何とかいえばネタにしやすいという狙いもある(笑)

そろそろオレ言語でもやっておくか(6)

Cyan作った人 Cyanを設計した高校生、5カ月で5つの言語を習得 読者の皆さんは、「Cyan」(サイアン)という言語をご存じないかもしれない。 Cyanは、Lispのマクロを持ち、Python風のインデントによってブロックを表す プログラミング言語。2008年の春、林拓人という1人の高校生によって設計さ れた。

そろそろオレ言語でもやっておくか(5)

過去の記事の続き 2008-09-23言語* そろそろオレ言語でもやっておくか(4) 2008-09-03言語* そろそろオレ言語でもやっておくか(3) 2008-08-31言語* そろそろオレ言語でもやっておくか(2) 2008-08-09言語* そろそろオレ言語でもやっておくか(1)

革新的ソフトウェア企業の作り方

Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方 Amazonで見る この本ではソフトウェア会社といっても、請負とかコンサルタント業とかSI業者は除外されるので注意。 なので、日本国内ではほぼ該当企業なしかも。 とはいうものの、趣味でオープンソースソフトウェアを作っている人にもいろいろ勉強になる所はある。(OSSをやっている本人も決してビジネスには成らないと思っているハズなので) 特に、マーケティングの章はOSSの人にも役に立つと思う。 勿論オープンソースの話は、オープンソースでソフトウェアビジネスをするのはかなり難しいという意味合いでしか出てこないが、自分で立ちあげたオープンソースプロジェクトの社会での立ち位置を再認識できるとおもう。(“会社での”ではないことに注意) ところで、オープンソースの周辺でビジネスをしている人は実際どうやっているんだろ。 私はオープンソースをメインにした企業(一般的にはオープンソース企業と呼ばれる)で働いた事ないので分からないが、それぞれの企業で何らかの工夫がもりこまれているんだろうなぁ。 一度、オープンソース企業を経営している人に秘密を聞いてみたい。

並列処理のプログラミングの未来は純粋関数型言語にある?

ゲームの世界でも、CPUのクロック数は頭打ちになりメニーコアの方向に行く。 処理速度を向上させる為には、沢山のCPUコアをいかに有効に活用するか(並列化)しかない。 最後には純粋関数型になるだろうととのこと。 ゲームプログラミング界の巨人、Tim Sweeneyが「未来のゲーム開発テクノロジー」を語る Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的に ゲームプログラミングはそういった処理系に移行していくべきだとした。 Sweeney氏はそのひな形として言語“Haskell”を挙げているが、ゲームなどの 新情報を開発のメインストリームたり得る言語はまだ登場しておらず、将来に 期待しているという。 私も概ね同意する。スレッドプログラミングの複雑さは最後には人間の限界を超えると思う。(もう超えている?) 特に、画像処理やレイトレーシングなどの処理は副作用なしで記述しやすいプログラムの代表格だと思うので近いうちに関数型言語が主流になるんじゃないかと思う。

『実践Common Lisp』の著者の話

実践Common Lisp 著者: Peter Seibel, 佐野匡俊, 水丸淳, 園城雅之, 金子祐介 Amazonで見る 驚いた。 一番驚いた点は、本の構成でもサンプルコードのクオリティでもない。もちろん本はいいデキだ。 一番驚いたのは、『著者の親父がLisperで、著者は子供のころからLispの利点を刷りこまれていた』こと メズラシすぎる。 是非うちもやろう。今日からやろう。みんなやろう。

そろそろオレ言語でもやっておくか(4)

プログラミングとはどういうものかという本質論。 【プログラミングとはどういうものかという本質】とは何だと思いますか? (参考)http://q.hatena.ne.jp/1221708568 - 人力検索はてな ムズカシイ。 オレ言語を作ることを妄想してみると初めて分かった。そういう問題につきあたるのか。 最近話題になったなてなアンケート なかでも注目すべきこのコメント(投稿者practicalschemeさんはプロフィールのSchemer兼Actorという属性からshiroさんだと推測したのだけど) プログラミングに詳しい人に質問です。大学でプログラミング経験の学部一年生向けにプログラミングを教えることを想定しています。週1コマ×半年程度の限られた時間で、プ.. - 人力検索はてな 一部抜粋 xx言語を他人に勧めたいと思ったなら、印象以外にxx言語の何に着目してそう 思ったのか。その着目した点は他の言語には無いのか。他の言語に無いとした ら、何故他の言語はその点を採用しなかったのか。逆に他の言語にあってxx言 語に無いものについて、何故それはいらないと思ったのか。それらの価値判断 をひっくるめて、自分にとってプログラミングという行為はどういう意味を持っ ているのか。いくらでも考えを広げてゆくことができます。「『プログラミン グ言語について考える』ことについて考える」という問題は、その向こうに素 晴らしく豊穣な世界が広がっています。 なぜ、多くの処理系実装者が『オレ言語をデザインするのは大変なのでSchemeを言語仕様どおり実装しました』という結論になるのかという質問への答えにもなっていると思う。 オレ言語に手を出すのは楽しいけど、あまりにハードルが高いということだなぁ。 どうするかなぁ。

そろそろオレ言語でもやっておくか(3)

以前からRubyの構文を見たり、Gaucheのリファレンスマニュアルを見たりして妄想中。 こんな風に書ければいいなぁ。 注意:全体の構文の辻褄を会わせようとはしてません。雰囲気で希望だけを書いていっています。

そろそろオレ言語でもやっておくか(2)

オレ言語(いわゆるプログラミング言語を自作すること)構想の続き。 でも、いま育児真っ只中なので、実際に手を動かして何かを作る時間なんか無いのっ。 いまは片っ端から必要っぽい資料を読んでいるところ。 赤ちゃんは抱っこを止めた途端に泣くのでコンピュータに触ることはできない。 でも、本を読むだけなら赤ちゃんをだっこ紐でぶら下げたままでもできるもんね。 Webの資料も印刷すれば読める。 (そういえば小学校に置いてあった二宮金次郎の銅像を思いだした) というわけで、今回は完成イメージを紹介する。今後も変わっていくと思うけど。

そろそろオレ言語でもやっておくか(1)

オレ言語(いわゆる言語を自作すること)に興味が出てきた。 自分が実際に作ってみるという観点で有名どころの言語仕様とか言語設計者のプレゼン資料とかを見ると、なかなか素人には恐ろしく高い壁に見える。 特に、Rubyソースコード完全解説を読んだり、ニコニコ動画でトーク「幸せなRuby生活に必要なこと」を見たりすると、Rubyが様々なトレードオフの中でバランスをうまく取りながらできたシロモノだということがわかってくる。 そんなことはとりあえず置いといて、素人なりに何ができるかを探ってみるつもり。 まずは、1ヶ月間くらいはいろんな本を読むことに集中。

パーサの勉強のつづき

パーサの勉強のため、本を読みつづけている。これも10年前位に買った本。 以前勉強していたのと、Schemeプログラミングをやって再起を理解する脳味噌ができあがっているためか、スラスラ読める。 昔は擬似コードを読む度にすごく時間がかかっていたのに… 不思議だ。 久しぶりに読んだけど、やっぱりいい本だと思う。 コンパイラ―原理・技法・ツール〈1〉 著者: A. V. エイホ, R. セシィ, J. D. ウルマン, 原田 賢一: 本 Amazonで見る パーサジェネレータはGauche trunkに入っているparse.pegを使う予定。 本当に自分が作りたいものがpegで出来るかどうかはまだわからないけど、いろいろ試してみよう。 参考資料は、これくらいしか見つからないけど、これで十分かも。 Rui:ParsingExpressionGrammar Parsing expression grammar - Wikipedia, the...

突然コンパイラの勉強を始める

10年前に熱心に読んだきり、本棚の肥やしになっていたコンパイラの本をひっぱりだしてきた。 昔、行実行プロファイラを作った時にC言語のパーサをひととおり書いたことがあるのだ。 その時にこの本を何度も読んだ。初めて読む本としても、実用的なものを作る時にもかなりオススメの本。 ところで、まだ売ってあるのかな? うわっ、amazonで買えないみたい。中古でなら10000円であるみたいだけど。 yaccによるCコンパイラプログラミング (C STEP UPシリーズ): 近藤 嘉雪 持ってて良かったー。

Python 3.0について

Python Conference 2008 - Day1 — TRIVIAL TECHNOLOGIES 2.0より Pythonが目指す変化の方向性は,「よりコンパクトなコア」。誰が使っても「た った一つのすばらしい方法」にたどり着けるように,曖昧さを排除し,例外を少 なくしてハマりどころを取り除くことによって,よりながく,正しい方向に進化 しつづけられるはずです。 とうとうPythonも3.0で後方互換性を犠牲にしても進化するという方針を打ち出した。 PHP、Rubyは(多分)元から互換性をそんなに重要視していないし、PerlはPerl 6で後方互換性を犠牲にした。 最後に残ったPythonも例外では無かった。 コンパクトなコアという方向性は賛成。 Schemeが好きな私はコアはコンパクトで有れば有るほどいいと思うけど、あまりにやりすぎると、普及しずらい。 そのへんのバランスが重要だと思う。 Python 3.0ではそのバランスが調整されて良くなりそうな期待がある。 ところで、私はPythonのインデント構文は好きなので、SchemeのスキンとしてPythonライクな構文を採用するという妄想を捨てきれずにいる。 PythonとSchemeは水と油のような気もするが、だからこそPythonライクにすることでS式に抵抗がある人用のインターフェースとして機能するんじゃないかと思う。 Amazon商品 Amazonで見る Amazon商品 Amazonで見る

Gauche 0.8.13リリースがされた

Gauche 0.8.13がリリースされた。 私としてはこれが一番うれしい。Gauche:Translationより 本体の改良点 apply での引数の扱いが改良された。以前は引数リスト中の各引数をすべて VM スタック上にプッシュしていたため、VM のスタックに載らない長い引数 リストを apply すると失敗していた。現在は、引数リストを必要なだけ展開 する。これにより、ほとんどすべての場合で引数リストの長さが無制限になっ た。例えば次のようなことができる。 (apply list (iota 50000)) 実は、[OldType]のバックエンドにはGauche付属のsxmlライブラリを利用していて、巨大なXMLノードを突込むと VM stackが足りないというエラーが出ていたのだ。 仕方が無いので、[OldType]のサイトではGauche 0.8.12の vm.hのスタックサイズを10倍にして運用していた。 これで、変なパッチを当てなくて良くなるよー。うれしい ^_^。 Kahuaの最新版と一緒には使えないので、Kahua側で対応したものがリリースされるまで待ちだね。 参考リンク [http://mlarchive.kahua.org/mlarchive/kahua-dev/msg01366.html|[kahua-dev 1367...

配列ベースプログラミング言語「ざぼん」

趣味的にっき - 配列ベースプログラミング言語「ざぼん」より LispにS式があってマクロがあるように。 Rubyの配列を使ってプログラミング言語を書いてみました。Ruby本体を使ってプログラム(= 配列)を操作することで、Lispのマクロのようなことができます。言語の名前は「ざぼん」です。「ざ」をいただきました。

ノーム・チョムスキーの「生成文法の企て」を読む。

コンパイラやコンパイラコンパイラの本を読むと出てくる名前なんだけど、今回初めてこの人の本を読むことになった。この本は対談形式の本なんだけど、研究者というのは幅広い知見が求められてたいへんなんだなと感じた。僕は、エンジニアなので残念ながらウマみだけをエンジニアリングに利用させてもらうぞ。そのウマみだけ抽出できるかどうか、いろんな本を読み込み中。

28件の記事があります。