C# vs Java どっちが好き? その4©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
現役だけでも、mono と core と 本家の3つはあるがな NetBeans更新止まったしJavaはEclipseとIntelliJだけになっちゃった
もうC#の方がIDE多い? C#は、setjump, longjumpが使えないらしい。 blend使おうぜ
カックイーアニメーションを
工場勤務のおっさんに見せつけるんだ とはいえ仕事として需要があってお金になるのはJavaの方なんで C# は、Platform 毎に処理を場合分けしないといけないって聞いたけど、
その辺はどうなの? プラットフォーム依存のネイティブコールは場合分けが必要だがそれはJavaも同じ >>291
JavaのSwingで、GUIアプリを作ったときは完全共通にできたよ。
コマンドラインコンパイラの javac しか使わなかったのに、簡単に作る事が
できた。Swingの仕様はとても美しい。 Java発の諺がある。
Write once, debug everywhere!! Javaでもテストは必要だと思う。でも、C#の場合、そもそも根本的に
環境依存すると聞いた。Javaは本当にそのまま動く可能性は高い。 何言ってんだか。fake news を広めるなよ。 >>294
>C#の場合、そもそも根本的に環境依存すると
どういう理由でそういうことになるのか? C# の場合、例えば、メモリ上のビットマップに文字を書く場合、Win と Mac で、
以下のように全然違うコードを書かないといけないらしい:
[Win]
Font font = new Font(fontname, fontsize);
Bitmap bmp = new Bitmap( (int)width, (int)height,
System.Drawing.Imaging.PixelFormat.Format32bppArgb );
Graphics g = Graphics.FromImage(bmp);
g.DrawString( text, font, Brushes.White,
(bmp.Width-size.Width) / 2, (bmp.Height-size.Height) / 2 );
g.Dispose();
[Mac(OSX)]
NSFont font = NSFont.FromFontName(k.ID, k.size);
var attr = NSDictionary.FromObjectsAndKeys(
new NSObject[] { font, NSColor.White },
new NSObject[] { NSStringAttributeKey.Font,
NSStringAttributeKey.ForegroundColor } );
NSImage bmp = new NSImage(picsize);
bmp.LockFocus();
text.DrawInRect(
new CGRect(
(picsize.Width - size.Width) / 2,
(picsize.Height - size.Height) / 2,
size.Width, size.Height ), attr);
bmp.UnlockFocus(); >>299
Javaで`DirectXとOpenGLとXlibで直接イメージをゴリゴリ操作するには場合分けが必要だけどC#でマルチプラットフォームのライブラリ使えばすごく簡単
なんてこと言ったら馬鹿だと思う人もいるだろうけどあなたの言ってることはそういうことだ パス区切り文字に\を書いた事の無い者だけがマルチプラットフォームに石を投げなさい >>300
Java:公式のライブラリが元々マルチプラットフォームに対応している。
C#:・・・・・・・・・・・・・・・・・・・・・・・に対応していない。
この差は大きいのでは。 >>302
その差は大きいけど>>290の主張とは関係ないな 確実に分かった事が一つある
ここの人たちはハイレベルだな
俺にはチンプンカンプンだもんね >>302
C#自体の設計自体はOS依存じゃなく
設計時から切り離されてるよ Javaの教祖マーティン・ファウラー御大、名著「リファクタリング」第2版にJavaではなくJavascript を採用してしまうwwwww
https://martinfowler.com/articles/201803-refactoring-2nd-ed.html ファウラー本人にも葛藤があったようだけど今リファクタリングすべきコードで溢れてるのはJavaScriptだから仕方ない >>301
https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/77859s1t%28v=vs.90%29
パスやファイル名を表す文字列を引数にとるルーチンでは、UNIX 互換のパス デリミタを使用します。
UNIX ではパス デリミタとしてスラッシュ (/) しか使用できませんが、
Win32 オペレーティング システムは円記号 (\) とスラッシュ (/) の両方を使用できます。 >>303
関係大有りだと思うけど。また、fake news だ。 >>305
それを言うなら、CもC++も設計自体は、OS依存じゃなく設計時
から切り離されてる。数十年前から。 >>299
普通にOSSのライブラリを使えばok
https://blogs.msdn.microsoft.com/dotnet/2017/01/19/net-core-image-processing/
C#の標準ライブラリがマルチプラットフォームに機能不足なのは確かだけどね
GUIのマルチプラットフォームはElectronでいいかなーという気分
クソ重いけど >>312
再コンパイルすればC++だって、ほとんど全ての環境にも互換性があるのは同じ。
互換ライブラリさえあれば、マルチプラットフォームなのはC++だって当たり前。 そういうわけでlinuxで動いていたバイナリをwindowsに持ってきたのだ >>314
バイナリが動くのCPUが同じ系列の間だけね >>302
x 対応している
o 対応を謳っているが品質が低く、テストしてデバッグして修正しないと動かない Java は GUI を使った場合でも結構簡単に、他のプラットフォームでも動く。
実際、ブラウザ上のアプレットでも実行できるようになっているわけで、
現実に動く確率はとても高い。
C#は、上で挙がっている例のように、そもそも動くように設計すらされてない。 >>319
実際、MSのFUDだと思う。現実にJavaは、1つのソースでどのプラットフォーム
でもちゃんと動くし。C#は、そもそも最初から動かない事がはっきりしてる。 >>311
Electron も wasm も、ベースが JS だから、マルチスレッドの対応がとても弱い。
例えば、何か重たい処理を実行中に「中止ボタン」付きのダイアログを出して、
中止できるようにすると言うようなことが、やりにくい。スレッドの中断自体は
terminate メソッドで可能だが、「クリーンアップ処理」ができない。
Win32だと、他スレッドへ「例外」を送ることができるので、catch すれば、
クリーンアップ処理できるはず。 Javaも、Win32と同様に他スレッドに例外を throw できるらしいので、
今言ったようなことをすることができるはず。つまり、重い処理を
ワーカー・スレッドで実行しているときに、メインスレッドの「中断」ボタン
を押すと、処理を中断して、なおかつ、クリーンアップ処理もできるはず。
しかも、中断ボタンが押されたかをワーカースレッドでは、ポーリング
する必要はないので効率はとても良い(Win32/MFCでもその点は同じだが)。
Electron/wasm/JS などではそれができない。 >>320
でもJREを入れなきゃ動かないし
世間的にJREはウィルス扱いだからなぁ workerはpostMessage on messageできるだろ >>325
それで、WokerThread は、イベントが発生したことを知ることまではできると思う。
しかし、そのイベント・ハンドらの中から、例外を throw しても、WorkerThread
の本体では、catch する事はできないはず。だから、クリーンアップ処理を行う
のは難しい。 swingとか久しぶりに聞いたなw
あんなもんでGUI作ってる人まだいるのか >>326
メッセージングでやりゃいいんだよ。
なんかtrycatchが目的化してない?
goで導入しなかった理由読んだ?
そういう考え方もあんだよ。 >>328
WorkerThread が、例えば、4重のforループの中で、データを処理していたとして、
MainThreadで「中止」ボタンが押されたので、WorkerThreadを中断したい場合、
どうやってWorkerThread が作成した中途半端なデータをクリーンアップするの。
あと、少し論点がずれるけど(最初考えてなかったので)、
char *pBuf = new char [・・・]; (1)
・・・
delete pBuf; // (2)
pBuf = NULL; // (3)
みたいなものは、必ずセットで行わなくてはならないことが多い。
しかし、(2),(3)の間に「中止」のイベントが入ってきた場合、困った問題が起きそう。 昔だったら、for文の先頭あたりに、1バイトのint3命令を書き込むという
コード書き換えテクニックを使う手もあったけど、LLVMとwasmでは
そんなこともできそうにないし。 誤:delete pBuf; // (2)
正:delete [] pBuf; // (2) (2)と(3)の間で (中止)例外を throw されても困るので、(中止)例外
が throw されてもいい場所に、ある関数check_stop()を書くようにしておいて、
check_stop() は、瞬間的に中止要求があるかどうかを示す flag をポーリングして、
もし「1」になっていたら、例外を throw するようにすればいいかな。
[WokerThread]
try {
for (・・・) {
check_stop();
・・・
}
}
catch(ストップ例外) {
/*クリーンアップ処理*/
}
volatile BOOL g_bStop = FALSE;
void check_stop()
{
if ( g_bStop ) {
throw ストップ例外;
}
}
見たいな感じ。 >>319
キミはいつJavaを始めたんだね? Javaのバグの歴史ぐらい勉強してほしい。
歴史を捏造するようになったら、もうそれはネトウヨだ。 >>335
フフフ、今まで碌にテストしないでリリースしていたJava開発者がこれからは急に心を入れ替えてテストするというのかい? >>334
朝鮮ネトウヨの歴史捏造は酷いからな
歴史をコリエイトと言われているくらい嘘と願望だからな >>337
貴方は優秀なエンジニアだ思うんだけど話がそれがち〜 >>320
JavaならAWTを使ってどこでも動くGUIアプリ作れるよ
↓
AWTは糞だよ、これからはSwingだよ
↓
Swingも糞だよ、これからはJavaFXだよ
↓
JavaFXを標準から外すよ、AWTやSwingも将来の保証はないよ
この迷走ぶりに対する感想は? ご自慢のGUIを移植できずにcoreから切り離しちゃうよりはマシじゃね? GUIはわりと独立してるから仕事の影響それほどない
気に入るまで作り直してくれ メソッドのout 出力はわかった
refがわからん・・・
必死にググってるんだけど
ピンとこないわ エロゲで例えてくれ SwingとかC#と比べたらうんこ過ぎてあんなばっちいもの2度と触りたくないと思ったけど。 つかC#よりGUI書きやすい言語ってこの世に存在しないだろ? >>346-347
は嘘。fake newsなので気をつけよう。 このスレはJava信者がちょっとイタすぎるな。無知すぎる。 若造は、最初に見たものをそのまま信じるから困る。
MSのセールストークや「噂」をそのまま信じてる。 Java案件=デスマーチと言われるぐらいだからな。多くの若者が鬱になって逃げ出した。
なぜプロジェクトの途中にPGの募集があるのかよく考えよう。 他スレッドの停止はキャンセルトークンなりのパターン使えばいいじゃん
javaアプレットが許されるなら.netはSilverLightやwasmへの変換ができると自慢すればよいのかw? 欝の人は、自分と関係した事柄をなんでも悪く取る傾向がある。だから、昔から
ある言語(Java)は悪口書かれやすい。新しく出た言語(C#)は実経験を伴わない
から良いことばかり書かれやすい。 >>356
新しく出た言語?いつの時代の話をしてるんだ? ちゅうか、Javaは出たときから急激に人気が出たのに対し、C#は実は余り人気が
ないのかも。なんかごった煮で、センスが悪いからかな。 Javaは古くからあって、C#は大分新しいと思ってたけど、そうでもなかったんだな。
この感覚の差はどこから来てるんだろう。 https://teratail.com/questions/44042
>アプリ開発未経験者が Xamarin を使うのは適していないと考えます。
>Xamarin は基本的に、 Android API, iOS の API を C# から呼び出せるようにしたものなので、両者について知らないとアプリ開発はできません。
>画面までも同一コードで開発できるとされる Xamarin.Forms についても、同一コードで開発できる範囲はとても狭いので、それを超える要件に対応するには、Android や iOS の知識が必要になります。
Java
Android SDK
iOS SDK
Mac
Xcode
C#
.NET Framework
Mono (.NET Framework のオープンソース実装)
Visual Studio
Xamarin.Android
Xamarin.iOS
Xamarin.Forms
これだけの知識をゼロから並行して身に付けていくのは、否定はしませんが効率は悪いと思います。
まずは Java での Androidアプリ開発や、Swift での iOSアプリ開発を経験されて、慣れてから Xamarin の使用を検討することをお薦めします。
また Xamarin でアプリ開発する際のトラブルシューティングの方法について書きました。
Xamarin を使用したアプリ開発での、問題解決の方法 - Qiita
トラブルシュートにも手間がかかるわけですが、このデメリットがメリットを上回ると判断されるなら、Xamarin は使わない方がよいでしょう。 まとめると Windows と Visual Studio で Android と iOS アプリの開発を始める場合、以下の知識が必要になります。
Java
Android SDK
iOS SDK
Mac
Xcode
C#
.NET Framework
Mono (.NET Framework のオープンソース実装)
Visual Studio
Xamarin.Android
Xamarin.iOS
Xamarin.Forms C#:「多くのOSで動くが、動くと言うだけで、ほとんど互換性がない」
Java:「同一コードが(再コンパイルもなしに)そのまま動く確率が99.9%」
(C++:「互換ライブラリさえあれば、ソースは共通化可能」) 海外勢がreact nativeに逃げたのも納得w
日本人は真面目だなぁ >>361
お前が何も新しいことを学んでいないということ まあMS自身が自社製品にC#殆ど使ってない時点でお察しくださいとしか マルチプラットフォームのデスクトップアプリなら
kotlin+javafxが今のとこベストだと思ってる
なんだかんだでどこでも動くし
だが最近のmsは嫌いじゃないしoracle大嫌いだから
xamarinには期待してる
javafxどうなっちゃうんだろ・・・ >>368
Process Explorerで.netプロセスを色付き表示する設定にしてみろ
お前が思ってる以上に.net使われてるから >>371
Win7で、調べてみたら、Microsoft Expression Web 4 だけが .Net アプリで、
他は全て違っていた。
そして、Expression Web 4 だけが起動が超遅くて、起動後の動作も遅い。
C++、Win32/MFC で作られたソフトでこんな遅いソフトは、まず存在していない。 mono入れたらC#で作ったexe、linuxで問題なく動いたけどな 今時linuxで動く必要ってある?
サーバー以外で使ってる人なんている? Wineが実用段階になってきたので、Winから一気に Linux や ChromeOS なんかに
デスクトップOSが移る可能性がある。その際、Linuxで動くことは重要になる。 wineて20年前の技術じゃん。
そんなの使ってるのお前だけ。
みんなゲストOSとしてインストールしてるよ ID:tPeGzwzY
古代からタイムスリップしてきた人か むしろ、個人のPCでJavaで作られてる有名GUIアプリって何があったっけ
IntelliJ系とかBurpとかは思いつくが
最近はwindbgの外側がC#製になって驚いた WindowsとLinuxのどっちをゲストOSとしてインストールしてるのか知らんが、
Windowsの支配から離れる、というのが21世紀の人類の目標だ。
人類の多くがその目標に向かっているので多勢に無勢で、Windowsはやがて
終わるだろう。それが目前に迫っている可能性がある。
それに、古いと言うが、Wineの改良は活発に行われている。最近特にVersionUp
が激しいらしい。 ■ このスレッドは過去ログ倉庫に格納されています