作者AmosYang (泛用人型编码器)
看板GameDesign
标题Re: [程式] 小技巧:Safe Scoped-Based Profiler
时间Mon Oct 13 19:56:16 2014
※ 引述《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://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=bbs/java/M.1398461671.A.3B5.html
https://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=bbs/GameDesign/M.1413201381.A.7AA.html
1F:推 azureblaze: 喔喔原来是using 可是写起来还是罗唆了点XD 10/13 21:25
2F:推 littleshan: C#的Dispose反而带出一个问题 10/13 22:48
3F:→ littleshan: 每个IDisposable物件都有valid与disposed两个state 10/13 22:50
4F:→ 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
5F:推 cjcat2266: 的确有点罗嗦啊XD 10/14 01:56
6F:推 littleshan: 我不是说C++比较好,而是这边C#应该要有更好的设计 10/14 12:31
我大概跳太快了,我想说的是: 每个语言的各种功能、语法,如果能
被误用、滥用,就一定会被误用、滥用 XD
7F:→ 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