如何評價王垠的 《討厭的 C IDisposable 介面》?

時間 2021-05-07 04:27:58

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...

如何評價王垠無家可歸的現狀?

不夠強大的理想主義者,很難在這個社會存活,或是墮落成現實主義者,或是離開。然而在真正的理想主義者眼中,足夠 這個詞是不存在的。或許這就是悲哀之處吧。 關鍵是暴露了這種心態求職,有多少公司敢要這種穩定性不高的人,哪怕是大牛。挺殘酷的。一直看他的部落格,大約也意料到這類事情會發生。國內屌絲只能祝好 王垠...