Rustで自作言語とコンパイラを作るために必要な知識と実装手法を初心者向けに簡単に説明することを試みました。パーサコンビネータやLLVM関連のライブラリを利用し、Rustで自作言語やコンパイラ作りをやっていきます。
国分崇志(@k0kubun)と申します。プログラミング言語Rubyのコミッターとして活動しています。2019年からシリコンバレーで働いており、2022年からShopifyという会社でRubyのJust-In-Time(以下、JIT)コンパイラをフルタイムで開発しています。 長い間趣味でやっていたコンパイラの開発を仕事にしたのは、現職が初めてでした。この記事では、趣味を仕事に変えた経緯や、どのようにして業務経験のない分野にキャリアチェンジしたのかを紹介します。 仕事で分散システム、趣味でコンパイラを書くキャリア 楽しく稼げる仕事を求めてたどり着いたRubyエンジニア 研究で分散システムと言語処理系の両方に興味を持つ 分散ミドルウェアを仕事で、JITコンパイラを趣味のOSS活動で やっぱりコンパイラを仕事にした複合的なきっかけ 働きながら大学院に通い、コンパイラが一番好きなことに気付いた コン
Go Conference Tokyo 2019 Autumnでの発表資料です。
こんにちは、21Bのseasonです。この記事はtraP夏のブログリレー3日目の記事です。 自作Cコンパイラでセルフホスト達成しました。 リポジトリ: https://github.com/season1618/c-compiler/tree/main 自作Cコンパイラでセルフホスト達成しました!!!!!!🎉🎉🎉https://t.co/8fLIAJWksQ pic.twitter.com/2fgH5sKoZ0 — season (@season1618) July 27, 2022 実際にどうやって作るかを書くと長くなるので、ここでは経緯とか完成までの流れとかを書こうと思います。一応開発メモは以下に上げておきました。 開発メモ: https://github.com/season1618/note/blob/main/cs/c-compiler/index.md 経緯 大学の講義で
Ruby開発チームは、新たなJITコンパイラであるYJITを実験的に搭載したRuby 3.1プレビュー1を公開しました。 Ruby言語は以前から実行速度の向上を重要な改善項目として挙げており、Ruby 2.6では「MJIT」と呼ばれるJITコンパイラを搭載、昨年リリースされたRuby 3.0では目標としていたRuby 2の3倍の性能を達成しています。 参考:Ruby 3.0正式版リリース。「Ruby 2の3倍速」到達、型の記述、スレッドセーフな並列処理など新機能 一方でMJITはその機構上、Railsの大規模アプリケーションなどでの性能向上に十分な効果が発揮できていないとの評価もありました。 今回Ruby 3.1プレビューでマージされたのは、ECサイト構築サービスで知られるShopifyが開発を進めてきた「YJIT」と呼ばれるJITコンパイラです。 YJITは現在のところ20%から40%程
この章では、 C 言語を対象に、 C のソースコードがどのような過程を経てコンパイルされ、実行されるようになるか見ていきます。 利用する言語処理系は、gcc (GNU C Compiler 改め GNU Compiler Collections)です。 この回は、皆さんに情報に触れてもらうのが主旨ですから、 練習問題などはありません。 内容も、詳しい話は全部忘れてもらってもかまいません。 とはいえ、単にファイルを眺めるだけでなく、すこしは実際にコンパイラを動かして試したりして、 馴染んでおいてください。 内容的には、知っている人なら知っているといった話ですから。 C 言語が実行ファイルになるまでの基本的な流れは、授業の方でもならったように C 言語ソースコード (with マクロ) ↓ マクロ展開 C 言語 (マクロ展開済) ↓ コンパイル アセンブリコード ↓ アセンブル オブジェクトコ
システムプログラミング言語とは、システムプログラミングでよく使用されるプログラミング言語のことである。このような言語は、システムソフトウェアを書くために設計されており、アプリケーションソフトウェアを書く場合とは異なる設計アプローチが求められる。 システムソフトウェアとは、コンピューターのハードウェアの操作・制御のために設計されたコンピューターのソフトウェアであり、アプリケーションソフトウェアを実行するためのプラットフォームを提供する。システムソフトウェアのカテゴリーとしては、オペレーティングシステム、ユーティリティソフトウェア、デバイスドライバ、コンパイラ、リンカなどがある。 機能[編集] アプリケーション向けの言語とは違い、システムプログラミング言語は、典型的には、物理的なハードウェアへのより直接的なアクセス手段を提供する。BCPLは、この意味での典型的なシステムプログラミング言語だった
C言語で作成した拙作のCASL II処理システムYACASL2を紹介します。 CASL IIは、基本情報技術者試験で用いられるアセンブラ(アセンブリ言語)です。アセンブラは通常、特定のコンピューターやCPUに対応しています。しかしCASL IIアセンブラは、試験の公平性の観点から実在しない仮想コンピューター向けに作られたアセンブラです。 CASL IIの処理システムを作るきっかけになったのは、『日経ソフトウェア』2009年2月号に掲載されていた川俣晶さんの執筆記事「C言語で作るCPUエミュレータ」を読んだことでした。この記事を紹介した日経ソフトウェア記者・斉藤国博さんのコンピュータの仕組みを知るのは,いつも楽しいという記事は現在でもオンライン上で読めるようです(2020年8月時点)。なお、この記事で紹介されていたソースコード(C言語)は、現在ではダウンロードできないようでした。 私はいちお
妹「お兄ちゃん、私C言語やってみたい」 兄「いきなりだね。じゃあVisual Studioをダウンロードしようか」 妹「……手っ取り早く言うと学校の課題で出たC言語をやるから、コンパイルエラーが無いか確認したい」 兄「じゃあオンラインコンパイラでも使えばいいんじゃないかな。WEBでビルドかけられるし」 妹「あわよくば、使えそうなプログラムを作って自分の役に立てられればいいかなって思ってる」 兄「じゃあ Visual Studio をダウンロードしようか」 妹「これ、時間かかりそう。もっと手軽なコンパイラないの?」 兄「じゃあTiny-Cコンパイラを使ってみようか。Visual Studio Community Editionの方が補正機能があって使いやすいと思うんだけどね」 妹「じゃぁそれはまた今度で……」 兄「まず、Tiny-Cをダウンロードします」 妹「はい。どこから?」 兄「Tiny
前: 太陽電池次: バックアップとデフラグ tcc 2011-11-16 11:36:09 コンピュータ その昔、Turbo Pascal というプログラム言語があった。 …この言い方はちょっと違うか。 Pascal というコンピューター言語があって、その処理系の製品として、Turbo Pascal があった。 Pascal というのは、もともと教育用に考えられた言語だ。 といっても、わかりやすくなっているけど非力、というようなことはなくて、非常に強力。 祖先は ALGOL で、C と同じ。だから、プログラムの組み方も C と似ている。 違うのは、C はハードウェアを直接叩けて、システムクラッシュさせるのも自由気ままにできるのに対し、Pascal はハードウェアをできるだけ隠蔽するように作られているので、システムクラッシュが起こりにくいこと。 隠蔽する、というのは手間がかかることなので
低レイヤを知りたい人のためのCコンパイラ作成入門(以降「低レイヤ」)を参考にして作り始めたCコンパイラがようやくセルフホスティングできるようになったので、 今までの経験をメモしておく。 リポジトリはこちら:https://github.com/tyfkda/xcc 動機XV6という学習用OSをひとまず使えるものにしたいなぁと思っていて、Cコンパイラが動けばXV6上で開発できるようになるのでぜひとも動かしたいと思っていた。 しかし既存のソースだとCからアセンブリを出力するだけで、アセンブラやリンカはgccを使うとかしていることが多くて、そのままだと動かすのが難しいのではないかと思っていた。 「低レイヤ」もその方式なんだけど、それを直接バイナリを出力する方法で実装したらできるのではないかと、始めてみた。 進め方「低レイヤ」では最初に整数1個をコンパイルできるだけというミニマルな状態から始めて、
Cコンパイラを作っていると、セルフホストを目指した瞬間、今まで味方だったlibcとの対決を迫られる熱い展開になります 前提 低レイヤを知りたい人のためのCコンパイラ作成入門 C言語でCコンパイラを書いてセルフホストを目指す場合の話 x86_64のLinuxとgcc 上記の環境に限った話かどうかについては明記しない予定 libcを使わない つまり自分でlibc(の一部)を書きます ファイルIO(標準出力も含む)とメモリ操作(例えばalloc/cpy/cmpな各種)など、いくつか必須っぽいものがある libcにはシステムコールラッパーとしての役割がある 自分でlibcを実装する場合にはシステムコールをアセンブリで出力する システムコールのABIは、C言語の関数呼び出しABIとは異なる 引数と返り値の扱いについてはABIが同じOSもあるが、x86_64 Linuxでは異なるはず(未確認) いずれ
数日前からCコンパイラを書き始めた。(GitHub) 植山類さんのオンラインブック、低レイヤを知りたい人のためのCコンパイラ作成入門を読みながら、概ね本の内容に沿って進めている。 自分の書いたコンパイラで自身をコンパイルするセルフホストを目指している。 コンパイラというのはある言語で書かれたプログラムを別の言語に変換するプログラムだ。 ここではC言語をアセンブリに変換するものを指している。 いきなりC言語をコンパイルするのは無理なので、徐々に複雑な入力を受け付けるように改良し、最終的にC言語を受け付けるようにする(したい)。 最初は入力をそのまま出力することから始まり、四則演算ができるようになり、いまは関数呼び出しができるようになった。 本はとても丁寧に書かれていて、参考として実装も2種類ほど存在する。 さらにSlackやYoutube Liveで質問ができるというとても恵まれた環境が揃っ
Build Your Own Text Editor Welcome! This is an instruction booklet that shows you how to build a text editor in C. The text editor is antirez’s kilo, with some changes. It’s about 1000 lines of C in a single file with no dependencies, and it implements all the basic features you expect in a minimal editor, as well as syntax highlighting and a search feature. This booklet walks you through building
佐野武俊 / Taketoshi Sano, (kgh12351@nifty.ne.jp) $Date: 1999/05/20 11:27:05 $, ($Revision: 1.11 $) Linux C Library (libc) の概要について、その役割と歴史などを簡単に まとめたものです。内容および文書の構成についての御意見をお待ちして おります。 1. 「ライブラリ」とは 2. 共有ライブラリ 3. Linux C Library : コードの起源 3.1 Linux C Library : libc5 (ELF) 3.2 Linux C Library : libc6 (glibc2) 4. Linux C Library : 今後の発展 5. おわりに 5.1 お願い 5.2 謝辞 5.3 この文書の配布について 1. 「ライブラリ」とは まずは JF にある GCC-HO
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く