タグ

llvmとCに関するmainyaaのブックマーク (2)

  • Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと #1/3

    [What Every C Programmer Should Know About Undefined Behavior #1/3 の翻訳です。] LLVMでコンパイルしたコードは、最適化を有効にしているとたまにSIGTRAPシグナルを生成するのはなぜなのか、と聞かれることがある。いろいろ調べたあと、(X86での話だが) Clangは "ud2" インストラクションを生成していたことがわかった。"ud2" は__builtin_trap()が生成するインストラクションと同じものだ。[訳注: #UD例外を発生させる命令。ソフトウェアが#UD例外をハンドルできているかテストするために使われる。つまり、ソースコードが未定義な振る舞いを使っていたから、LLVMはud2インストラクションを生成したのであって、LLVMのバグではない、ということ] こういう問題は幾つかあって、すべて、Cの未定義な振る

  • Tumblr

    はじめに JavaScript Advent Calendar 2011 (フレームワークコース) の17日目です。この記事では、C言語で書かれたアプリケーションを Javascript エンジン上で動かすためのツールである Emscripten について解説します。 Emscripten の原理 Emscripten はC言語のコードを Javascript のコードへ変換するツールですが、人間が移植作業を行うように「書き直し」をしてくれるものではありません。例として、以下のようなC言語のコードの移植を考えます。 #include <stdio.h> #define MESSAGE "Hello" int main() { int i; for (i = 0;i < 10;i++) { puts(MESSAGE); } return 0; } プログラマーが手作業で移植するなら、Java

    Tumblr
    mainyaa
    mainyaa 2012/10/17
    やばい。Emscripten超面白そう。NativeClientじゃなくてこっちに惹かれるなー
  • 1