【嫌儲プログラミング部】 C/C++/JavaプログラマがC#やるとハマる落とし穴

このエントリーをはてなブックマークに追加
1番組の途中ですがアフィサイトへの転載は禁止です

時々 1 つの言語の落とし穴を理解する最良の方法は、別の言語がそれらをどのように防いでいるかを参考に
することである。Real-World Functional Programmingの著者であるTomas Petricek氏は、非同期なC# コードに
見られる6つの一般的な誤りについて説明し、どのように F# がそれらの発生する可能性を少なくしているかを
示している。

彼のAsync in C# and F#: Asynchronous gotchas in C#という題名の記事を全て読むことを薦めるが、以下が
その概要である。

・Asyncは、非同期に動かない: 最初のawait ステートメントの後に出てきたコードだけが非同期に動く。

・結果を無視する: 関数によって返されるタスク上でawaitすることを忘れると、順番のでたらめな結果になる。

・Async void メソッド: “async Task”でなく“async void”を返す関数は、awaitできないので、結果を無視した
場合と同じ問題を起こすことになる。

・Async void ラムダ関数: これは、関数が Action delegateを受け付けて、 Func<…, Task> delegateを受け
付けない時に起こる。またしても、非同期関数はawaitされない。

・入れ子のタスク: “await Task.Factory.StartNew(async () => { await Task.Delay(1000); });” というステート
メント中の最初と2番目の await ステートメントは完全に無関係である。すなわち最初のawaitが2番目の
awaitの前に終了する。関連付けられた1000 msの遅延は、有効である。

・非同期に走らない: Task.Wait()を使うと、全コールスタックは、強制的に同期モードになる。

F#に不慣れな人は、F#の非同期ワークフローがTask と Task<T> 型をベースにしていないのを知って驚くだろう。
代わりに F# Async<T>として知られている独自の型を使っている。
http://engawa.2ch.net/test/read.cgi/poverty/1366765558/
2番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:15:28.69 ID:1gzHvDNg0
これ一本でおkってプログラミング言語の決定打が出てこないよね(´・ω・`)
スレタイの奴結局全部使うし・・・
3番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:16:33.94 ID:vFI4vE8A0
ラムダ式が読めない奴www
4番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:17:44.19 ID:rnUbvRue0
C++とC#は結構思想が違う所だらけだから、
ちゃんと勉強・研究しないと余裕で色んなとこでハマる
5番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:20:26.05 ID:D+PH6qfe0
Javascriptってのが色んなことに使えて人気も上がってるって聞いたから
入門書買って読み進めてるけどくっそつまらん
Androidアプリも作れるらしいけど、いきなりアプリ作りながら覚えていくって方法あり?
6番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:21:14.49 ID:a3ITaSnM0
ぬるぽ
7番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:21:55.68 ID:Np4oEIMm0
C#はJavaの欠点を解消した言語だから落とし穴はないと思う


しいて言えばswitchでフォールスルーできないことぐらいか
8番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:21:56.21 ID:4SdAloEU0
デリゲートをJavaしかやったことない人に説明しても理解してくれない。
C/C++やってた人はすんなり理解してくれるんだけどね。

うまい小学生にも伝わるくらい噛み砕いたうまい説明方法はないものか?
9番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:22:53.50 ID:7DlRReJg0
僕はC++11ちゃん!
>>8
関数ポインタと説明するよりは、実質的にはクラス作っているんだからクラスで説明したほうがいいんでね
11番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:27:01.82 ID:4SdAloEU0
>>10
「デリゲートとはCでいう関数ポインタの方言的な名称です」と説明すると
Javaしかやったことない人は「関数ポインタってなんぞ?」となる。

でも他の説明方法がわからない。
12番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:28:49.17 ID:vFI4vE8A0
メソッドを包み込んだサランラップだって言えばいいじゃん
13番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 01:29:18.51 ID:5DXeDQp1i
「他言語〜の様なもの」って教え方や覚え方が一番良くない
実際別物だし、ちゃんと新しい概念として捉えないと
この手のスレって定期的に立つけど門外漢にはホント判らない世界だよなあ
ここまで読んでも、クロージャーをcarで呼ぶみたいなイメージしか出てこないよ・・・
>>11
機能的にはそうだけど、C#の内部的には、そのメソッドを実装したクラスを作っているんだから
そう説明すればいいんでね
>>2
機械語でも覚えろよ
17番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 02:53:00.37 ID:xpvoDccW0
2ちゃんのシステムについていろいろ
http://sunos.saita.ma/2ch-cgi-lw.html
18番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 03:12:27.90 ID:47xp4bSHP
>>11
メソッドを保持するクラスでいいだろ
そろそろ本当の意味での並列処理するための言語が欲しい
まぁCPU側が進化しないと意味ないが
20番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 04:20:30.13 ID:JOOjI/J80
>>7
> しいて言えばswitchでフォールスルーできないことぐらいか

なにその欠陥言語
21番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:27:33.58 ID:HbHFo3UM0
定義済みデリゲート使いまくりです
ラムダ式のおかげで楽ちんなので
22番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:31:39.41 ID:ttamIr0/O
ポインタがようやくわかってきた
いいサイト見つけてよかった
学校の先生ポインタ教えるの下手すぎだったわ
23番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:34:00.02 ID:gJ44yKkL0
DelphiからC#にいって最初によく戸惑ったのはコピー
実体コピーに慣れきってたから
24番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:49:38.61 ID:ttamIr0/O
cが初心者レベルはだいぶわかってきたから、win api勉強してるけど、クソめんどいなこれ
window一つ開くのにどんだけ書かなきゃいけないんだ
マクロも多すぎ
そんなに名前かえなきゃいかんのか
25番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:50:08.75 ID:MyIJloU90
マクロが使えなくて困った
26番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:54:53.81 ID:s+rPu7yn0
WinAPIは引数が変態過ぎておれにはよくわからん
ラッパー経由で使うならいいけど
27番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:56:26.80 ID:hX+VkURBO
最近Pythonとかでちょっとしたものしか書いてないんだけどサーバで動かすしっかりしたソフトウェア書くのはC++あたりのがいいかなー
CとJavaはノーサンキューですわ
28番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 10:58:01.72 ID:ZLTBy4+50
>>3
( ^ω^)・・・
29番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:26:12.48 ID:IBzi27dT0
>>20
goto で次の case に飛べば良いのよ。
30番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:26:52.02 ID:Ta9Gk50z0
IT業界に詳しそうなお前らに聞きたいんだけど
システムの受託開発メインの会社ってヤバい?
お前らが土方とか揶揄ってるのってこの形式の会社だよね
31番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:31:46.17 ID:ZLTBy4+50
>>30
いわゆるデジタル土方っすねそれ
32番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:35:33.34 ID:ttamIr0/O
妹がそういう会社入ったな
半年すぎたあたりから毎日辞めたい辞めたい言ってるわ
もう一人の妹は上流だけど、辞めたい言ってるな
月給、ボーナスは桁違いだけど
33番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:37:18.80 ID:SsDqzJES0
>>31
ああ、やっぱり…

上流工程っていうのは大手系しかなれないもんなの?
34番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:40:02.11 ID:UIjqDiKv0
>>30
ある程度の規模と実績、それにクライアントとの信頼関係が無いと受託できないんで、ソフト屋としては良さげな部類。

なにより自社でやれるのは嬉しいことだな。

仕事がキツイかどうかは別問題。
35番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:42:42.95 ID:UIjqDiKv0
>>33
規模による。

例えば公共事業な銀行業務なら大手しか受注できないだろうし、より小規模なら受注てきる会社が広がる。
36番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:47:51.99 ID:Ta9Gk50z0
色々聞くのもアレだから、こういうとこだけは絶対に辞めとけってポイントだけ教えてくれ
37番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:52:07.43 ID:ZLTBy4+50
>>36
入って一ヶ月もすればその会社がどんなもんかわかるから狂ってたら飛んじまえ
ITといってもマッタリしたところもあるよ
ウチは某ERPのミドルウェア(自社パッケージ)作って売ってんだけど出張以外は定時上がりでむしろ暇
38番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:53:23.78 ID:UIjqDiKv0
>>36
例外が多いからナンとも言えないけど、小さいながらも自社内で仕事してるソフトハウスが楽しくていいよ。

社員規模が40名であれば、40名近い人が作業できる席かわあり、それに近い人がいることだね。
39番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 12:58:35.02 ID:4dfWxL550
言われた仕様書通りにやれるなら時間外だらけでも耐えられるな
小さいとこだと自分で客とやりとりして自分で仕様書つめて上司と客納得させて
ソフト作るよりそういった時間の方が長いともう精神的に相当きつい
40番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 13:11:49.92 ID:DRFB7Iss0
>>システムの受託開発メインの会社ってヤバい?
受託開発でもいろいろあるからなんとも。
自社の事務所での作業と、クライアントの一室での作業
どちらが良いかは会社の規模などによると思うよ。
受託がやばいっていうか、ソフト開発会社の9割以上は受託メインだろ。
42番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 13:31:20.07 ID:UIjqDiKv0
>>39
クライアントとの付き合いは、会社の規模にかかわらず、いずれやる日がくる。

大手なら時期が遅くなるが、その分、より重要なクライアントとの付き合いが始まる。

それも含めてのソフト屋だね。
43番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 13:32:39.15 ID:UIjqDiKv0
>>41
規模無視の会社数たけで言えば9割が特定派遣だと思う。
44番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 14:07:23.90 ID:AgvE3sVM0
一人辺り売り上げが目安になるって前に見たから計算してみたら
一人辺り600万ちょっとだった
objective-c最強伝説
46番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 18:46:53.59 ID:Sw23wvBB0
スレタイにCは余計じゃねw
はまるとか、それ以前にだな
47番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 18:58:45.41 ID:HzCC/sfLP BE:50245643-PLT(18001)

Cはハマるというかハメるだよね
48番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 19:40:07.84 ID:e0tONqt80
無理やりキャストで上から下から
49番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 19:43:48.79 ID:x+McRiK10
VBからC#にいく場合何か気をつけることある?
50番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 19:45:58.63 ID:XLAhISIP0
もう
言語は
何でもいい
という
境地
51番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 20:03:14.99 ID:jjS7uAmf0
ほぼマルチスレッドな話か
スレッド使いやすいと言っても、
安易に使いまくってスパゲッティーになりそうだな
C#ってなんでスレッド周りでこんなにバラバラと色んな仕様作ってんの?
ちょっとくらい便利になるとしても、同じ機能のものを
いくつも追加するのってあんまり良くないんじゃないかな?
54番組の途中ですがアフィサイトへの転載は禁止です:2013/04/26(金) 23:14:35.02 ID:1gzHvDNg0
またC#をちょっと変えたような奴が出てくるんだろ(´・ω・`)C++/Java/C#の反省をふまえましたいうて。
>>53
Javaのスレッド周りってC#からいくとすんげー使いにくいけどな
concurrentライブラリ使ってもなお