Rustで自作言語とコンパイラを作るために必要な知識と実装手法を初心者向けに簡単に説明することを試みました。パーサコンビネータやLLVM関連のライブラリを利用し、Rustで自作言語やコンパイラ作りをやっていきます。
国分崇志(@k0kubun)と申します。プログラミング言語Rubyのコミッターとして活動しています。2019年からシリコンバレーで働いており、2022年からShopifyという会社でRubyのJust-In-Time(以下、JIT)コンパイラをフルタイムで開発しています。 長い間趣味でやっていたコンパイラの開発を仕事にしたのは、現職が初めてでした。この記事では、趣味を仕事に変えた経緯や、どのようにして業務経験のない分野にキャリアチェンジしたのかを紹介します。 仕事で分散システム、趣味でコンパイラを書くキャリア 楽しく稼げる仕事を求めてたどり着いたRubyエンジニア 研究で分散システムと言語処理系の両方に興味を持つ 分散ミドルウェアを仕事で、JITコンパイラを趣味のOSS活動で やっぱりコンパイラを仕事にした複合的なきっかけ 働きながら大学院に通い、コンパイラが一番好きなことに気付いた コン
こんにちは、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%程
システムプログラミング言語とは、システムプログラミングでよく使用されるプログラミング言語のことである。このような言語は、システムソフトウェアを書くために設計されており、アプリケーションソフトウェアを書く場合とは異なる設計アプローチが求められる。 システムソフトウェアとは、コンピューターのハードウェアの操作・制御のために設計されたコンピューターのソフトウェアであり、アプリケーションソフトウェアを実行するためのプラットフォームを提供する。システムソフトウェアのカテゴリーとしては、オペレーティングシステム、ユーティリティソフトウェア、デバイスドライバ、コンパイラ、リンカなどがある。 アプリケーション向けの言語とは違い、システムプログラミング言語は、典型的には、物理的なハードウェアへのより直接的なアクセス手段を提供する。BCPLは、この意味での典型的なシステムプログラミング言語だった。システムプロ
C言語で作成した拙作のCASL II処理システムYACASL2を紹介します。 CASL IIは、基本情報技術者試験で用いられるアセンブラ(アセンブリ言語)です。アセンブラは通常、特定のコンピューターやCPUに対応しています。しかしCASL IIアセンブラは、試験の公平性の観点から実在しない仮想コンピューター向けに作られたアセンブラです。 CASL IIの処理システムを作るきっかけになったのは、『日経ソフトウェア』2009年2月号に掲載されていた川俣晶さんの執筆記事「C言語で作るCPUエミュレータ」を読んだことでした。この記事を紹介した日経ソフトウェア記者・斉藤国博さんのコンピュータの仕組みを知るのは,いつも楽しいという記事は現在でもオンライン上で読めるようです(2020年8月時点)。なお、この記事で紹介されていたソースコード(C言語)は、現在ではダウンロードできないようでした。 私はいちお
数日前からCコンパイラを書き始めた。(GitHub) 植山類さんのオンラインブック、低レイヤを知りたい人のためのCコンパイラ作成入門を読みながら、概ね本の内容に沿って進めている。 自分の書いたコンパイラで自身をコンパイルするセルフホストを目指している。 コンパイラというのはある言語で書かれたプログラムを別の言語に変換するプログラムだ。 ここではC言語をアセンブリに変換するものを指している。 いきなりC言語をコンパイルするのは無理なので、徐々に複雑な入力を受け付けるように改良し、最終的にC言語を受け付けるようにする(したい)。 最初は入力をそのまま出力することから始まり、四則演算ができるようになり、いまは関数呼び出しができるようになった。 本はとても丁寧に書かれていて、参考として実装も2種類ほど存在する。 さらにSlackやYoutube Liveで質問ができるというとても恵まれた環境が揃っ
News [Note: I am no longer working on TCC. Check the mailing list to get up to date information.] Features SMALL! You can compile and execute C code everywhere, for example on rescue disks (about 100KB for x86 TCC executable, including C preprocessor, C compiler, assembler and linker). FAST! tcc generates x86 code. No byte code overhead. Compile, assemble and link several times faster than GCC. UN
1.はじめに これは Mobility Technologies Advent Calendar 2020 の 15日目の記事です。 Mobility Technologies (MoT) は今年の4月に旧JapanTaxi社と旧DeNA Automotive が事業統合してできた会社です。GOという配車アプリを提供しています。タクシー起点の交通リアルテック×AI大活用でサービス開発していますので、よろしければぜひMoT技術ブログを御覧ください! 明日は @tstomoki の 「リモートワークで自転車に乗り始めてインスタグラマーになった話」 です。 これは何 この記事は、C言語のコンパイラ開発の概要と、その中でもそれなりに手ごわかった x64 の ABI (呼び出し規約: Application Binary Interface) について一部を説明したものです。 少々ポエムも含まれてお
Microsoft plans to explore using the Rust programming language as an alternative to C, C++, and others, as a way to improve the security posture of its and everyone else's apps. The announcement was made yesterday by Gavin Thomas, Principal Security Engineering Manager for the Microsoft Security Response Center (MSRC). "You're probably used to thinking about the Microsoft Security Response Center
Nature株式会社ファームウェアエンジニアの中林 (id:tomo-wait-for-it-yuki) です。 本記事では、拙著『基礎から学ぶ 組込みRust』1がC&R研究所様より出版されたので、書籍の紹介やNatureのファームウェア開発にRustを使っていきたい、ということを書きます。 本を書きましたエントリは個人ブログで書いている2ので、それとは少し違った観点から話をしたいと思います。 『基礎から学ぶ 組込みRust』の紹介 2021年5月現在、Rustはすでにマイナーの域を超えたと言って差し支えない状況でしょう。一方、組込みRustはまだまだマイナーな分野です。『基礎から学ぶ 組込みRust』出版をtwitterやブログで告知した際も、「Rustって組込みできたんだ?」という反応が少なくありませんでした。 マイナー扱いから脱するための施策として、認知度を上げ、入門を手厚くする、
はじめにセキュリティキャンを皮切りに自作Cコンパイラがとてもはやっていました。 たのしそー僕もやりたい!!!!でもどうやるんだ??? しかし僕の周りには知る限りではコンパイラに強い人はいませんでした。 ※ 友達がいないわけではありません 誰にも頼ることなくCコンパイラを作るのは難しいのでは!? でもコンパイラは魔法みたいでいやだから知りたい。 本とかいろいろ眺めてみてもさっぱりわからなかったので誰でもできる方法はないかなーと考えたのが9ccをお手本にすることでした。 ということで9ccのファーストコミットからすべてRustにしてみました。 9ccはrui314さんがやられているCコンパイラです。 9ccのコードは可読性がとても高くとてもやりやすかったです。9cc 神 です。 おそらくこの方法で作るCコンパイラは事前知識はほとんど必要なくできると思います。 正直、やるだけだと思います(本当に
はじめに 本記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を理解しようとしても聞いたことのないような専門用語がずらりと並び、コードを読もうとしたらそれらをすべて完全に理解してないと一行も理解できないんじゃないか...。Go のコンパイラ gc のソースコードを読むまでは、私もそう思っていました。 しかし、あまりにも暇な休日のある日、思い立って gc のコードを読んでみました。すると、「コンパイル」という難解な響きの処理も、一つひとつを小さなタスクに分解することで、少しずつ読み進めることができると分かったのです! 何よりも感動したことは、 gc そのものが全て Go で書かれていて、
回答 (5件中の1件目) Arene は、トヨタとはいえ、TRI-AD という先端開発組織の成果物です。そこから容易に想像できる通り、現場の一歩先を見据えたものと捉えるのが妥当でしょう。 … 既に回答がついている通り、現行の車載システムは、複数のサプライヤが提供する多数の ECU がネットワークで疎結合されている構成です。開発言語は一つに規定できません。 ネットワークも、インフォテイメント系(カーナビとか)、ボディ系(ワイパーとかドアミラーとか)、パワー系(エンジンとか)、セーフティ系(衝突回避とか)に分かれていて、それぞれ使うバスが異なります。流れているパケットも異なります。各ノ...
追記: 本記事は g++ について書かれており、clang については補足で述べる程度でしたが、clang側の検証結果が間違っておりました。 別途 clang++ で検証した記事も書きましたので、ご覧いただけますと幸いです。 本記事の目的 昨日、株式会社フィックスターズの「Fixstars Tech Blog /proc/cpuinfo」に以下の記事が掲載されました。 RustがC++に速度で勝った話 - Fixstars Tech Blog /proc/cpuinfo 本記事では、上記記事の 手元環境における追試 C++の敗因/Rustの勝因分析 条件をある程度統一した際のベンチマーク結果 の3点を行います。 ベンチマーク環境 OS Fedora 30 CPU AMD A6-1450 Memory DDR3-1333 4GB x 1 (4GB) GCC 9.2.1 Rustc 1.39.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く