タグ

C++に関するpoginのブックマーク (36)

  • C++でジョブシステムを作ってみる(1)

    ジョブシステム (Job System) ゲームエンジンの勉強をしているとジョブシステムの話がよく出てくるので、実際にC++20で実装してみました。マルチスレッドに慣れていないため、正しいアプローチである確信はありません。重要なミスがあったら教えていただけると助かります。 コードは標準ライブラリにある機能は素直に使い、シンプルな実装を目指します。また、この記事の全てのコードはパブリックドメインとします。 これから、3つのステップでジョブシステムを実装していきます。 ジョブを並列実行する機能 ジョブ同士に依存関係を設定する機能 大きなジョブを分割して並列化する機能 この記事ではステップ1の最も基的なジョブシステムを実装することを目標にします。 実装に入る前に、雰囲気を伝えるために、各ステップにおけるインターフェイスを示します。 // スレッド数4としてジョブシステムを作成 JobSyste

    C++でジョブシステムを作ってみる(1)
  • GitHub - jacobdufault/cquery: C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and mo

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - jacobdufault/cquery: C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and mo
  • C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう

    Results of the Grand C++ Error Explosion Competition 少し前に、C++のコンパイルエラーの長さを競うコンテストが開催されていました。 受賞のカテゴリは2つあり、ひとつめは最小コードで最大のコンパイルエラーを出した人、もうひとつは芸術的な評価による受賞です。 最小コードで最大のコンパイルエラー この部門で優勝したのはEd Hanwayさんという方で、ソースコード量に対して59億倍のコンパイルエラーメッセージを出力したそうです。 それには、自身を2回インクルードするという手法が使われていたそうです。 #include ".//.//.//.//jeh.cpp" #include "jeh.cpp" 次点として、インクルードに後方参照を使用した、7億9千万倍のコンパイルエラーを出力するコード: #include "set>.cpp" #incl

    C++のコンパイルエラー爆発を競うコンテスト - Faith and Brave - C++で遊ぼう
  • Wandboxを支える技術(2017年版) - Qiita

    Wandbox は、オンラインでコンパイルや実行が試せるサービスで、主に私(@melponn) と @kikairoya で作っています。 以前 Wandboxを支える技術 というのを書いていたのですが、そこからかなり変わっているため、改めて今の中身がどうなってるかについて書いていきます。 Wandbox は、Wandbox 体と、各種コンパイラをビルドするための Wandbox Builder に分かれています。 ソースコードは wandbox と wandbox-builder にあります。 2019/9/26 追記: Wandbox のビルドを CMake に移行した話 を書きました 犬小屋と牛舎 Wandboxはバックエンドとフロントエンドで分かれていて、フロントエンド側が 犬小屋(kennel) 、バックエンド側が 牛舎(cattleshed) という名前になっています。 犬小

    Wandboxを支える技術(2017年版) - Qiita
  • 組み込みシステム上でのC++ | POSTD

    去年の10月、私が所属している 会社 の部署で、組み込みファームウェアの開発をC言語からC++に切り替えました。C++のクラス、リソースの自動クリーンアップ、パラメータ多相、そして強化された型安全性などは、汎用OSをデスクトップ機で稼働している時と同様、リアルタイムOS(RTOS)やベアメタル上でも便利です。C++を使えば、安全で表現豊かなファームウェアを書くことができます。 しかしC++のこの自動的な魔法は諸刃の剣とも言えます。いくつかの機能は、組み込み環境 ^(1) には搭載したくないシステムのファシリティに依存するからです。ツールチェーン周りをどうするかも厄介です。 memcpy やアトミック操作、ハードウェア固有の浮動小数点関数などの重要なファシリティが提供されるので、 libgcc と libstdc++ を完全に破棄するのではなく、特定の部分を避けて使わなくてはなりません。 こ

    組み込みシステム上でのC++ | POSTD
  • Spaghetti Source - 各種アルゴリズムの C++ による実装

    ACM/ICPC(プログラミングコンテスト)系列の問題を解くことを目標にして,各種アルゴリズムを C++ で実装してみた.極めて意地が悪い類の問題には対応していないし,特定の入力に対して高速に動くということもない.計算量も最良とは限らない. これらを参考にする方への注意とお願い: これらの記述は正確とは限りません.参考文献を参照することを強く推奨します.間違っている場合は是非教えてください. これらのプログラムは間違っているかもしれません.各人で検証することを強く推奨します.バグがあれば是非教えてください. 分類が怪しいので,これはこっちだろう,ということがあればコメントを下さると助かります. 注意! 現在書き換え中 TODO 分類を正しく行う. 全体的に説明と使い方を詳しく. Verify していないものを Verify. ボロノイ図(いつになることやら……) 基 テンプレート グラフ

  • C/C++の静的解析ツール・事例まとめ - 簡潔なQ

    C/C++の静的解析は、どう考えても大変なんだけどどう考えても需要が高いので、やはり色々なソフトウェアや事例があるようだ。まとまった情報が欲しいけど見つからなかったので自分の調べた範囲でまとめることにした。 他にも耳寄りな情報があったら教えてほしい。 静的解析を行うことができるソフトウェア 調べてみると結構たくさんある。それぞれの特徴とかあまりよくわからない。 (個人的には、とりわけ網羅的な形式的検証ができるツールの性能に興味があるので、それを中心に集めていたが、やはり網羅的とは限らないで探すともっとたくさん見つかるようだ。もちろん網羅性にはトレードオフがある) Frama-C …… C言語に形式手法を適用するための汎用のフレームワークで、静的検証のためのプラグインも多数(WPとかValueとか)存在する。網羅的な検証から発見的な手法、動的な手法まで様々ある。研究で使うのに便利そう Ast

    C/C++の静的解析ツール・事例まとめ - 簡潔なQ
  • Scalaで型レベルのラムダ計算 - 貳佰伍拾陸夜日記

    新しい言語をさわったらとりあえずラムダ計算のインタプリタを実装するよね! Scalaでふつうにラムダ計算のインタプリタを実装するのはあまりに簡単*1なので, 型レベルでやってみた. まじめな話をしておくと, C++のテンプレートがチューリング完全なのは有名な話だけど, Scalaではどうなのか気になった. 以前C++のテンプレートでラムダ計算のインタプリタを実装したのと同様のことができるか思考実験してみると, だいたいできそうに思えたのでやってみた. できたもの 例 import lambda._ case class Equals[A >: B <: B, B]() // 型レベルの同値性チェック用 type S = x ->: y ->: z ->: ( x @@ z @@ (y @@ z) ) type K = x ->: y ->: x type result = ( S @@ K

    Scalaで型レベルのラムダ計算 - 貳佰伍拾陸夜日記
  • オンライン学習器AdamをC++で実装してみた - log.saiias

    元論文はこちらです. 自分の実装はここに置いてあります. 1データに対する学習率の調整部分は部分は以下の通りです. (論文内の擬似コードをそのまま実装している感じです. double pred = sigma(X,i); for(int idx = 0; idx < d; idx++){ if(X(i,idx) != 0){ double tbeta = 1-(1-beta1) * pow(lambda,iter); double grad = (pred - label(i)) * X(i,idx)+ C * w(idx); m[idx] = tbeta * grad + (1-tbeta) * m[idx]; v[idx] = beta2*pow(grad,2) + (1-beta2) * v[idx]; double hat_m = m[idx]/(1-pow((1-beta1),i

    オンライン学習器AdamをC++で実装してみた - log.saiias
  • プログラミング言語の使いわけ - アドファイブ日記(ミラー版)

    私は色んなプログラミング言語を触るのが病的*1に好きで、どの言語をどういう場面で使うのが良いのか凄く興味があります。 そこで、今の私の知識範囲でのそれぞれのプログラミング言語の使いどころを(自分用の整理もかねて)書いてみます。 C/C++ - C=OSやミドルウェア、C++=効率化のための再実装 安直に「メモリとスピードが第一優先のとき」と思いたいところですが、同等程度のスピードでもっといい言語はいっぱいあります。計算集約的ならJuliaとか、オブジェクト指向で組むようなソフトならD言語とか。なのでまずC言語は、Swigみたいのを使って他の言語の拡張ライブラリを書いたり、システムコールを使ってOSやミドルウェアを書くときじゃないかと思います。C++はテンプレートを駆使したりして効率を維持しながら抽象度の高いコーディングをするような場面がしっくり来ると思います。既に他の言語で実装したソフトウ

    プログラミング言語の使いわけ - アドファイブ日記(ミラー版)
  • IBM Documentation

    pogin
    pogin 2014/01/27
  • C++ で Maybeモナドを書いてみた - C++でゲームプログラミング

    C++ で Maybeモナドを書いてみたら意外と面白かったので覚書。 まぁこの手のネタはたくさんあると思いますが。 あんまり Haskell 力は高くないのでざっくりとした実装です。 [実装する主な機能] maybe nothing return bind(>>=) 今回はここら辺の機能を C++ で実装してみました。 [maybe と return] maybe 自体は同等の機能を持つ Boost.Optional で代用。 nothing も boost::none ですね。 template<typename T> using maybe = boost::optional<T>; constexpr auto const& nothing = boost::none; template<typename T> maybe<T> return_(T t){ return t; } m

    C++ で Maybeモナドを書いてみた - C++でゲームプログラミング
  • C++11で覚醒した共用体の話

    はじめに KMC 2回生のhatsusatoです。コミケまでもう1週間もないんですね1。27日まで授業があるとか正気の沙汰じゃない。 この記事は KMC アドベントカレンダー 2013 の 23 日目の記事です。昨日の記事は DtYaZsK 君の C++11超入門 でした。 今日は昨日に引き続いてC++11に関するお話です。 C++11で覚醒した共用体の話 共用体はたいていのC言語の入門書に載っている(と思う)ので、C言語をひと通り勉強した人なら共用体を知っていると思います。共用体はC言語の持つ低レベルなメモリ操作能力の一翼を担っています。しかし、共用体を実際に利用することは非常に稀でしょう。 実はこの共用体が、C++11での仕様変更によって生まれ変わりました。今回はそんな共用体にスポットライトを当ててみます。 共用体の基 まず、C++11で共用体がどうなったのかを見る前に、これまでの共

    C++11で覚醒した共用体の話
  • モダン C++ プログラミング - 日本語公開記事 - Confluence

    このドキュメントはサイボウズ社内のトレーニング用に作成したものです。 作成時点では C++11 はまだあまり利用できない状況でしたので、C++98 ベースの記述になっています。 いずれ更新を予定しています。 モダンの定義モダンとはテンプレートメタプログラミング(TMP)を駆使することです。嘘です。 宗教論争に意味はないので、ここでは 「最近の C++ の仕様・機能を理解し、C より実装効率が良く不具合の少ない」 プログラミング技法を「モダン C++ プログラミング」と定義します。 つまり、不具合が少なく、かつ C にはもう戻れなくなるような効率の良さを達成するものです。 学習効率(ROI)が極めて良くないような技法(例えば TMP)は、この定義では除外されます。 勉強方法お勧めの順序は以下。決して全部を読もうとしないこと。 C++ Language Tutorial のような、あっさりした

  • 循環参照 | システムエンジニアの戯言

    循環参照エラーの質?! クラス間で、相互に参照しあっている状態を循環参照と言い、C++では、このような状態でコンパイルを行うとエラーになります。 例えば、以下のように クラスA と クラスB は、相互に参照し合っています。この状態でコンパイルするとエラーに。 A.h #include "B.h" class A { ・・・省略 B b; } B.h #include "A.h" class B { ・・・省略 A a; } ところで、Javaではこのように循環参照し合っている状態でコンパイルするとエラーは起きるのでしょうか?答えは否。 Javaではなんとコンパイルエラーになりません!なんと、素晴らしい言語なんでしょう。・・・と、Javaをべた褒めするエントリではありませんでした。 何故、Javaではエラーが起きず、C++ではエラーが起きてしまうのでしょうか? この問いに対する答えを私は持

    循環参照 | システムエンジニアの戯言
  • http://www.singularpoint.org/blog/c/c-type-casting/

    http://www.singularpoint.org/blog/c/c-type-casting/
  • 波多野结衣加勒比-菠萝菠萝蜜免费视频

  • VS2010でLNK1123エラーが出たら、SP1にしてみよう - minus9d's diary

    久しぶりにVisual Studio Express 2010でC++プロジェクトをビルドしようとすると、以下のビルドエラーが出てビルドできなかった。 LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。LNK1123で検索して見つけたページ(Linker Tools Error LNK1123)によると、以下の3つの可能性があるらしい。 ファイルが破損している ファイル形式が無効 Visual C++ Service Pack1 (SP1) より古いバージョンのVC++を使っている Visual Studio 2010のバージョンを調べてみると無印だったので、SP1のダウンロードページ(マイクロソフト公式ダウンロード センターから Microsoft Visual Studio 2010 Ser

    VS2010でLNK1123エラーが出たら、SP1にしてみよう - minus9d's diary
  • C++による行列演算クラスの作成

    もう随分と昔の事です。 もう随分と前のことになりますが、きっかけは幾つかの物事でした。 当時、なんとなく知人に借りて読んでいた有限要素法入門書には、行列演算の基礎や行列演算による式の解法が書かれていました。 また、その頃使っていたHP-BASIC(Rocky Mountain Basic)には組込みの配列(行列)演算関数があり、何とはなしに使っていましたが便利なものでした。 ちょうどその頃、C++に興味を持ち始め、そこで知ったのは、C++では演算子(operator、+ とか * 等)をユーザー定義出来るという事でした。 そこで思いついたのが、C++のユーザー定義演算子を使えば、プログラム中でも自然な形で行列演算が記述出来るんじゃないのか?という事でした。 "自然な形で行列演算を記述"するというのは、例えば、行列A、B、Cがあったとすると、 C = A * B; //行列Aと行列Bの乗算を

  • コーディングスタイルまとめ

    随時更新中です。ご了承ください。 書いた人に重大な欠陥があるため、言語仕様と合わないなど多いです。絶賛フィックス中…… 現在までの問題点一覧 __(アンダーバー2つ) C++ではすべて予約語。 Cでもリンク時に異常が出る可能性あり? コーディングスタイル、それは全プログラマを宗教戦争へと貶める魔の言葉のひとつである。(他にはスクリプト言語宗教戦争、エディタ宗教戦争などがある) 基方針 伝説を信じない。 真実を受け入れる。 言語特有の伝統的な作法がある場合、そちらを優先する。 その作法が伝説に由来するものならば、訂正する。 業務でコードを書くプログラマ、つまりある程度の範囲でコードを他者(あるいは他社)と共有する必要があるプログラマとしてまとめる。 そもそも個人のコーディングスタイルなど、誰も興味が無い。自由に書けばいい。当に個人のものならば。 そのため、ある程度強制を感じさせる口調で書

    コーディングスタイルまとめ