ページ 11

C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 11:45
by もぐら
 C# で簡単に実現可能が、C++11なら実現できないか相当面倒くさい機能はありますか。
幾つか典型な例を頂ければ非常に嬉しいです。

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 12:06
by beatle
純粋な言語の機能の話でしょうか.
それとも,標準ライブラリを含めた広い話でしょうか.

標準ライブラリの話をしてしまうと,.NET FrameworkとC++の標準ライブラリは規模が相当違いますので,比べるのはあまり意味がないと思います.

純粋な言語機能で言えば,C#のeventはC++で再現するのは難しかった記憶があります.

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 12:07
by softya(ソフト屋)
私は両方共詳しくないですが、この質問は言語仕様レベルの問題でしょうか?
それとも.NetFrameWorkを含めての話でしょうか?

言語の問題としてですが、クラスのシリアライズは、たぶんC++11でもいろいろ課題が多いと思います。
※ まだC++11に手を出していないので推測です。

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 13:19
by もぐら
C++11 とC#
言語として両者には大差ないと思います。
どれもアルゴリズムを組むにはMATLABのような利便さはないと思います。
[なのに、繰り返し同じ類の言語が「発明」されても、むしろ迷惑な感じ、、、]

C#はMSの得意作とされている以上、最大限にOS関連の機能がサポートされていると分っています。
ただ、C++11も、もしMSが提供している「何か」を利用できれば、
実現可能な機能はC#と同等になるのではないかと思います。
その「何か」というのは恐らく「.Net Framework」のようなものでしょうが、
知りたいですね。
それさえ存在すれば、私はC#の利用を回避したいのです。
というのは「C#」が所詮MS村の「方言」で、世界レベルの言語でしゃべりたいです。

どうでしょうか、、、、
やっぱり、MS村に住居する限り、何でも表現したいなら、C#以外では無理でしょうか。

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 13:44
by softya(ソフト屋)
うーん。言語とフレームワークを一緒に語ろうとしても無理があると思います。
それとC#言語自体はISOで規格化されたMSだけの言語では無いものです。
あと、Javaが除外されている理由も知りたいです。

目的に特化したMATLABと汎用言語を同列に比べるのも無理があります。

【補足】
WindowsOSの機能を最大限に利用したいのに、MSの枠に囚われたくないというのはかなりの自己矛盾だと思います。

【補足の補足】
C#はMSの得意作とされている以上、最大限にOS関連の機能がサポートされていると分っています。
ただ、C++11も、もしMSが提供している「何か」を利用できれば、
実現可能な機能はC#と同等になるのではないかと思います。
その「何か」というのは恐らく「.Net Framework」のようなものでしょうが、
知りたいですね。
それさえ存在すれば、私はC#の利用を回避したいのです。
というのは「C#」が所詮MS村の「方言」で、世界レベルの言語でしゃべりたいです。
VC++2010まではC++で「.Net Framework」をC++/CLIのフォームアプリケーション(CLR)という形で提供していましたがVC++2012では提供やめています。
つまり利用者が少ないなどの理由だと思いますが、C#をGUIのメインで使って欲しいというMSの意向なのでしょう。

と言うことでMSに振り回されたくないなら選択肢はいくつかあると思います。

(1)MonoProjectの提供するC#開発環境を使う。
これは規格化されたC#と.NetFrameWorkのオープンソース実装ですのでOSを超えての利用が可能です。
「Mono (ソフトウェア) - Wikipedia」
http://ja.wikipedia.org/wiki/Mono_(%E3% ... %E3%82%A2)

(2)C++をQtなどのマルチプラットフォームGUI開発ツール(ウィジットツール)でGUI開発する。
「Qt - Wikipedia」
http://ja.wikipedia.org/wiki/Qt

(3)JavaやPythonなどのマルチプラットフォームな言語・フレームワークを利用する。

もぐらさんがWindowsのどれほどの機能を使うのか?
もぐらさんが考える世界レベルの言語・環境の必須条件とは?
このあたりを出して決めてもらう必要があります。

【教訓】
・無い物ねだりをしても意味はありません。
・今後も言語や環境、プラットフォームが増えていくでしょう。
・マイクロソフトの環境や言語の移り変わりは激しく10年持てば良い方ですのでMSの機能に拘れば拘るほど激しい変化にされされます。

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 15:18
by もぐら
素晴らしいご解説ありがとうございます。

> もぐらさんがWindowsのどれほどの機能を使うのか?
1.GUI [音響制御も含む]
2.I/oボードお制御
3.ネットワークアクセスやセキュリティ関係

たかだか以上の3点です。

> もぐらさんが考える世界レベルの言語・環境の必須条件とは?

要は国際的な機関に規格化された言語ですけれども、
C#もその一つであるのは知りませんでした。-------失礼致しました!

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 15:43
by softya(ソフト屋)
もぐら さんが書きました: > もぐらさんがWindowsのどれほどの機能を使うのか?
1.GUI [音響制御も含む]
2.I/oボードお制御
3.ネットワークアクセスやセキュリティ関係
部分的にライブラリ化して作ればWindows以外でも動かすことは出来そうなものが多いです。
※ その関係のものは大抵オープンソース化されているのでサンプルを見つけることは可能です。
Windowsだけ動けば良いというのであれば、マイクロソフト影響を極力受けないように作れば良いでしょう。
C++である事に拘りたいならQtのLGPL版などを触ってみてはどうでしょうか?
マイクロソフトのMFCはレガシー化確定なのでオススメできません。
私もまだQtは本格的には使ったことがないのでお手伝いは難しいかも知れませんが。

「Qt LGPL版を入れてみた。 - 日々量産」 ライセンスの話。
http://d.hatena.ne.jp/ryousanngata/20090808/1249661339


Qtって、こんな感じ。
「Qt - Wikipedia」
http://ja.wikipedia.org/wiki/Qt
「Qt キュート」
http://www.sra.co.jp/qt/
「クロスプラットフォームのアプリケーション・UI開発フレームワーク Qt :日新システムズ」
http://www.co-nss.co.jp/p-qt/qt.html
「Product - Digia Plc」
http://qt.digia.com/Product/


I/oボード制御に関しては、ドライバやライブラリの都合があるのでVisualStudioを捨てるのは難しいかも知れませんが、VisualStudioでGUIにQtを使うことも可能です。
「Visual Studio 2010でQtのビルド - 桜花な日々」
http://d.hatena.ne.jp/rofi/20110122/1295702663

まぁ、Qt自体も色々移り変わりがあるんですが。 QtはNokiaからDigiaへ。
「Qt Labs Japan — Qt Labs 日本語版」
http://labs.qt.nokia.co.jp/

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 16:22
by GRAM
自分も大学でマトラボは使いますが、
あれをC++やC#と比較するのはちょっと・・・と思います。
(極端な話ExcelとC++を比較してるのとあんまり変わんない。)

C#で自分が感動した機能はといえばtry-catch-finallyですかね。C#のラムダ式は便利といえば便利ですが
あとめんどくさいという点でいえば、C++の暗黙のキャストは抑制が面倒なので、C#の型に対する厳しさは楽です。
言語仕様についていえば、むしろC++11のほうが自由度は高いと感じますが・・・
(だからこそC#が便利だともいえるので、自分は別にどっちがいいとも思いません。)

双方とも工夫次第で似た機能は手に入れられると思うのですが、C#とC++とでは最初から向いているベクトルが違うような気がします。
(だから両方とも必要)

追記:C++11のラムダ式についてはもちろん知っていますが
C#のラムダ式とは結構似て非なるものだと思います。(C#の匿名メソッドにちかいというか)

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 17:20
by ISLe
確か、マイクロソフトがアジア圏言語の国際化関連ライブラリを.NET Framework用オンリーで提供してます。

ウィンドウズアプリの開発という点では、アプリケーションがWindowsの機能にアクセスする部分はどんどん.NET Frameworkに(半強制的に)傾いていくのかもしれません。

ウィンドウズストアアプリが発表されたばかりのころ、Windows 8ではネイティブWin32 APIが無くなるなんて噂が流れたりもしましたからね。

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月03日(土) 18:07
by YuO
オフトピック
個人の属性として,.NETクラスタ or その周辺域の人間なので,そのあたりは差し引いた方がよいかもしれません。
意外と.NET FrameworkはOSの最新機能を直接使えなかったりします。
そのため,例えばWindows® API Code Pack for Microsoft® .NET Frameworkという物があって,こちらを使わないとVista以降の機能で使えない物があったりします。
# .NET 4になってSystem.Windows.Shell名前空間が出来たために,Windows 7におけるタスクバーの取り扱いが標準機能でできるようになりましたが。
もぐら さんが書きました:1.GUI [音響制御も含む]
GUIに音響は通常含めませんが……。
# クリック音程度までは含めても良いかもしれませんが。

GUIの共通化って昔から試みては失敗している分野だと思いますが。
環境 (OS等) に合わせて最適化が必須なので,結局それぞれに合わせなければいけない,という。

ここの掲示板で何度か書いていたりするのですが,「Model (Domain-Model)」と「View」をしっかり分離して,UI部分は個々に作っても重要な部分は共通化されているのが重要ではないかな,と思います。
.NET Frameworkですら,Portable Libraryというのがあって,UIや機器に依存しない部分を分離することができるようになってきています。
# Desktop (WPF)/Windows Runtime/Silverlight/Silverlight for Windows Phone/Desktop (WinForms)/XNAと,それぞれ異なるUI Framework (前4つは「XAML」という点では共通しますが) があるため。

Model部分も,「標準のみに依存している部分」と「非標準に依存している部分」をきっちりと分離し,両者を繋ぐインターフェースをきっちりと作れば,MSに左右されるのは「非標準に依存している部分」だけになります。
# ついでに移植も楽になるというおまけ付き。
もぐら さんが書きました:要は国際的な機関に規格化された言語ですけれども、
これだとJava言語/仮想マシンは対象外ですね。
JavaはC#やCLIと同じくECMAに提出した時期がありましたが,Sunによって取り下げられた経緯があります。
GRAM さんが書きました:C#のラムダ式は便利といえば便利ですが
C++11にはラムダ式がありますね。
ISLe さんが書きました:確か、マイクロソフトがアジア圏言語の国際化関連ライブラリを.NET Framework用オンリーで提供してます。
Microsoft Visual Studio International Feature Packですね。
# 国際化 (Internationalization, I18N) ではなく地域化 (Localization, L10N) の為のライブラリですが。

Windows自体,I18N支援機能は持っているのですが (Win32レベルで言うなら,LoadString APIなどのリソース関連),L10Nは機械的にはできない部分です。
例えば,英語-アメリカ版 (en-US) がFirst Name / Last Nameの順となっているプログラムを,そのままI18Nだけで処理した日本語-日本版 (ja-JP) は,名 / 姓の順になってしまいます。
これを姓 / 名の順にするにはどうしてもL10Nが必要になります。
# そもそも,2項目で済むのはマシな方だから,名前入力欄を1項目にしておけ,という話もある。
最近だと,iOS6の地図まわりで他国は1/25000を元にするが日本は1/2500を元にするなんて話があったりします。

なので,上記のライブラリも「日本国内向け」のようなアプリケーション専用の物と考えた方が賢いです。
ISLe さんが書きました:ウィンドウズアプリの開発という点では、アプリケーションがWindowsの機能にアクセスする部分はどんどん.NET Frameworkに(半強制的に)傾いていくのかもしれません。
少なくとも,UI部分は.NET Frameworkの方が間違いなく「楽」です。
さらに,APIを呼び出すのは (関数形式でもCOMであっても) 面倒なので,.NET Frameworkの範囲でできることは.NET Frameworkでやってしまう方向になるでしょう。

Re: C#で簡単に実現可能が、C++11は実現できない機能、、、

Posted: 2012年11月06日(火) 13:13
by もぐら
大変素晴らしい議論ができて
このへんの事情が良く分かりました!