C++に関するNao_uのブックマーク (172)

  • コンパイル中にコンパイルする「コンパイル時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の日記
    Nao_u
    Nao_u 2016/12/04
  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
    Nao_u
    Nao_u 2015/05/23
  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

    Nao_u
    Nao_u 2015/04/18
  • Googleがプログラマのビルドエラーを研究

    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が最近リリースされ、重要な変...

    Googleがプログラマのビルドエラーを研究
  • スクールガールストライカーズの 内製クライアントエンジン

    近年、ハイスペックなスマートフォン、高品質なネットワークが普及し、それによりモバイルゲームの制作手法やそれを取り巻く環境も変化してきました。スクウェア・エニックスでは、そのような環境の変化に対して、日々新たなチャレンジをし続けています。そして、このようなスピード感溢れる業界の流れには、会社の枠を超えた技術情報の共有、交流が欠かせないと感じております。 そこでこの夏、社内のエンジニア・テクニカルディレクターによる最新のモバイル開発の技術情報や社内モバイルエンジン、開発秘話によるセッションをメインに、スクウェア・エニックス モバイル オープンカンファレンスを開催する運びとなりました。また、セッションの後は登壇する弊社スタッフと直接ディスカッションやフリートークができる場を設けております。この機会にスクウェア・エニックスという会社についても、より詳しく知って頂ければ幸いです。 マネージャー・テク

    Nao_u
    Nao_u 2014/07/17
    変態的すぎるが素晴らしい
  • ゲーム開発におけるメモリアロケーションの実装について - Qiita

    はじめに 今回は、メモリアロケーションに関して、Java・C#などプログラミング言語やUnity・UDKなどのゲームエンジンにおいてはメモリの事なんて全然気にしなくていい時代になっている(!?)中、ゲーム開発におけるメモリアロケーションについて、えーでるわいすで現在使われているゲームエンジンでの実装も踏まえて一回まとめてみようかと。。。 発端は、@aizen76さんの「カスタムメモリマネージャと高速なメモリアロケータについて」というスライドを偶然見つけたのがきっかけで、自分は今まで深く理解せず何となくでやってきてしまっていた気がしたのでちょっとまとめて見ようと思い立った感じです。 対象 C++初級者~中級者ぐらい ※ ガベコレだのスマートポインタだのmallocの実装によるマルチスレッド環境下での速度がどうとかその辺の話は止まらなくなるので我慢します( ´∀`) メモリアロケーションって何

    ゲーム開発におけるメモリアロケーションの実装について - Qiita
    Nao_u
    Nao_u 2014/03/26
  • 本当に怖いC++erとC++という糞言語 - 神様なんて信じない僕らのために

    かつて、ゲームプログラミングはアセンブリが主流で、8bitCPUは掛け算や割り算すらないものでした。割り算がないCPUっていつの時代だよ、っていう人たちもおりますが、ゲームボーイアドバンスに搭載されているARM7TDMIは除算の命令を持っていません。(故に除算を書くと死ぬほど遅いので、乗算で代用したりする) また、浮動小数に対する演算ユニットを持っていないハードウェアもあります。ニンテンドーDSに搭載されているARM946E-Sですら、浮動小数演算ユニットはありません。(CPUの機能としてはオプションで存在する)そのために固定小数点といった技術もあるわけですが、古くさい話です。 これらはCとC++の機能を駆使していかにパフォーマンスを出すかを余儀なくされた時代です。 さておき、最近はスマートフォンでのゲーム開発も進化しており、C++iPhoneAndroidの両方で動くということもあ

    本当に怖いC++erとC++という糞言語 - 神様なんて信じない僕らのために
    Nao_u
    Nao_u 2013/12/25
  • スレッドセーフという幻想と現実 - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2013の15日目にエントリしています。 内容はC++標準ライブラリとスレッドセーフに関する解説になります。 flickr / rennasverden もくじ What's スレッドセーフ? スレッドセーフという幻想 基型とデータ競合 C++標準ライブラリとデータ競合 C++標準ライブラリ:シーケンスコンテナ編 C++標準ライブラリ:連想コンテナ編 スレッドセーフ RELOADED 基的なスレッドセーフ保証 std::shared_ptr<T> std::rand() std::cout (文のみ約9000字) はじめに マルチスレッド対応の点では他言語に遅れを取っていたプログラミング言語C++ですが、C++11ではようやく標準ライブラリにスレッドサポートが追加されました。C++11スレッドサポートではスレッドクラスstd::thr

    スレッドセーフという幻想と現実 - yohhoyの日記(別館)
    Nao_u
    Nao_u 2013/12/16
  • Visual C++で使えるC++11

    2.  身内向けです。  Visual C++で使えるC++11の機能を、言語機能、 ライブラリに分けて紹介します。  紹介する機能は私が独断と偏見で選んだ一部です。 全て紹介するわけではありません。  コンパイラやライブラリのバグや部分対応までい くと作業量大変なのでそこら辺は触れません  内容の正しさには気をつけていますが間違えてい る可能性もあります。 3.  サンプルコードは暗黙に必要なヘッダのインク ルード、using namespace std;をしています。  また、イメージとしてのサンプルで、実際には動 かないコードもあります。  ライブラリの初出は所属する名前空間がstd::tr1 ではなくstdになった初めてのバージョンとしま す 4. Visual C++ 10.0 (Visual Studio 2010) VC10 Visual C++ 11.0 (

    Visual C++で使えるC++11
    Nao_u
    Nao_u 2013/09/22
  • 軍事とIT(4) F-35ライトニングIIのソフトウェア | マイナビニュース

    過去3回に渡って、F-35ライトニングIIのさまざまな機能・能力について解説してきた。その中でも言及しているが、F-35ではソフトウェア制御の比重が高まっている。実はF-35に限らず、最近のウェポン・システムは多かれ少なかれ、似たような傾向があるが。 ということで今回は、そのF-35のソフトウェア開発に関する話を。 ウェポン・システムのソフトウェア 「コンピュータ、ソフトなければただの箱」なんてことをいうが、それはウェポン・システムの場合でも同様である。しかも、実際に開発に携わった経験がある方ならお分かりの通り、コードを書くだけでなく、それをテストするために必要な手間と時間の負担が大きい。 ソフトウェアのテストで何が大変なのかといえば、通り一遍の、設計仕様通りの使い方をする場面だけではなく、そこから外れた場面についてもテストする必要がある点だ。そして、そういうところでトンでもないバグが出る

    軍事とIT(4) F-35ライトニングIIのソフトウェア | マイナビニュース
  • DynamicPatcher - Runtime C++ Editing - primitive: blog

    [2013/12/25 追記] この DynamicPatcher をさらに改良し、Visual Studio のアドインとして実装した Alcantarea をリリースしました DynamicObjLoader を改良し、実用に耐えそうな実行時 C++ コード編集機能を実装しました。 C++ コードを編集してそれをリアルタイムに反映させることができます。 DynamicPatcher https://github.com/i-saint/DynamicPatcher (bin) DynamicObjLoader の時点で一応は同等機能を実現していたのですが、更新したい関数を事前にマクロで包む必要があったり、virtual 関数を持つ class はシリアライズが必要だったりと、運用上色々面倒な点がありました。 今回はそのへんが大きく改良されています。 ・前準備なしに既存のほぼ全ての関数を

    DynamicPatcher - Runtime C++ Editing - primitive: blog
    Nao_u
    Nao_u 2013/06/11
  • Boost.老害

    I @wx257osn2 何回か話に出してるけどC++0x策定前後にC++格的に始めたせいでかなりスムーズにC++11に馴染んだけど、scoped_ptrとか諸々は標準ライブラリに入ってるのが当たり前になっててあんまりBoostのお世話になってないから個人的にBoostすごいっって感覚があんまりない 2013-02-14 00:29:42

    Boost.老害
    Nao_u
    Nao_u 2013/05/11
  • ネイティブコードとマネージドコードを同時に利用する方法: ヘキサドライブ日記

    こんにちは。店長です 暑い日と寒い日が繰り返してますが、 皆様は体調を崩してないでしょうか? 今日は、 ネイティブコードとマネージドコードを同時に使うテクニック を紹介致します。 例えば、 C++ゲーム用の描画ライブラリを作ったあと、 ”この描画ライブラリを使ってグラフィカルなツール作りたいなぁ・・・” と思ったことは無いでしょうか? そして実践してみると、 ・WIN32APIが使いにくい。 ・もっとリッチなGUIを使いたい。 ・ツール部分だけはC#使いたい。 など頭を悩ませた人も少なくないと思います そういう時に役に立つかもしれないテクニックです あんまり詳細なこと書くと大変量になるので、要点以外省くことをご了承ください。 例として ・Windows環境 ・VisualStudioでの開発 ・C++で描画ライブラリ(graphics.dll)を作成(ネイティブコード) ・C#とxaml

    Nao_u
    Nao_u 2013/04/17
  • experimental codes - primitive: blog

    最近書いた雑多な実験コードのまとめ。 ・GetThisOfCaller() 現在の関数の呼び出し元がメンバ関数であればその this を返すというもの。 スタックフレームをさかのぼり、デバッグ情報を使って該当スコープの変数を巡回して this が見つかればそれを返す、ということをやっています。(たまたま今回 this が欲しかっただけで、それ以外の変数も可能です) 非 Debug ビルドの時はよくデタラメな値が返ってくるため、使いものにならないですが、Debug で限定的な状況で役立つ可能性が無きにしもあらずです。 ・メンバ関数の中と外で違う処理を行うマクロ VisualC++ の拡張 __if_exits, __is_not_exits を使って this の有無で違う処理をさせるというもの。 __if_exits は指定シンボルの有無で分岐するという代物で、主にメタプログラングに使われ

    experimental codes - primitive: blog
    Nao_u
    Nao_u 2013/04/15
  • C++ - アンサイクロペディア

    概要[編集] 関わる者全てを、混沌と困惑と混迷の螺旋へと落とし込み、その長大な術式は術者の精神力をマッハで削る。初学者向けに蛇足ながら具体例を示すと、僅か5センチにも満たない術式に対し、警告が2メートルにも及ぶことなどはザラである。かの大殺界における盟主、また、Linuxという原理主義組織における師を自認するLinus Torvaldsをして、C++は複雑すぎると言わしめたほどの高等言語なのである。それを踏まえ、近代における再評価を加味するとつまり、複雑すぎて使えないという、仇花とも言うべき質が明らかになりつつある論調を無視することは出来ない。 しかしながら、C++の特性、独特の長所があるというのも一面の事実ではある。それは、術者が高度に言語を理解している限りにおいては、高度に最適化された術式を出力できる点にある。X箱等と呼称され親しまれている民生用の呪術再生装置においては、術式再生にお

    Nao_u
    Nao_u 2013/03/28
  • eval() in C++ - primitive: blog

    しばらく前にやったことですが、ネタとして面白い気がするのでサルベージ。 DynamicObjLoader を使って C++ で eval() を実装しました。 C++er が夢に見たり見なかったりしたこういうコードが動きます。 #include "DynamicObjLoader.h" class Hoge { public: Hoge() : m_value(100) {} void doSomething() { printf("Hoge::doSomething(): %d\n", m_value); } private: int m_value; }; void* CreateAnyClass(const char *class_name) { volatile void *obj = NULL; std::string source = std::string("obj = ne

    eval() in C++ - primitive: blog
    Nao_u
    Nao_u 2013/03/22
  • C言語は今でも価値のある言語か?

    Couchbaseの作者Damien Katz氏は,C言語はバックエンドプログラミングにおいて現在でも優れた言語である,という意見を持っている。しかし他の開発者は,C言語はあまりにも欠陥が多いとしてC++Javaを支持するもの,あるいはいずれも好まないというものなどさまざまだ。 CouchDB の開発者であるDamien Katz氏は,The Unreasonable Effectiveness of C と題した先日のブログ記事において,C言語がバックエンドのための優れた言語であると断言した。氏はC++Java,さらにはErlangやRubyのようなより現代的な言語よりも,今後もC言語を支持していくつもりだという。ただし単純に,C言語を他のどれよりも優れた言語だと言っている訳ではない。"言語自体のパフォーマンスと信頼性が重視される場面においては,C言語に比類する言語は皆無である",別

    C言語は今でも価値のある言語か?
    Nao_u
    Nao_u 2013/01/29
    人のソースを読む時はC++よりCの方が楽。演算子のオーバーライドもないし延々同じような名前の関数呼び出しが続いてわけがわからなくなったりもしなくて、「書いてある通り動く」ので読んでてすごい安心感があった
  • ゲームプログラミングにおけるC++の都市伝説 - ソフトウエア研究会in秋葉原 - PukiWiki

    ゲームプログラミングにおけるC++の都市伝説 † この記事は、C++ Advent Calendar 2012 22日目の記事です。 Prev 21日目の記事 CEANによる配列操作 Next 23日目の記事 構造化並列プログラミング 時間の関係で3つの都市伝説しかご紹介できませんでしたが、またの機会があれば他の都市伝説についてもお話したいと思います。 2012/12/22 written by h.godai @hgodai 目次 初めに 都市伝説1 C++は遅いのでゲームには向いていない 都市伝説2 boost::poolはゲームには向いていない 都市伝説3 boostライブラリは怪しいライブラリだ。使うと呪われる。 ↑ 初めに † かつて、8bit時代はゲームのプログラムはアセンブラが主流でした。やがて、ゲームのプラットフォームが16bitから32bitになるに従い、C言語でゲーム

    Nao_u
    Nao_u 2012/12/23
    boostもそろそろ安定して使えるようになってるのかな。マルチ環境にこなれてないコンパイラが混ざってると、高確率でSTLとかテンプレートの珍しい使い方とかに致死性の地雷が仕込まれてたりするのですごく怖い
  • プログラマーの友 第四報:怪しい関数内関数

    C言語では関数内関数は定義できません。関数はファイルスコープでしか定義できない。それがC言語の文法です。Pascal では作れ、FORTRAN でも文関数くらいなら作れるというのに、何でかC言語では作れません。何で作れないようにしたのかは分かりませんが、そうなっているので仕方がありません。 このことはC++でも同じ事のはずなのですが、何とC++では工夫すれば関数内関数が作れてしまいます。C++講座の構造体の章を書いていたら、ふと思いついてしまいました。でやってみたら、何とできるじゃありませんか。びっくりしましたが、聞いてみると結構気づいている人もいるみたいです。 方法は以下の通りです。 関数内で構造体を宣言する。 静的メンバ関数を、構造体宣言内で実装する。 以上です。「ローカル関数は作れません」というエラーが出るものと思っていましたが、コンパイル通りました。動作も問題ありませんでした。 で

    Nao_u
    Nao_u 2012/11/22
  • Big Sky :: マルチプラットフォームな C++ 向けフォルダ変更監視ライブラリ「SimpleFileWatcher」

    C++ で簡単にフォルダ監視出来るライブラリ無いかなーと思ってたら、手頃なのが見つかった。 simplefilewatcher - Simple, cross platform, object-oriented, file watcher and notifier library. - Google Project Hosting SimpleFileWatcher is a C++ wrapper for OS file monitoring systems. Currently it uses Win32 ReadDirec... https://code.google.com/p/simplefilewatcher/ しかもマルチプラットフォームでビルド出来て、さらに他のライブラリに依存しないのでとてもポータブル。 Windows でも inotify を意識せずにコーディング出来ま

    Big Sky :: マルチプラットフォームな C++ 向けフォルダ変更監視ライブラリ「SimpleFileWatcher」
    Nao_u
    Nao_u 2012/11/15