なぜstringはずるいか…そりゃそうだよね

さて、string型がずるいという話をしました。
そこで問題です、次のうちstringという型の存在する言語はどれでしょう?
PHP・Javascript・C・C#・BASIC
実を言うとPHP・Javascriptには型というものがないのでまぁそれはよい。
ではあと3つあるけど全部あるのか?Cには実はありません。残り2つはあるはずです。
でも、実はstringはコンピューターとしては困るそうですよ。
まぁ、簡潔にC#ではどんな型があるか…ごく簡潔に行きましょう。
int:-2147483648[-(2^31)] 〜 2147483647[2^31-1]の整数
float:8ビット使って、符号・仮数・指数を入れる。詳しくは言いづらい。小数OK!
char:キャラクター型、文字1バイト(半角1文字)を収納できる。
と、この3つを挙げました。まぁ数字はいろいろあるけどこの2つしかいらないや。
で、Cではstringがありません、ではどうしていたか?
char[]を使っていました、なんだそれと思った方?
簡単に言えばcharを何個か連ねたものです。
なるほど、確かにABCはAとBとCと言えばいいなぁ、そういうことです。
まぁはじめに何個作るか決めるんですけどね。これがうっとうしい。
だからはじめに文字10バイトまでと決めたら11バイト以上は収納できないんです。
だから、なんかCではエラー防止うんぬんでこういう関数には弱点があるから使うなとかあるんですよ。
忘れたけど…まぁそういうことです。
では、stringは何か?これをさらに進めたものでしょうかね?
ただ、心強いのは文字制限がないこと。何文字でも1回決めたら問題ありません。
だから急に10文字が10000文字に増えても理論上OK!そうなんですよ。
でも、これおかしいんですよ。
intは8バイト、floatも8バイト、charも1バイトと決まっています。
char[]にしても4バイト書くのに必要な5個分も5バイトですしね、はじめに決めますよね。
でも、stringって決めないんだよね。
うわさによるとこれがCで採用できない理由らしい。
Cっていうのはコアなところまで使えるもんだからいい加減ではいけないんでしょうね。
らしいですよ。
ちなみにJavascriptに型はないといいました。
ちょっと不安ですよ。文字の足し算、ようは文字列の結合をしないか心配なんですよ。
というわけで、めんどくさいけど型はあったほうが安心です。