[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

compilerに関するlizyのブックマーク (65)

  • Meta Releases Open Source React Compiler

    lizy
    lizy 2024/05/18
    手動でメモ化(useMemo)しなくてもコンパイラがいい感じにやってくれるらしい、instagram.comで導入済みとのこと
  • マイクロソフト、次の.NET 7にネイティブコンパイラを搭載する見通しを明らかに

    マイクロソフトは現在開発中のフレームワーク「.NET 7」で、ソースコードからターゲットプラットフォームに対応したネイティブバイナリをコンパイル時に生成するAOT(Ahead of Time)コンパイラを搭載する見通しだと、「Announcing .NET 7 Preview 3」で明らかにしています。 AOTコンパイラ、すなわち事前コンパイラとは、アプリケーションのビルド時にソースコードをコンパイルしてネイティブバイナリを生成する機能を備えています。 一般に「コンパイラ」とはこのAOTコンパイラのことを指すことが多いですが、アプリケーション実行時にソースコードや中間コードから動的にネイティブバイナリを生成するコンパイラのことをJITJust-in-Time)コンパイラと呼ぶのに対比して、あえて「AOTコンパイラ」と呼ぶことも最近では増えてきました。 現在、.NET対応のプログラミング言

    マイクロソフト、次の.NET 7にネイティブコンパイラを搭載する見通しを明らかに
  • C# で、同じソースコードから常に同じバイナリを生成する

    昔、gist にだけ置いてて、そういえばブログに書いてなかったものを思い出したので書いておくことに。 (一応、部分的には言及したことがあるんですけど、ちゃんとした話はしたことがなかったはず。) 決定論的ビルド 3年くらい前まで、C# コードをコンパイルすると、ソースコードを一切書き換えていなくても、生成結果の exe/dll や pdb のバイナリが変化していました(決定性(deteminism)がない)。 原因は以下の2つです。 バイナリ中に埋め込まれる GUID にタイムスタンプと乱数から生成される値を使っていた デバッグ用のファイル情報がフルパスで埋め込まれていた GUID の方はタイムスタンプと乱数なので当に致命的で、ローカルで再コンパイルしても毎回バイナリが変化していました。 フルパスの方は基的には pdb (デバッグ用シンボル情報)だけの問題なんですが、 exe/dll で

    C# で、同じソースコードから常に同じバイナリを生成する
  • WebAssemblyに正式対応した「LLVM 8.0」がリリース

    一般に「コンパイラ」と呼ばれるソフトウェアは、あるプログラミング言語で書かれたソースコードをコンパイルし、ターゲットとなるプラットフォームで実行可能なバイナリに変換する機能を備えています。 例えばCコンパイラならC言語をコンパイルし、FortranコンパイラならFortran言語をコンパイルして、ターゲットとなるOSやハードウェア、例えばx86用のLinuxや、あるいはメインフレームなどで実行可能なバイナリを生成するといった具合です。 「LLVM」はこうしたコンパイラを開発するための、基盤となるソフトウェアを開発するオープンソースプロジェクトといえます。LLVMは基的にはClangと呼ばれるフロントエンドを用いてC/C++/Objective-Cなどをソースコードとして読み込み、LLVM IRと呼ばれる実行環境に依存しない中間表現を生成。そこからLinuxWindows、FreeBSD

    WebAssemblyに正式対応した「LLVM 8.0」がリリース
  • オーバーライドされた仮想関数にまつわる最適化 - Qiita

    はじめに あるクラスから派生したクラスで、基底クラスのメソッドをオーバーライドしたとする。この時、派生クラスがコンパイル時にわかっているときに、コンパイラはそれを認識して最適化できるか試してみた。 使うコンパイラは以下の通り。 g++ (Homebrew GCC 7.3.0_1) 7.3.0 clang++ Apple LLVM version 9.1.0 (clang-902.0.39.2) icpc (ICC) 18.0.1 20171018 ただし、インテルコンパイラについては最後でちょっと触れるだけにする。 ケース1: 静的な宣言 こんなコードを考える。

    オーバーライドされた仮想関数にまつわる最適化 - Qiita
  • Go でつくる汎用言語処理系 実装戦略

    General-purpose Programming Language implemented with Go and LLVM. Presentation at Go Con Spring 2017

    Go でつくる汎用言語処理系 実装戦略
  • GCC 6.1がリリース - C++17新機能,OpenMPフルサポート,OpenACCサポート向上

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    GCC 6.1がリリース - C++17新機能,OpenMPフルサポート,OpenACCサポート向上
  • 「GCC 6.1」リリース、C++14がデフォルトに | OSDN Magazine

    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++標準を指定するか、コードの修正が必要としている

    「GCC 6.1」リリース、C++14がデフォルトに | OSDN Magazine
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

  • Swiftから透けて見えるAppleのコンパイラ技術

    連載は、はてなエンジニアが、はてなのサービスを支えている技術や日頃注目している技術について解説するものです。Appleは毎年WWDCでいくつもの新規技術を発表していますが、筆者はその中でもObjective-Cの進化に特に注目していました。新たに追加されるAPIやサービスの前では、Objective-Cの進化はあまり注目されてきませんでしたが、実はここ数年の間も進化し続けていました。これにはAppleがコンパイラ技術にコミットしてきたことが大きく影響しています。今回は、Appleのコンパイラ関連技術を振り返り、Swiftにどう繋がるのかを解説します。 はじめに SwiftAppleによって開発された全く新しいプログラミング言語です。WWDC 2014で稲のように現れたこのプログラミング言語は、またたく間に世界中のモバイルアプリ開発者の注目を集めました。 Swiftは衝撃的な登場だった

    Swiftから透けて見えるAppleのコンパイラ技術
  • わずか500行のCソースコードで作られたCコンパイラ「CC500」 | ソフトアンテナ

    Cコンパイラといえばとてつもなく複雑なプログラムというイメージがあります。ところが、このCコンパイラを(サブセットとはいえ)わずか500行ほどのCのソースコードで実現した「CC500」名付けられたプログラムが公開されています。 ソースコードは可読性を維持するためにつけられた空行やコメントを含めると、実際は750行ほどになるそうですが、それでもこれだけコンパクトなソースコードで実行可能なELFバイナリ(Linux用のバイナリ)を生成できるのは興味深いのではないでしょうか。 以下実際にLinuxでコンパイルしてみました。 自己コンパイルできる このコンパイラはC言語のサブセットで、自分自身のソースコードをコンパイルできるところがおもしろいところです。まず「cc500_1」という実行ファイルを生成します。 gcc cc500.c -o cc500_1 生成された実行ファイル「cc500_1」を使

    わずか500行のCソースコードで作られたCコンパイラ「CC500」 | ソフトアンテナ
  • 「LLVM 3.4」リリース、C++14の全仕様をサポートへ | OSDN Magazine

    コンパイラ環境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 3.4」リリース、C++14の全仕様をサポートへ | OSDN Magazine
  • PlayStation 4、開発にはLLVM Clang

    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

  • GCC、JavaからGoへの入れ替え提案

    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のブートストラップおよびリグレッシ

    GCC、JavaからGoへの入れ替え提案
  • Life with Cygwin 27: Cygwin 64 と gcc 4.8.1

    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

  • Java 9が1.5以前のソースコードのコンパイルを非サポートに

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Java 9が1.5以前のソースコードのコンパイルを非サポートに
  • ClangがC++11を完全実装! 繰り返す、C++11を完全実装

    [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解説です。 LLVMは今非常に注目されていますが、度重なるAPI仕様の変更や公式ドキュメントの充実さなどが理由で、まとまった解説がなされたものはありませんでした。書によりまとまった情報が日語で手に入るようになり、多くの方にLLVMを知って頂けると幸いです。 書ではLLVMを使用したコンパイラの作り方を順を追って説明しLLVMへの理解を深めてもらおうというのがコンセプトになっています。フロントエンド(中間表現出力まで)、ミドルエンド(最適化)、バックエンド(オブジェクト生成)と幅広く解説していますので多くの方に有用な内容を含んでいるのではないでしょうか。 LLVMの用途は多岐にわたり,書では解説できていない部分もありますが,初心者向けの情報としてLLVMを利用するための基礎

    きつねさんでもわかるLLVM - 達人出版会
  • Microsoft が C++11 準拠を拡大した新コンパイラを発表

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Microsoft が C++11 準拠を拡大した新コンパイラを発表
    lizy
    lizy 2012/11/10
    もう全然ついて行けてないな……
  • LLVM 3.1/Clang 3.1登場、C++11のコア機能をほぼサポート | OSDN Magazine

    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コンパイルが高速化し

    LLVM 3.1/Clang 3.1登場、C++11のコア機能をほぼサポート | OSDN Magazine