看板 GameDesign 關於我們 聯絡資訊
※ 引述《cjcat2266 (CJ Cat)》之銘言: : 推 azureblaze: 這類技巧c#上用不了讓我很懊惱XD 10/13 15:27 : 推 cowbaying: C#有解構式阿 10/13 15:28 : 推 LayerZ: 推建構解構,多人維護專案好用.. 10/13 15:29 : → cowbaying: C#跟JAVA一樣都是用finalize 10/13 15:30 : → azureblaze: 可是c#是gc的時候呼叫而不是離開scope的時候呼叫啊 10/13 16:05 : → cjcat2266: 我個人很不喜歡GC,我喜歡100%控制object lifetime 10/13 16:08 : 推 akilight: 一開始寫C#:GC怎麼這麼懶人~超方便~ 10/13 16:10 : → akilight: 一段時間後:GC你可不可以不要在這時候回收,讓我控制阿~ 10/13 16:10 : → cowbaying: C#解構麻煩了點 要覆寫 10/13 16:36 : 推 cowbaying: 只是通常物件還是會留著 裏頭沒資料這樣 10/13 16:44 : 推 cowbaying: 不適用強迫症患者 10/13 16:44 C# 是有提供類似 deconstructor 的機制 http://msdn.microsoft.com/en-us/library/yh598w02.aspx ============================================================ 來曬舊文了 :D https://www.ptt.cc/bbs/Soft_Job/M.1388540668.A.3ED.html (重新排版) 最近正好在 MSDN 雜誌 2014 一月號 (Vol. 29 No. 1) 上看到 David Platt 所著 "Don't Get Me Started" 專欄裡 "The Steam Drill" 這篇文章 網路版大約幾週內會在 http://msdn.microsoft.com/en-us/magazine/ 釋出 該篇文章以 John Henry ( http://en.wikipedia.org/wiki/John_Henry_(folklore) ) 手持 +9 sledgehammer 單挑 steam drill 的傳說故事為引,導出下 面這個想法: <blockquote> Every advance in computing has generated a new abstraction layer. And with every higher level of abstraction, the programmers who strove mightily to master the lower level get angry. </blockquote> Platt 舉了一個例子: 在檔案(file)這個 abstraction layer 出現前,古早的程式設計 師是直接下指令去控制磁碟讀取頭,尋找正確的 track 與 sector, 再來讀取資料 在這些古早老前輩的眼中,“把資料簡化為一個邏輯上抽象的 byte stream 的我輩”只有一個字可言; 把磁碟空間拿來儲存目錄(directory) 資訊更是浪費、大逆不道 :D ============================================================ 很多時候,除非有覺悟真的從上到下每一層的東西都摸得一清二楚, 並完全掌握整個 toolchain 不然,通常自幹出來的各種機制 backfire 的機會很大,我最喜歡舉 的例子就是就是「自製 cache manager 反而造成 .NET gen 2 heap fragmentation」 :D https://www.ptt.cc/bbs/java/M.1398461671.A.3B5.html https://www.ptt.cc/bbs/java/M.1270114525.A.B4D.html 更不要說有這種異想天開的事發生 (WYSI-Not-WYG XD) http://blogs.unity3d.com/2014/05/20/the-future-of-scripting-in-unity/ 「追根究底」是好的;隨著硬體的演化,不同的軟體寫作 paradigm 有它各自的優勢;這需要時間與經驗去適應、學習 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.4.112.174 ※ 文章網址: http://www.ptt.cc/bbs/GameDesign/M.1413201381.A.7AA.html
azureblaze: 喔喔原來是using 可是寫起來還是囉唆了點XD 10/13 21:25
littleshan: C#的Dispose反而帶出一個問題 10/13 22:48
littleshan: 每個IDisposable物件都有valid與disposed兩個state 10/13 22:50
littleshan: 如果你很在乎安全,每個method都要檢查物件是否valid 10/13 22:50
是的; 且, C++ 也可以傳回指向 stack 的 pointer :D 就算不是 IDisposable, 整個物件也有可能在不安全的狀態,是故, 這並非是 IDisposable 特有的問題 適當地重視 invariant 是好的 http://en.wikipedia.org/wiki/Invariant_(computer_science) 但實務上無法作到 100% 完美 (利用一些技巧, 例如 aspect-oriented design 會有幫助, 但最後還是要看情形) ※ 編輯: AmosYang (68.4.112.174), 10/13/2014 23:31:32
cjcat2266: 的確有點囉嗦啊XD 10/14 01:56
littleshan: 我不是說C++比較好,而是這邊C#應該要有更好的設計 10/14 12:31
我大概跳太快了,我想說的是: 每個語言的各種功能、語法,如果能 被誤用、濫用,就一定會被誤用、濫用 XD
littleshan: 去利用到dtor,實際上寫出正確的Dispose並不trivial 10/14 12:32
有興趣可以讀讀 Eric Lippert 的 blog, 有許多 C# 背後的故事 也可以讀讀 C# 6.0 的報導 http://msdn.microsoft.com/en-us/magazine/dn683793.aspx http://msdn.microsoft.com/en-us/magazine/dn802602.aspx C# 與 .Net 於 2002 出現,如今也歷經 12 個年頭, 5 個 major releases 了;有的時候,許多理論上的東西,「應該這麼做、應該那樣做」, 在實務上是沒辦法的,尤其是有 12 年份的既有程式碼要支援, 很多 時候是很綁手綁腳的 或許,在新一代 .NET compiler platform "Roslyn" 成熟後, C# 這個語言在社群力量加持下,會更快速地演化吧 :D ※ 編輯: AmosYang (68.4.112.174), 10/14/2014 13:23:53