最近cpprefjp(リンクはこちら)のコミット権をいただいたので、小物ネタから書いてはコントリビュートしていますが、一見簡単そうに見えたC++11のoverrideとfinalの経緯を調べていたら、土日が終わってしまいました。
実はoverrideとfinalは簡単ですが、同時に検討されていたhidingが鬼門でした…。
以下の例のように「間違って基底クラスの仮想メンバ関数を隠した(hiding)ときエラーにしたい」という提案から始まりました。
class A {
virtual void func();
};
// check hiding and override
class B explicit : public A {
// NG, 間違ってA::func() を隠していないか?
void func(int a);
// OK, あえてA::func() を隠すと宣言している
void func(double b) new;
};
でも事はそう単純ではありませんでした。overrideはメンバ関数同士でしか発生しませんが、hidingはメンバ関数とメンバ関数以外でも発生するため、考慮するケースが多いからです。
C++ 標準化委員会のペーパーには、問題となる例が挙げられていますが、あえて私見で「あ、これダメだ」と思ったヤツを1つ挙げると、以下の例です。
class A {
virtual void N();
};
class B explicit : public A {
// B::NはA::N() を隠すからnewを宣言すべき、でもnewを書く文法は?
enum { N };
};
初見の方はnewを使い回すなよと思うでしょう。実際、最初はhidingという名前で提案されました。しかし問題がありました。
struct A {};
struct B {
// これは構造体の宣言?変数の宣言?
struct A hiding;
};
これらの問題を回避するためにenumの中のNやらMやらにまで、一々newと書く文法を新たに作るのも、不細工極まりないです。
他にもusing、多重継承など、かなり広範に渡ってhidingが起きるため、これはダメだと判断されたようでexplicitとnew (hidingを宣言するための) は、C++11策定の最後辺りでDrop されました。
C++14にも採用されていないように見えるけど、次のC++ 規格で入るのかな…??
メモ: 技術系の話はFacebookから転記しておくことにした。
あなたのチームの「いい人」は機能していますか? - SlideShareを読んで。
会社で「システム班」と呼ばれた人たちがほぼ全員辞めていった理由が全て書いてありました。
私もここ1年くらいWikiやRedmineで「情報の抱え込みをやめて、共有する文化」の普及に挑戦しましたが、挫折気味です。
やってくれる人は言ったその日から継続的にやってくれるのですが、やってくれないオジサン達って「共有は大事」と言いつつ、三日坊主orガン無視するんですよね…。
どうしたら良いんだろね?
メモ: 技術系の話はFacebookから転記しておくことにした。
デスクトップで使っているCPU(AMD A10-7800)、マザーボード(ASUS A88XM-PLUS)、メモリ(G.Skill F3-2133C10Q-32GZM)の全てが、DDR3-2133対応を謳っている製品にも関わらず、UEFIの自動設定だとなぜかDDR3-1600になってしまいます。
勿体ないので、DDR3-2133の設定に変更したところ、UEFIまではご機嫌に立ち上がりますが、Windows10が起動するかしないかのところで、画面が真緑&ノイズだらけになってしまい、使い物になりませんでした。
A10内蔵のRadeonがおかしい?もしくは誰かがDDR3-2133に対応していないウソつきなのか…?
ASUSのサイトからUEFIの最新版を持ってきてバージョンアップし、グラフィクスの設定をTurbo Modeとやらに変更したところ、Windows10のログイン画面まで出ました。
が、ここまで動いたと思わせておいて、やはり真緑になって死亡しました。ダメだこりゃ…。
メモ: 技術系の話はFacebookから転記しておくことにした。
一太郎2015特別優待版を買いました。Amazonで8000円くらいでした。元々Wordや一太郎のようなワープロはあまり使わないので、一太郎と一緒に入っているATOK 2015をメインに使うことになりそうです。
なぜ2016を買わないのか?という突っ込みはごもっともですが、まだ一太郎2016は出ていないのです。
2015年は一太郎の30周年記念で「らくらく画面カッター」と「はかどる数式メーカー」というソフトが記念に付属されていました。画面カッターはわかりませんが、数式メーカーは使うかなあ。
以前使っていたのはATOK 2010だったので、軽く5年ほど経っていますが、使い勝手が激変しないところがATOKの良いところです。
使い始めてすぐに気になったことは、なぜかGoogleの検索ボックスが激重になったことです。なんだこりゃ?
他にも気づいた点があれば後日にでも書きます。
あらゆる種類のfaviconを自動生成してくれる Favicon Generator for all platforms というサイトが面白かったので、このサイトにもPCブラウザ向けのfaviconを作成してみました。
生成に使ったのは、昔、旭山動物園に行ったときに私が撮ったペンギンの写真です。
生成されたfaviconを全部設定するのは嫌だったので(ミラーサイトのトップにfavicon置きたくない)、昔からあるfaviconとiOS, Chrome用のfaviconだけ設定しておきました。しかし、そんな手抜き設定をするだけでも13種類もの大きさがあるんです。
プラットフォームやブラウザが増えるごとに、どんどんfaviconの亜流が増えていけば、必ずサイト側の対応が追い付かなくなって破綻します。破綻します、というより、既に破綻しています、と言った方が良いのか…(現時点でfaviconは20種類を超えている)。
事態を収拾するにはfaviconの規格を統一し、各プラットフォーム、ブラウザ、各サイトが地道に対応する方法がありますが、難しそうです。
オリジナルのfavicon自体IE 5が勝手に作った機能で、規格もへったくれもないですし、規格にしたところで、ここまで亜流だらけになれば、もはや統一は上手くいかないでしょう。
このまま破綻して誰も扱いきれなくなって廃れるか、どこかで一発リセットが掛かるか。どっちかなあ…。
最近よく見る「今年こそ、プログラミングを勉強したい」広告を見ていて思ったのですが、プログラミング初めての人に教えることになったら、何を選ぶでしょう?
もちろん、何がしたいのか?教えるスキルがあるか?にも依りますが、私の場合は、
になりそうです。古典的ですね。
メモ: 技術系の話はFacebookから転記しておくことにした。
< | 2016 | > | ||||
<< | < | 01 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |
合計:
本日: