誰も作ってくれなかったので、自分でまとめてみた。 目次からざくっと拾っただけなので、間違いあるかも。本を買うときは自分で中身確認してくださいね。 ドラゴンブック、タイガーブック、中田先生の本、optimizing compilers modern architecturesの4冊は、コンパイラで使われる技術について、最適化まで含めてひととおり書いてある。 あとは作ってみよう系で適当にまとめた。本当は「○○という最適化が載ってる載ってない」までまとめたいけど、まだそこまで理解が進んでない。

先日Python 3.1a1 がリリースされました。 Python 3.0 は Python 2.6 に比べてパフォーマンスが悪かったのですが、Python3.1はPython2.6よりも速くなるかもしれません。 Python3.1のパフォーマンス向上は、主に次の2点が影響しています。 ioモジュールがC言語で書き直された computed goto の採用 (--with-computed-gotos というconfigureオプションで有効) computed goto という名前を聞き慣れなかったのですが、調べてみると Ruby 1.9 の VM (YARV) や、 Perl6 の VM として開発されとうとうリリースされた Parrot にも採用されている手法でした。今回は簡単に computed goto の紹介をしてみます。 とりあえず label as value C言語の規
Gaucheのソースではgotoって使われているんだろうかと思ってのぞいてみたら、vm.cにおもしろそうな箇所発見。 /* We take advantage of GCC's `computed goto' feature (see gcc.info, "Labels as Values"). */ #ifdef __GNUC__ #define SWITCH(val) goto *dispatch_table[val]; #define CASE(insn) SCM_CPP_CAT(LABEL_, insn) : #define DEFAULT LABEL_DEFAULT : #define DISPATCH /*empty*/ #define NEXT \ do { \ if (vm->queueNotEmpty) goto process_queue; \ FETCH_INSN(c
そういえば,最近,「COINS の LIR,label のアドレスも取れないし goto で任意の番地にも飛べないつかえねー」 とか散々言ってたわけなんだけど,コンパイラの実装技術とかにあまり馴染みが無い読者には,なんでそんなことに対してそれほどまでに拘るのか意味不明だったのではないかとふと思った. # 以下,偉そうに書いてますが,専門のレベル的には全然たいしたこと無い話です.暗黙知を形式知へ,わずかながら貢献をばの精神で (笑) 「C 言語って,高級アセンブラでしょ ? コンピュータの全てが記述できるんじゃないの ? C 言語でできないことなんてあるの ?」 いやいや,いっぱいあるよ ! 機械語の世界というのは,手続き型言語の狭い花園などとは比較にならないほどリッチな世界なんだ (ヒロ山形風) そんな Web 上の妄言に惑わされていてはいけない.C 言語がコンピュータの真髄だとか,C に
Let's Build a Compiler, by Jack Crenshaw This fifteen-part series, written from 1988 to 1995, is a non-technical introduction to compiler construction. You can read the parts on-line or download them in a ZIP file. Read the tutorial on-line Part 1: INTRODUCTION Part 2: EXPRESSION PARSING Part 3: MORE EXPRESSIONS Part 4 INTERPRETERS Part 5: CONTROL CONSTRUCTS Part 6: BOOLEAN EXPRESSIONS Part 7: LEX
10:14 08/04/29 いろいろ 来月末 東京メトロ沿線ウォーキング のために、じゃなかった、友人の結婚式があるらしいので、ちょっと一瞬日本に戻ります。 いやまあ、メトロウォーキングには行きますが。 りふぁらにれす アニメ、というのが通説らしいですが個人的にはゲーム。 プログラミングと俺(続き) 前回 書き忘れた。中学校の"技術"の授業で LOGO でタートルグラフィックスとかもやりました。 使ってた処理系でどこまでできたのかは全く知らないのですが、まあひたすらお絵描きしてました。 つまりメガデモ製作です(違。いろんな図形を描くときそれに伴って動くタートルをいかに作品内に取り込むか など真剣に考えたりしてました。LOGO っていう言語についてはもう、「てじゅんは」っていうキーワードしか 覚えてないですね。タートルグラフィックスって、適当なコードを適当にパラメタ変えて色々走らせると す
数字Numは0か、先頭が0でない0から9の文字列です。 これで文法を定義できました。 実際に動くプログラムにするため、コンパイラコンパイラとよばれる、言語処理系の開発に特化したコンパイラを使用してみましょう。この記事では、Javaによるコンパイラコンパイラ実装であるJavaCCを使います。 JavaCC:https://javacc.dev.java.net/ Downloadsからを取得して適当なフォルダに展開してください。 展開したフォルダのbinフォルダにパスを通せばjavaccコマンドを利用できるようになります。 ところで、上記のEBNF表記上は特に区別されていませんが、一般に、言語処理系は字句解析と構文解析とよばれる処理ににわけてソースコードを解析します。 字句解析は構文解析の準備処理です。まず入力された文字列を空白文字や特定の記号などで区切っていきます。区切られたそれぞれの文字
タイトルの通り、自作のなんちゃってフレームワーク(言語はJava)でブログを作りました。 実際に動かしているブログはこちら。 kmaebashi.com 実装については以下の記事に書いています。 kmaebashi.com リンク先の記事にもあるとおり、このブログを動かしている「なんちゃってフレームワーク」は、ブラウザからのリクエストをServletで受けてRouterでルーティングしてControllerに処理を渡し、その後、Serviceがビジネスロジックを、DbAccessがDBへのアクセスを提供します。DbAccess層はSQLをガリガリ書きますし(結果のクラスへのマッピングだけはやる)、ControllerもServiceもDbAccessも全部staticメソッドです。SQLおじさんやstaticおじさんでも大丈夫! というよりは、実のところSQLおじさんとstaticおじさん
サブモニタに使っていたFlexScan S170が 45747時間の使用の末画素欠け等出てきたので。。 Amazonのタイムセールで3万円だった。 商品説明が変 https://www.amazon.co.jp/gp/product/B07SCZ5STT/ 商品URL http://e7e.co/Vc0r0 説明書への短縮URL (Dropbox上のPDF) 【ミニHDMIポート二つ搭載】普通のHDMI出力設備全て対応できます、パソコン、ノートPC、プレゼン用、一眼レフカメラ、 PS3/PS4/Xbox One/Nintendo Switchゲーム機、デスクトップPCなど ミニHDMI→HDMIケーブルは付属しております。 商品説明ではmini-HDMIが付いているように書かれているが、これは間違いで、結局のところ説明書が正しかった。実際には標準HDMI(2.0) + mini-DP +
はじめに CQ出版社のDesign Wave Magazine 11月号に掲載されている第11回LSIデザインコンテストの課題は命令数が9つのとても小さいRISCプロセッサです.このRISCプロセッサのCコンパイラを作ります.命令数9つと限られていてメモリ空間もデータと命令にそれぞれ64ワードずつしかありませんから,汎用のCコンパイラではなく,1から100までの整数の和を計算する機械語を生成できればよしとします. なぜコンパイラを作るのか. ソフトウェアの開発速度を劇的に向上できるからです. 例えば先ほどの1から100までの和の合計を求めるコードを,アセンブラとC言語で書いてみて,記述にかかる時間と書いたコードの読みやすさを比較するとよく分かります.C言語はアセンブラと同等の効率のコードを読みやすく記述することができます. また1からプロセッサを設計するということは,ソフトウェア開発は設計
data Reg = Zero | At | V0 | V1 | A0 | A1 | A2 | A3 | T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7 | S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | T8 | T9 | GP | SP | FP | RQ | PC deriving (Eq, Ord, Show, Enum, Bounded) data Insn = Add Reg Reg Reg | Sub Reg Reg Reg | J Word deriving (Eq, Ord, Show) data PseudoInsn = Pseudo [Insn] data Cell = W Word | I Insn deriving (Eq, Ord, Show) data VM = VM (Map.Map Reg Cel
data Reg = Zero | At | V0 | V1 | A0 | A1 | A2 | A3 | T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7 | S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | T8 | T9 | GP | SP | FP | RQ | PC deriving (Eq, Ord, Show, Enum, Bounded) data Insn = Add Reg Reg Reg | Sub Reg Reg Reg | J Word deriving (Eq, Ord, Show) data PseudoInsn = Pseudo [Insn] data Cell = W Word | I Insn deriving (Eq, Ord, Show) data VM = VM (Map.Map Reg Cel
Garbage Collection without Paging, Matthew Hertz, Yi Feng, Emery D. Berger. PLDI 2005 Garbage collection offers numerous software engineering advantages, but interacts poorly with virtual memory managers. Existing garbage collectors require far more pages than the application’s working set and touch pages without regard to which ones are in memory, especially during full-heap garbage collection.
What is SCK SCK は GNU Emacs 上のマルチソース、マルチターゲットなコンパイラ作成支 援環境です。全てが Emacs Lisp で記述されているので、Emacs さえインストール されていれば簡単に利用することが出来ます。 仮定する GNU Emacs のバージョンは 21.4 以降で Meadow も含 まれます。OS については、Emacs が動作する Unix ライクな OS であり、 Cygwin も含まれます。現在ソース言語として C 及び簡単な関数型言語 (MinCaml) そして、ターゲットマシンとして x86 及び SPARC がサポートされています。 このプロジェクトは未踏ソフトウェア創造事業の支援を受けています。 Trial Use 上のアーカイブを適当な場所に展開し、そのルートにある sck.el を Emacs の load-file コマ
What is SCK SCK は GNU Emacs 上のマルチソース、マルチターゲットなコンパイラ作成支 援環境です。全てが Emacs Lisp で記述されているので、Emacs さえインストール されていれば簡単に利用することが出来ます。 仮定する GNU Emacs のバージョンは 21.4 以降で Meadow も含 まれます。OS については、Emacs が動作する Unix ライクな OS であり、 Cygwin も含まれます。現在ソース言語として C 及び簡単な関数型言語 (MinCaml) そして、ターゲットマシンとして x86 及び SPARC がサポートされています。 このプロジェクトは未踏ソフトウェア創造事業の支援を受けています。 Trial Use 上のアーカイブを適当な場所に展開し、そのルートにある sck.el を Emacs の l
Update (2012) I've proposed a new project called qcc that's a sequel to this. I think leveraging QEMU's code generation work is a much better approach than trying to reinvent support for every possible target. I also I have permission from Fabrice Bellard to use his code under BSD license terms in the new project, which is another reason not to bother with the "MOB branch" of unmaintained drive-by
DWMに掲載された(FPGA向けの)プロセッサ特集記事を見ていて,ハードウェア設計に終始していてソフトウェア開発環境が手薄すぎて,正直これでは使えないなーって思うことしばし. そんなわけでThe LLVM Compiler Infrastructure Project. 環境 OSはWindowsXP,cygwinはバージョン 1.5.25-11. Cygwinでパッケージのインストール gnu make, gcc, texinfo, flex, bison, m4, autoconfi, automake, libttol, libiconv, diffutils の最新バージョンをインストール. ソースコードの入手 http://llvm.org/releases/download.html#2.2から, llvm-2.2.tar.gz と llvm-gcc4.0-2.2.source
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く