MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
JNI関連の話が続きます。 今日は短いですが、JNIとC++例外について。 最近ではAndroid NDKもC++の例外(やRTTI)に対応していて、そのおかげで例外が必要なSTLなどのライブラリを自由に使えるようになっています。しかし、Java側はC++の例外を理解してくれないので、もしJNIを介した関数がネイティブ領域で例外をキャッチし損ねると、すぐにSegmentation Faultで落ちます。 解決策としては、JNIから呼び出されたC++側の内部処理を、noexceptな関数に閉じ込めてしまえばよいわけです。もちろんエラーが発見できないのもまずいので、JNIを使ってJava側の例外に変換してしまいます。 JNIEXPORT void JNICALL Java_Foo_bar (JNIEnv* env, jobject thisj) { jni_util::convertExcep
かつて、ゲームプログラミングはアセンブリが主流で、8bitのCPUは掛け算や割り算すらないものでした。割り算がないCPUっていつの時代だよ、っていう人たちもおりますが、ゲームボーイアドバンスに搭載されているARM7TDMIは除算の命令を持っていません。(故に除算を書くと死ぬほど遅いので、乗算で代用したりする) また、浮動小数に対する演算ユニットを持っていないハードウェアもあります。ニンテンドーDSに搭載されているARM946E-Sですら、浮動小数演算ユニットはありません。(CPUの機能としてはオプションで存在する)そのために固定小数点といった技術もあるわけですが、古くさい話です。 これらはCとC++の機能を駆使していかにパフォーマンスを出すかを余儀なくされた時代です。 さておき、最近はスマートフォンでのゲーム開発も進化しており、C++がiPhoneとAndroidの両方で動くということもあ
この記事は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
15. Visual Studio は 着実に C++11/14 に対応 2010. 4 2010 auto, move, nullptr lamdas, <random> 2012. 9 2012 Range-based for, enum class <chrono> , <ratio>. <thread> 2013. 6 2013 Preview Variadic templates initializer_lists, C++14 libs 2013. 9 2013 RC Non-static data member init defaulted / deleted functions 2013. 11 2013 2013 Q4 2013 + CTP constexpr, noexcept C++14 generic lamdas
おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、JSMNを試してみた。 何も見ずにC++でjsonパーサが書けるか試してみた。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 最近は結構 matsuu さんのブクマから見つけて記事を書いてたけど今日はそうじゃない所からご紹介。 Jansson — C library for working w
14 views Boost.勉強会 #12で発表した「C++で作るWebアプリケーション」 ... More… Boost.勉強会 #12で発表した「C++で作るWebアプリケーション」 C++をJavaScriptにコンパイルするコンパイラ Emscriptenを使ってC++でブラウザ上で動くアプリケーションを開発する方法を解説します C++で作るWebアプリケーション Presentation Transcript そんなC++の進出を拒んできた領域C++はとてつもなく汎用的な言語である2013年6月22日土曜日 WEB2013年6月22日土曜日 サーバ クライアントこっちは割とどんな言語でも書ける問題はこっち2013年6月22日土曜日 JavaScriptWEBブラウザで動く物を作るために長らく使われてきた言語近代的な多くのブラウザが共通して対応している唯一の言語2013年6月22
On Wed, 5 Sep 2007, Dmitry Kakurin wrote: > > Gitのソースコードを始めてみた時、2つのことが頭にひっかかった。 > 1. C++じゃなくて純粋なC。理由は不明。移植性とか言わないでよ。 > クソだ。 クソまみれなのはオメーの方だ。 C++は悲惨な言語だ。しかも、少なからぬ数のプログラマーが使っていて、完全無欠のどうしようもないクソを生成するのがめちゃめちゃ簡単になっているという点で、よけいに悲惨だ。マジで、Cを選択する理由が「何もなかった」としてもだ、C++プログラマー避けになるというだけで、Cを使う大義名分になる。 つまりだ:Cの選択は唯一のまともな選択なんだよ。Miles Baderがふざけて、「いやがらせによる追い返し目的」なんていってたが、実際のところ正しい。俺の出した結論では、プロジェクトにCよりC++を使いたがるプログラマーは、む
C++14 の Committee Draft が公開された. C++14 は基本的には C++11 のマイナーバージョンアップであるが,バグフィックスのみを行っている訳ではなく, C++11 の時点で微妙に使いにくかった機能,特にラムダ式については,大きな機能追加が行われている. そこで,本 blog では,このエントリから数回に分けて, C++14 のラムダ式について説明してみることにする. 拙い文章になるかとは思うが,読者の理解の助けになれば幸いである. なお,これらの記事を書くにあたって,読者に対して C++11 のラムダ式に対する知識を要求しないように心がけたが, もしかしたら,説明不十分であり,分かりにくい部分があるかもしれない. そのような場合には, 本の虫: lambda 完全解説 等, C++11 のラムダについて書かれた記事は多いので, それらの記事を読んでみることを
C++11のコア言語を詳細に解説する本を書いている。ライブラリについては本書の範疇ではないし、どちらかと言えばコア言語の方が好きなのだが、ライブラリの解説だってやってやれないことはない。せっかくなのでC++11の範囲で非同期処理について書くことにしよう。 例えばあるファイルを全部メモリ上に読み込むような処理を考えよう。ファイルの読み込みは時間がかかる。残念ながら、まだmmapのようなmemory mapped fileは標準ライブラリにないし(あったとしてもこの問題には不適だし)、非同期I/Oもない。そのため、ファイルの読み込みは別のスレッドで行い、結果を元のスレッドに返したい。 これは非常に難しい問題である。別のスレッドを作ってその終了を待たなければならないどころか、その別のスレッドから何とかしてデータのやり取りをしなければならないのだ。それだけではなく、ファイルを読み込むという処理も書
YouCompleteMe is a fast, as-you-type, fuzzy-search code completion, comprehension and refactoring engine for Vim. It has several completion engines built-in and supports any protocol-compliant Language Server, so can work with practically any language. YouCompleteMe contains: an identifier-based engine that works with every programming language, a powerful clangd-based engine that provides native
構造化プログラミング。 といえば、順次、分岐、ループのパターンからなる、シリアルプログラミングにおける基本スタイルですね。(これらだけしか使わなくてもシリアルプログラムは書けますっていうね) C++にはあらかじめこれらのパターンを簡単に使えるようにシンタックスが用意されています。 分岐はifやswitch、ループはwhile、for、doといったかんじで。 もちろんこれらのパターンは並列プログラミングでも使えます。 しかし並列プログラミングにおいては、これらのパターンだけで実装を行うことはほぼ不可能です。 そこで、並列プログラミングにおけるパターンとなる構造が考えられてきました。 これらを使うことで、よりパワフルかつ簡潔に並列プログラムのコードを書けるようになります。 1.マップ もっとも基本的な並列パターンです。 まず、コードを見てください。 template <class T> voi
有給を駆使し一足早くクリスマス休暇に突入、ヒャッホイ Ingress やるぜーと 意気込んでいた矢先ノロウイルスにやられダウンした。かなしい。鎮まれ俺の胃袋・・・ そんな腹痛日和の気晴らしとして今日は Garbage Collection Advent Calendar に参加してみることにしました。 Advent Calendar 初体験につきよくわかってないけど勝手に参加していいんですよね? GC というとジェネレーショナルだのパラレルコンカレントだのといった話が目立ちがちだけれど、 現実の問題というかブラウザを相手にするとそれ以外の細々とした面倒が目につく。 GC つき言語 (JavaScript) のコードと C++ で書かれたコードとの連携は最たる面倒の1つ。 たとえば WebKit の DOM は C++ で実装されており、 C++ のオブジェクトは JavaScript 処理
システム開発において、ソースコードの品質を担保するためにはソースコードレビューが不可欠です。ソースコードレビューには主に、以下の三つの役割があります。 コーディング規約順守のチェック バグ埋め込みのチェック 性能劣化のチェック これらのチェックは、実装(コーディング)工程で行うべきものです。コーディング規約の違反箇所は、実装工程の後では修正される機会は少なくなります。また性能問題を放っておくと、システムテストなどかなり後の工程で明るみ出て、リリースまでに残された少ない時間の中で対応を余儀なくされるといった事態になりかねません。 このように、ソースコードレビューには、その後の工程で補うことができない大きなメリットがあります。繰り返しますが、ソースコードレビューは必ず行うべきです。しかし実際の開発現場では、以下のような制約により、十分にソースコードレビューを行えないことがあります。 必要なスキ
そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GC ってなあたりでしょうか。コードは GitHub - kazuho/picogc: a tiny, portable, precise, mark-and-sweep GC in C++ にあります。 C++ のプロジェクトで、ちょっとここだけは GC がほしいんだけど、ってなケースで使いやすいと思います。速度も、そこそこでるんじゃないかな*2。 というわけで、以下、サンプルコード。軽く説明しておくと、 GC を使うクラスは picogc::gc_object を継承する
結論から言うと、現在のChromeのみをターゲットにして最適化するという特殊なケースを除き*1、どちらでも変わらないといえます。 [追記] 指摘を受けて再考してみました。そもそもjsperfでは初期化コード(今回はdataなどの初期化に使用)は一度しか走らないにもかかわらず、このベンチマークコードではdataの中身を書き換えています。これがスコアに影響を与えていたようです。 data[index] = data[index] * 2をdata[index] = index * c にした結果はChromeでも安定して双方有意差なしという結果になりました。 http://jsperf.com/postfix-or-pretfix-increment/4 JSのベンチマークの難しさを思い知りました。 [/追記] http://jsperf.com/prefix-or-postfix-incre
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く