Builderscon 2019 の発表資料です。 ライブコーディングでフルスクラッチでコンパイラを書くというのをやりました。 コンパイラのソースコードはこちらです https://github.com/DQNEO/HowToWriteACompiler
![コンパイラをつくってみよう / How to make a compiler](https://cdn-ak-scissors.b.st-hatena.com/image/square/bb57b0462dc8b787234e20a97fb43f87b1ff9ad0/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fb4b578ffccee4bad9a9d775c126f2f93%2Fslide_0.jpg%3F13437827)
はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム この本には一冊の本に盛り込むにはやや欲張りな内容を詰め込みました。本書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 この本では、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを本書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう
日本を離れる日、成田空港の国際線ターミナルでCPU実験の記事を投稿してからあっという間に7ヶ月が経ちました。 日本人の知り合いが一人もいない状態でジュネーブに単身移住しアゼルバイジャン人とシェアハウスしながらヨーロッパ人しかいないCERNのソフトウェアチームでブルガリア人の上司を持ちC++標準化委員のリーダーと働くとはどういう感じなのかが伝われば幸いです。 ちょっと前ですが類さんに関連する話を収録していただきました。 15. CERNでのソフトウェアエンジニアリング (高橋祐花) 仕事編 なんの仕事してるの? 仕事は"どう?" 生活編 生活が落ち着くまでに苦労したこと 平均的な平日 週末は何してるの? ジュネーヴぐらし! 学びと友人 追記 仕事編 ウェブが生まれたところがそこら辺にある。 なんの仕事してるの?答えるのがめんどくさい時の返答 物理解析に使うROOTというソフトウェアを開発して
以前以下のようなDottyに関する記事を書きました. amaya382.hatenablog.jp それから暫く経ち, 多くの更新が入ったため新しくまとめました. 公式ドキュメントだけでなくあちこちにちらばった情報を集めています. 過去記事と同じくあくまで真新しい機能のみに注目し, 理論的な部分や実装については深掘りしません. 概要のみなので, 個々の詳細は各見出しのリンク先を御覧ください. Dottyとは Dependent Object Types (DOT) に基づいた新しいScalaコンパイラです. Scala3系に相当します. DOT計算理論の詳細は省きます (まとめるほど理解できていないとも言う…). 現行のコンパイラと比べ, コンパイラサイズの減少・コンパイル速度向上・様々な機能追加の他, コンパイラ自体の開発安定性も増すパワフルなアップグレードが期待できます. 現行のSca
東大の情報科学科では3年の秋学期にCPU実験という、自分たちでCPU、コンパイラ、シミュレーターを作ってレイトレーシングを動かすことが単位要件の名物実験があります。僕らの班では12月初旬に単位要件を満たすCPUは出来ていたので、2/20にあった成果報告会までの間にIwashi班という自作CPU上でlinuxを動かすことを目標とした余興班を作ってこのエントリのタイトルにあるような結果に終わったのでその報告をしたいと思います。 コンテキストスイッチしている画像: 目次 目次 対象とする読者 自己紹介 できたこととできなかったこと 技術的な詳細 ISA よかったところ 悪かったところ 結論 ステート管理 Floating point UART 自作OS/Shellの仕様 動機 やること 実装方針 増えるレジスタ 増える命令 MMUの挙動 タイマ割り込みの挙動 iretの挙動 Kernelの実装
About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ
※あなたもかっこいいコンパイラになれる! ある日曜日、近所の古本屋によったらJohn Maeda著の「Design by Numbers」という本を発見。これは90年台後半にMTIメディア・ラボで作られたDBNというプログラミング言語の解説本で、コンピュータープログラムのしくみを視覚的な例を使って紹介することを目的としているらしい。 DBNのサンプルコード 出典:http://dbn.media.mit.edu/introduction.html 読み始めてすぐ、もう2016年だし(本が出版されたのは2001年)Javaで元のソースコードを動かすんじゃなくてSVGで実装してブラウザで動かしたら面白んじゃないかなと思った。 そうなると「DBNからSVGに変換するコンパイラが必要になるのかな、コンパイラ書くかー」と思ったものの、そもそもコンパイラ書くって物凄く情報科学っぽい。木構造解析とかまっ
はじめに 「あれ?インテルコンパイラの吐くコードがまたgccより遅いんじゃね?」と書こうとしたら、いろいろあって最終的にインテルコンパイラが圧倒的に速いコードを吐いた話。 コンパイラのバージョンとか 使うコンパイラのバージョンは、g++が4.8.5、icpcが16.0.3。 実行環境はIntel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz。 128ビット整数からboolへのキャスト (一個だけ) 訳あって128ビット整数をboolにキャストしたくなった。単純にキャストして正しい結果が得られるか確認するのと、どう実装されるか調べるため、こんなコードを書いた。 #include <stdio.h> #include <cstdint> void func32(__uint32_t m, bool &b){ b = m; } void func64(__uint64_
エンジニアの id:cockscomb です。この記事ははてなデベロッパーアドベントカレンダー2015の8日目の記事です。昨日は id:Songmu による Markdownドキュメントをgithubで管理して、はてなブログでホストする ~ Mackerelの場合 でした。 Swiftがオープンソース化されて数日が過ぎました。皆さんいかがお過ごしでしょうか。 Swiftのオープンソース化そのものは今夏のWWDCでアナウンスされていた通りです。しかし私を含めた多くのSwiftプログラマーは、このオープンソース化にとても興奮しています。 WWDC 2015のキーノートで、Swiftが今年中にオープンソースになり、OS Xに加えてLinux上での動作がサポートされると発表されたとき*1、私たちはそれを予感していたにも関わらず熱狂しました。しかし同時に、いったいどこまでがオープンソースになるのか、
image by opensource.com コンピューティング史の初期、伝説的な人物がいました。 プログラミング言語COBOL の母、 Grace Hopper です。彼女は数多くの功績を残しましたが、特に初のコンパイラを発明したことと、特定の機種に依存しないプログラミング言語の普及に貢献したことで有名です。現在でも、女性情報科学者のためのイベント「 Grace Hopper Celebration of Women in Computing 」が開催されるなど、彼女の功績は様々な形で受け継がれています。 Hopperがコンピューティングにもたらした貢献は人々の記憶に残り、称えられ、後人たちの基盤となりました。しかし、その一方で、COBOLそのものは、前時代のコンピューティングの遺物として、あまり使われなくなってきています。全く使われないというわけではありませんが、事実です。現在、CO
今年、クックパッドでは夏のインターンと題して20名弱のインターンを受け入れました。 このインターンは前半と後半に大きく分かれており、 後半が社員に混じって業務をするいわゆる普通のインターンで、 前半は7日間にわたってプログラミング関連の講義を受けるという仕組みです。 わたし(青木)はその前半の過程において、「プログラミングパラダイム」という 1 日の講義を担当し、 JavaScriptの処理系を書くという、ツッコミどころの多い課題を実施しました。 本稿では、その講義を開発する際に考慮したこと、特に難易度調整についてお話しします。 また講義のために開発したJavaScript処理系「JetSpider」についても軽くふれます。 ▼講義資料 Cookpad Summer Intern 2015 - Programming Paradigm from Minero Aoki JetSpiderコ
Cコンパイラといえばとてつもなく複雑なプログラムというイメージがあります。ところが、このCコンパイラを(サブセットとはいえ)わずか500行ほどのCのソースコードで実現した「CC500」名付けられたプログラムが公開されています。 ソースコードは可読性を維持するためにつけられた空行やコメントを含めると、実際は750行ほどになるそうですが、それでもこれだけコンパクトなソースコードで実行可能なELFバイナリ(Linux用のバイナリ)を生成できるのは興味深いのではないでしょうか。 以下実際にLinuxでコンパイルしてみました。 自己コンパイルできる このコンパイラはC言語のサブセットで、自分自身のソースコードをコンパイルできるところがおもしろいところです。まず「cc500_1」という実行ファイルを生成します。 gcc cc500.c -o cc500_1 生成された実行ファイル「cc500_1」を使
2014/10/27 関ジャバ HotSpot meetingで@jyukutyoが発表した「JITコンパイルはじめの一歩」の資料です。Read less
ClojureScriptという選択肢 Presentation Transcript ClojureScript という選択肢 2013/10/19 大なごやJS VOL.7 前田康行(@maeda_) 自己紹介 前田康行 (@maeda_) 名古屋在住のフリーランス 好きな言語 • Scala • Smalltalk 近況 • ひょんなことからRubyの仕事してます。 今流行りのaltJS 今回のテーマ ClojureScriptはこっち側ですよって話 XX言語で書いて、 XX言語で書いて、 JavaScriptに変換できる <<< (超えられる壁) <<< JavaScriptの代用となる 大事な観点 言語的なメリットだけでなく、既存のJSのエコシステムが活用できる or 代用があるか? ・既存のライブラリやAPI(JSONPとか)との親和性 ・開発周りのツール類(Gruntと
原文(投稿日:2013/05/22)へのリンク どのブラウザでも動くウェブのバイトコードは価値があるだろうか。LLVMはソリューションとして成り立つだろうか。ネイティブコードをブラウザ上で動かすにはMozillaのasm.jsとGoogleのPNaClのどちらがいいだろうか。この記事ではこれらについての意見を紹介する。 ArsTechnicaのJavascriptで書かれた動画コーデックについての記事に対するRanizのコメントは同記事のコメント欄やウェブ上でさまざまな反響を起こした。Ranizは“ブラウザ向けバイトコードを標準化し、開発者がさまざまな言語を選択できる”ようにして、開発者がJavaScriptを使わざるを得ない状況を脱し、好きなウェブプログラミング言語を選択できるようにすることを提案している。そのバイトコードはJVMやCLRのバイトコードと同じように、ウェブ開発の共通プラッ
なかなか感動した次の記事を翻訳しました。翻訳とか初めてなので、意訳とかがところどころあれかも知れません。 The Ins and Outs of Invalidation | JavaScript Firefox18で追加されたJITコンパイラ「IonMonkey」で、どうやってJITコンパイル時の型についての仮定を守りつつ、効率的にJITコンパイルを行うかの話です。「型推論w どうせJSのJITコンパイルとか、『大体Intが来るっぽいからInt向けにコンパイルしとこう』、みたいな感じでしょ?w」って思ってませんか?もっともっと、凄まじいですよ。 この記事のライセンスは元記事と同じ、「Creative Commons Attribution Share-Alike License v3.0 or any later version.」となります。 The Ins and Outs of I
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く