C#とC++を無理矢理戦 ..
[2ch|▼Menu]
2:デフォルトの名無しさん
19/11/27 22:06:26.88 pn0fGp7Q.net
君、アフィリエイトブログ転載用スレを立てすぎだよ

3:デフォルトの名無しさん
19/11/27 22:10:51.21 yc0HWZ1w.net
>>2
WPFスレから出てって欲しかっただけなんだが

4:デフォルトの名無しさん
19/11/27 22:45:39.59 iIIfyZvm.net
C# のもとは Delphi。
はい、論破。

5:デフォルトの名無しさん
19/11/27 23:25:47.03 r9xTTxSI.net
C#は、VB.NETと対になって説明されることが多い。
ということは、表面的な違いだけで C# は本質的には VB ということ
なのではなかろうか。

6:デフォルトの名無しさん
19/11/27 23:58:09 1i4qLeiK.net
逆だろ。VB.NETが従来のVisual Basicとは違って本質的にはC#ということ。

7:デフォルトの名無しさん
19/11/28 00:24:31.99 DQy/K16U.net
本質的にはどっちも.NETだろ

8:デフォルトの名無しさん
19/11/28 00:54:52.57 TWMCNQEW.net
>>6
このような場合、折衷案として、C# と VB.NET が本質的には同一、という
ことになります。

9:デフォルトの名無しさん
19/11/28 00:56:24.63 TWMCNQEW.net
C# == VB.NET

VB.NET == C#
は、数学的には同値です。

10:デフォルトの名無しさん
19/11/28 12:51:34.22 Lk4Ws1Uf.net
適材適所というか、c++の便利機能がc#で削ぎ落とされていてしんどい。
constな引数やメソッド
ある程度型安全なダックタイピングのジェネリック
目指してる方向性が違うようだから仕方ないと割り切ってるけど。

11:デフォルトの名無しさん
19/11/28 22:36:53.14 j8QwNrt/.net
C++は本格言語。
C#はスクリプト言語。
比べるほうがおかしい。

12:デフォルトの名無しさん
19/11/28 22:42:43.69 HBU31YUq.net
>>11
C#もJavaもある種のRAD開発言語的な要素を含んでいると考えて
いいんでしょうね。

13:デフォルトの名無しさん
19/11/28 22:50:41.55 rW4uqpGK.net
>>11
な…なんだって…

14:デフォルトの名無しさん
19/11/28 23:06:26.23 HBU31YUq.net
それぞれの登場時期には、既に C++言語が、gccによってどんなCPUに対しても
native binaryを出力できるようになっていたのに、どうしてJavaやC#がどうして
native binaryを出さずに、仮想コードを出す仕様にしたかについては誰でも
時々疑問に思うと思うんですが、自分なりに出した答えは:
1. gccは有ったが、それをバックエンドに使おうとすると、gcc のソースの一部
 をJavaやC#のコンパイラの中に組み込むか、中間コードを C 言語の形式で出力して
 gccをバックエンドとして動かす必要があった。これはライセンス、gcc環境のサイズの
 大きさ、言語処理系会社としてのプライドなどの観点から問題があった。
2. 実は、そもそも gcc が対応していないアーキテクチャも世の中にはあって、
 その環境でも Java や C# を動かしたい場合には、駄目であった。
 また、新しいCPUが出てきたときには、gccの方を修正しなくてはならなく
 なるが、gccのソースを解読するのは難しいので難しい。
3. C言語が対応しているCPUであっても、そもそも、プログラミングのフレームワーク的な
 構造が、Windowsとは全く異なっているプラットフォームが時々ありえる。
 例えば時代が違うかもしれないが、Objective-Cの環境でWindows風のプログラミングを
 するのは難しい。そもそも、GUIプログラムは特殊言語で書くようになっているプラット
 フォームや、Waitや効率的なメッセージループを書けないプラットフォームが存在しており、
 そのような環境に同じソースコードで書いたプログラムを移植するには、インタプリタ的にも
 動作しうる仮想コードで無いと困ることがある。

15:デフォルトの名無しさん
19/11/28 23:18:49.00 HBU31YUq.net
>>14
4. 例えば、サーバーなどでは、インタプリタ言語しか許可されて無い事がある。
 この場合、そのインタプリタ言語で仮想マシンを作ってしまえば、JavaやC#
 の仮想コードを動かすことが出来る。gccのようにバイナリに直す仕様に
 していたならば、そもそもこのような環境には対応できなかったことになる。

16:デフォルトの名無しさん
19/11/28 23:32:24.38 HBU31YUq.net
>>15
5. 当時のWin3.1系だと、アプリのバグはOS全体を停止させてしまうことが有った。
 このような環境だと native のコードにしてしまうよりも、Javaのように
 仮想コードをインタプリタで解釈実行できる機会を与えた方が安全であった。
 Win3.1系に限らず、native コードに致命的バグが有った場合に、OSにまで
 被害を及ぼさずに安定して停止させるのは、OS開発者に精密な設計を要求する。
 それに比べて、仮想コードを解釈実行するなら、致命的バグが有ったら安全に
 エラーを出力することは、とても容易に出来る。
 サーバーマシンなどの信頼性を要求する環境では、OSにバグがあった場合でも
 絶対にOSをダウンさせたくない。そのような目的では仮想コードを解釈実行する
 方式は有効である。

17:デフォルトの名無しさん
19/11/29 00:03:04.59 LpyfBhuP.net
>>14
「3」に関して。
Javaの登場時期と外れているが、例えば、iOSアプリは原則、Swiftで書かなければ
ならない。Swift は、native binaryに変換はされるが、OSのAPIの関数呼び出し規則の
仕様が非公開。だから、Swift以外の言語を独自にnative binaryに直した場合、
OSのAPIを呼び出す方法には、Appleの公式なドキュメントが無いので、
独自にリバースエンジニアリングをして対応する必要がある。
native binaryにいきなり直さずに、フロントエンドの処理系がJavaをパースして、
Swift言語に直すのも一つの方法である。
しかし、仮想コードに直す方式なら、このような場合でも対応できる。
仮想マシンをSwiftで書いておけば良いのだから。

18:デフォルトの名無しさん
19/11/29 00:10:50.59 LpyfBhuP.net
>>17
補足すると、iOSのアプリをC/C++言語で書く方法は、Apple公式では
公開されていないらしい。手短に書けば、C言語からOSのAPIを呼び出す
方法が公式ドキュメントでは分からない。そもそも、OSのAPIがCの関数ではなく、
Swiftの関数として定義されてしまっているのだから。
Windowsを使っていると、C言語やアセンブラからOSのAPIであるところの
Win32 APIを呼び出す方法が厳密にドキュメント化されているのが当たり前になっているが、
少なくとも iOSではそうはなっていないようだ。
当たり前すぎて気づかないが、DOSやWindowsは、native binary重視の環境だったの
かもしれない。実際、Unix系OSは、そもそも binary 互換性は重視しておらず、
同じOSであってもバージョンが変われば再コンパイルして対応するような、
ソースレベル互換の文化である。Windowsはバイナリ互換の文化である。

19:デフォルトの名無しさん
19/11/29 08:20:28 grds9Ww1.net
>>11
なんでスクリプトだと思ってるの?
Unityで誤解してる?

ちなみに、C#からC#スクリプトを呼び出せます。

20:デフォルトの名無しさん
19/12/07 05:37:08.95 GAACkWN6.net
C++はいずれRustに置き換えられるのでは。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1335日前に更新/7709 Bytes
担当:undef