charとかwchar_tとかUnicodeとか

PSLの文字列は中身char*なので、
切ったりする時にバイト数単位です.
まあ半角全角入り交じった文字だと困るわけですね.
wchar_t*にしておけば*大体は*文字数単位で操作出来る様になる.
まあ昨日軽く置換して試してみて、いけることはいけるんだけど、どうもどうだろうか.

・問題点1、オプションで切り替えさせるとしてソース互換性の問題
ソース内部に普通に文字/文字列リテラルが書いてあるし、printfとかも使ってるわけですね.
まあprintfはコンソールでしか使わないし、オプション切ったら消えるのでまだいいとして.
文字列リテラルを排除するのは難しい.
例えば型名を文字列で返す(PSL)標準関数typeとかあるしね.
(まあそもそもC文字列リテラルをその場でPSL::stringに一々変換してたら遅いので何とかしろよ、
とかもあるにせよ)
_Tマクロは嫌いです.(これもWindowsだけだし)
どうせPSL::stringはどっちも受け取れるのだから、
そのままにしておくという手もないではないですが、
内部処理をwchar_t*にした場合は一々変換処理も入りますとかアレでしょう.
また、(Cの)標準関数の方でも、
fopenを_wfopenにするのか、渡す文字の方をどうにかするのか.
オプション(ifdef)一つでかるーく切り替えってのはなかなか難しいですね.

・問題点2、wchar_tの移植性の問題
wchar_t*をUnicode(UTF16)文字列だと思っていいのは、
Windows(というかVC?)の問題であって、どこでもそんな風に扱えるワケではない.
まあUTF16であるとか16bitであるとかに依存したコードを中で書くワケではないのだが、
そこまでくるとこれ必要?って感じがしてくるのですよ.
エンディアンは無視させて頂くにしても、Linuxで使う際にはスクリプトをUTF32で書くか?
しないでしょう.
PSL::stringからwchar_t*は作れるのだから、必要ならそれを使って操作して下さい.
ってことでいいんじゃないの?と思う.思った.
char16_t?何の話かな?使っていいなら使いたい機能は一杯あるね…PSL11かな…

そもそもPSL内での文字列操作自体、大したことは出来ないんだからいいんじゃないの?
(過去記事)
日本語使うならなんかライブラリ用意して下さい.

なので、公式対応してオプション切り替え出来る様にする、とかはやらない.
だけどやろうと思ったら内部表現をwchar_t*にすること自体は出来るので、
要求されたらその時改造版を作ってもいい.
というところに落ち着こう.

カテゴリー: コンピューターとインターネット パーマリンク

charとかwchar_tとかUnicodeとか への1件のフィードバック

  1. ピンバック: 他言語組み込み向けのインタプリタ型自作言語PSL作りました | 生存確認兼近況報告日記

コメントを残す