タグ

studyとLLVMに関するraimon49のブックマーク (7)

  • Go言語で利用するLLVM入門 | POSTD

    はじめに LLVMは、コンパイラを作成するための基盤です。2000年にChris Lattnerによって作成され、2003年にリリースされました。それ以来、LLVMリンカ lld やLLVMデバッガ lldb など幅広いツール群を持つ包括的なプロジェクトに発展してきました。 LLVMの秀でた特徴は、一般に LLVM IR と呼ばれる、その中間表現です。LLVMの考え方は、まずこのIRにコンパイルし、次にそのIRを、JITコンパイルする、インタープリタで実行する、または実行しているマシンのネイティブアセンブリにコンパイルするといういうものです。このIRの主なターゲットは、コンパイラです。実際LLVMを使用するコンパイラは、世の中に数多くあります。C言語とC++用はそれぞれclangとclang++、D言語用の ldc2 、RustSwiftなどです。 Emscripten のようなプロジェ

    Go言語で利用するLLVM入門 | POSTD
  • Testing Swift's ErrorType: An Exploration

    In this post, we explore the nature of Swift’s new error type, looking at the possibilities and restrictions for testing error handling implementations. We end with an illustrative example, and some helpful resources. How to Implement the ErrorType Protocol If we jump to the definition of the ErrorType protocol in the Swift standard library, we see that it doesn’t contain many obvious requirements

    Testing Swift's ErrorType: An Exploration
    raimon49
    raimon49 2015/08/12
    ErrorTypeに繋がるNSErrorの系譜。domainとcodeプロ パティ。なかなかマニアック。
  • 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の未定義な振る

  • Objective-C の instancetype キーワードが面白い + typeof(self)の考察 – Zero4Racer PRO Developer's Blog

    Appleのサンプルコード、iAdSuite を見ていたら見慣れない表現が出てきたので、調べて見ました。 @implementation TextViewController - (instancetype)init { self = [super initWithNibName:@"TextViewController" bundle:nil]; if (self) { //... } return self; } こんな感じ、”- (instancetype)init”と書いているのを見て、なんで”-(id) init”じゃないのかなと思いました。 調べてみると、Clang Language Extensions — Clang 3.3 documentation clangのドキュメントによると、 A method with a related result type can be

    raimon49
    raimon49 2013/09/30
    いわゆるweakSelfを具体的なクラス名を記述せずポータブルに代入するイディオム。“__weak typeof(self) wself = self;”
  • Objective-Cにおけるinstancetype型について - Takebayashi.Asia

    先日Xcode 4.3がリリースされました。Xcode 4.3ではclangのバージョンが3.1となり、instancetypeという型をサポートするようになりました。 返り値のid型の推論 instancetypeの話の前に、id型の返り値について考えます。Cocoaでは、+ allocや- initといったメソッドは軒並みid型の値を返すようになっています。基的に、id型の値はどのようなオブジェクト参照型にも代入できることになっています。 しかし、clangは以下のようなコードに警告を発します。 NSString *myBlog = [[NSURL alloc] initWithString:@"http://takebayashi.asia/"]; + allocも- initWithStringも返り値がid型なので来ならばNSString *型の変数に代入しても文句は言われな

    raimon49
    raimon49 2013/09/30
    >「レシーバのクラス==返り値オブジェクトのクラス」となることを明示的に示すための、メソッドの返り値にのみ使える型 / いつの間にこんな型キーワードが。知らんかった。
  • Clangにおけるメソッドの戻り値の型の扱い - イグトランスの頭の中

    Clang (Apple LLVMコンパイラ)は、Objective-Cのinitやnewを特別扱いしているようです。 次のコードをコンパイルします。 // clang++ -std=c++11 -fobjc-arc -Wall -Wno-unused-variable \ // -framework Foundation t.mm extern "C" { #import <Foundation/Foundation.h> } int main() { @autoreleasepool { auto s1 = [NSMutableString string]; auto s2 = [NSMutableString new]; auto s3 = [[NSMutableString alloc] init]; } } すると、 t.mm:10:9: warning: 'auto' dedu

    Clangにおけるメソッドの戻り値の型の扱い - イグトランスの頭の中
    raimon49
    raimon49 2013/09/16
    空文字列の初期化 コンビニエンスコンストラクタのstringだけ戻り値の型推論結果が異なる
  • 自由ソフトウェア運動の思想に囚われた技術的に劣った選択

    このところ、自由ソフトウェアのコピーレフトライセンスは方向性を間違えており、許諾的なオープンソースライセンスが流行っているとする主張がある。 漢(オトコ)のコンピュータ道: フリーソフトウェア運動は方向性を間違えてはいない これについて思うことがあるので書く。その前に、まず自由ソフトウェアとは何かということから説明しなければならない。 もちろん、許諾的なオープンソースライセンスと呼ばれるもののほとんどは、ストールマンの自由四原則を満たす。 What is free software? - GNU Project - Free Software Foundation (FSF) すなわち、 あらゆる目的でプログラムを実行する自由(自由0) プログラムがいかにして動作するのかを検証し、変更して自分の意のままに動作させる自由(自由1)。ソースコードへのアクセスはこの自由への前提条件である。 複製

    raimon49
    raimon49 2013/04/24
    >自由を保証するため、意図的に技術上優れた設計ではなく、不自由に転用しにくい設計にしてしまうこと。これをしてしまうと、技術的優位に立つことができなくなる。技術的優位に立てなければ、人には使われない。
  • 1