Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

過去のしがらみと下位互換

一部で下位互換と上位互換が混同されていますが、ここでは、上位版は下位版の機能を保証するという意味です。
ネタ元 ここ
ここで、 C++ はCの柵の影響で汚れている云々の話が出てきます。
#主題のAccess修飾子に関しては、現状で充分と考えてます(本音は、論じるほどの知識がないので....orz)
私は一時期、C++を構文チェックの厳しいCという認識で使っていた時季が有ります。それはそれで、効率アップしたと思います。
さて、C++は下位互換性があると言い切れるか。....環境依存性が大きいですね。(Windows依存の部分がないとして) UNIX環境のC/C++ソースがそのまま、Windowsで動くか。 68系のCompilerと 86系のコンパイラ、 の差。
同じインテル系でも、DOS時代の 64Kbyte制約による Compile Modeの組みあわせ等、とても下位互換性100%とは言えません。もっとも、これには、言語仕様と環境仕様が混在するので、単純な問題ではないのですが。
 他方、汎用機の世界は 100%の下位互換性が求められます。30年前に作成した、Exeはそのまま走るし、そのままで、Compileできることが求められます。
  どちらが良い悪いの問題でなく、システムに求められる要求度の違いです。汎用機は、新機能の取り入れよりも安定をも求められます。
 オープン系は、過去の不細工になった部分は、切り捨てることで、脱皮して発達してきました。いまだに、「下位互換のないオープン系は信用できない」と言われる所です。
 言語の下位互換を捨てることで、脱皮できました、 VBなど、旧VBから脱皮したから、.net化できました。もっと切り捨てて欲しかった文法は多いですが...
 JAVAの世界も似たようなものでしょう。
 進歩と過去のしがらみの共存は、難しいものです。どちらをとっても、非難者は出てきます。
話が飛ぶようですが、ヨーロッパは過去の遺物の風体を残すため、新築でも、元の外見に似せる必要があるそうです。
東京みたいに、無秩序な開発はできないそうです。
奈良地方では、開発に着手したら、古跡が見つかり開発中断に落ちいることが多いとか。過去を大事にするために、発展の速度を犠牲にするとの是非はんとも言えません。相容れるものではなさそうです。
 文化や伝統の維持運動をを「後ろ向き運動」と捉える人もいるくらいです。人の意見の多様性を感じた次第です。
#私は、古きモノでも、不合理箇所は変更すべきとする派です。過去を大事にしないと言われますが...orz;

投稿日時 : 2009年1月9日 0:08

Feedback

# re: 過去のしがらみと下位互換 2009/01/09 0:46 Pasie.

 個人的にはVB6の方向性のまま、VBは進化していって欲しかったな。

# re: 過去のしがらみと下位互換 2009/01/09 13:12 とっちゃん

んー。ネタ元は、まぁともかくとして。。。

C++ の public/protected/private はアクセス修飾子といわれますが、この場合のアクセスは、
コードアクセスの意味ではなく、可視範囲の意味ですよね。

とまぁそこはどうでもいいので...w

下位互換があるとは、より古いバージョン(のコンパイラ)で利用(ビルド)してもエラーにならない。
上位はその逆。

UNIX(AXでもいいや)と、Linux で同じソースがビルドできるか?や、CPUアーキテクチャの違いでなにか
細工が必要か?などは、環境依存問題で、いわゆるソース可搬性(ポータビリティ)に関する問題です。
なので、この問題はきちんと切り分けて考えなければなりません。

わかりやすいように言うと、

A社(別にどこの会社でもいい)のメインフレーム用に書かれたソースでB社のメインフレーム用コンパイラで修正なしでビルドできることがソース可搬性。
A社のメインフレームの最新版(仮に2.0とする)用に作成したソースで、古い1.0でもビルドできるものが下位互換。
この逆のパターンが上位互換。

>汎用機の世界は 100%の下位互換性が求められます。30年前に作成した、Exeはそのまま走るし、そのままで、Compileできることが求められます。

ちなみに、C に限定して話をすると...
環境依存を排除したソースなら、16bit/32bitはおろか、CPU アーキテクチャ、メモリモデル、OSが異なってもビルドできますし、同じように動きます。
たとえ30年前のソースであったとしても、環境依存度が0なら今もビルドできるし動きますよ。

それがCの目指したソースポータビリティの世界です。ただし、バイナリ互換ではありませんので、ビルドしたものを持っていくことはできません。

# re: 過去のしがらみと下位互換 2009/01/09 21:39 インドリ

下位互換性については深いピヨね。
ボクが一番問題だと思うのは、技術的な部分ではなくヒューマン的な問題ピヨ。
新しい言語が誕生する時、マーケティングの意味もあって、古い有名な言語に対するネガティブキャンペーンをする事があるピヨ。
Javaとか昔はそうだったよね。
さらには古い言語を使っている技術者の存在自体否定されたりして・・・
でも本来プログラム言語は、実のところバイナリ編集機なんで、もしかしたら機械語でOSを作れる人は未だに存在しているかもしれない。
そんな人が機械語を使っているからと言って馬鹿にされるいわれは無く、新しい言語にのかって古い言語を使うハッカーを罵倒する図式はもううんざりピヨ。
でもかといって、違う意味で古い言語にしがみつく厄介な人も多く居たりして・・・
そういった社会的な問題が一番大きいと思うピヨ。
ヒューマン的な問題を解決してしまえば、いまどき技術的な問題なんてどうにかなる範囲だと思うピヨ。

# re: 過去のしがらみと下位互換 2009/01/09 21:57 インドリ

あと、移行問題はさらに根が深いピヨ。
最新の言語が出るたびに技術者の質が下がっている。
言語というものはいきなり進化したのではなくて、歴史の積み重ねで進化したものピヨ。
なのに、昔の技術を知らないままいい加減に最新言語を扱うと技術力は低下する一方ピヨ。
言語が進化してもプログラマが退化したらお話にならない。
本当の移行とは、技術継承も含めて論じるべきだと思うピヨ。
Ognacさんは移行問題についてはどう思いますか?

# re: 過去のしがらみと下位互換 2009/01/09 23:36 Ognac

>個人的にはVB6の方向性のまま、VBは進化していって欲しかったな。
一理ありとは思いますが、 
Line(0, 0) - (1000, 2000), RGB(255, 0, 0)
のような、構文が残ることに成るのは、引っかかりますね。,,,, My.xxxx が導入されたり、 や モジュールが残っているので、刷新さに欠けると言えばかけますね。(主観の問題なのですが)

>コードアクセスの意味ではなく、可視範囲の意味ですよね。
そうですね。可視範囲の意味で理解してます。 コードアクセスは、コードセキュリティとも絡みそうで、ちと不明点が多いです。wwww.

>(略) :下位互換、ソース互換、バイナリー互換、ソースポータビリティ...
うーん、一口に下位互換で代弁させたのは、乱暴でしたか...
ソース互換は、ソースに環境依存の部分がないのが前提ですが、オープン系だと、ハード特性を前提とていたり、
となると、純粋な互換性を保てる言語は、限られるのでしょうね。

駆け出しのころ、「純な業務ロジックは、環境や言語に依存しない筈なので、50年前の事務処理のロジックが今でも通用する筈、今のシステムも原理的には50年後も不変の筈」と言われたことを思い出しました。
 業務ロジックというより、アルゴリズムのことを言われたのたと思うのですが、その面では一理あります。
Cなどの 環境依存の部分をのぞいて、存在しうる言語.....どれくらいあるのでしょ。 スクリプト言語は....難しい問題かもしれませんね。

>ヒューマン的な問題を解決してしまえば、
解決出来ない問題でしょうし、解決してはいけない問題とも言えます。(哲学的ですが)

>Ognacさんは移行問題についてはどう思いますか?
どの行為をさして「移行問題」と表しているのか解りませんが。
 想像するに、単式簿記から複式簿記への移行とか、単年決算が複数決算への移行とかではなく、 RDBの移行とか、OSの移行とか、言語の移行を指していると想像します。
単に、CobolからVB とか, CからVB などの言語間の移行ですか、それとも、旧VBから .NETへの移行ですか、 または、 Unixから Windowsへの移行ですか。

いずれにしても、私は、実の少ない、行為だと思ってます。物理的なハード構成が限界で、したかなく、移行するのは、不可避でしょうが、時流にのって移行するのは、反対しています。
いずれの移行も、設計の段階での見直しが必要です、言語レベルの単純置換では済む問題ではありません。

# re: 過去のしがらみと下位互換 2009/01/10 0:17 Pasie.

>Line(0, 0) - (1000, 2000), RGB(255, 0, 0)
 えー。なんか問題あります?と言ってみるテスト ^^;
 いーじゃん、
  CIRCLE (200,200),40,1,,,,F,4
 とか
  Print "aaa" + "bbb" ,,,, "ccc" ; "ddd"
 とか(笑

 ただ、Cnized、OOPnizedが即ち刷新って言っているような気もして引っかかるのは事実。図星だとするとちょっと残念。
 むしろ私はVBにBasic成らざる要素を多分に持ち込んでいるほうが気になるわけですが。ただ、かといって行番号復活(必須)とか言われると…ねえ(汗

# re: 過去のしがらみと下位互換 2009/01/10 1:04 Ognac

>ただ、Cnized、OOPnizedが即ち刷新って言っているような気もして引っかかるのは事実。
あ! そう取られました? 刷新とは認識してないです、 OOP的開発が最良とも言えないでしょう。
しかし、従来の形態が最良とも言えません。比較して、よりましかなとは思います。
 構文の合理性が高まると美しい...と感じるのは、職業病ですね。
とはいうものの、合理性が高まっても、人の直感的分析力には劣っているようです。十数年後には違う開発スタイルが現れている可能性が高いです。
 ふりかえれば、SQLが発表されたとき、理論はともかく、処理速度はとても非実用的なものでした。ハードの進化が、SQLを普及させたとも言えます。 OOPもそれに似たものを感じるのです。

# re: 過去のしがらみと下位互換 2009/01/10 1:50 Pasie.

> 構文の合理性が高まると美しい...と感じるのは、職業病ですね。
 私の感覚だと、
  Line(0, 0) - (1000, 2000), &HFF0000
も十分に合理性があって美しいと思うわけです。って話です。
 Line(new Point(x,y),new Point(x,y),new Color(a,r,g,b))
 てのもなあ、という気がするのです。
 もちろん、n次元数を1変数で扱える良さは理解しているのですが、直感さではBasic構文のほうが理解しやすいかな。とか。もっともCircle文のみたいなのはどうなのか?とか言われると、ハテ、って感じになっちゃいますが。

 そういえば構文の合理性、って意味だと、私は int() a; よりも int a(); 派だな。非合理愛好家なのかもしれません。

# re: 過去のしがらみと下位互換 2009/01/10 12:22 Ognac

> Line(new Point(x,y),new Point(x,y),new Color(a,r,g,b))
私は、こっちが納得できますね。 関数をcall して、引数として、関数式を与えるのはスッキリ感がします。
こうなったのは、 旧VBは Call文を省略するときは、両端の(,) は付けないという、約束があったからでしょうね。

>CIRCLE (200,200),40,1,,,,F,4
の場合は、"(200,200)" は point(x,y) 一つに対応するので、いいかな。

しかし, " Point(x1,y1) - point(x2,y2)" が (x1,y1) - (x2,y2) に省略されるのは、無理感があります。
せめて、 Line point(x1, y1) - point(x2, y2), &HFF0000 なら納得したかな。

>int() a; よりも int a(); 派
これは、慣れの問題もあり、なんとも言えませんが、私は、駆け出しの頃 "Cは int[] a; VB は dim a() as integer と書くもの"と覚えてしまったので、Net.VB以前は感じなかったのですが、
VBでも Dim c As Integer() = New Integer() {2, 3, 4, 5} が可能になったのに、初期化子があるときのみなんですよね。
いまいち、統一感にかけるのは、VBらしい。
慣れるしかないのでしょうね。

タイトル  
名前  
Url
コメント