Mojo 🔥 - A systems programming language presented at LLVM 2023
はじめに 半導体の微細化が鈍化し、ハードウェアによる高速化が困難になっている現状において、ソフトウェアによる計算の高速化が喫緊の課題となっています。この状況において、特定のドメインの問題を解くことに最適化された言語であるドメイン固有言語と、そのコンパイラであるドメイン固有コンパイラの活用が望まれています。 ドメイン固有コンパイラの構築の際には、開発を容易にするために、既存のコンパイラ基盤であるLLVMを活用することが考えられます。しかし、LLVM はドメイン固有コンパイラの構築にはあまり向きません。この理由は、LLVM の成功と表裏一体の関係にあります。 LLVM が成功した理由は、コンパイラの処理を適切に分割し、独立したモジュールとして機能させたことにあります。このモジュール化において中心的な役割を果たしているのが、LLVM で用いられる中間表現(Intermediate Represe
Innovative Tech: このコーナーでは、テクノロジーの最新研究を紹介するWebメディア「Seamless」を主宰する山下裕毅氏が執筆。新規性の高い科学論文を山下氏がピックアップし、解説する。Twitter: @shiropen2 Pythonは人気な言語だが、実行速度が遅いため、速さを求められる環境になると違う言語が採用される。この研究では、Pythonのような高水準言語のシンプル性とCやC++のような低水準言語の高速性を兼ね備えることができるPythonベースのコンパイラ「Codon」を提案する。 Codonは、Pythonのコードをネイティブなマシンコードにコンパイルするコンパイラであり、シングルスレッドにおいて通常のPythonよりも10倍から100倍速く実行され、CやC++に匹敵する速度を実現できるという。またCodonではマルチスレッドも可能なため、より大きな性能向上
At Leaning Technologies, we help harness the power of modern browsers so you can develop complex, high-performance web applications, or preserve critical legacy systems, in any programming language. Our state-of-the-art WebAssembly solutions are here to help.
この記事は言語実装 Advent Calendar 2021の12日目の記事です。12日はとっくに過ぎているのですが、カレンダーが空いていたので書かせて頂きました。 自作言語llrlには、LLVM JITを用いたマクロ機能が備わっています。この機能の実装過程での課題を振り返ります。 以下の記事もご参照ください。 マクロの背景: llrlの概要 マクロに関連する機能を中心的に、llrl言語自身について紹介します。 llrlはLisp-likeな構文の自作プログラミング言語です。特に特定の用途に特化しているわけでもない汎用(general-purpose)プログラミング言語ですが、Lispのように、プログラムがS式で記述されるのが特徴的です。いくつか例を見てみます。 ; 関数定義は (function signature body ...) で行う (function (fibonacci-n
Multi-Level Intermediate Representation OverviewThe MLIR project is a novel approach to building reusable and extensible compiler infrastructure. MLIR aims to address software fragmentation, improve compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers together. Weekly Public MeetingWe host a weekly pub
Note (2024, ezrosent@) While the policy on bugs and feature requests remains unchanged I've had much less time over the last 1-2 years to devote to bug fixes and feature requests for frawk. Other awks are more actively maintained, and CSV support is now a much more common feature in awk compared to when this project started; I'll update this notice if frawk's status changes. frawk is a small progr
これは、言語実装 Advent Calendar 2020 19日目の記事です。 最近は、コンパイラやインタプリタなどの言語処理系や、それに類するものを作る人が増えてきています。(私の周りだけかもしれませんが。) しかし、もう一歩進んで、コンパイラ基盤を作ってみたという話はあまり聞きません。 コンパイラ基盤は、それの対象とするアーキテクチャについてや、それ自体の使い勝手を考えるのが非常に面白いものです。また、コンパイラ基盤を作る中で、コンパイラや計算機自体についてより深く学ぶことが出来ます。 この記事では、私が開発中のコンパイラ基盤を例として、コンパイラ基盤について語っていきます。 そもそもコンパイラ基盤とは コンパイラ基盤と言えば、近年色々な所で目にするのがLLVMです。 LLVMを使うことで、コンパイラの複雑で面倒な部分を避けつつ、コンパイラを構成することができるようになりました。 下
この記事は言語実装 Advent Calendar 2020 3日目の記事です。前回は sisshiki1969 さんの「ruruby: RustでつくっているRuby」、次回は yharaさんの「Shiika進捗」です。 趣旨 LLVM を使って小さな言語を実装してみます。 方針としては、最小限の機能の言語から出発して動くものを少しづつ大きくしていきます。ゴールは LLVM 公式のチュートリアルである Kaleidoscope の序盤相当の部分で、次のプログラムが動くことを目標とします。 def fib(n) if n < 3 then 1 else fib(n-1) + fib(n-2); fib(10) #=> 55 想定する読者 LLVM や LLVM IR がどういうものか何となく知っている Haskell がなんとなく分かる ただしコードにはコメントを入れて、LLVM IR や
記事一覧 はじめに マルチパスコンパイラ (この記事) 定数に関する最適化 プログラムの構造 対象読者 コンパイラの内部構造について興味がある方 コンパイラに関して精通している方(批評お待ちしております) ワンパスコンパイラ 突然ですが,初めてコンパイラを作るのであれば,大抵次のような構造になると思います. 図中の赤い部分は,どんなにシンプルなコンパイラでも含まれているだろうという意味を込めたものです.字句解析や中間言語生成はそれぞれ構文解析やコード生成と区別化がつかなくなっている場合もあるかと思います. ここで図中に,一つのパスと書かれているのが気になった方もいるかと思います. プログラムのとある表現(ソースコードや中間言語)は,ある操作を施されて別の表現へと移っていきます.この時,ある操作やそれを行うためのルーチン群のことをパスと呼びます. この説明だと,ASTが中間言語へ変換されるの
Haskellのパーサコンビネータmegaparsecと、コンパイラ基盤であるLLVMを使って、コンパイラを作ってみます。モチベーションとしてはコンパイラはC/C++を使って作るのが定番ですが、型の恩恵を受けながら開発したいなあということでHaskellでも作れないか調べてみました。 コンパイラ作成の流れ パーサコンビネータのMegaparsecで四則演算のパーサを作成します。 LLVM IR構築のライブラリであるllvm-hs-pureでLLVM IRのコードへ変換するコンパイラを作成します。 簡単な式をコンパイルしてLLVMのインタープリタlliで実行します。 LLVMのコンパイラllcでアセンブラを生成してgccでバイナリまで生成します。 環境 あらかじめ以下をインストールしておいてください。 stack 1.9.3 Haskell 8.6.5 LLVM 9.0.0 コマンドラインで
この記事は、Rustその2 Advent Calendar 2019の22日目の記事です。 はじめに Rustのコンパイラは内部でLLVMを利用しています。 LLVMとはいわゆるコンパイラ基盤というもので、Rustのコンパイル側でLLVMの中間コード(IR)まで生成できたら、あとはLLVM側が最適化や実行ファイルの作成までを行ってくれます。 Rust Blogの記事「Introducing MIR」の中にある画像が大変わかりやすいので、そちらを引用させていただきます。 ビルドの流れ このコンパイラ基盤の視点から言うと、Rustコンパイラはフロントエンド、LLVM側はバックエンドという位置づけです。 LLVMが様々な環境で動くプログラムを生成できるからこそ、Rustも多くの環境で動くプログラムを比較的容易に生成できるわけです。 プログラムの最適化技術についても、LLVM側でそのノウハウを洗練
自作言語のすすめ ある程度プログラミングに慣れてくると、「自分で設計したオリジナル言語」を作りたくなりますよね?...ね? 自分で設計した言語を使って、ウェブのフロントエンドアプリ開発に利用できたら楽しそうです。実用性は無いに等しく、ましてやお仕事での開発で利用できるはずもありませんが、技術的な興味と自己満足で、自作言語でWebAssemblyのアプリを作ってみようという試みです。 orelang 皆さんはorelangについて覚えているでしょうか? 覚えてるも何も、知らねぇよそんなもん初めて聞いた、というかもしれません。元ネタは3年前に一部界隈で流行った、とても低機能な自作言語の記事です。 ▼プログラミング言語を作る。1時間で。 https://qiita.com/shuetsu@github/items/ac21e597265d6bb906dc 制御構造は条件つきループのuntilのみ
概要 dereferenceable_globally NonZeroUXXのLower 空無限ループ 終わりに 概要 この記事はRust Advent Calendar 2019の12日目の記事として書かれました。 qiita.com 遅刻してしまった...すいません(最悪)。 言わずもがなRustはLLVMをバックエンドに持つ言語です。 なのでバグがLLVMの最適化のせいだったりします。有名な例はnoaliasとか無限ループとかです。この辺りは定期的(2ヶ月一回くらい?)にTwitterとかで話題になりますね。またRustでの強い制約がLLVMにおける意味とのギャップで弱く表現せざるを得なかったりもします。そんな感じのこと少しだけ掘り下げて、RustのIssueとかLLVMのPhabricatorから幾つかまとめてみます。怪しいこと言ってたら教えて下さい。 dereferenceabl
The LLVM Projectは9月19日、コンパイラおよび関連ツールチェーン集「LLVM 9.0」をリリースしたことを発表した。ライセンスが例外付きApache License 2に変更になったほか、機能面ではメインラインのLinuxカーネル(x86_64)のビルドが可能になり、RISC-Vサポートが正式扱いとなるなどの強化が加わっている。 LLVMはモジュラーおよび再利用可能なコンパイラとツールチェーンを提供するプロジェクト。イリノイ大学でSSAベースのコンパイラ開発プロジェクトとしてスタートした。現在はLLVM Coreに加え、フロントエンドのClang、デバッガのLLDB、C++11とC++14をサポートするC++ Standard Libraryの実装であるlibc++とlibc++ ABIなど、複数のサブプロジェクトを擁する。 LLVM 9.0は3月に公開されたバージョン8に
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く