アカウント名:
パスワード:
まあ、NEXTSTEPの時代から、複数のCPUで動くバイナリの仕組みはあるわけだから、開発者側がお行儀良くコードを書いていれば、コンパイルオプションだけでなんとかなるので、ユーザはそれほど気にしないで良いかもしれない。
でも、例えばARMっでx86とバイトオーダが違うみたいなので、一筋縄ではいかないかぁ。
#一筋縄でイかない場合でも、亀甲縛りならイく…
いや、エンディアンを意識せずにコード書いちゃうとあとから、エライ目に合います。
昔、知り合いが、「この本のとおり書いてみたんだけど、動かない」と相談を受けたので見てみると、ビッグエンディアンでしか動かないネットワーク系のサンプル。即座に、後輩達に「その本を持っているのであれば、直ちに焚書せよ」との命令を発したことがある。(わたしはRichard Stevensの本しか参考にしたことがなかったので、そんなひどい本があるとも思っていなかったが)
「ビッグエンディアンでしか動かない~」ってのはビッグエンディアンであることを前提として(≒利用して)書かれたコードであると思うので、「エンディアンを意識せずにコード書いちゃう」ってのとは逆ではないの。
ネットワーク系のサンプルなのにバイトオーダーへの配慮・補足がない、って話でしょうね。htonとか。明らかな前提を設けて意識的に書かれたコードか、無意識に処理系依存してしまったコードか、結果だけではどちらとも。
> 明らかな前提を設けて意識的に書かれたコード
そんなものを書籍のサンプルに載せる時点でやっぱり焚書しておk
「ネットワーク系のサンプル」が記載された本ならば、CPUがなんであろうとネットワークバイトオーダに変換するように書いておくっていうのが当然だと思うけど? そうすれば利用するほうからみれば、"エンディアンを意識せずにすむ"ようになるわけで。
自分の使う環境に限定したコードで,かつ絶対に継続性が無いということがいえないなら、「ビッグエンディアンであることを前提としてネットワーク系コードを書く」ましてや本として出版するなんてことはやっちゃいけないことだと思う。
バイエンディアンって実際には使い辛いんですよねぇ。「ここのコードはビッグエンディアン前提で書いてあるから、モードを切り換える」なんてことをしてくれるはずもなく。(ThumbARMのようにはいかない)コンパイルスイッチで切り替わったりするのでバイトオーダーを知りたいときにはプリデファインされた識別子を調べることになるけど、統一された標準って無さそうなんですよ。新しめのコンパイラだとGCC流が使えたりするけど、プロジェクトによっては昔のプロセッサをメンテしている関係でコンパイラも古かったりするので、汎用で使える判定方法って意外と苦労する。いずれにせよエンディアンの吸収が必要なら、Chipによって一意に決められたほうが調べるべき識別子は少なくて済んだりするし。#他機器と通信するのに、リトルエンディアンのデータプロトコルってどうなのよと毎度呪う。
つ IDL
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生の大半の問題はスルー力で解決する -- スルー力研究専門家
fat binaryの復活 (スコア:2)
まあ、NEXTSTEPの時代から、複数のCPUで動くバイナリの仕組みはあるわけだから、開発者側がお行儀良くコードを書いていれば、コンパイルオプションだけでなんとかなるので、ユーザはそれほど気にしないで良いかもしれない。
でも、例えばARMっでx86とバイトオーダが違うみたいなので、一筋縄ではいかないかぁ。
#一筋縄でイかない場合でも、亀甲縛りならイく…
Re:fat binaryの復活 (スコア:1)
Re:fat binaryの復活 (スコア:2)
いや、エンディアンを意識せずにコード書いちゃうとあとから、エライ目に合います。
昔、知り合いが、「この本のとおり書いてみたんだけど、動かない」と相談を受けたので見てみると、ビッグエンディアンでしか動かないネットワーク系のサンプル。
即座に、後輩達に「その本を持っているのであれば、直ちに焚書せよ」との命令を発したことがある。(わたしはRichard Stevensの本しか参考にしたことがなかったので、そんなひどい本があるとも思っていなかったが)
Re:fat binaryの復活 (スコア:1)
「ビッグエンディアンでしか動かない~」ってのはビッグエンディアンであることを前提として(≒利用して)書かれたコードであると思うので、「エンディアンを意識せずにコード書いちゃう」ってのとは逆ではないの。
Re: (スコア:0)
ネットワーク系のサンプルなのにバイトオーダーへの配慮・補足がない、って話でしょうね。htonとか。
明らかな前提を設けて意識的に書かれたコードか、無意識に処理系依存してしまったコードか、結果だけではどちらとも。
Re: (スコア:0)
> 明らかな前提を設けて意識的に書かれたコード
そんなものを書籍のサンプルに載せる時点でやっぱり焚書しておk
Re: (スコア:0)
「ネットワーク系のサンプル」が記載された本ならば、CPUがなんであろうとネットワークバイトオーダに変換するように書いておくっていうのが当然だと思うけど?
そうすれば利用するほうからみれば、"エンディアンを意識せずにすむ"ようになるわけで。
自分の使う環境に限定したコードで,かつ絶対に継続性が無いということがいえないなら、「ビッグエンディアンであることを前提としてネットワーク系コードを書く」ましてや本として出版するなんてことはやっちゃいけないことだと思う。
Re:fat binaryの復活 (スコア:1)
バイエンディアンって実際には使い辛いんですよねぇ。
「ここのコードはビッグエンディアン前提で書いてあるから、モードを切り換える」なんてことをしてくれるはずもなく。(ThumbARMのようにはいかない)
コンパイルスイッチで切り替わったりするのでバイトオーダーを知りたいときにはプリデファインされた識別子を調べることになるけど、統一された標準って無さそうなんですよ。新しめのコンパイラだとGCC流が使えたりするけど、プロジェクトによっては昔のプロセッサをメンテしている関係でコンパイラも古かったりするので、汎用で使える判定方法って意外と苦労する。
いずれにせよエンディアンの吸収が必要なら、Chipによって一意に決められたほうが調べるべき識別子は少なくて済んだりするし。
#他機器と通信するのに、リトルエンディアンのデータプロトコルってどうなのよと毎度呪う。
Re: (スコア:0)
つ IDL