C#言語、ISO標準獲得へ 219
ストーリー by Oliver
C++とは別物 部門より
C++とは別物 部門より
ZDNetの記事へのリンクをタレコミしてくれたsuezo曰く、"とうとうここまできました。これから、C#に置き換わり、C++は廃れてしまったりするのでしょうか"
自分が提案した標準ならば、そう簡単には自ら非準拠になったりはしないだろう、と期待していいものか。
ZDNetの記事へのリンクをタレコミしてくれたsuezo曰く、"とうとうここまできました。これから、C#に置き換わり、C++は廃れてしまったりするのでしょうか"
自分が提案した標準ならば、そう簡単には自ら非準拠になったりはしないだろう、と期待していいものか。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
ISOってなんか意味あるの? (スコア:2, 興味深い)
よく分からないのですが、今のところ.NETフレームワーク以外に使用されるようなことはなさそうですし、標準でなくていいからMSのほうで勝手にやっていてくれという感じです。
ちなみに、
そんなことないと信じています。
というか、C#ってC++の派生だったような気がするのですが。もうしそうだとしたならば、廃れることはないんでしょうけど。
#あ、C#の道連れで荒廃していく可能性も考慮せねば...
まぁ、Mac OS Xの日曜プログラマとしてはささやかながらもObjective-Cを応援し続けるつもりでいますが。
// Give me chocolates!
ISOシリーズ (スコア:2)
ISO9000とかISO14000の認証を得たところで、トッププレゼンするには、「営業を騙しやすくて」いいぢゃん。
# と思っていたら、「技術的なことは弊社の○○から」と呼び出されて汗を書く罠
Copyright (c) 2001-2014 Parsley, All rights reserved.
Re:ISOってなんか意味あるの? (スコア:1)
Re:ISOってなんか意味あるの? (スコア:1)
それはそれとして、C#って存在自体無駄だよな。
C++の代わりになる(文法の話でなくて、適用分野だけど)わけでもなし、.NETも、C#でなくてはいけないって訳でもなし。
wild wild computing
Re:ISOってなんか意味あるの? (スコア:1)
個人的には情報系の資格でJavaを選択肢に入れるところがあるみたいですが、ISO取るとどうなんでしょうね。
そういう方面でどうなるか気になっていたり。
Re:ISOってなんか意味あるの? (スコア:2, 興味深い)
C#はもともとJavaの当て馬として開発されただけだから、ISOに認証されてどうなろうが、Javaを潰せればそれでいいんだという計算はあると思います。
一方、Javaの方はSunの主軸商品だから、どうにも主導権を失いたくない。少なくとも会社の将来を左右する決断でしょう。ISOなんて通ったらIBMあたりにも持っていかれそうでかなり危なそう。
立場の違いがありますが、個人的にはSunの対応が注目ですね。
Re:んでも (スコア:2, おもしろおかしい)
右手が一文字分ズレたみたいですな。
Re:ISOってなんか意味あるの? (スコア:1)
いや、JAVAのパチモンという呼び名が打倒かと。
C#がリリースされたときにはビビった。
ここまでJAVAっぽくする必要があるんか。
ってね。
PCにECC Registeredメモリの利用を推奨します。
Re:ISOってなんか意味あるの? (スコア:2, 参考になる)
高速化に関しては、一つの手法を採用したから画期的に性能が上がったとか、そんな簡単なことばかりじゃないです。小さなことの積み上げが最終的に大きく効いてくるということもよくある。メタプログラミングの例でも、通常ランタイム時に計算するところをコンパイル時に済ませられるようになったというのは、非常に意味のあることだと思っています。
Re:ISOってなんか意味あるの? (スコア:1)
Microsoft 以外からも処理系を出して欲しいという意思表示でしょうか。あるいは既にあるのかな?
Re:ISOってなんか意味あるの? (スコア:1)
http://www.go-mono.com/c-sharp.html [go-mono.com]
Re:ISOってなんか意味あるの? (スコア:1)
ISOになると、各国政府がある程度の後押しをすることになってます。
例えば、おそらくJISにもなるでしょうし、情報処理技術者試験の
選択科目にもなるかもしれません。さらにひょっとしたら、中学や
高校の授業でとりあげられるかもしれません。
今すぐの影響は小さいですが、10年後にはJavaが今のCOBOLのような
存在になっちゃうかもしれませんね。あくまでも可能性ですが。
#今後30年を生き残る言語って何があるだろか。
#スクリプト言語とC以外に、OCAML/Tkでも勉強してみるべいか。
100年たっても生き残る言語 (スコア:3, 興味深い)
30年どころか、100年たっても間違いなく生き残るであろう言語が少なくとも2つはあるでしょう。アセンブラとCです。
これらの言語の特異な点は、言語のsemanticsに面倒な実行時の支援処理や初期化が一切含まれていないことです。すなわち、自分で作ったエントリポイントにいきなり処理を飛ばしてもきちんと動作するわけです。これは計算機をbootさせるためには必ず通らなければならない関門であり、ほかの言語にはマネができません。どんなにプログラムが組みにくくても、この2言語だけは捨てることはできないでしょう。
もっとも、アセンブラがどういう言語かという問題は残りますが、LispマシンだったらLispがアセンブラのようなものですしね。
Re:100年たっても生き残る言語 (スコア:3, すばらしい洞察)
> 言語が少なくとも2つはあるでしょう。アセンブラとCです。
アセンブラが当分生き残るということには同意しますが、100年と言われるとちょっとどうかなあという気が。
アセンブラはノイマン型コンピュータの最下層のソフトウェア(を人間に可読な表記にしたもの)ですから、ノイマン型コンピュータと一蓮托生です。その意味で、ご指摘の通りアセンブラの寿命が非常に長いというのはほぼ間違いないでしょう。が、ノイマン型コンピュータがあと100年持つかどうかというと、それにはちょっと漠然とした疑問があります。確かに今のところ不動の地位を保っていますが。
また、Cは「アセンブラの体のいいwrapper」としての側面が強く、今さらCと同じ立場を置き換える言語が現れることもないでしょうから、アセンブラとCは同じ寿命を持つと思います。この点はそのまま同意です。
もしノイマン型コンピュータを駆逐するような制御構造が現れたとすると、記述の抽象度が高い関数型言語や論理型言語の方が案外生き残りやすいかもしれません。
# ただの妄想かも
Re:100年たっても生き残る言語 (スコア:2, 興味深い)
アセンブラについては CPU が存在している限り消えないでしょうが、
C言語に関してはスレッドもサポートしていない言語が
30年、100年後に生き残っているとは思えません。
もし、残っているとしても、今の COBOL 並みの地位にいると思います。
boost が取り込まれた C++ は生き残っていくような気がします。
ただし、デスクトップというより、むしろ組み込み系、
今のアセンブラ地位の言語として生き延びていくと思います。
by rti.
Re:100年たっても生き残る言語 (スコア:5, すばらしい洞察)
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が必要な言語で作ったりすることがタマゴとニワトリ問題を引き起こすので、そんなものを選ぶのはナンセンスですが。
Re:100年たっても生き残る言語 (スコア:2, 参考になる)
言語の 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年後はなくてもいいや。
コンタミは発見の母
Re:100年たっても生き残る言語 (スコア:2, 参考になる)
Lisp マシンというのは、CPU の設計からすでに LISP 向きに設計されているものをさすのだと思います。例えば、あらゆるメモリにはかならずタグがついており、car や cdr など基本関数はハードウェアで実装。GCもマイクロコードでやったりとか。少なくともいまはなき Symbolics Machine という Lisp マシンは、アセンブラコードがかなり Lisp に近いもので、car, cdr, cons とかに相当するものが並んでました。
Re:ISOってなんか意味あるの? (スコア:1, おもしろおかしい)
おかむらたかし って読んじゃいました。
Mono Project (スコア:2, 参考になる)
http://www.go-mono.com/index.html
Re:Mono Project (スコア:1)
もう、コンパイラできています。
GUIまわりのCLIを動かすランタイムができると幸せになれるかも。
PCにECC Registeredメモリの利用を推奨します。
どんなに言語ができても (スコア:1)
でも自分が得意な言語で仕事させて欲しいよな...
Re:どんなに言語ができても (スコア:1, 興味深い)
特にコンピュータ言語についてはその性質上アプリケーションやハードウエアよりも拡散が極端に遅いですから、今現状のことを議論にしても仕方がないでしょう。
C言語の登場当初である1972年前後に現役プログラマとして働いていた大先輩の方の話では、登場当初のC言語に対しては公に「COBOLに比べれば糞以下」と言って憚らない人もいたらしいですから、C#にしても同じように長い期間を見据えて判断すべきではないでしょうか。
願わくばMicrosoft固有の技術のまま埋もれないことを祈ります。
C#ってどうよ? (スコア:1)
実際のところC#ってどうなんでしょう
資料 [microsoft.com]読んでると
>ガーベージ コレクションが、手動によるメモリ管理から開発者を解放します。
>C# では、変数はシステムによって自動的に初期化されます。
>変数は全てタイプセーフです。
まぁ ここら辺はいいとして
>コンポーネント オブジェクト モデリング (COM) や Windows ベースの API のネイティブ サポート。
>ネイティブ ポインタ使用制限の許可。
危険な要素が…
ホントに使えるのか?この言語
# とりあえずC++から乗り換える物ではなさそうな感じ
Re:C#ってどうよ? (スコア:2, 参考になる)
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じゃとっくにやってますね。
>ネイティブ ポインタ
これはイッテヨシですね…
Re:C#ってどうよ? (スコア:2, 参考になる)
C# の設計者は Delphi の設計者って話ですね。
>>ネイティブ ポインタ
>これはイッテヨシですね…
なぜ?
画像処理など部分的に使えるだけで便利な局面はあります。
使いたくても使えないより良いと思いますよ。
C# でも無制限にポインタが使えるわけではないんです。
明示的に「unsafe」ブロックを切り、その中で限定して使います。
これにより、初心者の誤用・ポインタマニアの乱用を
抑制するようになっています。
MS 嫌いには嫌われがちな言語ですが、
理想に走りすぎて一部使いにくい Java に対して、
より現実に向き合った C#、という見方もあるようですよ。
どっちかというと (スコア:1)
あと、OSとしてWindowsを使う、もしくは使わなければならないときは、Javaだとどうにも使いにくいですから、そんなときはC#でしょうね。
でも、とりあえずJavaで書いておいて、Windowsで使うときはC#にポーティングすれば済む気もします。時間がないときはそうも行かないでしょうけど。
どちらにせよVB使うよりはJavaへの親和性がこれまでよりも高いですから、アプリの開発者としては、喜ばしいことというか、楽になるというか、いろいろ選択肢が広がるとは思っています。なので、MS系で言うと、VB.NetなんかよりもC#が普及して欲しいですね。
Re:オンラインドキュメントが少ない(Re:C#ってどうよ (スコア:2, 参考になる)
あと1,2年ぐらいたってみないとそこら辺は評価できないのでは?
ただ、パワーのある開発者は積極的に取り組んでいるので、
日本では C# メーリングリスト [users.gr.jp]や、
海外では The Code Project [codeproject.com] あたりで結構情報は流れています。
#ってゆうか google [google.co.jp] で検索したら結構出てくると思うのですが。。。
by rti.
「廃れる」の条件を満たせるほど (スコア:1)
# 本気で反論ってわけじゃないんですが、つい…
周りで template ゴリゴリ書いたり、Loki [freshmeat.net] や Boost [boost.org] をブンブン言わせながら使い倒してるような人ってあんまりいないですよね?(そんなことない?)
もちろん、こんな使い方してるからって「流行ってる」ってことにはならないのは確かですが、ひとつの目安として、もうちょっと C++ 独自の仕様を活用したアプローチが日常的に見られてもいいんじゃないかなあ、と思ったりします。
個人的には夜も眠れなくなるくらい「C++ 大好きっ!!!」なんですけど C# もいい言語だと思いますね。細かいスペックはまだ把握してないけど、interface とか delegate、override(これは諸刃っぽい気もするけど…)をサポートってだけでも、なかなか興味深いです。
ISO 取ろうが取るまいが、どうせ仕事で使う予定なんで、今のうちから好きになっておきます。:^)
-- cooper
Re:「廃れる」の条件を満たせるほど (スコア:2, 興味深い)
流行ってると言うより,私も夜も眠れなくなるくらい「C++ 大好きっ!!!」ですね。私にとっちゃCは構造化アセンブラだし,C++にしたところでオブジェクト指向アセンブラなわけで,その低水準っぷりに惚れています。画像処理なんかやってると,ピクセルをいじりまわすのに,raster[y * h + x]とかやるよりポインタでアクセスしたほうが,書きやすく読みやすくなるとか,24bitカラー画像とグレースケール画像に同じアルゴリズムを適用するのに,templateが涙が出るほどありがたいとか,要するにポインタ演算とテンプレートが使いたくて,C++やってるみたいなところがあります。例外はあまり使わないし,RTTIは全く使わないけどね...
# ポインタ至上主義者なのでAC
Re:「廃れる」の条件を満たせるほど (スコア:2, 興味深い)
理解できないまま使いこなせていない人がほとんどでした。
私は日本で C++ を本当の意味で使いこなしている人種は
ごくごく一部だと推測しています。
(ほとんどは、望ましくないコードのオンパレードだと思う.
私の環境が悪かったのかもしれないが...)
そういう私は C++ を使い始めたのは、かなり昔ですが、
いろいろな言語を触ったあとで C++ を使ってみると、
その "複雑さ加減" というか、"いくらでも変態的な
コードがかけるところ" が返って気持ちよかったりします。
(マゾ的な気分を味わいます。)
でもC言語の延長としての C++ は嫌いですね。
template, STL, Design Pattern を使ってこそ C++ なりの
気持ちよさがあります。
# ついでに VC++(MFC) の設計は非常に嫌い
# 昔 Common C++ というライブラリを使ってたけど
# 最近は Loki, Boost なんていいものがあるのね。情報ありがとう
Re:「廃れる」の条件を満たせるほど (スコア:1)
なんつーか、「便利なC」ぐらいの使われ方をされてるような・・
C++って、いろいろ詰め込みすぎて使い倒せるようになるには量が多すぎる、という気がする。
#K&Rと比べて、ストラウストラップの本の分厚さよ。
あと、Cっぽい使い方でも結構いけてしまうので、わざわざC++らしい使い方を習得しようとする人が少ないのでは。
> 周りで template ゴリゴリ書いたり、Loki [freshmeat.net] や Boost [boost.org] を
> ブンブン言わせながら使い倒してるような人ってあんまりいないですよね?
templateも書けると便利なときがあるけど、使用頻度はあんまりないような気がする。
ライブラリに関しては、STLでことが足りることがほとんどだったり。
#Windows環境だと、それこそMFCべったりになっちゃうし。
Re:「廃れる」の条件を満たせるほど (スコア:1)
私的流行デス。
最近はLinux上でgtkmmをいじるとか。
あえてQtは使わない。
周りにC++を薦めていますけど。
なぜかJava勢力が強いみたいです。
私は目の前にある言語は何でも使います。
好き嫌いはダメダメ。
PCにECC Registeredメモリの利用を推奨します。
Re:「廃れる」の条件を満たせるほど (スコア:1)
全然。(爆)
というか、どの程度使われていれば流行っていると言っていいのかわからないな。
まあでも俺も Windows 用プログラム作る時は C++Builder か Delphi を使うんだけどさ、それは何故かというと GUI 部分を作るのが面倒だから。GUIなしの場合は無料の Borland C++ Compiler をC言語のコンパイラとして使う程度かな(滅多にC++で作らない)。Cygwin の gcc は UNIX と同じソースにしたい時だけしか使わないな。
ああ、でも perl で作ると何処行ってもそのまま使えて良いんだけどな。いっそのこと perl で CLI 作ったらそのままいろいろな OS で使えて良いんじゃないか? (笑)
# Java VM も。
(´д`;)
Re:「廃れる」の条件を満たせるほど (スコア:2, 参考になる)
Re:「廃れる」の条件を満たせるほど (スコア:1)
Win32が使えて、まともなIDE環境で、テンプレートがきちんと動くのってCodeWarrior以外にありますか?
# 古いバージョンからアップグレードするべきかどうか悩んでいます。
VCから移行しちゃおうかなんて思わなくもないんですが、ややマイナー気味な環境であることには変わりないので微妙に不安だったり。
C++好きな方、だれか教えてください。
Re:「廃れる」の条件を満たせるほど (スコア:1)
私みたいにサーバサイドばっかりの人間だと, C, COBOL, Javaそれにperlか何かのスクリプト言語だけなんで, C++なんて何それって感じですね.
オブジェクト指向で設計しても, 実装をオブジェクト指向言語でしなければならないということでも無いし, 複数の開発言語を混在して使うのが当たり前の状況だと, C++は非常に中途半端な位置づけにあるように思えます. 万能なのは確かなんですけどね.
OOPLは言語非依存では? (スコア:2, 興味深い)
オブジェクト指向と相性が悪い言語だと思います。
C++でOOPLが出来る人は、CでもOOPLは出来るハズ。
gcc(g++) が プログラマの思う動作をしてくれないのは
いわゆるC++の規格が、どんどん拡張されている事にも一理あります。
しかし、規格が拡張され変化していることは、
それだけ利用者が多く広く実践的にC++が活用されていることの現れでもある訳で
どんどん変化しつつ 100年後もC++の子孫は 残っているような気がします。
言語仕様は? (スコア:1, 興味深い)
とりあえず、おいらはC#は悪くないと思う。
JavaがそのままC#に置換されても不幸じゃないね。
JavaはC++へのアンチテーゼ的な仕様が多々あるけど、
C#は「なにもそこまで極端に振ることはないんじゃない?」って感じで、
Javaで捨てられたC++のいいところをかなり復活させてる。
syntax sugarが多いので書いていて結構快感だよ。
C#に慣れてからJavaに戻ると不便で「ウガー」と叫びたくなる。
enumがあったり、enumを文字にcastできたり、caseに文字列が使えたり、
intがclass(ほんとはstructだが)にシームレスに変換できたりと、
結構痒いところに手が届いていい感じ。
# ただdelegateキーワードは糞だな。
Re:言語仕様は? (スコア:1)
Javaに演算子オーバーロードさえあればそっちのほうが全然綺麗だなぁ、と。
もうちょっと文法を洗練させて出した方が良かったんじゃないかなぁ、とか思ってしまいました。
Re:言語仕様は? (スコア:1)
Re:物事をいい方向に考えてみるテスト (スコア:1)
マイクロソフトに限って…って思うのは自分だけではないはず
Windowsが圧倒的に劣勢になったらやるだろうけど…
Re:気になってたんだが (スコア:2, 興味深い)
# ほんとの語源がこれかどうは知りません
Re:気になってたんだが (スコア:1)
C++を何かに近づけようとしたんじゃないですか? なので偏っちゃった、ということで。
Re:気になってたんだが (オフトピック: -1) (スコア:2, おもしろおかしい)
┓┏ ← 青筋
Re:気になってたんだが (スコア:2, おもしろおかしい)
# この前飲んだカフェオレがアマアマだったのでハンドル
Re:気になってたんだが(オフトピック自己申告) (スコア:1)
じゃ最後は MAX Cですね :-)
# 元千葉県民なのでハンドル
そうじゃないだろう!
Re:気になってたんだが (スコア:1)
砂糖とミルクひいてみました。「boss--」とか。
PCにECC Registeredメモリの利用を推奨します。
Re:気になってたんだが (スコア:1)
Re:気になってたんだが (スコア:1, すばらしい洞察)
それすなわちB.