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

C#が人気急増中? 41

ストーリー by Oliver
倍近くても絶対数が... 部門より

kamuy 曰く、 "日経IT Pro US NEWS FLASHから。ちょっと前から気になってたんですが、「米マイクロソフトのC#が人気急増中,過去半年で使用開発者が7%から12%に」という記事があるのですが、コレって「人気急増」という話なのでしょうか? なんとなく偏った見方であるような気がするのですが… それとも、プログラミングの世界ではそういう判断をするモノなのでしょうか? (単に私が偏っているだけ?)"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Dot.Zeile (1169) on 2002年05月09日 18時29分 (#91131) 日記
    使った人が倍近くになったのは事実なんだろうし、それがかなり急激に増えてるのも事実だと思います。

    でも「人気」急増って書いてあると変ですよね。考えれば分かることなんですが、「人気急増」と「人数急増」は全く違うわけです。実際、ZDNet Japanとかでもこの件は伝えられてましたが、使ったことのある人の数が倍増したのだということを冷静に伝えてたはずだし、とりあえず試しに使ってみてる人が多くてメインの開発言語にしている人はまだ少ない、ということが書いてあった。
    • やっぱりプロフィールの「習得言語」欄とかをにぎやかにするために「とりあえず使っとこう」なんでしょうか。
      「使える」のと「使っている」のは違いますからね。
      親コメント
    • 私がC#を始めたのは、覚えないとプログラマとしてヤバイというだけですが、
      そんな人が多いハズ・・・ですよね?。
      それよりもVB.NETがすごくいいです。(←あくまで対VB6比ですが・・・)
      #無茶苦茶なプログラムを組んでいた人間はふるい落とされそうな仕様変更がとても素敵です。
      • by mich (6859) on 2002年05月10日 16時26分 (#91539)
        私はプログラミングを出来ないんですが、
        それってDelphiと差が無くなったって事でしょうかね?
        VBは適当にプログラムしても何故か動いてくれるってのが一番の魅力だと聞いたことがあるので・・・
        親コメント
        • 適当に書いたのを引き継がされたものとしては、たまったものではありません:-)。
          目前にあるのは、暗黙の仕様がいっぱい使われた VB6 による謎のコード。
          wc かけたら 10万行もあるし。
  • 結構使える (スコア:4, 参考になる)

    by unsignedint (7810) on 2002年05月09日 19時17分 (#91155) ホームページ 日記
    昔一度酷評、というかC#の悪口書いたことあるのですが使ってみると面白いんですよね。

    言語としてもよく考えられていると思うし、開発効率もいいし。
    自分はC, C++, DelphiといろいろとやったのですがDelphiがRADとして比重を置いていますがC#はC,C++の中間みたいな感じで非常にバランスよく感じます。

    自分が公開しているソフトもC#で書かれたものがありますが……。
    あまり見かけないですがどのくらいの人がC#で書かれたアプリ作っているのでしょうか?

    C#…なんとかして欲しい点……
    1.マルチメディア関係のクラス、関数がほぼない(音を鳴らす、というレベルのものもありません)
    2.ユーザーに負担を強いる(へたれプログラムを使うのに20メガのダウンロードはねぇ)

    それ以外では気に入ってるのですが……。
    • by fukapon (4131) on 2002年05月09日 23時16分 (#91236)

       曖昧な記憶なんですが、C#を設計した人って、Delphiを設計した人と同じじゃありませんでしたっけ。言語としては非常に素晴らしい出来だ、とその方が自信を持っているという話を聞いたことがあります。

       ...そろそろ.NETもさわってみようかなぁ。

      親コメント
      • 無論 C# の設計者は A. Hejlsberg なのですが、1つの言語を「設計」したと主張できるほど Java と違いますかね?

        僕が検証したところ文法だけ見て C# が Java と根本的に違うのは 5点のみ。
        多次元配列の存在、primitive 型(C# では predefind 型)の call by reference、unsafe 構文の存在、check/uncheck、goto 文。
        あと小さな違いとしては decimal 型とか、文字列定数の書き方とか、文字列を case にした switch 構文の存在とか。

        残りは糖衣構文(syntax suger) のある/なしだと思います。
        # 糖衣構文というのは、同じ書き方がもっと基本的な構文の
        # 組み合わせで書けるのだけど書きやすさのために導入された
        # 文法のことです。
        ## Gosling は糖衣構文を嫌う人みたいで、オペレータのオーバーロード
        ## 等を頑として認めなかったようです。言語屋さんなのねぇ。

        逆に、Java にあって C# にない機能はほとんどないのですが、transient フィールド修飾子ぐらいでしょうか?

        p.s.
        C# が Java の駄目な部分に引きずられてしまった所もあります。
        例えば synchronized文由来の lock 文にタイムアウト値が設定できないとか。後発なのだから直せば良いのに。

        あとせっかく struct まで入ったのですから、親子関係のあるオブジェクトを連結する機能が欲しかった。

        p.p.s.
        C# の機能のうち一番 Java に移植して欲しいのはプリプロセッサ機能。
        --
        コンタミは発見の母
        親コメント
        • Attribute はどうでしょ?
          まったく新しい概念て訳でもないでしょうが、
          あれってナニゲに一番大きな違いのような気が。
          親コメント
          • by (((((lambda))))) (3568) on 2002年05月10日 19時20分 (#91607) ホームページ
            Metaobject Protocolがあれば、attributeみたいなものは わざわざ言語仕様にしなくたって、ユーザレベル (ライブラリレベル)で簡単に作れちゃうわけで。 それを殊更に新機能と言わなければならないところに なんとなく不自由さを感じてしまう (JavaもC#も)。

            もちろん標準で持つ意味はあるんで、あくまで感覚の問題ですが。

            親コメント
            • by makmak (3482) on 2002年05月10日 20時24分 (#91636)
              理想を言えばキリが無いわけで・・・
              元が Java との違いだったので、大事なの忘れてますよー、って事です。
              例えば ZLib(deflate) を使いたかった時に DllImporrtAttribute を使ったんですけど、
              マーシャリング方法やら含めて単に Attribute で指定しただけでネイティブメソッド呼び出しが
              できたのは、(JNIと比べたら)単純に「便利!」と思いました。
              (Java なら inflate くらい標準で持ってるって突っ込みはしないで・・・)
              これは単なる例なので、本当はネイティブメソッドなんて
              使わないで済めばそれに越した事はないですが、言語の可能性としては
              面白そうだな、と。

              言語標準機能なのにヤケに Windows 寄りな名前なのもアレなんですけどね。
              別に C# が Java より優れてるとか(その逆とか)、まして C# は最高なんて思ってる訳ではないので、念のため。
              親コメント
            • by Anonymous Coward
              Attributeは言語仕様じゃありませんよ。C#でしか使えないわけじゃないですから。メタデータの仕様に含まれているものなわけで。
              そうなると、あなたのおっしゃるMetaobject Protocolというものとどう違うのかよくわかりません。
              • あ、すまん。俺勘違いしてた。 もういちどドキュメント読みなおしてみたら、 Attributeはどっちかっていうとコンパイルの後段、いわば リンケージ段階のセマンティクスに影響を与えるもので、 MOPの有効な範囲とはちょっと違うがな。 前言撤回。
                親コメント
              • by makmak (3482) on 2002年05月14日 23時41分 (#93189)
                コンパイル時に影響を与えるものもありますよ。ObsoleteAttribute とか。
                AttributeUsageAttribute 自体もそうですかね。この辺りはリンケージ時と言うにはちょっと違うと思います。
                コンパイラの実装次第と言える気もしますが、一応この辺りは C# ドキュメントの言語仕様に入ってるものですし。
                (C# の標準案として提出されたものに入っているかは知りませんが)
                あと AC さん、メタデータの仕様だから言語仕様じゃないとか言い出したら、C# に残るものなんて・・・。
                親コメント
          • Java の言語レベルには attribute はないのですが、バイトコードの仕様には Attribute があります。一応。
            詳しくはここ [sun.com]。

            ただ Attribute がつけられるのはクラス、メソッド、フィールドぐらいで、どこにでも自由におけるというわけではないです。
            後、Attribute を自由に取り出す API は存在しません。

            Java が attribute のような機構を積極的に使わないのは やはり組み込みを第一に設計され、サイズを小さくすることに注力したからでしょうね。
            --
            コンタミは発見の母
            親コメント
        • そうそう、私が C#(+ VisualStudio.Net)を使って、(Javaと比較して)これは便利!と思ったのは、実は
          1.#region / #endregion (上に出てますが)
          2.#line がある。(ドロ臭いけど、トランスレータなんかを書くのにはやっぱり欲しいですよね)
          3.VisualStudio.Net のエディタでコピーして、リッチテキストなどを食うアプリにペーストすると、エディタ上の文字の書体・色が保存される。

          だったりします。
          3.の機能は、私は他で見たことがなかったし、貼り付けてから、あれ?って感じで気づいたので、うぉ!と思ってしまいました。

          あんまり書くと MS シンパと思われるので、もうやめます。
          親コメント
        • C#単体で見るとJavaとあまり違わないように見えるけど、.NET framework を含めて考えれば、相当に異なるモノだと思いますよ。私には、C#はJavaのマネしたというより、参考にしたって言う方が正しく感じられますが。
          あと、理論的な根本的違いは多くないかもしれませんが、現実として大きく異なってくる部
          • 一応、私の批判は言語仕様に限ったものです。
            私自身が .NET framework については学習中なので何かを言えるレベルには達していません。
            # でも デジャビューの連続なのですが...

            > あと、大きく違う部分としてユーザ定義の値型struct(C++のそれとは全く異なる)、
            > これを入れないでどうしますか

            あ、struct を書き忘れていました。でも概念的には C++ の struct そのものですよ。ポインタが取れないことを除いては。

            私自身、C# の仕様を一読したときに "struct" を見つけた時には感激したものです(*1)。ただ struct は参照がとれない制限や、固定長であっても配列状のデータを取り込めない制限などがあり仕様用途は限定されます。私が眺めた範囲でですが CLI のクラスライブラリ中でも struct は有効な使い方をされていないように見えます。

            個人的には、むしろスタック割り付けを指示する特別な new 命令があった方が嬉しいです。

            // MyObject obj = new MyObject(); // ヒープ割り付け。
            MyObject obj = alloca MyObject(); // できるだけスタック割り付け。


            (*1)
            私自身の本職は C# の struct に関わるところにあります。
            Java においてユーザーに "struct" を書かせずに "struct" を使ったのと同じ効果を出す方法を考えているのです。つまりインスタンスの stack allocation と object inling をやろうとしている人間です。
            --
            コンタミは発見の母
            親コメント
            • by Anonymous Coward
              unsafe コード中での stackalloc ってのがありますよ
              • unsafe というキーワードからわかるように、スタックに割り付けたオブジェクトを強制開放します。そのためこの命令は dangling pointer(意図しないメモリを指すポインタのこと。バグの典型の1種)を作る危険性があります。
                unsafe はユーザー責任とはいえ、GC のある言語で dangeling pointer なんぞ作られたらたまりません。デバッグ不能です。
                # でも似たような機構を realtime Java の仕様で見たことがあるような、ないような。

                セキュアなスタックアロケーションをやるためには C# の struct のように制限をもうけてやる方法以外に、コードを解析することによって安全に割り付けられることを検証したり、参照が外部に漏れてた場合をランタイムで補償する方法があります。
                私の関心はこちらにあります。

                ただ、すべての new に対してをスタック割り付けが可能かどうか解析していくのはコストが高いので、ユーザーに「ここを解析しろ」と指示を書いて欲しい。そのための修飾キーワードが(昔の C 言語の register のように)言語レベルで欲しいと思っているのですが、如何でしょう?
                --
                コンタミは発見の母
                親コメント
              • by Anonymous Coward
                > unsafe はユーザー責任とはいえ、GC のある言語で dangeling pointer なんぞ作られたらたまりません。デバッグ不能です。

                うーん,そこまで言われると困りますなぁ.
                いまこの場での議論でC#の規格を決められたらいいのですが.
                で,まずは「stack allocation によるパフォーマンスの改善(可能性)」から「デバッグコスト」へと話題が増えてますしね.
                私から見れば「dangeling pointer なんぞ作られたらたまりません」な人も「stack allocation によるパフォーマンス改善」を望む人もわりと他人事なので,何書いてもそれなりに妥当な返答が返ってくる当事者の方か
              • > ころでWindowsのゲーム用ライブラリであるDirectX Graphics
                > ではfloat×16の行列を多用するのですが,これはSSEへの最
                > 適化のため16byteアライメントするように推奨されています.
                > これをC#から使えるようにしたとき,Microsoftがライブラリ
                > にどういう実装を行うかには結構興味がありますね.
                > 個人的にはアライメント用の属性を作るんじゃないかと思って
                > ます.

                アライメントの指定すること自体は属性で簡単にできると思いますが、問題は仮想マシンをどうつくるかです。

                ガーベージコレクションの対象となるヒープ空間上では、GC によってオブジェクトが度々 移動します。そのたびにアライメントを考えてデータの構造や大きさまでをも組み替える必要があります。これは骨ですよ。

                特定のデータに特化する手法を用いる場合なら、float×16の行列を扱う専用のクラスを作ってやればよいと思います。ヘッダーが 8バイトだとすると、オブジェクトの大きさを32バイト固定にしてアライメントによって行列部を前に詰めたり、後ろに詰めたりすれば実装可能です。
                # CLR も 8バイト境界を採用しているでしょうから、詰め方は 2パターンしかない。

                任意のクラスに任意のアライメントを指定する場合は面倒になります。
                私ならオブジェクト毎にアライメントに関する情報を持たせる方法か、オリジナルのクラスからアライメントを特化させたサブクラスを作成する方法のどちらかを取ると思います。
                前者の場合、オブジェクト毎にアライメント用のフィールドを余分に持つ必要がありますしアライメント指定のない通常のオブジェクトのアクセスに余分なオーバーヘッドが掛かるので後者の方が効率はよいでしょう。

                p.s.

                まったくの余談ですが、float 型の配列の配列部は 8n + 4 となる境界に載るという、数値演算系の人からみると冗談としか思えないような JavaVM の実装があります。

                # オブジェクトが 8 バイトアライメントに揃っていて、各オブ
                # ジェクトは 8 バイトのヘッダー情報を持ち、配列の場合は配
                # 列長をしめす領域が 1 ワード(4バイト)が余分についていて、
                # その直後から行列のデータ部分がはじまる。
                ## ということは double 型の配列も 8n + 4 境界からはじまる?、
                --
                コンタミは発見の母
                親コメント
              • > あと気になると言えば,Fortran for .NET がどういう実装な
                > のかですかねぇ.
                > 私が配列ベースで作業する場合は,記述性から Fortran とか
                > Mathematica 使いますから.

                C# の場合、多次元配列がはじめからあるので FORTRAN のプログラムをそのまま MSIL に変換してしまっているのではないでしょうか?
                プログラムを一つのクラスとして、共通ブロックはグローバルなクラス変数、プロシージャ・変数を static メソッドとして置換すればよいと思われます。

                無論、問題は最適化。
                ループ最適化など高レイヤーの最適化は中間言語レベルでもある程度有効だと思いますが、software pipeling 等の命令レベルの最適化はレジスタが見えないとほとんど無理です。
                # 少なくとも私は書けない。手袋を着けた状態で盲牌するようなもの。

                CLR 側の JIT コンパイラは、売り物のコンパイラと比べると簡単な最適化しか入っていないようです。また、FORTRAN が相手にするようなプログラムだと JIT のメリットはそんなにありません。AOT コンパイルをじっくりやった方が特です。
                # FORTRAN77 は virtual function call 以前に recusive call すらないので、
                # 静的にコントロールフローグラフがきっちり書ける。
                # 条件分岐もループ由来のものが多いので分岐方向は予測可能。

                実際に Lahey/Fujitsu Fortran for .NET [lahey.com]のパフォーマンスに関する問言は非常に控えめです。ただ、native code に変換してしまう機能があるようなので、そちらを使えば従来と同様のパフォーマンスが出るのではないでしょうか?

                p.s.
                余談ですが、FORTRAN はコンパイラに演算の実行順序を入れ替えるような最適化を認めているので、浮動小数点演算ユニットが IEEE754 に準拠していたとしてもコンパイラによって計算結果が異なることがあります。

                一方、Java は "Write Once, Run Anywhere" を掲げて、浮動小数点が誤差のレベルまで一致させんという高邁な理想を持っています。多次元配列がないのも痛いのですが、コンパイラ最適化の多くが禁止されるのがさらに痛いです。
                売り物の FORTRAN for JavaVM が出ない理由の一つですね。
                --
                コンタミは発見の母
                親コメント
        • 追伸部分にコメントなのでオフトピなんだけども、

          > 例えば synchronized文由来の lock 文にタイムアウト値が設定できないとか。

          ってのは、Javaの別の仕組みで解決できないんでしょうか。
          wait(), notify()とかでなんとかとか。
          • 結局、下のような構文が書けるか タイムアウト時に例外を送出できればいいのですが、

            synchronized ( obj, timeout ) {
                //
            } timeout-catch {
                //
            }

            Java に関してはどうにもならんです。Java では wait/notify はモニタを獲得したオブジェクトに対して使うものなので。
            仮にモニタロックなしで wait が使えるとしても、タイムアウト処理はロックの所有権を得た時と、タイムアウトで抜けた時を区別できないと意味がないですよね。
            Java の wait() って戻り値が void です。そのため、notify されて戻ってきたのかタイムアウトが来て戻ってきたのか区別がないのです。

            C# のクラスライブラリはさすがに戻り値を bool 型で返して区別しています。あと try-lock もあります。なのに lock 構文は synchronized 構文の引き写しなのです。せめて try-lock 型が構文で書ければ...

            p.s.
            IBM のこのページ [ibm.com]には、Java のスレッドの機能不足な点がいろいろ指摘されていています。
            --
            コンタミは発見の母
            親コメント
      • by G7 (3009) on 2002年05月10日 1時48分 (#91313)
        >人と同じじゃありませんでしたっけ。

        んですね。

        実装とかライブラリとかがどうなるか?という問題はさておき、
        #なので、.NETとC#がどういう関係か?はあまり考えない、という立場だとしてですが…
        言語仕様だけを取りだして評価するならば、C#は悪くないです。
        少なくとも色々な面で微妙に意固地で古臭い(=C(++)に似せすぎてる)Javaよりは、少し良いです。

        delphiのpropertyって概念(とその実装)は、なかなか良いのですが、
        いかんせん構文が繁雑でうんざり。かといってjava(のBeans)みたいに
        文法によるサポート義務(笑)を怠った言語もうんざり。
        そこへくるとC#は、まぁ年の功(普通と逆の意味です。キカイダーと同じで、弟ほど強い)を感じますね。
        構文はすっきりしてる。

        .NETに興味があるかどうかは別として、C#は触って(それでアプリやライブラリを作って)みたいですぅ。
        親コメント
      • by argon (3541) on 2002年05月10日 19時59分 (#91619) 日記
        Delphi.NET [about.com] というのも姿を見せてきたようですね。
        これが出たら本命だと思いつつ、VB.NET も VCLみたいでおもしろそう。
        親コメント
    • by Anonymous Coward
      いま作ってますよん。
      GUI回りのボタンの配置とかが面倒なのでVS買っちゃったけど。
      もうMFCには戻りたくない感じ(^^;

      使ってて思うのはクラスライブラリの解説本が欲しいな~と思うこと。
      もちろんヘルプにもビッシリ書いてあるんだけど、
      ちょっと表現が抽象化され過ぎていて分からないところがあるし。
      言語仕様に関して書いた本は結構あるんだけどなぁ。
      でも言語仕様はNET上でも公開されてるし。↓
      http://black.sakura.ne.jp/~third/cs.html

      >マルチメディア関係のクラス、関数がほぼない
      正直残念。DllImp
  • by Oyajikusai (1187) on 2002年05月09日 23時14分 (#91234)
    「人気がある」というよりも、「注目されている」といった趣を感じますね。

    半年間で使用開発者が5%から12%に増えたということは、開発者の4割がC#経験半年未満のスキルしかもっていないということの裏返しだったりします。

    注目を浴びた技術が一度は経験しなくてはならない、注目度と成熟度のアンバランスという試練を、C#(と、.NETは)はそろそろ迎えるんではないかと思っています。

    (いい意味で)面白くなりますよ。
  • Terrarium (スコア:2, 参考になる)

    by Anonymous Coward on 2002年05月09日 18時24分 (#91127)
    C#(や他のMS開発言語)なんて一生縁無く過ごしていけそうかと思ったら, ここ [srad.jp] でも紹介された Terrarium [microsoft.com]にヤラレてしまいました。やべーよ。

    # C#もちょっとはいいじゃん。

    • by aoking (3812) on 2002年05月09日 19時25分 (#91161)
      僕もここの記事読んでグッと来た口です。
      テラリウム徹底攻略ガイド [atmarkit.co.jp]
      カルネージハート世界版ですね(うっとり)
      作りも良くできていて2度うっとりです。
      悲しむべくは、僕にプログラミングの素養が全くないという事ですかね(涙)
      親コメント
    • by Anonymous Coward
      Terrariumの感想キボンヌ
      ちっと興味あるので
      • Re:Terrarium (スコア:2, 参考になる)

        by take0m (4948) on 2002年05月09日 18時37分 (#91135) 日記
        http://www.microsoft.com/japan/msdn/net/terrarium/docs/OrganismSDK/default.asp

        ここを見るとなんとなく雰囲気わかるかなぁ。
        VisualStudioがなくても.net frameworkだけで参加できます。
        DNAとして親が情報を子に渡すことができるところとか、テレポータを探す方法あたりが面白いですよ。
        親コメント
    • by Anonymous Coward
      ああ、なんか面白そう。
      でも家debianとmacしかないじゃん!
  • by dartei_harry (6792) on 2002年05月10日 7時20分 (#91358) 日記
    MSの関連ということなので、てっきり
    MS社内の組織票が入って急増かと思いましたが、
    そうとばかりはいえない部分もあるみたいですね。

    私はまだ触ってないのですが、記事を読む範囲では

    「にんき」が増えたというより、「ひとけ」が増えた

    という印象ですが、誰も触っていないよりはマシだと
    思います。

  • by riux (8456) on 2002年05月10日 19時03分 (#91597)
    だれも親コメントに答えてないな。 「人気急増」はやや言い過ぎ。
    「じわりと増加」とか「健闘」が妥当では。
    でもまあ、言っても差し支えない範囲。
  • by Anonymous Coward on 2002年05月09日 19時08分 (#91152)
    C# コンパイラとか入ってるから、Visual 環境いらなければ、
    特に何か買わなくても普通に開発が開始できちゃうのか…

    MS が Windows の汎用言語の開発環境を大々的に
    フリーで流したってのはもしかして初?
typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...