タグ

gccとcppに関するraimon49のブックマーク (11)

  • 江添亮のC++入門

    書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶためのである。書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。書はいわばC++における知識のブートストラップを目指しただ。これにより読者はを先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し

  • コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記

    僕は先日、「コンパイル時Cコンパイラ」なるプログラムをつくって、公開した。 「コンパイル時Cコンパイラ」とは、コンパイルするとC言語プログラムのコンパイルが行われるというようなC++プログラムである。 C++のコンパイル中に C言語プログラムのコンパイルを行う、 "コンパイル時Cコンパイラ"をつくりました #ELVMhttps://t.co/kKiLU3rLFX— うどん (@kw_udon_) 2016年11月18日 自分で書いておいてなんだが、「なんのこっちゃ」という感じではある。(ちゃんと記事中で説明する。) 実際、変なプログラムではあるのだが、とても嬉しいことに多くの人に面白がっていただき、予想だにしなかった大きな反響をいただいた。 Hacker Newsで1位になったり、LLVMの公式ブログで紹介されたり、果てはC++の作者であるBjarne Stroustrupにも言及されるに

    コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記
    raimon49
    raimon49 2016/12/04
    インターネットの素晴らしさ。
  • コンパイラのリミッタが外れつつある今、null安全は必須なのかもしれない - Qiita

    三行で頼む コンパイラが斜め上の最適化をするようになったからnull安全ないと怖いよね 一行で終わっちゃった。 文 最近、ツイッターを見ていると、プログラマの間でnull安全という言葉がバズっていますね。私も次のようなエントリを楽しく眺めていた訳です: null安全でない言語は、もはやレガシー言語だ null安全はいいぞ。だって、型安全はいいぞ。 null安全を誤解している人達へのメッセージ さてそんな中、少しだけ私の心に留まったエントリがこれです: null安全な言語は、当にゼロコストか これを読んで、私がまず直感的に思ったのは、むしろもはやnull安全のない言語はダメかもしれないということでした。こう書くと、このエントリの内容を否定してると誤解されるかもしれませんが、全くそんなことはありません。このエントリの筆者さんもnull安全の有用性を否定しているわけではないですし、私も古いタ

    コンパイラのリミッタが外れつつある今、null安全は必須なのかもしれない - Qiita
  • GCC 5系初のリリースとなる「GCC 5.1」登場 | OSDN Magazine

    GNU ProjectとGCC開発者は4月22日、「GNU Complier Collection(GCC)5.1」」を公開した。Cのデフォルトモードの変更、最適化エンジンの強化、JITコンパイラ対応など多数の機能が盛り込まれている。 2014年4月に公開されたGCC 4.9に続くもので、GCC 5系で最初のリリースとなる。変更点としては、まずCのデフォルトモードが-std=gnu89(GNU89)から-std=gnu11(ISO C11ベースのGNU11)に変更された。また、C++ランタイムライブラリlibstdc++ではデフォルトで新しいABIを利用するようになっている。古いABIのサポートも継続するデュアルライブラリとなり、「_GLIBCXX_USE_CXX11_ABI」パラメータで利用するABIを設定できる。libstdc++ではC++11のサポートが完全対応となった。また、C++

    GCC 5系初のリリースとなる「GCC 5.1」登場 | OSDN Magazine
    raimon49
    raimon49 2015/04/27
    デフォルトABI変更
  • C++11/14の採用が進んでいないのはだいたいRHELのせい

    C++11やC++14は、すでにGCCやClangの最新の安定版で実用的に使えるようになっているが、なかなか現場で広く使われるようにはなっていないように見える。これはなぜか。やはり教育者の不足か。参考書がないのか。それもあるかもしれないが、最大の理由がある。 RHELが悪い。 RHEL 6のGCCのバージョンは4.4である。これは。C++11をまともにサポートしていない。GCC 4.4当時といえば、まだC++11がC++0xと呼ばれていた時代で、一部機能を当時のドラフトに基づいて実験的実装をしていた。正式な規格とはだいぶ異なっているだろうし、不具合もたくさんあるものと思われる。 次のRHELのバージョンは7であるが、これにはGCC 4.8が入るものと思われる。しかし、すでにGCCの安定版は4.9だ。GCC 4.8もC++11実装に不具合が色々あってあまりお勧めできない。これがあと何年も使わ

  • 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の未定義な振る

  • GCC 4.9リリース

    GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) GCC 4.9がリリースされた。少なくとも、公式Webサイトのトップページからは、リリースされたことになっている。ただし、なぜかリンクをたどると GCC 4.9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) GCC 4.9がリリースされた。興味深い変更点を上げると。 大昔の、もはや保守もテストもされていないようなプラットフォームのサポートがobsolete扱いになった。もし、活発な活動が行われない場合、次のリリースでは取り除かれるそうだ。特に、Solaris 9が挙げられている。 Cla

  • 主要なC++コンパイラーのC++14サポート状況

    ふと、C++14のコア言語の、主要なC++コンパイラーによるサポート具合はどうだろうかということに思い立った。主要なC++コンパイラーは、現在のところ、二つしかない。GCCとClangだ。最近、私は以前ほど頻繁にコンパイラーを自前ビルドしていない。C++11の実装は、だいぶこなれてきたからだ。では、C++14はどうか。 まずGCCからみてみよう。以下のページで、対応状況をまとめている。 C++1y/C++14 Support in GCC - GNU Project - Free Software Foundation (FSF) もちろん、まだ規格がドラフト段階というのもあるし、実装が完全ではないというのもあるが、GCCのC++14機能は、-std=c++1yというオプションを指定することで、有効にできる。 わかりやすい新機能で言うと、二進数リテラル、戻り値の型推定、実行時サイズ配列、汎

  • GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ

    RubyPythonなどのスクリプト言語では実行中に例外が発生するとバックトレースを出力してくれます。バックトレースがあるとどこで問題が発生したかがわかるためデバッグに便利です。一方、CやC++では不正なメモリアクセスをすると、バックトレースではなくcoreを残して1終了します2。デバッガーでcoreを解析するとバックトレースを確認できます。 このように、CやC++でデバッグするときにデバッガーはなくてはならない存在です。スクリプト言語にもデバッガーはありますが、デバッガーを使わなくてもデバッグできる範囲が広いため、CやC++をデバッグするときのほうがデバッガーのありがたさがわかります。 この記事では、広く使われているデバッガーであるGDBをもっと便利に使うためのGCCのコンパイルオプション-g3を紹介します。 サンプルプログラム まず、この記事で使うサンプルプログラムを示します。マクロ

    GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ
  • 自由ソフトウェア運動の思想に囚われた技術的に劣った選択

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

    raimon49
    raimon49 2013/04/24
    >自由を保証するため、意図的に技術上優れた設計ではなく、不自由に転用しにくい設計にしてしまうこと。これをしてしまうと、技術的優位に立つことができなくなる。技術的優位に立てなければ、人には使われない。
  • FreeBSD 10開発版、C++スタックをGPLフリーへ | エンタープライズ | マイコミジャーナル

    FreeBSD - The Power To Serve FreeBSDプロジェクトはベースシステムからGPLv2のコードを排除する取り組みを続けている。こうした動きのきっかけはデフォルトのコンパイラとして採用しているGCCがそのライセンスをGPLv3に移行させたことにある。FreeBSDプロジェクトはベースシステムにGPLv3のコードを取り込まない方針を定めている。このため、移行後のGCCへアップグレードができずにいる。ベースシステムのGCCは「GCC 4.2.2 20070831 prerelease」のままで止まっており、別のコンパイラへの移行が求められている。 FreeBSDはアプライアンスや組み込みデバイスで採用されるケースが増えており、またそうしたプロダクトを製造しているベンダはGPLのコードがベースシステムに含まれていることを良としない傾向がある。GCCから別コンパイラへの移

  • 1