パスワードを忘れた? アカウント作成
4118 story

C#言語、ISO標準獲得へ 219

ストーリー by Oliver
C++とは別物 部門より

ZDNetの記事へのリンクをタレコミしてくれたsuezo曰く、"とうとうここまできました。これから、C#に置き換わり、C++は廃れてしまったりするのでしょうか"

自分が提案した標準ならば、そう簡単には自ら非準拠になったりはしないだろう、と期待していいものか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • ISO標準ってなにか意味があるのでしょうか?

    よく分からないのですが、今のところ.NETフレームワーク以外に使用されるようなことはなさそうですし、標準でなくていいからMSのほうで勝手にやっていてくれという感じです。

    ちなみに、

    C#に置き換わり、C++は廃れてしまったりするのでしょうか

    そんなことないと信じています。

    というか、C#ってC++の派生だったような気がするのですが。もうしそうだとしたならば、廃れることはないんでしょうけど。
    #あ、C#の道連れで荒廃していく可能性も考慮せねば...

    まぁ、Mac OS Xの日曜プログラマとしてはささやかながらもObjective-Cを応援し続けるつもりでいますが。
    --
    // Give me chocolates!
    • by parsley (5772) on 2002年10月16日 0時12分 (#183936) 日記
      > ISO標準ってなにか意味があるのでしょうか?
      ISO9000とかISO14000の認証を得たところで、トッププレゼンするには、「営業を騙しやすくて」いいぢゃん。
      # と思っていたら、「技術的なことは弊社の○○から」と呼び出されて汗を書く罠
      --
      Copyright (c) 2001-2014 Parsley, All rights reserved.
      親コメント
    • C#ってC++の派生だったような気がするのですが。
      テンプレートのないC++を誰がC++と以下略
      親コメント
      • templateだって、最初からあった訳ではないのだが。

        それはそれとして、C#って存在自体無駄だよな。
        C++の代わりになる(文法の話でなくて、適用分野だけど)わけでもなし、.NETも、C#でなくてはいけないって訳でもなし。
        --
        wild wild computing
        親コメント
        • 結局のところJavaだとSunが何をやってもごねるので、Javaっぽい言語と環境が必要になって言い出したということだと思うのですが。

          個人的には情報系の資格でJavaを選択肢に入れるところがあるみたいですが、ISO取るとどうなんでしょうね。
          そういう方面でどうなるか気になっていたり。
          親コメント
          • by althans (11899) on 2002年10月15日 21時10分 (#183802)
            Microsoftとしては初心者向けにVisualBasicがすでにあるわけだし、今までのVisualC++も当然残る。
            C#はもともとJavaの当て馬として開発されただけだから、ISOに認証されてどうなろうが、Javaを潰せればそれでいいんだという計算はあると思います。

            一方、Javaの方はSunの主軸商品だから、どうにも主導権を失いたくない。少なくとも会社の将来を左右する決断でしょう。ISOなんて通ったらIBMあたりにも持っていかれそうでかなり危なそう。

            立場の違いがありますが、個人的にはSunの対応が注目ですね。
            親コメント
    • > ISO標準ってなにか意味があるのでしょうか?

      Microsoft 以外からも処理系を出して欲しいという意思表示でしょうか。あるいは既にあるのかな?
      親コメント
    • > ISO標準ってなにか意味があるのでしょうか?

      ISOになると、各国政府がある程度の後押しをすることになってます。

      例えば、おそらくJISにもなるでしょうし、情報処理技術者試験の
      選択科目にもなるかもしれません。さらにひょっとしたら、中学や
      高校の授業でとりあげられるかもしれません。

      今すぐの影響は小さいですが、10年後にはJavaが今のCOBOLのような
      存在になっちゃうかもしれませんね。あくまでも可能性ですが。

      #今後30年を生き残る言語って何があるだろか。
      #スクリプト言語とC以外に、OCAML/Tkでも勉強してみるべいか。
      親コメント
      • by brake-handle (5065) on 2002年10月15日 22時19分 (#183855)

        30年どころか、100年たっても間違いなく生き残るであろう言語が少なくとも2つはあるでしょう。アセンブラとCです。

        これらの言語の特異な点は、言語のsemanticsに面倒な実行時の支援処理や初期化が一切含まれていないことです。すなわち、自分で作ったエントリポイントにいきなり処理を飛ばしてもきちんと動作するわけです。これは計算機をbootさせるためには必ず通らなければならない関門であり、ほかの言語にはマネができません。どんなにプログラムが組みにくくても、この2言語だけは捨てることはできないでしょう。

        もっとも、アセンブラがどういう言語かという問題は残りますが、LispマシンだったらLispがアセンブラのようなものですしね。

        親コメント
        • by bnez (11270) on 2002年10月15日 23時46分 (#183921) ホームページ
          > 30年どころか、100年たっても間違いなく生き残るであろう
          > 言語が少なくとも2つはあるでしょう。アセンブラとCです。

          アセンブラが当分生き残るということには同意しますが、100年と言われるとちょっとどうかなあという気が。

          アセンブラはノイマン型コンピュータの最下層のソフトウェア(を人間に可読な表記にしたもの)ですから、ノイマン型コンピュータと一蓮托生です。その意味で、ご指摘の通りアセンブラの寿命が非常に長いというのはほぼ間違いないでしょう。が、ノイマン型コンピュータがあと100年持つかどうかというと、それにはちょっと漠然とした疑問があります。確かに今のところ不動の地位を保っていますが。

          また、Cは「アセンブラの体のいいwrapper」としての側面が強く、今さらCと同じ立場を置き換える言語が現れることもないでしょうから、アセンブラとCは同じ寿命を持つと思います。この点はそのまま同意です。

          もしノイマン型コンピュータを駆逐するような制御構造が現れたとすると、記述の抽象度が高い関数型言語や論理型言語の方が案外生き残りやすいかもしれません。
          # ただの妄想かも
          親コメント
        • by rti (659) on 2002年10月15日 22時46分 (#183872) ホームページ
          私はそうは思いません。

          アセンブラについては CPU が存在している限り消えないでしょうが、
          C言語に関してはスレッドもサポートしていない言語が
          30年、100年後に生き残っているとは思えません。

          もし、残っているとしても、今の COBOL 並みの地位にいると思います。

          boost が取り込まれた C++ は生き残っていくような気がします。
          ただし、デスクトップというより、むしろ組み込み系、
          今のアセンブラ地位の言語として生き延びていくと思います。
          --
          by rti.
          親コメント
          • by brake-handle (5065) on 2002年10月15日 23時35分 (#183910)

            Cが今まで生き延びてきた、そしてこれからも生き延びていけるであろう本質は、後から追加が必要になった機能を全てlibraryに押し込めることができるためです。決して新しい機能のために言語の文法や意味論に手を加え、それゆえに過去のsourceを捨ててしまうようなことをしなかったのが強く効いています。その点では、threadingなんか1996年にとっくに実現されているのです。しかも、それ以前に作られたsourceを一切壊さずに。

            似たようなところでは、memory allocatorがあります。Cには汎用的なmemory allocatorとしての意味を持つ要素は一切ありません。高々stack上にとれる配列ぐらいです。これは実装が非常に簡単で、stack pointerの加減算ができればすぐに実現できます。一方、C++は汎用的なmemory allocatorの意味を持つnewとdeleteを定義してしまいました。したがって、C++を走らせる環境に応じてmemory allocatorを作り直さなければなりません。しかし、我々はいつでも4GBのだだっぴろい空間が使えるわけではありません。ページ数が限られているがゆえ、backing storeを作らなければ実用にならない環境にも直面します。わざわざそんな環境でまで、C++を走らせたいですか?

            Cがアセンブラとともに持っている専売特許は、環境への適応性です。memory allocatorなんかなくてもいい、単にRAMにloadしてentryへ飛び込むだけで実行できるプログラムを作れる言語がなければ、OSのような基本ソフトウェアは絶対に作れません。そもそも、メモリ管理をするプログラムをmemory allocatorが必要な言語で作ったりすることがタマゴとニワトリ問題を引き起こすので、そんなものを選ぶのはナンセンスですが。

            親コメント
        • なんか言語の仕様の話と処理系の話と OS の話がごちゃまぜですよ。
          言語の semantics を考えるときは、その言語の色々な実装(例えば C言語だったら
          C インタプリタ)でその話が成り立つかどうかを考えるべきです。

          > これらの言語の特異な点は、言語のsemanticsに面倒な実行時の支援処理や初期化が
          > 一切含まれていないことです。すなわち、自分で作ったエントリポイントにいきなり
          > 処理を飛ばしてもきちんと動作するわけです。これは計算機をbootさせるためには必
          > ず通らなければならない関門であり、ほかの言語にはマネができません。どんなにプ
          > ログラムが組みにくくても、この2言語だけは捨てることはできないでしょう。

          一般的なコンパイラ出力の C 処理系のみを考えても、
          スタートアップコードを必要とします。これは C 以外のもので書かれていますよね。

          また、エントリポイントに飛ぶ機能を持った言語は、普通 自分で作ったエントリ
          ポイントに安全に飛ぶことができます(Lisp とか VB とか)。

          重要なのは C 言語のエントリポイント、つまり関数呼び出しが、CPU と OS によって
          決まる Application Binary Interface (ABI)と一致している(あるいは ABI を C の関
          数呼び出しに一致させている)ことではないですか?
          そういう言語の中で 1番 普及している言語として、C 言語が生き残ると。

          # 個人的には、C のデータ構造を ABI に合わせるための処理(register spill とか)
          # は実行時の支援処理といえると思います。
          # すでに G7 さんが指摘されていますが可変長引数や alloca などのスタックの使い方
          # もそうです。そして C9X はさらに進む。

          私なら、こう書きます。
          「 C の言語とその一般的な処理系の特徴は、OS の ABI を強く意識した関数呼び出しを
              持つこと。そのため、OS やライブラリと極めて高い親和性を持ち、OS やライブラリ
              の既述言語としても適している。

              また、C 言語の『言語仕様』は不可分な処理を定義していない。
              ここで言う不可分な処理とは、その途中で割り込み処理が入ることを禁止し、連続して
              実行する必要のある処理のことである。
              (不可分な処理の例としては、Stop-the-world型の GC を持つ多くの言語は GC 中に割り
                込みが入らないこと要求される。また、Java においてはオブジェクトの生成などが不可
                分な処理として定義されている。)
              現在の計算機はシグナル・例外による割り込みを利用することが前提となっている。
              これらを言語側でコントロールするためには、不可分処理のない C のような言語が適し
              ている。

              以上の 2 つの理由によって現在の計算機・OS モデルがなくならない限り、C 言語は
              残り続ける。

              また、CPU のローレベルな機械語を既述する必要はこの先もなくならない。
              その時、テキストによって機械語を既述できる『記法』としてアセンブラが残る。」

          p.s.

          C 言語の言語仕様としての最大の特徴はポインタですね。
          ポインタは、、、100年後はなくてもいいや。
          --
          コンタミは発見の母
          親コメント
      • by Anonymous Coward on 2002年10月15日 21時22分 (#183819)
        > #スクリプト言語とC以外に、OCAML/Tkでも勉強してみるべいか。
        おかむらたかし って読んじゃいました。
        親コメント
  • Mono Project (スコア:2, 参考になる)

    by althans (11899) on 2002年10月15日 20時52分 (#183777)
    ずっと前から開発が続いてますが、Ximian関係でC#をLinuxに移植するプロジェクトがあるそうです。

    http://www.go-mono.com/index.html
    • by pantora (11989) on 2002年10月15日 21時17分 (#183809)
      >Ximian関係でC#をLinuxに移植するプロジェクトがあるそうです。
      もう、コンパイラできています。
      GUIまわりのCLIを動かすランタイムができると幸せになれるかも。
      --
      PCにECC Registeredメモリの利用を推奨します。
      親コメント
  • 結局のところ昔から何処でもごく普通に使われて居るであろう言語でないと誰も引き継いでくれない罠。少なくとも大手企業や役所に胸張ってC#を薦められるほどの度胸は私にはない...

    でも自分が得意な言語で仕事させて欲しいよな...
    • by Anonymous Coward on 2002年10月15日 21時11分 (#183805)

      特にコンピュータ言語についてはその性質上アプリケーションやハードウエアよりも拡散が極端に遅いですから、今現状のことを議論にしても仕方がないでしょう。

      C言語の登場当初である1972年前後に現役プログラマとして働いていた大先輩の方の話では、登場当初のC言語に対しては公に「COBOLに比べれば糞以下」と言って憚らない人もいたらしいですから、C#にしても同じように長い期間を見据えて判断すべきではないでしょうか。

      願わくばMicrosoft固有の技術のまま埋もれないことを祈ります。

      親コメント
  • by Y.. (7829) on 2002年10月15日 20時26分 (#183760) 日記
    自分の中では VJ++の悪い点(Javaを装ってJavaじゃないところ)を引き継ぎつつ正当化しちゃった言語という認識があるのですが、
    実際のところC#ってどうなんでしょう

    資料 [microsoft.com]読んでると
    >ガーベージ コレクションが、手動によるメモリ管理から開発者を解放します。
    >C# では、変数はシステムによって自動的に初期化されます。
    >変数は全てタイプセーフです。
    まぁ ここら辺はいいとして

    >コンポーネント オブジェクト モデリング (COM) や Windows ベースの API のネイティブ サポート。
    >ネイティブ ポインタ使用制限の許可。
    危険な要素が…

    ホントに使えるのか?この言語
    # とりあえずC++から乗り換える物ではなさそうな感じ
    • by G7 (3009) on 2002年10月16日 7時58分 (#184069)
      Javaを妬んだDelphi改、という感じでしょうかねC#は(^^;

      Propertyも有るんでしたよね。
      あれは便利です。クラスのあるメンバがMethodなのかFieldなのかなんてことを
      そのクラスのユーザはいちいち気にしなくて良くなるので。

      http://www.microsoft.com/japan/msdn/vstudio/techinfo/articles/upgrade/Csharpintro.asp

      >メソッドのオーバーライドは明示的でなければなりません。

      C#でどう書くか知らないけど、これってDelphiでいう"override"キーワードの話っすかね。
      親ClassのMethodを子でOverrideするとき、Overrideと明示的に書いたら初めてOverride出来る、という奴。
      これ結構便利ですよ。間違って親に無い(名前違いの)Methodを作ってしまうなどのミスが無くなる。

      #これをVersioning問題と呼ぶのは少々違和感を感じるが…

      >全てのオブジェクトに、タイプ化された強力なメタデータをもたせる

      Javaじゃとっくにやってますね。

      >ネイティブ ポインタ

      これはイッテヨシですね…
      親コメント
      • by suzuka (10940) on 2002年10月16日 10時00分 (#184101)
        >Javaを妬んだDelphi改、という感じでしょうかねC#は(^^;

        C# の設計者は Delphi の設計者って話ですね。

        >>ネイティブ ポインタ
        >これはイッテヨシですね…

        なぜ?
        画像処理など部分的に使えるだけで便利な局面はあります。
        使いたくても使えないより良いと思いますよ。

        C# でも無制限にポインタが使えるわけではないんです。
        明示的に「unsafe」ブロックを切り、その中で限定して使います。

        これにより、初心者の誤用・ポインタマニアの乱用を
        抑制するようになっています。

        MS 嫌いには嫌われがちな言語ですが、
        理想に走りすぎて一部使いにくい Java に対して、
        より現実に向き合った C#、という見方もあるようですよ。
        親コメント
    • by take0m (4948) on 2002年10月15日 20時39分 (#183767) 日記
      C++から乗り換えるというより、C++と組み合わせて使うってイメージでしょうか。パフォーマンス重視のところだけC++で書いて、あとはC#で書いた方が生産性が高そうです。

      あと、OSとしてWindowsを使う、もしくは使わなければならないときは、Javaだとどうにも使いにくいですから、そんなときはC#でしょうね。

      でも、とりあえずJavaで書いておいて、Windowsで使うときはC#にポーティングすれば済む気もします。時間がないときはそうも行かないでしょうけど。

      どちらにせよVB使うよりはJavaへの親和性がこれまでよりも高いですから、アプリの開発者としては、喜ばしいことというか、楽になるというか、いろいろ選択肢が広がるとは思っています。なので、MS系で言うと、VB.NetなんかよりもC#が普及して欲しいですね。
      親コメント
  • C++ って流行ってます?

    # 本気で反論ってわけじゃないんですが、つい…

    周りで template ゴリゴリ書いたり、Loki [freshmeat.net] や Boost [boost.org] をブンブン言わせながら使い倒してるような人ってあんまりいないですよね?(そんなことない?)

    もちろん、こんな使い方してるからって「流行ってる」ってことにはならないのは確かですが、ひとつの目安として、もうちょっと C++ 独自の仕様を活用したアプローチが日常的に見られてもいいんじゃないかなあ、と思ったりします。

    個人的には夜も眠れなくなるくらい「C++ 大好きっ!!!」なんですけど C# もいい言語だと思いますね。細かいスペックはまだ把握してないけど、interface とか delegate、override(これは諸刃っぽい気もするけど…)をサポートってだけでも、なかなか興味深いです。

    ISO 取ろうが取るまいが、どうせ仕事で使う予定なんで、今のうちから好きになっておきます。:^)
    --

    -- cooper

    • by Anonymous Coward on 2002年10月16日 1時16分 (#183983)
      > C++ って流行ってます?

      流行ってると言うより,私も夜も眠れなくなるくらい「C++ 大好きっ!!!」ですね。私にとっちゃCは構造化アセンブラだし,C++にしたところでオブジェクト指向アセンブラなわけで,その低水準っぷりに惚れています。画像処理なんかやってると,ピクセルをいじりまわすのに,raster[y * h + x]とかやるよりポインタでアクセスしたほうが,書きやすく読みやすくなるとか,24bitカラー画像とグレースケール画像に同じアルゴリズムを適用するのに,templateが涙が出るほどありがたいとか,要するにポインタ演算とテンプレートが使いたくて,C++やってるみたいなところがあります。例外はあまり使わないし,RTTIは全く使わないけどね...

      # ポインタ至上主義者なのでAC
      親コメント
    • 私のまわりでは言語仕様を理解したうえで嫌われているか、
      理解できないまま使いこなせていない人がほとんどでした。
      私は日本で C++ を本当の意味で使いこなしている人種は
      ごくごく一部だと推測しています。
      (ほとんどは、望ましくないコードのオンパレードだと思う.
      私の環境が悪かったのかもしれないが...)

      そういう私は C++ を使い始めたのは、かなり昔ですが、
      いろいろな言語を触ったあとで C++ を使ってみると、
      その "複雑さ加減" というか、"いくらでも変態的な
      コードがかけるところ" が返って気持ちよかったりします。
      (マゾ的な気分を味わいます。)

      でもC言語の延長としての C++ は嫌いですね。
      template, STL, Design Pattern を使ってこそ C++ なりの
      気持ちよさがあります。

      # ついでに VC++(MFC) の設計は非常に嫌い

      # 昔 Common C++ というライブラリを使ってたけど
      # 最近は Loki, Boost なんていいものがあるのね。情報ありがとう
      親コメント
    • > C++ って流行ってます?

      なんつーか、「便利なC」ぐらいの使われ方をされてるような・・
      C++って、いろいろ詰め込みすぎて使い倒せるようになるには量が多すぎる、という気がする。
      #K&Rと比べて、ストラウストラップの本の分厚さよ。

      あと、Cっぽい使い方でも結構いけてしまうので、わざわざC++らしい使い方を習得しようとする人が少ないのでは。

      > 周りで template ゴリゴリ書いたり、Loki [freshmeat.net] や Boost [boost.org] を
      > ブンブン言わせながら使い倒してるような人ってあんまりいないですよね?

      templateも書けると便利なときがあるけど、使用頻度はあんまりないような気がする。
      ライブラリに関しては、STLでことが足りることがほとんどだったり。
      #Windows環境だと、それこそMFCべったりになっちゃうし。
      親コメント
    • >C++って流行ってます?

      私的流行デス。
      最近はLinux上でgtkmmをいじるとか。
      あえてQtは使わない。

      周りにC++を薦めていますけど。
      なぜかJava勢力が強いみたいです。

      私は目の前にある言語は何でも使います。
      好き嫌いはダメダメ。
      --
      PCにECC Registeredメモリの利用を推奨します。
      親コメント
    • > C++ って流行ってます?

      全然。(爆)

      というか、どの程度使われていれば流行っていると言っていいのかわからないな。

      まあでも俺も Windows 用プログラム作る時は C++Builder か Delphi を使うんだけどさ、それは何故かというと GUI 部分を作るのが面倒だから。GUIなしの場合は無料の Borland C++ Compiler をC言語のコンパイラとして使う程度かな(滅多にC++で作らない)。Cygwin の gcc は UNIX と同じソースにしたい時だけしか使わないな。

      ああ、でも perl で作ると何処行ってもそのまま使えて良いんだけどな。いっそのこと perl で CLI 作ったらそのままいろいろな OS で使えて良いんじゃないか? (笑)

      # Java VM も。
      --
      (´д`;)
      親コメント
    • C++は初心者ですが、Boostはともかく、Lokiがちゃんと動くコンパイラって…。

      Win32が使えて、まともなIDE環境で、テンプレートがきちんと動くのってCodeWarrior以外にありますか?
      # 古いバージョンからアップグレードするべきかどうか悩んでいます。
      VCから移行しちゃおうかなんて思わなくもないんですが、ややマイナー気味な環境であることには変わりないので微妙に不安だったり。
      C++好きな方、だれか教えてください。
      親コメント
    • 私みたいにサーバサイドばっかりの人間だと, C, COBOL, Javaそれにperlか何かのスクリプト言語だけなんで, C++なんて何それって感じですね.

      オブジェクト指向で設計しても, 実装をオブジェクト指向言語でしなければならないということでも無いし, 複数の開発言語を混在して使うのが当たり前の状況だと, C++は非常に中途半端な位置づけにあるように思えます. 万能なのは確かなんですけどね.

      親コメント
  • by Anonymous Coward on 2002年10月15日 21時29分 (#183825)
    言語仕様についても語ろうぜ。ここが好き、ここが糞、とかな。

    とりあえず、おいらはC#は悪くないと思う。
    JavaがそのままC#に置換されても不幸じゃないね。
    JavaはC++へのアンチテーゼ的な仕様が多々あるけど、
    C#は「なにもそこまで極端に振ることはないんじゃない?」って感じで、
    Javaで捨てられたC++のいいところをかなり復活させてる。
    syntax sugarが多いので書いていて結構快感だよ。
    C#に慣れてからJavaに戻ると不便で「ウガー」と叫びたくなる。
    enumがあったり、enumを文字にcastできたり、caseに文字列が使えたり、
    intがclass(ほんとはstructだが)にシームレスに変換できたりと、
    結構痒いところに手が届いていい感じ。
    # ただdelegateキーワードは糞だな。
typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...