中の人の徒然草278

こんにちは♪構文解析法と並列処理に没頭しているインドリです♪
並列処理について考えていたら、ふと違うアプローチの仕方がある事に気付きました。
ということで、本日Amazonでぽっちとしました♪



並列化して複数で実行する事は大事だけど、一度に大量の命令を発行するのも大事だよね♪
高いから購入を迷ったけど、この手の本は絶版になりやすいから買いました。
それに、この間散歩がてらに本屋に行って、この本を見てみたんだけど、かなり私好みなんですよねwww
貧乏なくせに本の投資は惜しみません。私は肉体的飢餓感よりも知的飢餓感の方が耐えられないので、生活費を切り詰めてでも買ってしまいます(笑)
SIMDでパラレルなコンパイラを作りたいです♪
あそうそう、本が好きな人はここを見るといいよ。きっと気に入る本が数冊あると思うな。

テーマ : 裏事情
ジャンル :

ネタつつき59−構文解析法についての考察2

昨日構文解析法について調べていてふと思ったのですが、このやり方ってテスト駆動式開発に向いていないね。やはり、命令型言語の発想が根源にあるからだと思うのですが、LALR構文解析法のコードってテストやり辛いよね。得にC言語はやり辛そう・・・
私が思うに、コンパイラもソフトウェアなのですから、テストの容易性とかオブジェクトの分離性を考慮し、アジャイルに開発出来る構造にしなければ駄目だよね。
当時のハードウェアスペックを考えると今の形になるのは当たり前だけど、今は64ビットのマルチコアCPUの時代だから、メモリもCPU資源もかなり使えます。その状況を踏まえると、よりメタデータを増やして、メモリと複数スレッドを使用する代わりに、従来よりもパース処理が速く、なおかつ開発を支援するオブジェクト指向式(多相型などもいいかも)にするのがよいと私は考えます。
さらに理想を言えば、自動生成ツールが使えなくてもコーディング出来るアルゴリズムが望ましいです。現在のLALR構文解析は一つ修正するたびに大変な作業が要ります。それをテスト駆動方式で開発し、日頃のプログラミング作業を支援するモノを私は考えます。

テーマ : プログラミング
ジャンル : コンピュータ

中の人の徒然草277

おはよう♪いやぁーめっきり寒くなりましたね。この冬は、コンパイラをいじる事を目標とします。
以前の自分の能力を取り戻し、それ以上の能力を身につけます!
私が過去到達した能力は、なんちゃってオブジェクト指向言語を作るぐらいです(笑)
インタプリンタは何とかなったのですが(中田教授のコンパイラの構成と最適化のおかげ)、ネイティブ形式はWindowsのEXEファイルの構造とかがわからなくて苦労しました。そして、仕事が忙しくなり、他の事に興味が湧いたので放置状態でした(笑)
何故ふらふらすのかと言いますと、情報処理技術って広大で、それぞれの技術が関連しているから私は広く深く学ぶ事にしているのです。私は情報処理技術を愛していますので、死ぬまで学習する事を決めていますので、のんびりとやっています♪
私が今まで学習した事があるのは、大まかに言うと、言語十数個、RDBMSの実装(おもちゃ程度)、OS実装(はりぼてOSに毛が生えた程度)、コンパイラ、人工知能、セキュリティ少々、データベース技術全般、ネットワーク技術全般と情報処理技術全般をやっています。後経験していないのは、グラフィックス・暗号技術といった数学関連の技術と、ハードウェア関連だけです。
職業的理由もあって、11年かけて一通り広く少し深く学びましたので、これからは持っている知識を深ーくしていきます♪ でも一番のネックは英語が出来ない事です。これ以上深く学習するには、やはり英語が読めないとだめですね。英語ももっと学習します。おっと、それと数学も学習しなくてはなりませんね。数学も出来れば楽しいのに決まっています。実は私数学が結構好きになっています♪コンパイラの学習がある程度進んだら数学的な技術を学びたいです。

学生時代は10年という数字が途方もない未来に思えて、10年たてばもっと学習が進んでいると甘い考えを抱いていたのですが、10年たった今思うに、まだまだですね。情報処理技術は学べば学ぶほど広大な世界が広がり、わからない事だらけで自分の無恥さがわかります。
私だって人間ですからちょっと凹む時や一時的にうんざりする時がありますが、基本的に分からないって楽しいですね♪ 分からないものを見ると血がたぎります。分かるものを考えるほどつまらない事はないですし、私が一番嫌いなのが退屈です。分からないものがなくなれば、きっと人生なんてつまらないでしょうね。

もしかしたら、広大な情報処理技術を相手にして凹んでいる人が居るかもしれませんが、そんな時は初心の感動を思い出して下さい。分からないのって楽しい事なのです♪初心者の時は何をしても楽しかったはずです。それに、焦る必要もありません。情報処理技術の探求に競争なんてないのです。敵は自分自身です。自分の弱さに打つ勝つ事が一番大事です。
さあ今日も良いハックをしましょう♪

テーマ : 裏事情
ジャンル :

ネタつつき58−分散並列処理についての考察5

前回に引き続き文官並列処理についての考察をします。


前回並列処理を行うための要素として参照透過性を採り上げましたが、無論それだけで並列化を実現できるほど単純ではありません。参照透過性の他の要素について考えます。
意外だと思われる人が多いでしょうが、遅延も分散並列処理と関連性が深い要素です。何故ならば、直列で処理されないという事は処理結果がいつ出るかわからない事を意味するからです。例えば、複雑な処理を遠隔地のスーパーコンピュータに任せると、実行を指示してから直ぐに他の操作が出来ても結果が出ているとは限りません。ネットワークは複雑ですし、CPUから遠ければ遠いほど処理結果にタイムラグが生じるのは自明なのです。それ以外にも、マルチプロセッサで並列計算し、計算結果を順次画面に表示する場合、遅延機能がないと全ての処理結果がされるまで画面が見れなくなります。
そういった事から遅延と並列処理はきっても切れない関係です。C#4.0で遅延がサポートされるのもそういった理由も含まれているでしょう。
それに加えて、遅延は無限を扱うための要素である事も忘れてはなりません。遅延的要素をコンパイラに加えるとプログラミングの表現力が飛躍的に高まります。ただし、遅延も扱いを誤れば問題を生むのはいうまでもありません。


まだまだ続くピヨン♪

テーマ : プログラミング
ジャンル : コンピュータ

ネタつつき57−構文解析法についての考察1

復讐、いや復習のため再び構文解析法についてメモリます。


一番柔軟性があるLR構文解析法は、複雑なので当時実用的な高率で実現できるとは考えられていませんでした。それ故、LR構文解析法に制限を加えたSLR構文解析法LALR構文解析法が考えだされました。LR構文解析法の基本動作は共通で移動還元構文解析の一種で、スタックに文法記号のほかに状態記号も格納するのが特徴です。なお、演算子順構文解析法も移動還元構文解析の一種です。
LR構文解析法は解析表としてactionとgotoを使用します。actionは、どのように生成規則で還元するかシフトしながら状態が移り変わるのかを表すものです。ただし、受理されない時もあります。 goto表は還元された時に参照され、還元を行った語の状態を表します。すなわち、受理される可能性がある時は状態を変え、受理されなかった時は誤りとするオートマトンであると言えると思います。
なお、SLR構文解析法とLALR構文解析法は、LR構文解析法が使うものよりも構文解析表を単純化した方法です。どうやらLR構文解析法は当時のハードウェアのスペックを考慮して作られたもののようです。
こうやって、LR構文解析法を纏めてみると、英語の文法を基にしたものであると感じました。何故ならば、順番が定まっている処理方法だからです。しかし、日本語文法では単語の並びが自由です。という事は、LR構文解析法は十分なものとはいえないと私は感じました。
例えば、英語圏の考え方では、主語→動詞→名詞→副詞のように状態を遷移しつつ構文を解析できます。一方日本語の場合、語順が決まっていないので、全体像の論理的整合性で判断しなくてはなりません。すなわち、良い/悪いはさておき日本語の方が抽象度が高いと言えます。
それに加え、空白の区切り記号を使うのは英語的発想です。日本語では空白で区切りません。という事は、日本語的なプログラム言語を開発する場合、字句解析と構文解析を組み合わした新しい方式を作る必要があると思います。

そもそもこの方式は、ハードウェアスペックが低い当時から発想が出発しているように見受けられます。という事は、当然の発想として富豪的構文解析法を考える余地があると私は考えます。富豪プログラミングは必ずしも最良の手段ではないのですが、構文解析法は複数の方式があった方が良いのではないでしょうか?
・・・・・・あれ?私は誰に話しかけているのでしょうか?
メモなのに語り口調になってしまった(笑)

テーマ : プログラミング
ジャンル : コンピュータ

中の人の徒然草276

みんなこんばんは♪コンパイラに嵌っているいんどりでーす♪
私が考えているネタ指向コンパイラプロジェクトがかなり遅れているので途中報告します。
ネタ指向コンパイラというのは、全ての言語要素を備える混沌とした言語です♪
つまり、C、C++、D、VB、C#、Ruby、Perl、LISP、Prolog、SQL・・・(省略)から無差別に全ての機能を実装するイカれた言語なのです。無差別に言語機能を付けると如何に混沌としたものになるかを体現しようと考えております。

効率?実務性?保守性?統一性?
そんなのは一切関係ありません!
ウケる事を目指します!


仕様がまだ固まっていませんが、こんなイメージの言語になります。

//C系if
if ( a == 10 ) {
    //むにゃむにゃする
}

'VB系if
If  a = 10 Then
    'むにゃむにゃする
End If 


これはどういう事かと言いますと、同じ機能の構文が複数あるという馬鹿げた仕様です。予約語の大文字/小文字を識別する言語で、if(小文字)ならばC風に、If(大文字)ならばVB風に構文をチェックします。さらに、インドリ独自の構文も付加します。
※LALR構文解析法では無理かもしれない無茶仕様(笑)
さらに最終的には、出力するオブジェクトコードをネタ指向アセンブラ言語のものにして、 実行形式は仮想マシン(インドリ語)とネイティブ(インドリアセンブリ)で動く奇異なるものにする予定です。
他にも、開発ツールにyaccネタのpiyocc(ピヨック)を実装したり、兎に角無駄で馬鹿げた実装を目指します。 壮大なプロジェクトなわりには、私の実装能力が足りませんので今しばらくお待ちください。
ただいま修行中です。思う存分実装能力を高めて能力の無駄遣いをします♪

テーマ : 裏事情
ジャンル :

ネタつつき56−構文解析法についての考察

自分の頭を整理するために構文解析法についてのメモを書きます。


そもそも構文解析の手法が必要になったのは、コンパイラを実装するにあたって多様な式を判別する必要性があったためです。普通に式を文字列として解析するとなれば、何度も同じ文字をスキャンしなければならないので非常に効率が悪いものとなります。そこで効率よく式を解析するために演算子順位法が考えだされました。
しかし、演算順位法は式は効率よく解析できるものの、普通のプログラムを解析するには不都合だったのでLR構文解析系の技術が考えだされました。
この2つの構文解析法は解析木を下から上へと作り上げる(一番小さな情報から判別する)ので上向き構文解析と呼ばれています。この方法は後戻りを防ぐという観点から、スタックベースに考えられています。後戻りというコストを防ぐという視点は人工知能の推論と同じです。
その逆の考え方として、解析木を上から下へと作り上げる(一番抽象的な情報から判別する)下向き構文解析法も考えだされています。
これらの構文解析法には一長一短があって、上向き構文解析法は「仮定がない」ので柔軟な文法をサポートできます。しかしながら、エラー判別に於いて構造的情報が足りないので不利になる傾向がありますし、複雑なので手書きは非常に困難です。一方下向き構文解析法は、エラー判別に強く、手書きでも出来るほど単純なのですが、文法構造を仮定するのでサポートできる文法が狭くなるという最大の弱点があります。最後に演算子順位法については、一番効率がよいのですが、サポートできる文法が狭いと言われています。ただ、ダグラス・クロックフォード氏によると大いなる可能性を秘めているそうです。演算子順位解析法は研究の余地があります。

テーマ : プログラミング
ジャンル : コンピュータ

中の人の徒然草275

おはようございます♪昨日はコンパイラ本を貪欲に読んでいました。それで実感したのですが、やはりコンパイラ実装能力が落ちていますorz
流石に再帰下降法ぐらいは実装できますが、演算子順位構文解析、LL構文解析・LR構文解析を実装できないorz
一コンパイラ好きとして悔しいのでこれら構文法を手書きで実装できるようになるまで鍛えます! 余力があればor力尽きなければyaccの方言やCocoを実装する事を目指します。今までミニyaccとかミニCocoとかは作った事がありますので、過去の自分を超える事が目的です。でも、途中で先が気になってまたフル実装しないかも知んない(笑)
それはさておき、コンパイラの本を見ていると仮想マシンを対象にしたサンプルコンパイラが多いですね。仮想マシンは好きなので個別の本としてはいいのですが、もっとx86に特化した本がほしいです。例えば、オブジェクト指向言語をx86で実装するとか・・・
OSはx86に特化した超良書が存在するのにね・・・



社会人になったら仕事もあるから流石にこの本をコードまで含めて熟読していないけど、やはりそういった本があるのは心強いです。自営業なので、ある程度儲けたらリーナス氏のように家に籠もってOSの研究を本格的にする予定です。本があればこの様にじっくり学習出来ます。 これはサラリーマンだって当てはまると思います。このレベルの本があればじっくり学べるのです。
OSはあるんだからコンパイラもx86に特化したこのレベルの本が欲しいです!出版したら大ヒット間違いないと思うのですが、誰か書かないのかな?日本にも執筆可能な強者が居ると思うのですが・・・
このレベルの技術はやはり生のコンパイラを読むしかないかな?
でも私の致命的な弱点は英語が読めない事なんだよね・・・
もちろんそのままではいけないから今年から学習を始めているんだけど、何時になったらバリバリこのレベルの英語論文を読めるようになるのやら・・・
・・・・・・
まぁ、いいか。プログラミング言語が読めればオープンソースの時代だからなんとかなるよね♪
存在しない本はあきらめて集めたコンパイラのソースを読む事にします。

テーマ : 裏事情
ジャンル :

中の人の徒然草274

やっほー♪昨日最新コンパイラ構成技法(タイガーブック)が届いたよ♪
早速食い入るように読み進めました。そしてサンプルをゲットするために、著者のホームページを探したところ、いい情報をゲットしました。
この本はML言語でコンパイラを実装する本だけども、もしML言語が嫌な人は著者のホームページからC言語バージョンとJavaバージョンのサンプルを入手するとよいでしょう。
一方、ML言語でするという関数言語萌えの人はプログラミング言語StandardML入門を併読する事をお勧めします♪この本にも簡単なパーサーの説明が乗っているから参考になると思います。

私は今、字句解析と構文解析をじっくりと堪能しているところです。最近コンパイラいじっていなかったから、LL構文解析法・LALR構文解析法、LR構文解析法・演算子順位構文解析法・オートマトンとチューリングマシンの詳細を忘れていました(笑)
たるんでいるぞ自分!自分でフル実装出来なければ理解したとは言わん!
たるんだ頭脳を鍛え直すぜ!

コンパイラ―原理・技法・ツール (Information & Computing)(ドラゴンブック)を併読したいところですが、現在貸し出し中なのでコンパイラ 情報処理シリーズ(7)で代用しつつ、次の書籍をお供にしています♪


【関連書】

他にも併読するべき本はあるけど今は字句解析だからこれでいいかな?
多分タイガーブックを読み進めたら、コンピュータプログラミングの概念・技法・モデル計算機プログラムの構造と解釈(所持しているけども未読)をお供にすると思います。
それから、OCaml(ML系言語だしー)、Haskell、LISP、Schemeなどの関数言語でタイガーブックのサンプルを書き換えたり、Prologで挑戦したりすると面白いと思います♪♪
社会人は時間がないからすぐには全ての遊びを実行出来ないから、末永く遊べる良書だと思います。

コンパイラと言えば、最近買ったこの本にもコンパイラの作者たちがビューティフルコードを披露していました。



タイガーブックを読んでこの本も読むと2倍美味しいかもしれない。私はつい最近買ったばかりだからまだあまり読んでいないけども、こちらの本もちびちび読み進めたいと思います♪

テーマ : 裏事情
ジャンル :

中の人の徒然草273

おはよう♪最新コンパイラ構成技法(タイガーブック)が今日届く予定なので興奮しているインドリです♪早く読みたいよぉ〜♪早く来い来い、タイガーブック!!!

タイガー!タイガー!タイガー!

昨日からもう頭の中はタイガー一色です。世界的なコンパイラの書籍という魅惑的なフレーズが私を魅了します。この本読んだら世界が変わる!!!・・・かもしれない。
商品紹介にML言語を使うと書いているので プログラミング言語StandardML入門を用意して待っています♪
あっそうそう。忘れてはならないのはこの本

ドラゴンブック


この本はとてもいいけど難しいぃ!本文を読むと理解した気になりますが、この本だけ読んで本格的なコンパイラを今すぐ作れと言われても難しいものです。そんな時頼りになるのがタイガー本になると思います。きっと、コンパイラ好き達はタイガー&ドラゴンを歓迎している事でしょう。
さらに!!!コンパイラの構成と最適化第2版が11月下旬に発売されるらしいから、もう今年はコンパイラ好きにとって豊作の1年だと断定してもよいでしょう♪♪♪
コンパイラの構成と最適化第2版は、レジスタ割付け,データの流れの解析の別法,オブジェクト指向言語での最適化が増えるらしいです。ページ数をみると100ページほど増量するらしいので期待度MAXです♪非常に濃厚なコンパイラ世界を堪能できそうですね♪年末はコンパイラ祭りに決定です。

テーマ : 裏事情
ジャンル :

プロフィール

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人が多いので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた

並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (6)
C++ (9)
C# (36)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (10)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (1)
WPF (0)
WF (0)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター