2017年10月15日

ネイティブ

10年くらい前だったか、弟が「ネイティブな服」について母親と会話していて、何かと思ったら、東南アジアなテイストの服の話だったってことがありました。

僕の場合、ネイティブと聞くと、CPUが直接理解可能なコード(機械語)で記述された状態のプログラムのことを思い浮かべてしまうので、一瞬戸惑いまして。
(それ以前から、「ネイティブ・アメリカン」のような、一般的な用法としてのネイティブは知ってはいたものの、あまり使う事がない)

そういえば、こういうもののことを指して「ネイティブ」と呼ぶのって、最近のことなのではないかと思います。

Javaとか.NETのような、中間言語(バイトコード)で記述されるプログラムがあって、それに対して、そうでないもののことを指して、わざわざネイティブと呼ぶようになった気がします。いわゆる、レトロニムってやつです。スマホが登場したので、従来型の携帯電話のことをわざわざガラケーと呼び直しているような感じの言葉。

ただ、考えてみると、以前にも、人間が読める状態のコードを、逐次翻訳しながら実行する「インタプリタ」という形式のプログラムがあったはず。
それの反対として、既に機械語に翻訳済みの状態のプログラムのことを指す言葉があっても良さそうなもんでしたが、「コンパイル済み」くらいしか呼んでいなかった気がします。

いや、もしかしたら、僕の住んでいる世界が狭すぎて知らなかっただけで、実は世間的には、昔からそういったものをネイティブと呼んでいたのかも知れません。

posted by ayacy at 00:39 | Comment(0) | TrackBack(0) | プログラミング

2017年10月08日

時間とお金と理解があればやりたいこと

時間とお金と理解があればやりたいこと。
最近、家に帰っても趣味をする時間が全く取れないので、なかなかフリーソフト開発ができていないですね。

加えて、スマホやタブレットの普及により、PC利用者人口が減って、Windows用のフリーソフトの需要がみるみる減少していっている感覚もあります。実際、自分自身がPCを使わなくなってきているので、「PCを使っていて不便だと思ったことをソフト開発で実現する」というサイクルが消滅しているのかもしれない。

そんな中で、もし時間とお金が余っていたらやりたいこと。

  • 全常駐ソフトの統合
  • MAXBRASTERのWindows版製作

やってみたい。
ただ、どちらも、必要になる時間が半端なく多いし、後者はキャラクター作りとかで発注費用も必要になるし…。
とりあえず、夢を語っておくだけはタダだから、語っておきます。


posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2017年07月17日

boost::regexとstd::regex(tr1)、どっちを使っていこう?

去年の10月3日に、Visual C++ 2010には、STLにregex(正規表現)ライブラリが入っていたことに気づき、現時点ではboost::regex側が使われていることが確定して、10ヶ月くらいそのことを忘れていました。

STLのregex (以後はstd::regexと呼ぶ)と、boost::regexのどちらを使っていくべきか、その機能の違いや、exe生成後のサイズの比較を行い、今後どちらを使っていこうか考えようとしていたのでした。

Visual Studio 2010に入っているstd::regex(tr1)と、最新のboost::regexを比べてみると、明確な違いとしては次の項目が挙がります。

  • 文法の違い
    boost::regexの正規表現の文法はperlのものが採用されているが、std::regexの正規表現の文法はデフォルトでECMAScriptのものが採用されている。後者の方が文法の定義がしっかりしているとのこと。
  • exeファイルのサイズ
    boost::regexをリンクしたときより、std::regexをリンクしたときの方が、exeファイルのサイズが小さくなる。
  • regexのコンストラクタの引数に指定できるフラグ
    boost::regexにはデフォルト指定としてregex::normalが存在するが、std::regexには存在しない。
    regex::icaseだけを指定すると、マッチが行われない。regex::ECMAScriptもあわせて指定しなければならない。

  • マッチに関するフラグ
    boost::regexにはregex_constants::match_single_lineおよびmatch_not_dot_newlineが存在するが、std::regexには存在しない。

いずれも、Visual Studio 2010に入っているstd::regexに関する比較になります。
別のバージョンや処理系になれば、exeファイルのサイズ比較結果やフラグの指定方法も変わってくると考えられます。

例えば、regex::icaseだけを指定した場合にマッチが行われない問題は、C++11までの規則に起因する問題であり、C++14の規則に従っているバージョンならばこの問題が起きないようです。

また、Visual Studio 2010よりも後のバージョンであれば、regex_constants::match_single_line(の逆)に相当する別の定数が定義されているそうです。

なお、他の処理系では、wregex (basic_regex<wchar_t>のこと) を使う場合、日本語が正しく取り扱えないことがあったそうですが、Visual Studio 2010では正しく扱えていました。


続きを読む
posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング