2014-6-20[金] 古PC に 軽いlinux を入れる
P3-800 世代に kona linux
あいかわらずタマに軽いOS(ディストリ)をインストールしたりして遊んでいる。
といっても たいていは virtualbox で動かすだけで、気になったのがあったときだけ P3-800MHz(i810)マシン(NetVista)でお試し。
最近のお気に入りは konalinux (v2.3 2014-06-03|12付近)。
OS側使用メモリ量が少なく抑えられて (black版で60MB前後, light版80MB前後)、
このクラスの古PCなのに まともな体感で操作できる。もちろんスペック相応の非力さを感じる面はあるけれど、最新のfirefox 入れて動くし使っていられるくらいにはいい感じ。
(軽いと言われるディストリでも、このスペックだと結構つらいモノが多いのよ)
軽さというならば TinyCore Linux(TinyCorePlus) のほうが頭一つ抜けてる感じだけど、
live-cd ベース オンメモリ運用前提で用意された範囲外のことをしようとすると手間が大きく(てか やれてない)、
その点 konalinux はHDDインスールのdebian環境で普通に apt-get 等できるので普段の延長で弄れて遊び甲斐あり。(いや、すぐ放置になるのだけど)
選ぶ kona のエディションは、メモリが384MB以上あれば full(-i386)版、256MB以上あれば light(lite)版、それ以下(でも192MBほしい) なら black版、
といったところだろうか。もう数世代後のスペックのマシンなら リッチなWMのエディション選ぶのも。
firefox を常用してるので、最終的には firefox (や Libre Office) が最初から入ってる full版を選択した。
iceweasel(というか古いリビジョンのfirefox) では使いたいアドオンがバージョン不一致で使えないことがあり(己の場合 All-in-One Sidebar)、black版 や light版 にfirefoxを野良インストールするのも面倒になったので結局(メニュー登録する方法調べるの億劫になり)。
※手持ちの NetVista は CD-drive かつ USB ブートのできない機種だったので、full版を入れるため一時的に 3口のIDEケーブルさしてDVD接続でしのいだが(電源はIDE->USB変換機器のものを流用)、CD|FDD で boot してから USB 起動するツールもあるようなので、なんとでもなりそう。
※ konalinux の配布物はバージョン名が同じ(2.3)まま ちょくちょく差し替わっているので、ダウンロード時期によって微妙に状況変わってることあり。
P2-400 世代
で、最近、親戚のとこの古いデスクトップPCが2台ほど巡り巡ってウチにやってきた。
電源いれてみれば 2台とも P2-400MHz(当然 slot) メモリ512MB前後 ... 15年前後前のスペックか?
そして、かなり、うるさい。
デスクトップでも静音電源が当たり前になって久しかったので... 昔は こんなうるさかったんだよなあ。
P3-800のNetVistaも音してるけど、一応静音タイプの代物で、十数年前のPCの常識で思えば静かな部類だったのだと再確認。
とりあえず HDD 換装して kona linux いれてみることにするが、80GB とか 120GB のHDDが認識されない...
どうやら 32GB が最大の頃の代物らしい。10GBや30GBのHDDを繋ぐと認識(80,120GBでもジャンパで32GBに設定すれば使えたはず)。
ついでに騒音半減した感じ。
10,30GB-HDD は 静音が当たり前になりだした80,120GBの世代より音はしてるのだけど、6.4,8GBに比べれば結構静かになっていた模様。
すっかり忘れてる。
さて、肝心の kona linux だけど... もっさり。
win98 や win2k だとストレスのなくまともな体感で動くのだが...
winアクセラレータが効くかどうかが大きいとは思うけれど、
さすがにこのスペックだと今どきのosやアプリはつらいわな。
と、 TinyCore Linux を動かすと win98やwin2k に匹敵する体感。さっすが。
ウィンドウ描画等UIレスポンスがよいのだけど、特にドックが滑らかに動くのが好印象の鍵なんだろうな。
(そうはいっても firefox を立ち上げるともっさりだったけど... それは win2k でも同様だろうで)
この世代については、下手なことせず win98/win2k 動かしてるほうが幸せ、でも GUI有 linux 動かしたいなら TinyCore Linux (TinyCorePlus) あたり...というのが己の結論。(自分でチューンできる技量のないものとしては)
win2k については こちらでおもしろそうな改造されてるので、気力あれば結構楽しめそうな状況あり(気力なし)。
てな具合に弄ってみたはいいけれど、スペック低いし騒音がつらいので、箱だけ残して中身(電源やM/B)は手持ちの余りパーツで置き換えよう ... と思ったのだが、
そこはメーカー製パソコン、一見汎用パーツのようで、そのままじゃあ換装できない要素が細々あり、結局、粗大ゴミになりそうな結末。
(収穫は 256MB DIMM を NetVistaに流用できたことか)
2013-9-22[日] PCKeyboardHack, KeyRemap4MacBook でのダイヤモンドカーソル(^QF 有)設定
バッテリー妊娠で放置してた macbook を復活中(バッテリー新調)。実質win7機としてしか使ってなかったのだけど今度こそmac(osx)をそれなりにさわろうかと(未だにmacよくわからん)。macbookは昔買ったlate 2008 な奴なので今更すぎますが新しいの買うまでには至らず。メモリ8G,ssd250G にしたのでまだなんとかなるかな、と。osx10.8 や win8 (win7入れ直してwin8upgrade) にしたはいいけど、まず、何より辛いのはキーボード。普段PCのテンキーレスキーボード(フルキーボードからテンキーだけ無くしたタイプ)常用、それがないならダイヤモンドカーソル(VZ系)配置必需、という自分でも少し困った生態ですが抜けられず、で、windows環境については自前ソフトで対処だけど mac 側はさて...
といっても mac 側の選択はやっぱり PCKeyboardHack, KeyRemap4MacBook のインストールがベストの模様。以前だって入れてましたが、その能力を発揮できていなかったようで(ソフトが発達した面もありそうだけど)、今回本気で設定してみたら、ダイヤモンドカーソルで^QFとかの 2 ストロークキーも使えて、かなり幸せでした。
ということで、以下、PCKeyboardHack, KeyRemap4MacBook の設定メモ.
※[追記] PCKeyboardHack は OS X 10.8 用以降は"Seil"に、KeyRemap4MacBook は OS X 10.9用以降は "Karabiner" に変名された模様.
※[追記] ( こっち ) で 窓使いの憂鬱 を使ってlinuxのダイヤモンドカーソル対応してみた
日本語キーボードを接続する場合
PCKeyboardHack で、For Japanege の 3つをチェックする(Enable NFER Key on PC keyboard. Enable XFER Key on PC keyboard, Enable KAATAKANA Key on PC keyboard).
これで、日本語キーボード(JP106系) をつなげた時に、スペースの並びの、無変換キー、変換キー、右COMMANDキーとして使える.
※ 無変換キー=IME off 変換キー=IME on なので 全角/半角キーは使うこと無く. 無理に全角/半角キーを使うことは考えず、むしろ、このほうが楽なので、windows 環境も 無変換を IME off にすることにした.
ダイヤモンドカーソル関係
実は KeyRemap4MacBook の Change Key の項目に Diamond Cursor 等各種変更があるので、好みのがあればそれを使うのが吉... だけど好みにあうのがなかったので自分で private.xml を書くことに.
やりたいことは、他の修飾キーによる動作を壊さずに、別途CapsLockキー同時押しでダイヤモンドカーソル移動等VZ系の基本操作すること(簡易に実現できる範囲のみ用意)
まず CapsLockキーを別のキーにするには PCKeyboardHack で、
CapsLock→Change Caps Lock にチェックをし、keycode を 右CTRLキー(62) にする.
(macbookでは 右CTRLキー がついてないので右CTRLを拡張キー扱いにしても影響少ないだろうと想定)
CapsLock については、これだけでなく、macos本来のキー設定でCapsLockを無効にする必要があるらしいのでそれも行う.
システム環境設定
→キーボード(アイコン)
→キーボード(タブ)
→修飾キー...
→キーボードを選択(変更したいキーボードを選ぶ)
→CapsLock キーを アクションなしに変更.
キーボードごとに設定できるので、必要なだけ設定する.
(※と書いたけど、新規追加したキーボードのCapsLock無効化忘れてても右CTRL化してるような…)
次に private.xml の作成.
作ってみた private.xml は これ.
設定方法は KeyRemap4MacBook の Misc & Uninstall(タブ) の Open private.xml を開けて、作ったものを上書き.
Change Key(タブ) で ReloadXML して項目が現れたら必要な物をチェック.
作ってみた設定項目は、(以下ここでの ^ は右Ctrlの意)
Control_R Diamond Cursor | ^E^X^S^D(上下左右) ^A^F(単語移動) ^R^C(頁移動) ^H(BS) ^G(DEL) |
Control_R-Q | ^QF(検索) ^QA(置換) ^QS(行頭) ^QD(行末) ^QR ^QC(ファイル先頭/末移動) |
Control_R-T/V | ^T(HOME) ^V(END) ※vzと違うけど楽にHOME/ENDしたく |
Control_R-Z/W | ^Z(undo) ^W(redo) ※ お試し. (vzだと1行ロールup/downだけど) |
PC Application to FN Key | WinキーボードのAppsキーをmacのFNキー扱いにする |
生成するキーは標準のテキストエディタ準拠。
それなりにはなったのだけど、macでの(追記:編集キーを使うと) PageUp/PageDown Home/End 等のデフォルト動作が windows とは違う習慣になっていてちくちくとつらい(移動じゃなくてスクロールだけって何それ ... 行頭/行末/頁移動/ファイル先頭末移動、がことごとくwinと違ってた)
(追記:mac側は 頁移動=単語移動(OPTION+←→), OPTION+PageUp/PageDown, 行頭移動=COMMAND+←, 行末移動=COMMAND+→, ファイル先頭移動=COMMAND+HOME,ファイル末移動=COMMAND+END, 検索=COMMAND+F, 置換(アプリで違うけど標準のエディタでは)=OPTION+COMMAND+F)
作成にあたってはググっていろいろ参照…ちゃんと控えてなかった。まあ 2 ストロークキー以外は難しいことはなかったです。
2 ストロークキー関係はあまり情報なさそうで、一番役立ったのは こちら。(あと、VZ化されてるこちらとか)
見よう見まね、やった結果は先の private.xml にありますが、ほんとうにこれでよいのかは自信なし。少なくともうちでは動いてるということで。
(追記: 2ストロークキーの設定では参考元にあるように config_only を使用。使わずオーソドックス?な方法だとたしかに "キーリピートが止まらない" 症状でした。ただ VK_CONFIG_SYNC_KEYDOWNUP_???? の使い方がよくわからずウマく設定できず、他の方の2ストロークキーの設定で使われてる VK_CONFIG_FORCE_ON/OFF を真似ねてみたところ希望の動作になりました。
あと、private.xmlの定義順で2ストローク用キー(Q)より先に1ストロークのキー(SDEXAFRC)が定義されていると2ストローク目のキー(SDEXAFRC)が1ストロークのキーとして処理をされてしまうようで、Qの定義を先に行なっています)
AppsキーをFN にするのは一見 PCKeyboardHack で出来そうに思えたけど変更元となるAppsキーが一覧にないので、KeyRemap4MacBook で試してみたら意図通り動いてくれた、といった代物. (実際使うことがあるかというと ... 音量操作は便利かも、と使うようになった)(追記: Apps キーを使うには PCKeyboardHack でチェックマーク付けて有効にしておく必要あり)
[追記] 使ってなかったら...いつの間にか機能しなくなっていた模様(OSバージョンアップ付近?)
※他の方の設定みてるとアプリケーション別とかの対応をされてたりして、結構高度なカスタマイズできるようですが、そこまでの気合はなく.
※ 編集キーの役割が違うので配置的にPCキーボードに拘る必要ないけれど、キータッチ感のために変える値打ちはある……が、テンキーレスキーボード、リアフォ 91U を繋ぐと右側の日本語キーボード配置な記号群が英語キーボード準拠に化ける。数字キー部分の記号は日本語準拠なので解せない。FILCOの茶軸やFujitsuの8769 を繋ぐと問題なく入力できたのでそちらを使えばいいのだけど、ちと敗北感あり。
※追記:そもそも己がダイヤモンドカーソル使うようになったキッカケが、むかーし FM-11(OS-9)とPC98(DOS)を使ってたからで、違う文化圏のマシンを触る限り二十ウン年前と問題はかわらんし解決方法もまた……なんですが、どうせ覚えるなら emacs やら vi(m) のほうが幸せだったかもな、です(今更その気はないけれど)。unix系osは生き続けemacs,vimユーザーも新規ユーザーがいるわけですが、 DOS(CP/M) 系の操作は Windows に殺されたので、未だにダイヤモンドカーソルに拘ってる人はおそらく40代付近以上……滅んだ操作体系で 小指痛くなることもあるけれど 左手のみですむ移動操作は(特に左利きには) それなりに幸せかもとは、言っておこう。
テキストエディタ物色中
さて、最低限キーボードを触る気になれるようになったけれど、問題は常用できそうなテキストエディタがあるか……まだ物色中。
決定打は今のところなし。Windowsではなんだかんだで秀丸(VisualStudio風キーカスタマイズ)に慣れすぎて……全角空白可視化したいしvz由来のスタック型カット&ペースト必需だし tsv,csv モードもなるべくほしくetc…(後半わがままなのは自覚. 正直エディタを使いこなせてるかというと?な奴だし)
NxWineで秀丸 は 思いの外動いてくれて良さげだったけれど、細かい不具合はあるにはあるし、キー操作でタブ切り替えると窓のフォーカス離れるのでいちいちマウス操作することになり今は諦め。(他の商用winエミュソフト使えばマシなんだろうか?)
性能的には sublime text 2/3 がよさそうだけどシュアウェア購入に見合うかは微妙. この金額払うのなら秀丸で使ってる機能がほぼほしいと思ってしまい…(スタック型カット&ペーストはありそ?なくてもスクリプトでなんとかなりそうな気配だけど tsv,csvモードは無さそ?。アウトライン表示とかはどうだろ). win,mac,linux 用があるのは魅力だけど(ああwin版はime入力窓が追従せず離れて表示されるのは嫌状態).
フリーのだと mi, TextMate2, komodo edit あたりか.
mi は日本人作者だしシンプルでとりあえず使う分にはよさげ……キーカスタマイズが部分的なのでもう少し設定できればと思う(理解が足りてないだけ?)
komodo edit はIDE的要素つよくてテキストエディタとしてはちょっと重め、だけどこれもオープンソースだし win/mac/linuxあるのは魅力か.
TextMate2 は元々商用でそこそこ評判がよかったものがオープンソース化したものらしく高機能、だけどごちゃごちゃしてる感じ、でも日本語の解説頁はままありそう……あ今ググってこれみたらデフォルトでスタック型カット&ペーストできた。これは俄然興味わいてきた
……もうしばらく右往左往してます。
2013-6-16[日]
前回の影響もあって、windowsで動くCコンパイラの機能を比較した頁、
C言語機能の比較
を書いてみた。ざっくり kr,c90,c99,c11 およびvc・gcc拡張の機能を試してる。
C++目的で初めてC部分だけで挫折したちょっと情けないものだけれど、一応 c/c++互換機能と非互換機能をわけてみたりしてるので C++ 的にも意味はあると思う。
2013-5-26[日] c++03コンパイラの機能実装の比較
昔 ow や dmc のc++の(文法)実装状態をチェックしてる表をみたことあったなあ、と探してみれば、すぐみつかる.
http://cmeerw.org/prog/freecpp/
最終更新が2006で、それ以前のコンパイラの比較だけれど、チェックプログラムのソースが公開されていたので、ow 含むそれらよりも新しい(ヴァージョンの)コンパイラで試してみた。
もとより網羅されてるわけでないし今時のc++11世代のコンパイラの比較としては不十分だけど(SFINAEのチェックもなさげ)、owやdmcが以前よりよくなっているかを見る分には、と。
| | dmc 8.56 | ow 1.9 | 4.7.1 tdm | clang3.1 (+mingw462) | vc8 | vc9 | vc11 | bcc 5.5.1 |
1 | digraph | pass | fail[c] | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
2 | alternative tokens | pass | pass | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
3 | new style casts | pass | pass | pass | fail[c] / 実質pass | pass | pass | pass | pass |
4 | bool | pass | pass | pass | pass | pass | pass | pass | pass |
5 | bool condition | pass | pass | pass | pass | pass | pass | pass | pass |
6 | mutable | pass | pass | pass | pass | pass | pass | pass | pass |
7 | explicit | pass | pass | pass | pass | pass | pass | pass | pass |
8 | typename | pass | pass | pass | pass | pass | pass | pass | pass |
9 | covariant return | pass | pass | pass | pass | pass | pass | pass | pass |
10 | arrow operator return | pass | pass | pass | pass | pass | pass | pass | fail[c] |
11 | overload enum | pass | pass | pass | pass | fail[c] | fail[c] | fail[c] | pass |
12 | nested class fwd decl | pass | pass | pass | pass | pass | pass | pass | pass |
13 | friend namespace class | pass | pass | pass | pass | pass | pass | pass | pass |
14 | class name injection | pass | pass | pass | pass | pass | pass | pass | fail[c] |
15 | friend name injection | fail[e] | pass | pass | pass | pass | pass | pass | fail[e] |
16 | static const int | pass | pass | pass | pass | pass | pass | pass | pass |
17 | delete const | pass | pass | pass | pass | pass | pass | pass | pass |
18 | return void | pass | pass | pass | pass | pass | pass | pass | pass |
19 | new scoping | pass | pass | pass | pass | pass | pass | pass | pass |
20 | if stmt cond | pass | pass | pass | pass | pass | pass | pass | pass |
21 | switch stmt cond | pass | pass | pass | pass | pass | pass | pass | pass |
22 | while stmt cond | pass | pass | pass | pass | pass | pass | pass | fail[c] |
23 | for stmt cond | pass | pass | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
24 | defarg scope | fail[c] | fail[c] | pass | pass | pass | pass | pass | fail[c] |
25 | namespace enum | pass | pass | pass | pass | pass | pass | pass | pass |
26 | namespace template | pass | pass | pass | pass | pass | pass | pass | pass |
27 | namespace template func | pass | pass | pass | pass | pass | pass | pass | pass |
28 | using namespace template | pass | pass | pass | pass | pass | pass | pass | pass |
29 | template non type | pass | pass | pass | pass | pass | pass | pass | pass |
30 | explicit template instantiation | pass | pass | pass | pass | pass | pass | pass | pass |
31 | template default all | pass | pass | pass | pass | pass | pass | pass | pass |
32 | template default dependent arg | pass | pass | pass | pass | pass | pass | pass | pass |
33 | template template arg | pass | fail[c] | pass | pass | pass | pass | pass | pass |
34 | template function explicit | pass | pass | pass | pass | pass | pass | pass | pass |
35 | new template specialization | pass | pass | pass | pass | pass | pass | pass | pass |
36 | partial template specialization | pass | pass | pass | pass | pass | pass | pass | pass |
37 | partial ordering class templates | pass | pass | pass | pass | pass | pass | pass | pass |
38 | member template class | pass | fail[c] | pass | pass | pass | pass | pass | pass |
39 | member template function | pass | fail[c] | pass | pass | pass | pass | pass | pass |
40 | bad alloc | fail[e] | pass | pass | pass | pass | pass | pass | pass |
41 | bad typeid | fail[e] | pass | pass | pass | pass | pass | pass | pass |
42 | throwing destructor | pass | pass | pass | pass (c++11fail[e]) | pass | pass | pass | pass |
43 | koenig lookup | pass | fail[c] | pass | pass | pass | pass | pass | pass |
44 | two phase lookup | pass | pass | pass | pass | fail[e] | fail[e] | fail[e] | fail[e] |
45 | empty base opt | pass | pass | pass | pass | pass | pass | pass | fail[e] |
46 | return value opt | pass | pass | pass | pass | pass | pass | pass | fail[e] |
47 | static assertions | pass | fail[c] | pass | pass | fail[c] | fail[c] | pass | fail[c] |
48 | right angle brackets | fail[e] | pass | pass | pass | pass | pass | pass | fail[e] |
49 | func predefined | pass | pass | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
50 | hex float literal | pass | fail[c] | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
51 | long long | pass | pass | pass | pass | pass | pass | pass | fail[c] |
52 | restrict | fail[c] | fail[c] | fail[c] | fail[c] | fail[c] | fail[c] | fail[c] | fail[c] |
53 | variable array | pass | fail[c] | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
54 | dynamic sizeof | pass | fail[c] | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
55 | empty macro argument | pass | pass | pass | pass | pass | pass | pass | pass |
56 | enum trailing comma | pass | pass | pass | pass | pass | pass | pass | pass |
57 | flexible array member | pass | pass | pass | pass | pass | pass | pass | pass |
58 | compound literal | fail[c] | fail[c] | pass | pass | fail[c] | fail[c] | fail[c] | fail[c] |
補足
- いずれもwin用32bit版コンパイラ. win8でコンパイル&実行.
- fallにつけてる[c]はコンパイル出来なかった場合、[e]は実行結果で0以外を返した場合、を表してる.
- 4.7.1tdm は mingw 4.7.1 tdm版.
- clang v3.1 はllvm公式のmingw用バイナリを、本家 mingw g++4.6.2 の環境に上書きしたもの。
- 元表にあるow1.6やdmc8.4.5は試していない(インストールしてない)ので元表をみてください.
- vc8は元表にもあるけれど return void の結果が違ってる.
- 47,48のみ必要ならば c++11 をコンパイルするオプションをつけている.(他はつけていない. 実はclangの不具合回避)
結果に fail があるチェックについて
- 1 digraph: 交代記号( '{' が'<:'等) が使えるか.
- 2 alternative tokens: and や and_eq のような記号の交代予約語が使えるか. ※ iso646.h(ciso646) で同様のものが#define定義されてる
- 3 new style casts: const_cast<T>(t)のようなc++からのキャストが使えるか。clang が fail になっているのは本題とは別の virtual void A::f(); の実体が定義されていないことによるものでソースを実体定義に修正すれば問題なくパス。(このエラーは clangの挙動でも問題無いと思うけど、他のコンパイラがコンパイルできていることが興味深いかも)
- 10 arrow operator return: メンバーのoperator->()の返型がT*,T,T&でない場合にコンパイルできるか.
- 11 overload enum: enum型を基本整数型とは別型として関数オーバーロードできるか?
- 14 class name injection: クラス名インジェクションが機能してるか ※このソースだと B() : ns::A() {} でなく B::B() : A() {} になっているところ.
- 15 friend name injection: friend名インジェクションが機能してるか ※class内friend 定義したものはクラス外(非friend)で定義されたものよりも名前検索の順位が低く、またそのことは引数のマッチよりも優先される...ってことかな。
- 22 while stmt cond: while の条件式でローカル変数を定義できるか
- 23 for stmt cond: for の条件式(2文目)でローカル変数を定義できるか
- 24 defarg scope: デフォルト引数スコープの扱いに関するテスト. ow はメンバー関数のデフォルト引数は関数宣言側ならOKだが定義側だとNGのようで、また、関数内での外部関数宣言ではデフォルト引数が使えない模様。bcc5.5.1 はデフォルト引数の問題でなく static const 変数の扱いが定数でないためのfailで、static const int c=3;の代わりに struct B に先立ち enum {c=3}; を定義すれば ok.
- 34 template template arg: template<template<class T> class T1> のような template template 引数を使えるか
- 38 member template class: クラス・メンバーとしてclass テンプレートが使えるか. ※ow1.9 はクラス定義内では使えるが、クラス定義外でtemplateを2回使う記述はNG.
- 39 member template function: クラス・メンバーとして関数 テンプレートが使えるか. ※ow1.9 はクラス定義内では使えるが、クラス定義外でtemplateを2回使う記述はNG.
- 40 bad alloc: new が メモリー不足の時に bad alloc を投げるか. ※ dm 標準では行えてないが stlport のようにライブラリ実装で対処可能.
- 41 bad typeid: Typeidの引数が不正だった場合 bad_typeid を投げるか.
- 42 throwing destructor: デストラクタ中に例外を投げることができるか. ※ clang++ 3.1 では通常は問題ないが -std=c++11 をつけでコンパイルすると実行時にハングした.
- 43 koenig lookup: koenig lookup(ADL) が機能してるか. (関数呼出で、その引数の型が定義されている namespace から関数名をみつけられるか)
- 44 two phase lookup:スコープ違いで同名のある関数の呼出が正しく行われるか
- 45 empty base opt: 継承元class(struct)にメンバー変数が無い時0バイトにオプティマイズするか
- 46 return value opt: クラス変数を返す時、コピーを発生させないようオプティマイズするか (VCはオプティマイズ指定しないとコピーになる)
- 47 static assertions:[c++11]: static_assert があるか
- 48 right angle brackets:[c++11]: templateで閉じカッコ2つを 空白を入れずくっつけて >> と記述して大丈夫か
- 49 func predefined:[c99, c++11]: 関数名文字列 __func__ が使えるか
- 50 hex float literal:[c99, c++11]: 16進数浮動小数点表記が使えるか
- 51 long long:[c99, c++11]: long long を使えるか ※ bcc5.5.1は __int64 ならある
- 52 restrict:[c99]: restrict 指定が使えるか. ※ c++11には入らなかった機能.
- 53 variable array:[c99]: 動的ローカル配列が使えるか. ※ c++14に入るかもらしい(?)
- 54 dynamic sizeof:[c99]: 動的ローカル配列に対するsizeofが機能するか ※ c++14には入らない.(c++のsizeofはあくまでコンパイル時に決定できるモノのみ)
- 55 empty macro argument:[c99]: 空のマクロ引数を許容するか ※ bcc はこのソースでは大丈夫だが、引数が1つの場合 NG
- 58 compound literal:[c99, c++11]: (struct A){1, 2} のような構造体リテラル表記できるか.
bcc 5.5.1 を表に加えるんじゃなかった...面倒増えてしまった(いや本当はpassしてるのもひと通りみたほうがよいくらいだけど)
vc が overload enum、two phase lookup あたりを修正しないのは、互換性がらみなんでせうかね? (既存の巨大ソースだと意図せず依存してそうな場合もありえそうだし).
2013-5-21[火] open watcom v2
年始くらいに某2chスレで 年末に2.0でるかも(ソースはニューズグループ)、とか書かれていて、けれど、watcom のサイトのデイリービルドみてもちっとも進んでなさそうで、ほんとかしら、と首をかしげてたのですが、今日、検索しててみかけました。
https://github.com/open-watcom
どうやら open watcom v2 を非公式にフォークしてたらしい。
リポジトリ覗くと、24時間以内の更新とかあって、そこそこ活動してそうな雰囲気。
といってもスタッフ的にお二人の名が書かれていたのでこじんまりとしたものなんだろうけど。
v2 ってことは Version 2 todo list の内容を目指しているのでしょうかね。どうなんだろ。watcom c++ の実装自体は c で書かれていて結構大変そうにも思いますが... まあちょっと楽しみです。