第11回 カーネル/VM 探検隊
この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の1日目の記事です。 自己紹介 はじめまして。都内のIT屋で働いている解答略という者です。 去年の冬まで物理系の大学院博士課程に在籍していて、情報系とは無縁でした。 大学を離れる間際に、何の知識も無いままIT業界に入ると怖い人に怖い事を言われると思い、情報科学科の後輩を訪ねたところ「低レイヤを知れ」というアドバイスをもらい、 大急ぎでエミュレータとコンパイラとCPUを作りました。 時系列で振り返ると 2017年1月下旬、1週間弱かけてx86のニーモニックを調べ、しょぼいエミュレータを作った 次の2週間でC言語のサブセットのしょぼいコンパイラを作った その後、3月上旬までFPGAと格闘し、マジでしょぼいCPUを作った 大急ぎで作ったのでマジでくそしょぼいやつしかできませんでしたが、「PCの動作原
1. 2016年9月6日 石崎 一明 http://ibm.biz/ishizaki kiszk@acm.org 日本アイ・ビー・エム(株) 東京基礎研究所 (資料作成協力:井上拓、大平怜、小笠原武史、菅沼俊夫、仲池卓也) PPLサマースクール2016「商用Java処理系の研究開発」 Java Just-In-Timeコンパイラの実装技術 1 Java Just-In-Timeコンパイラの実装技術 / 石崎 一明 JavaTMおよびすべてのJava関連の 商標およびロゴはOracleやその関連 会社の米国およびその他の国にお ける商標または登録商標です 2. © 2016 IBM Corporation 商用Java処理系の研究開発 2 Java Just-In-Timeコンパイラの実装技術 / 石崎 一明2016/09/06 概要:日本アイ・ビー・エム(株)東京基礎研究所はJava言語の
僕の学科では伝統的に3年の後期に半年かけてCPU実験というものをおこなう。 班で自作のアーキテクチャを設計・実装し、FPGA基板上でMinCaml(OCamlのサブセット)でかかれた課題用レイトレーシングプログラムが動けば単位がもらえるというものである。 レイトレ完動後には、その高速化にはげむもよし、余興としてゲームをつくるもよしで、自作CPU上で色々あそんだりする。 今年は有志で班を結成し、自作CPU上でxv6というOSを動かした。 僕はその班にCコンパイラ係として参加したので、そのことについてかく。 あと、OS移植班全体の成果についても触れる。 わりと長くなってしまったので、結局なにができたんだっていう人は、とりあえず先にこっちに飛んでほしい。 動機 期間は4ヶ月程度、配布されたFPGA基板のうえで動かしたいという制約のもとで移植するOSはxv6を選択した。 このOSはシンプルであるが
yacc/lexとは Cでプログラミング言語の処理系を実装するのであれば、 多くの場合、yaccとlexというツールを使います。 実のところ、Cとyacc/lexで簡単なプログラミング言語を作る、というのは、 以前、「C言語ヨタ話 」で書いた「 電卓を作ってみよう」 の焼き直しになります。yaccとlexの説明もそちらに簡単に書いたので、 そちらを見てください――と言いたいところですが、 まあここでも軽く説明します。 内容的には重複、というかコピペしている部分もありますが。 プログラミング言語の処理系は、通常、以下のような手順を取ります。 字句解析 ソースプログラムを、「字句(トークン)」の並びに分割する処理です。 構文解析 トークンの並びから、解析木を構築する処理です。 この後、Cなどの機械語を吐くコンパイラや Javaのようなバイトコードを吐くコンパイラなら、 「コード生成」という処理
公開されてました。たぶん1年くらいclosed sourceで開発されていたらしい? https://github.com/lampepfl/dotty https://groups.google.com/d/topic/scala-internals/6HL6lVLI3bQ/discussion グラフみると、小田好先生がほぼ一人で開発してます。 https://github.com/lampepfl/dotty/graphs/contributors また、小田好先生が、scala本体に全くコミットしなくなった時期*1と完全に重なりますね。 (scala/scalaの最後のコミットが2012年10月31日。dottyの最初のコミットが2012年12月6日) https://github.com/scala/scala/commits?author=odersky https://git
【お知らせ】2015年8月23日をもって会場は閉鎖となりました。 池袋バイナリ勉強会では色々なテーマを試して来ましたが、最後に残った勉強会をまとめました。 不定期 池袋バイナリ勉強会看板勉強会です。コンパイラやOSで遊びます。 池袋物理学勉強会古典力学からきっちり学んで、相対論、量子論の理解を目指します。 毎月(休日) 初級ラテン語リーディング言語学的意義が非常に大きい言語です。勉強して損はありません。 初心者のための線形代数勉強会行列やベクトルの性質を扱う数学の分野を勉強します。 隔週(水曜日) 「理論から学ぶ データベース実践入門」読書会リレーショナルモデルによるデータベースの理論を本で勉強します。
Compiler Construction の授業 コンパイラとは何か 実行系のArchitecture Intel64 のアセンブラ 字句解析、構文解析、コード生成 部分計算と中間木 yaccによる構文解析 llvmを使ったコンパイル Micro-C の全体構成 コード生成の詳細 共通部分式 さらに進んだコンパイラ技術 参考書 Compilers: Pearson New International Edition: Principles, Techniques, and Tools More information: 今後の授業の予定 TL/1 小さいコンパイラの例題 repository レポートは、「Report on Compiler Construction Lecture Exercise 6.1 」という 形式のSubjectで メールでkono@ie.u-ryukyu.a
最近Scala Complierをforkするのが流行っているようですね。 paulp/policy · GitHub typelevel.scala | Typelevel Scala and the future of the Scala ecosystem 「俺のコンパイラか?欲しけりゃくれてやる、探せ!この世の全てをそこにおいてきた!」 男達はscalacをforkし、夢を追い続ける。世は正に大コンパイラ時代! 乗るしかないこのビッグウェーブに!! 俺もScalaをforkしてTypolevel Scala Compilerを作ったぜ!! コンパイラ王に、俺はなるッ!!! yuroyoro/typolevel · GitHub 久しぶりのScalaネタがこれとか救いようの無い老害だなテメーは
以前に8ccというCコンパイラをゼロからひとりで開発していたときのログです。40日でセルフコンパイルできるところまで到達しています。日付はすべて2012年です。コードとヒストリはすべてGitHubで見れます。 3月4日 というわけでコンパイラを作っているわけだけど、1000行くらい書いたらそれなりに動き始めてきた。こんなのも動くし: int a = 1; a + 2; // => 3 こういうのも通る。 int a = 61; int *b = &a; *b; // => 61 文字列は文字の配列として扱っていて、配列をポインタに成り下げる振る舞いも実装しているので、こういうのも通る。関数呼び出しもある。 char *c= "ab" + 1; printf("%c", *c); // => b 前回もこのあたりはがんばって実装したからここまで作るのはわりと単純作業かも。二回目だから配列とか
この記事はJava Advent Calendarの13日目の記事です. 昨日は@kisさんのJava SE 8でパターンマッチを実装するでした. 明日は@megascusさんです. 皆さんはおそらく普段からJavaを使ってプログラムを作っているかと思います. そんな皆さんはJava言語について多くの思い・想いを持っているかと思います. 例えば,「こんな事ができたら良いのに」だったり,「ここが良くないんだよなぁ」といった具合です. そういった言語特徴の追加や改善を自分の手でできたら素敵だと思いませんか? 幸いJavaはOpenJDKというオープンソースプロジェクトで開発が行われており,第三者の僕達でもソースコードを手に入れ自由に変更を加えることができます.*1 この記事では言語の拡張の仕方を述べ,OpenJDKを実際に用いて極々簡単な言語特徴を実装してみます. コンパイラ概要 コンパイラの
はじめに 久しぶりに Aho氏, Sethi氏, Ullman氏の書いた Compilers(レッド・ドラゴン・ブック)という書籍を目にしたので、昔、コンパイラを作った時の事を思い出しながらコンパイラについてまとめてみました。 Translator (翻訳) Translatorとは、一つのプログラミング言語(Source Language: 原始言語)で書かれたプログラムを入力として取り、別の言語(Object Language or Target Language: 目的言語)のプログラムとしてつくり出すプログラムです。 原始言語が FORTRAN, C, Pascal などの高水準言語で、目的言語がアセンブリ言語や機械語といったような低水準言語である時、そのような Translator をコンパイラ(Compiler) と呼びます。また、原始言語がアセンブリ言語で目的言語が機械語であ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く