マイクロソフトは現在開発中のフレームワーク「.NET 7」で、ソースコードからターゲットプラットフォームに対応したネイティブバイナリをコンパイル時に生成するAOT(Ahead of Time)コンパイラを搭載する見通しだと、「Announcing .NET 7 Preview 3」で明らかにしています。 AOTコンパイラ、すなわち事前コンパイラとは、アプリケーションのビルド時にソースコードをコンパイルしてネイティブバイナリを生成する機能を備えています。 一般に「コンパイラ」とはこのAOTコンパイラのことを指すことが多いですが、アプリケーション実行時にソースコードや中間コードから動的にネイティブバイナリを生成するコンパイラのことをJIT(Just-in-Time)コンパイラと呼ぶのに対比して、あえて「AOTコンパイラ」と呼ぶことも最近では増えてきました。 現在、.NET対応のプログラミング言
昔、gist にだけ置いてて、そういえばブログに書いてなかったものを思い出したので書いておくことに。 (一応、部分的には言及したことがあるんですけど、ちゃんとした話はしたことがなかったはず。) 決定論的ビルド 3年くらい前まで、C# コードをコンパイルすると、ソースコードを一切書き換えていなくても、生成結果の exe/dll や pdb のバイナリが変化していました(決定性(deteminism)がない)。 原因は以下の2つです。 バイナリ中に埋め込まれる GUID にタイムスタンプと乱数から生成される値を使っていた デバッグ用のファイル情報がフルパスで埋め込まれていた GUID の方はタイムスタンプと乱数なので本当に致命的で、ローカルで再コンパイルしても毎回バイナリが変化していました。 フルパスの方は基本的には pdb (デバッグ用シンボル情報)だけの問題なんですが、 exe/dll で
一般に「コンパイラ」と呼ばれるソフトウェアは、あるプログラミング言語で書かれたソースコードをコンパイルし、ターゲットとなるプラットフォームで実行可能なバイナリに変換する機能を備えています。 例えばCコンパイラならC言語をコンパイルし、FortranコンパイラならFortran言語をコンパイルして、ターゲットとなるOSやハードウェア、例えばx86用のLinuxや、あるいはメインフレームなどで実行可能なバイナリを生成するといった具合です。 「LLVM」はこうしたコンパイラを開発するための、基盤となるソフトウェアを開発するオープンソースプロジェクトといえます。LLVMは基本的にはClangと呼ばれるフロントエンドを用いてC/C++/Objective-Cなどをソースコードとして読み込み、LLVM IRと呼ばれる実行環境に依存しない中間表現を生成。そこからLinuxやWindows、FreeBSD
General-purpose Programming Language implemented with Go and LLVM. Presentation at Go Con Spring 2017
GNU ProjectのGCC開発チームは4月27日、「GNU Complier Collection(GCC) 6.1」を公開した。6系初のリリースとなり、C++14がデフォルトとなるなどの変更が加わっている。 GNU Complier Collection(GCC)はC/C++/Objective-C、Fortran、Java、Ada、Goなどの言語に対応するコンパイラ集。当初GNU Operating System向けのコンパイラとして開発されたという経緯を持つ。 GCC 6.1は、2015年4月に最初のリリースが公開されたGCC5系に続く最新版となる。5系の最新版は2015年12月に公開された5.3。C++のフロントエンドのデフォルトが、これまでのC++98からC++14に変更された。古いC++向けコードについては明示的に使用するC++標準を指定するか、コードの修正が必要としている
(注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部本当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな
本連載は、はてなエンジニアが、はてなのサービスを支えている技術や日頃注目している技術について解説するものです。Appleは毎年WWDCでいくつもの新規技術を発表していますが、筆者はその中でもObjective-Cの進化に特に注目していました。新たに追加されるAPIやサービスの前では、Objective-Cの進化はあまり注目されてきませんでしたが、実はここ数年の間も進化し続けていました。これにはAppleがコンパイラ技術にコミットしてきたことが大きく影響しています。今回は、Appleのコンパイラ関連技術を振り返り、Swiftにどう繋がるのかを解説します。 はじめに SwiftはAppleによって開発された全く新しいプログラミング言語です。WWDC 2014で稲妻のように現れたこのプログラミング言語は、またたく間に世界中のモバイルアプリ開発者の注目を集めました。 Swiftは衝撃的な登場だった
Cコンパイラといえばとてつもなく複雑なプログラムというイメージがあります。ところが、このCコンパイラを(サブセットとはいえ)わずか500行ほどのCのソースコードで実現した「CC500」名付けられたプログラムが公開されています。 ソースコードは可読性を維持するためにつけられた空行やコメントを含めると、実際は750行ほどになるそうですが、それでもこれだけコンパクトなソースコードで実行可能なELFバイナリ(Linux用のバイナリ)を生成できるのは興味深いのではないでしょうか。 以下実際にLinuxでコンパイルしてみました。 自己コンパイルできる このコンパイラはC言語のサブセットで、自分自身のソースコードをコンパイルできるところがおもしろいところです。まず「cc500_1」という実行ファイルを生成します。 gcc cc500.c -o cc500_1 生成された実行ファイル「cc500_1」を使
コンパイラ環境LLVM(Low Level Virtual Machine)を開発するLLVM Projectは6月18日、最新版となる「LLVM 3.4」をリリースした。C/C++フロントエンド「Clang」も新しくなり、自動フォーマットツールなどが加わっている。 LLVMは強力な最適化機能を特徴とするコンパイラフレームワーク。イリノイ大学の研究プロジェクトとしてスタートしたもので、任意のプログラム言語の静的/動的コンパイルをサポートするコンパイラの構築を目指している。ソースコードやターゲットに依存しないコアライブラリを中心に、C/C++/Objective-CコンパイラのClang、GCCと連携してAdaやFortranなどGCCがサポートする言語をLLVMでコンパイル可能にする「dragonegg」など多数のサブプロジェクトを持つ。 LLVM 3.4は2013年6月に公開されたバージ
LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. 11月6日から7日(米国時間)にかけてサンフランシスコで開催された「2013 LLVM Developers' Meeting」におけるプレゼンテーションのようすがサイトにアップロードされた。Sony Computer EntertainmentのPaul T. Robinson氏がPlayStation 4の開発環境について発表しており、コンパイラインフラストラクチャとしてLLVM Clangを採用していること、採用に至るまでの検討事項や、結果としてどのような利点が得られたかを説明している。 PlayStation 4の開発にはLLVM
The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, as well as libraries for these languages. GCCのメーリングリストにJava(GCJ)のサポートを終了し、代わりにGo言語をデフォルトのサポート言語としてはどうかという提案が「[RPC]Replace Java with Go in default languages」として投函された。すでにGCJの開発はメンテナンスモードに入っていること、OpenJDKという活発な開発コミュニティが存在していること、OpenJDKの活動を引き出すというGCJの当初の目的はすでに果たせたこと、などが理由としてあげられている。 GCJはGCCのブートストラップおよびリグレッシ
27. Cygwin 64 と gcc 4.8.1 2013.8.13 (鈴) 27.1 はじめに 27.2 64 ビット版 Cygwin のインストール 27.3 LP64 データモデル 27.4 gcc 4.8.1 による C++11 27.5 gcc 4.8.1 による Fortran 95 27.6 MinGW gcc と libstdc++, libfortran を探して 27.7 おわりに 27.1 はじめに 先月下旬 Cygwin の新時代を画するリリースがありました。 初の公式 64 ビット版リリース [cygwin.com] です。 いよいよ Cygwin プログラムでも 64 ビット版 Windows の広大なメモリ空間を利用できるようになりました。 32 ビット版 Cygwin の gcc がまだ 4.7.3 なのに対して 64 ビット版 Cygwin の gcc
[Phoronix] LLVM's Clang Compiler Is Now C++11 Feature Complete C++11 support is now feature-complete. · e6e68b5 · llvm-mirror/clang · GitHub 3時間前のコミットにより、Clangは晴れてC++11規格を完全に実装した。その通り、完全にすべて実装した。 コミットは、Inheriting Constructorsとthread_localの機能を有効にする変更だ。 もちろん、まだ実装にバグは残っているだろうし、規格上のバグもあるので、開発に終わりはない。ただし、今日は記念すべき日である。 static_puts said... そうすると、ますますC++11本の重要性が高まってきますね! 「寄付のお願い」の方にも書かせていただいたのですが、書籍の執筆への寄
内容紹介本書は趣味でLLVMを触っている著者二人のLLVMをもっと普及させていきたいと思いから生まれたLLVM解説本です。 LLVMは今非常に注目されていますが、度重なるAPI仕様の変更や公式ドキュメントの充実さなどが理由で、まとまった解説がなされたものはありませんでした。本書によりまとまった情報が日本語で手に入るようになり、多くの方にLLVMを知って頂けると幸いです。 本書ではLLVMを使用したコンパイラの作り方を順を追って説明しLLVMへの理解を深めてもらおうというのがコンセプトになっています。フロントエンド(中間表現出力まで)、ミドルエンド(最適化)、バックエンド(オブジェクト生成)と幅広く解説していますので多くの方に有用な内容を含んでいるのではないでしょうか。 LLVMの用途は多岐にわたり,本書では解説できていない部分もありますが,初心者向けの情報としてLLVMを利用するための基礎
LLVM開発チームは5月22日、コンパイラ環境「LLVM(Low Level Virtual Machine) 3.1」を公開した。同時にC/C++フロントエンドの「Clang 3.1」もリリースされている。本リリースではC++11のサポートが強化され、ほぼすべての機能に対応した。 LLVMはコンパイラを実装するためのインフラストラクチャを提供するもので、コアとなる「LLVM Core」と、LLVM Coreを使用する「Clang」などのコンパイラフロントエンド、オプティマイザや各種ライブラリなどから構成されている。 LLVM 3.1は約6ヶ月に渡る開発期間を経てのリリースとなった。大きな特徴としては、C/C++向けの高速なメモリエラー検出「AddressSanitizer」の導入、MachineInstrのバンドルがある。また、ARMマクロアセンブラの統合によりARMコンパイルが高速化し
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く