1樓:florent
看他的部落格很解壓啊,看完了之後感覺就是同事是sb,領導包庇sb。各種語言都沒用,scheme搞定一切,但是搞定一切的本身就會造成複雜,所以任何概念都是扯淡。你們這些普通人不能理解我這樣人看到問題時候的痛心疾首。
大師就是一眼看透本質,然後丟出一句別人全是瞎搞。懟天懟地懟空氣。別問我創造過什麼,哥是搞理論研究的懂嗎,乖乖聽著,被我誠摯的語言鼓勵,被我博大精深的思想感染後老實回去幹活才是你們的正道。
現在年紀大了,早十年誰要是敢在我背後天天掐腰,就會挑毛病信不信我一塊板磚糊你臉上嘿嘿……
2樓:馮東
原則上來說,任何非託管資源,都可以被封裝成託管資源。所以非要對「非託管資源」暴露乙個介面,只能是因為這個資源太稀少,不能等待 GC 的啟動時機。
所以這裡就涉及幾個問題:
GC 優化的好不好。GC 應該是盡量頻繁的短時間執行。典型的「分代 generational」GC 就是為了這個設計的。所以沒道理 GC 不能為稀缺資源進行優化。
系統本身設計有沒有缺陷。像 HWND 用光這個問題,簡直就是羞恥。系統 handle pool 預定過小不說,a button is a window 本來就是非常傻的設計。
你要用這個來反駁改變現狀困難還行,反駁王垠嘲笑你那就正撞槍口了。
即使對稀缺資源,disposable 和 GC-manage 應該是共同作用。Disposable 屬於給程式設計師乙個手動優化的選項,而不是不掉用就出錯的東西。
其實我也奉勸各種用 GC 的平台,要是對付必須及時釋放的資源,你們能不能就 fallback to reference counting ?自動 ref-counting 語言不支援,就算暴漏乙個手動 counting 介面也是給程式設計師一條活路啊。
你們覺得 root-tracing GC 是香餑餑,也不能一遇到稀缺資源就退回到吃手動管理這泡屎吧?
3樓:碎景
難得淫神發一篇我能看懂的文.
dispose本意應該是針對非託管資源的釋放,gc不應該歸他管.
using本來只是提供乙個略微便利的語法糖,意思是,這玩意只用一次,出了這個域,就不能用了.
這兩個東西的設計都沒什麼錯,但錯就錯在它和dispose動作強繫結這兩者在語義上其實不是等價而是包含,只用一次,有可能是只能用一次,有可能是我只需要用一次.
但這種繫結一下子把約束範圍擴大了.
為了這口糖,卻帶來了不必要的約束,引入了更多的不便甚至是扭曲.
這次我選擇跟隨淫神...
Ps:個人感覺,using這個設計還是很不錯的,但不該強制,我覺得應該設計成,如果你實現了IDisposable介面,則呼叫,沒實現也沒關係,不強制.如果有close也可以呼叫(這點待商榷),總之就是,讓using的約束,符合它本身的語義.
4樓:
HashAlgorithm的實現MD5,DSA之類的,都是使用BCrypt系列API實現的,屬於託管資源,必須要IDisposable
5樓:
IDisposable設計不是不能噴,但王垠同學噴錯了方向。
和c++的RAII比較,IDisposable明顯不夠優雅。我認為這是GC設計的誤區:資源類本身不適合GC來管理。
個人覺得應該這樣來設計:顯式實現了析構的型別,即是外部資源管理型別,超出作用域即呼叫析構函式;若賦值null也呼叫析構函式。
6樓:
不該有的東西就是不該有,你有一萬個理由,它還是不該有。
這是系統設計跟語言設計哲學上發生了衝突,乙個追求高效能,確定性,乙個追求自動化。沒辦法,暫時語言還得委屈一下,直到它們不再依賴系統實現的時候。
說王垠工程不足是不理解他的理想主義特質,雖然在GC這個點上,我持否定態度,和他以及很多和反對他的人都對立。
補充:我早就說過,一切皆引用/GC在邏輯上是說不通的,這種偷懶到底的做法不僅無法轉移邏輯編碼中的本質矛盾,也明顯低估了人和機器的智慧型性。
參考:記憶體(資源)會洩漏嗎? - Hierarchy - 知乎專欄
7樓:
9.4 dispose模式 269
9.4.1 基本dispose模式 2729.4.2 可終結型別 277
這個書不錯。。
8樓:
有人說HashAlgorithm應該用Dispose方法來清零記憶體,但我怎麼覺得這種特殊目的的應該用乙個專門的方法呢。。例如FlushMemory什麼的。。
9樓:shuhari
不同意。
1. HashAlgorithm是父類,如果實際使用的演算法是在執行期決定的(很有可能),那麼它有責任為所有實現者規定乙個統一的資源管理模式,而有的子演算法可能確實需要釋放資源。它自己沒有資源釋放並不影響這種設計;
2. 照我的理解,把記憶體清0並不是為了釋放記憶體,而是為了避免攻擊者從記憶體讀取重要資料,因為加密演算法的資料一定是攻擊者的重要目標,不用時馬上清0從安全角度是非常有必要的,這個事情不能等GC來做。
補充:王垠的文章也提到安全問題,認為Dispose是用來釋放資源的,不應該和安全攪在一起。其實從Net社群的實踐來看,Dispose現代的語義基本相當於「確定性析構」,並不見得一定要有資源。
比如http://
ASP.NET
MVC裡面就有 using (Html.BeginForm()) 的用法,它實際上和資源沒什麼關係,但用起來確實方便,也沒人認為這樣做有什麼不妥。
10樓:天才爆裂魔法使
using有沒有濫用另說,但是他這篇文章,寫的實在很掉價,GC只能感受記憶體壓力,不會感知系統資源壓力,可能windows全域性系統資源耗盡了,對於記憶體壓力也只是一點點,從而不會引發GC,整個系統全盤完蛋。我感覺,微軟的朋友要看到了,至少讓他工資降低一半。
11樓:媳婦不讓實名
是的,我也遇到這個問題。明明不管理非託管資源,也要IDisposable一下
【發明者是否應該為濫用背鍋】還有待商榷,但濫用確實是坐實了的。而且我自己也在濫用。
我濫用的初衷是:
1.首先是甩鍋。
就算我現在沒有用非託管資源,誰知道我今後會不會用?到時候我再實現IDisposable,之前使用到我的人怎麼辦?
所以,不管有沒有用,我第一版就實現IDisposable,將來出問題誰沒Dispose誰活該。
2.還是甩鍋
只要我有任何IDisposable成員變數,那我就必須實現IDisposable。誰知道那些成員物件內部做了什麼,反正我先實現了,你隨意
如何評價王垠的 A 計畫?
kevin chen 這種說話的語氣不像對技術有敬畏之心的人,而且他的目標已經實現了,mysql不就是?而且他說的東西感覺像江湖郎中那包治百病的藥。 乾貨滿滿張雜湊 一直覺得垠神是所有技術大牛中最會營銷的,自身的知名度本來就很高,先提乙個巨集偉計畫提高知名度後做,本來就是一件穩賺不虧的事 希望盡早能...
如何評價王垠的《Sum types and union types》?
slaveoftime 之所以喜歡用F ML系語言 有乙個原因就是union type啊 當然還有很多其他原因 type SupportedPayment1 CreditCard ofstring Cash Wechat ofstring 可選,目的解釋如下 type SupportedPaymen...
如何評價王垠無家可歸的現狀?
不夠強大的理想主義者,很難在這個社會存活,或是墮落成現實主義者,或是離開。然而在真正的理想主義者眼中,足夠 這個詞是不存在的。或許這就是悲哀之處吧。 關鍵是暴露了這種心態求職,有多少公司敢要這種穩定性不高的人,哪怕是大牛。挺殘酷的。一直看他的部落格,大約也意料到這類事情會發生。國內屌絲只能祝好 王垠...