タグ

ブックマーク / cpplover.blogspot.com (13)

  • C++17のクラスのテンプレート実引数推定

    テンプレートは以下のように定義する。 template < typename T > class C { C ( T t ) { } } ; template < typename T > void f( T t ) { } テンプレートは以下のように使う。 int main() { C<int> c(42) ; f<int>(42) ; } しかし、C++プログラマーの大半は、関数テンプレートfをこのように使うことはない。大抵は、f(42)のように使う。このように、テンプレート名を書いた場合、C++コンパイラーはテンプレートの実引数推定と呼ばれる仕組みを使ってテンプレート実引数を推定する。 その詳しい仕組みは難解だが、考え方としてはこうだ。42の型はintである。すると、tの型はintである。tの型はTとされているので、Tはintである。Tはテンプレート仮引数である。するとテンプレート仮

  • また初心者にプログラミングを教える機会があった

    プログラミングでわからないところがあるので教えてほしいと以下のようなことを聞かれた。 こういうJavaScriptの関数がある。 // valuesは配列 // elementはvaluesの要素型の値 // 配列valuesに値elementと等しい要素があるならばそのインデックスを返す。 // それ以外の場合、-1を返す function find_index( values, element ) { for ( let i = 0 ; i !== values.length ; ++i ) { if ( values[i] === element ) return i ; } return -1 ; } 質問は、「なぜreturn -1にelseはいらないのか」というものであった。 似たような問題に、昔遭遇した気がするが、別人だ。 まずここにelseを書くべき文法はJavaScrip

  • ドワンゴの女子マネという過酷な訓練

    ドワンゴ現在、ドワンゴでは「女子マネ弁当」という企画が復活している。 過去の女子マネ弁当の様子については、すでに社外にも相当の情報が出回っているので、例えば以下のような情報を参考にしてもらいたい。 【第1回】ドワンゴ大改革の鍵は、インフラと女子マネージャー。|川上量生の胸のうち|川上量生|cakes(ケイクス) ドワンゴ「助けて! エンジニアが朝出社しないの!」→ 女子マネージャーが弁当を手渡してくれる「女子マネ弁当」システム導入で生活習慣改善へ - ねとらぼ 今回は、その女子マネ弁当の実情に迫る、社内からのレポートをお届けする。 女子マネ弁当の概要とは以下の通りである。 3月17日から、4月25日までの一ヶ月間、午前10時30分までに出社すると、以下の特典がある 午前10時30分から、エンジ色のジャージを来た女子マネ人員(なぜか若い女性のみで構成されている男女比率の偏った集団)が、エンジ

  • Linus Torvalds様、ユーザースペースの互換性を壊した開発者に強い態度をお示しになる

    Linuxカーネル4.18から、userns mountに対して暗黙にSB_I_NODEVを設定するようになったために、既存のsystemdのnspawn実装が壊れた。 以下が問題のパッチだ。 https://github.com/torvalds/linux/commit/55956b59df336f6738da916dbb520b6e37df9fbd Linuxカーネルにおいては、ユーザースペースの挙動は変えないという強い下位互換保障がある。以前のバージョンのカーネルで動いていたユーザースペースのコードが新しいバージョンのカーネルで動かなくなった場合、それは理由が何であれ新しいバージョンのカーネルのバグであるとみなされる。たとえそれが、ドキュメント化していない明示的に保証されているわけではない昔のカーネルの暗黙の挙動であれ、その挙動に依存している既存のユーザースペースのコードがあるので

    s_hiiragi
    s_hiiragi 2018/12/25
    “今回のメールでは、「なんで自分への問題報告がこんなに遅れたのか」と書いている。これは自分への報告が遅れたことに怒っているのであって、怒りの矛先が違う。”
  • 本の虫: Vimconf 2018のスタッフをしてきた

    VimconfとはテキストエディターVimに関する発表をするカンファレンスだ。国際カンファレンスを意識し、発表の多くは英語で行われている。今年は他ならぬVimの作者であるBram Moolenaar人を招待している。 去年のVimconf 2017には、雇用主のドワンゴがスポンサーをしていたので、スポンサーチケットで参加をした。 今年のVimconf 2018もドワンゴはスポンサーをしていたが、去年は私がスポンサーチケットを使ったので遠慮をして今年は別の同僚に譲った。自腹で行こうかと思ったが、チケット販売サイトはクレジットカードからの入金しか受け付けなかったので、購入を断念した。 残念、今年は参加できないか、と思っていたところ、運営スタッフから人手不足で当日のスタッフが足りないので来てくれと言われ、急遽スタッフとして受付のチケットもぎりをすることになったので、結果的に今年も参加することに

    s_hiiragi
    s_hiiragi 2018/11/25
    “termdebugの存在を知ることができたという理由だけでvimconf 2018のスタッフをしたかいがあった。”
  • DNAの読み取りについてプログラマーが誤解していること

    世の中にはDNAの読み取りを使った技術が実用されすぎている。DNAを使った生物の共通祖先の判定、人間の出アフリカ以降の移動の推定、特定の病気にかかりやすい遺伝子を持つかの判定、親子鑑定、刑事裁判におけるDNA鑑定などなど。 あまりにもDNAの読み取りを使った技術が実用化されすぎているため、世間ではDNAの読み取りは簡単なものだと考えている。プログラマーとて例外ではない。 大抵のプログラマーはヒトDNAの読み取りを以下のように考えている。 「一の長い磁気テープを先頭から末尾までシーケンシャルにリードする」 より現実的に例えると以下のようになる。 長さ30kmの長大な磁気テープをだいたい長さ1cmのテープ片に切断する 上記1cmのテープ片を数百複製する 上記複製した数百の1cmテープ片をマイクロメートル単位のテープ片にズタズタに切り裂いて混ぜ合わせる 上記混ぜ合わせたマイクロメートル単位

  • C++に提案されている静的例外

    C++に静的例外が提案されている。 [PDF] P0709R1: Zero-overhead deterministic exceptions: Throwing values 例外はそのパフォーマンスへの影響が懸念され、一部のC++プロジェクトではコンパイラーオプションによって例外自体が無効化されていた。 これは由々しき事態だ。というのも、例外は標準C++の機能の一部であり、標準ライブラリは例外の存在を前提にして設計されている。例外が無効化されているということは、それはもはやC++ではない。C++風の別言語を使っていることになる。 なぜ例外は忌避されるのか。例外のパフォーマンスが非決定的だからだ。例外の実装はスタックからの確保ではなくヒープからの動的なメモリ確保が必要で、例外のキャッチにはRTTIによる型情報の比較が必要だ。 ifとgotoによるエラー処理のパフォーマンス特性は決定的に見

  • attributeは難しい

    post-Pittsburgh mailingの公開まで、いよいよ日が迫ってきた。FCDが公開されたならば、直ちに変更点を把握して、参考書の執筆を始めなければならない。 ところで、実は、いまもって、よく理解出来ないことがひとつある。attributeだ。 attributeがよく分からない。というのも、あまりにも、記述出来る場所が多すぎるので、一体、どこに書いていいのか、迷うのだ。 たとえば、ある変数に対して、アラインメントを指定したいとしよう。 // 16バイトにアラインメントされてほしい。 char buffer[64] ; 目的は様々だが、とにかく、この変数が、16バイトのアラインメントされていてほしい。では、既存のコンパイラは、どのような拡張機能を提供しているのだろうか。 MSVCの場合、__declspecというキーワードの、一種の、specifierが存在する。以下のように使う

  • 最新のconstexpr

    constexprは何度も解説しているが、だいぶ昔のドラフトを元にしていたので、正式な規格とはずれている。今書いている参考書はもうしばらく時間がかかるので、とりあえずその間をつなぐために、constexprについて解説する。 constexpr変数 constexpr指定子をつけてリテラル型の変数を宣言すると、その変数はコンパイル時定数になる。変数の初期化式はコンパイル時定数でなければならない。 void f() { constexpr int x = 10 ; // OK、コンパイル時定数 int r = 0 ; constexpr int error = r ; // エラー } constexpr指定子をつけて関数を宣言すると、constexpr関数になる。constexpr関数は、コンパイル時に評価される。ただし、constexpr関数にはとても厳しい制限がある。 まず、仮引数の型

  • Old New Thing: 未定義動作はタイムトラベルを引き起こす(他にもいろいろあるけど、タイムトラベルが一番ぶっ飛んでる)

    Old New Thing: 未定義動作はタイムトラベルを引き起こす(他にもいろいろあるけど、タイムトラベルが一番ぶっ飛んでる) Undefined behavior can result in time travel (among other things, but time travel is the funkiest) - The Old New Thing - Site Home - MSDN Blogs 久しぶりに紹介するRaymond Chenのブログ記事。 C言語とC++では、様々な部分が、ドラゴンの住まう地というレッテルを貼られている。いや、正式には、未定義動作とされている。 未定義動作が発動した場合、何でもありだ。例えば、変数は同時にtrueでもfalseでもありえる。John Regehrは興味深い例のリストをまとめて、未定義動作コンテストの受賞者もある。 以下の関数を

  • AVGのクソみたいなChrome拡張の脆弱性

    Issue 675 - google-security-research - AVG: "Web TuneUP" extension multiple critical vulnerabilities - Google Security Research - Google Project Hosting アンチマルウェアソフトウェアのAVGが、クソみたいな脆弱性を含むChrome拡張を、Chrome拡張のインストールを阻止する仕組みを意図的に迂回して無理やり入れた挙句、脆弱性を生み出していたそうだ。しかも、脆弱性の指摘に対する修正案がお粗末すぎる。このようなセキュリティ的にお粗末な対応をするところが出しているセキュリティ用のソフトウェアは一切信用できない。読者の中にAVGを利用しているものがいたら、即刻に消すべきだろう。 ユーザーがAVG AntiVirusをインストールすると、"AVG

  • みなさんスラッシュドットから出てこないほうがいいですよ。

    Objective-Cという汚らしい言語を長年強制し、プログラマーを絶望の淵に叩き込んでいたAppleが、とうとう新言語を発表した。名前はSwiftという。 iTunes - Books - The Swift Programming Language by Apple Inc. ただし、現時点で、Swift言語仕様書のダウンロードと閲覧に、Appleの独自仕様満載の不自由なデバイス、の上で動く不自由なOS、の上で動く不自由な閲覧ソフトウェアが必要だ。そのため、筆者は未だに言語仕様書を読めずにいる。これをもってこれをみると、Appleの新言語にかける姿勢が如実に現れていると言えよう。すなわち、Appleの不自由なシステム以外は、市場として考慮する必要がないということに違いない。事実、Objective-Cは、Appleの不自由なシステムでプログラミングするにあたって、仕方なく使わなければな

  • DRM制限された媒体を扱う際には、「購入」ではなく「ライセンス」という言葉を使え

    Force companies to change language from "buying" to "licensing" when dealing with DRM-restricted goods. | We the People: Your Voice in Our Government ホワイトハウスの署名サイトで、興味深い署名が始まっている。現在、多くの電子媒体がデジタル制限管理により、利用者の権利を、従来の"buying"や"purchasing"による所有権の譲渡とは異なり、不当に制限している。このような媒体に対して、「購入」という言葉を用いるのは虚偽である。そのため、「ライセンス」(許諾契約)という言葉を使うようにしろ。これに従えば、「今すぐ購入!」ボタンのごときは、「今すぐライセンス!」ボタンに変更される。 これは実に理にかなった要求だと言える。多くの電子媒体の販売は

  • 1