作者StupidGaGa (笨嘎嘎)
看板GameDesign
標題[請益] 找Billzzard程式設計師的一篇文章
時間Wed Jul 24 18:12:42 2013
想找一篇文章,
如果有違反板規請版主刪掉。
我記得是Blizzard的設計師所寫的,
主要是說當初在寫某個遊戲(魔獸或暗黑我忘了)的經驗,
記得依些片段,
1. 寫到一半被抓去支援其他遊戲
2. 程式有一推BUG
3. 「繼承」的概念沒有很好用
4. 存檔的功能好像有些問題
記得好像是在PTT看到的吧!?
有中文與英文一段一段翻。
現在這裡謝謝各位前輩了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.249.16.135
1F:→ VVll:從星海板 轉過來的星海1->Diable 07/24 18:13
3F:→ StupidGaGa:就是這篇,謝謝大大 07/24 19:16
5F:→ StupidGaGa:在請問各位大大,請問有第二部分跟第三部分嗎? 07/25 14:08
6F:推 cjcat2266:原文有第二部分連結,第三部分好像還沒出 07/25 14:48
7F:推 cowbaying:沒耐心的可以先看程式碼 07/25 15:34
9F:推 Killercat:這code頗怪 混合了C跟C++的概念(抓頭) 07/25 19:05
10F:→ VVll:這篇 程式設計師犯的最大錯誤, 批評自己不熟悉的語言 07/25 19:06
11F:→ Killercat:老實講拿掉operator=跟template 我會以為這是C code 07/25 19:06
12F:→ Killercat:而且老實講我不了解 這實作看起來並沒有任何比std::list 07/25 19:10
13F:→ Killercat:優越的地方,是我忽略了什麼重點嗎.... o_oa? 07/25 19:10
14F:→ Killercat:應該說 std::linkedlist 07/25 19:10
15F:→ Killercat:std::linkedlist配上boost::shared_ptr應該會好一點 07/25 19:10
16F:→ Killercat:er...是std::link...java寫多了C++ STL class都搞混了 07/25 19:12
17F:→ Killercat:還有一個可能是STL的記憶體配置方法採取的演算法頗暴力 07/25 19:17
18F:→ Killercat:一次都是要一塊以後 超過就要兩倍... 不過我還是不明白 07/25 19:18
19F:→ Killercat:的是 自己做一個std::list<T, allocator>會簡單的多 07/25 19:18
20F:→ Killercat:有板友能看出為什麼他捨去這方法而用自製的理由嗎? 07/25 19:19
21F:→ VVll:因為作者 是寫c code的, 他對c++還有oo 完全不熟 07/25 19:24
22F:→ azureblaze:而且他的時代oo才剛起步一團糟所以他的印象也很差 07/25 20:38
23F:→ azureblaze:而且那個時代的硬體會讓人很計較4個byte或indirection 07/25 20:39
24F:推 Killercat:那我可以完全理解為什麼這東西怎麼看都是披著C++皮的C.. 07/25 21:23
25F:→ StupidGaGa:Cool!感謝各位大大幫忙,我一直都想了解頂尖程式人員 07/25 21:23
26F:→ StupidGaGa:的想法與經驗,沒想到得到的比我想像中的多^^ 07/25 21:24
27F:→ Killercat:還有那恐怖的Macro(我還特地gcc -E看了一下) 07/25 21:24
28F:推 cjcat2266:那個macro我倒覺得沒什麼耶...適度的用是ok的 07/26 00:08
29F:→ cjcat2266:inlist在遊戲開發算是頗熱門的結構,Box2D也用它 07/26 00:09
30F:推 cjcat2266:Patrick的inlist用到的bitwis運算子的確有點太超過 07/26 00:57
31F:→ cjcat2266:我看過的inlist中已經沒人在這樣搞了XD 07/26 00:58
32F:→ Killercat:不用阿 -_-a 直接繼承std::list其實就是in-list了 07/26 08:28
33F:→ Killercat:等等...不是繼承list... 早上起來腦袋不清醒 XD 07/26 08:29
34F:推 cowbaying:頂尖程式員會讓一般人覺得很跳針 XDDDD 07/26 08:57
35F:→ StupidGaGa:請問有前輩可以第一個圖跟第二個圖嗎? 07/26 10:15
36F:→ StupidGaGa:忘了說,是第二部分文章的圖 07/26 10:16
37F:→ StupidGaGa:我看得懂程式碼跟圖 07/26 10:17
38F:→ StupidGaGa:但是我看不懂為什麼這個程式碼會形成這個圖~"~ 07/26 10:18
39F:→ StupidGaGa:希望有前輩可以指導討論一下 07/26 10:18
40F:推 cjcat2266:喔,他的std::list圖畫錯了,下面comment有講 07/26 10:38
41F:→ cjcat2266:別擔心,如果你看得懂程式碼,那你想像中的圖應該是對的 07/26 10:38
42F:→ cjcat2266:他畫的是std::list<T *>,不是std::list<T> 07/26 10:39
43F:推 cjcat2266:這篇文的插圖有比較清楚展示inlist多重link的結構 07/26 11:20
45F:→ Killercat:其實std::list是可以改造成in-list的 不過我剛剛試作了 07/26 14:57
46F:→ Killercat:一下,並不是很簡單就是,所以早上我說的「繼承std::lis 07/26 14:58
47F:→ Killercat:t」是句還滿糗的話 07/26 14:58
48F:→ Killercat:另外 改造成in-list的話 std::list的allocator整個廢掉 07/26 14:58
49F:→ Killercat:不過還是很有改造價值.... 07/26 14:59
50F:→ Killercat:我是用SGI版本的std::list實作版本魔改的 要是改的出來 07/26 14:59
51F:→ Killercat:的話,晚點跟大家分享一下 07/26 14:59
52F:推 FukadaKyoko:我有看過一本書還是哪邊寫 不要繼承std的東西 XD 07/26 15:36
53F:→ FukadaKyoko:真的要用的話 就把std的東西宣告成自己class的member 07/26 15:36
54F:推 cjcat2266:或是用private繼承,然後自己定義新的介面也ok 07/26 15:57
55F:推 franknine:Effective C++ 的 item 7 Declare destructors virtual 07/26 16:17
56F:推 franknine:因為 std 的東西 destructor 不是 virtual 07/26 16:33
57F:推 Killercat:其實effective c++(還是more?)有一個很經典的例子 07/26 17:16
58F:→ Killercat:他告訴你要實作一個大小寫不分的string 07/26 17:16
59F:→ Killercat:要怎麼繼承basic_string, 怎麼繼承怎麼修改template 07/26 17:17
60F:→ Killercat:整個流程其實把修改stl該注意的東西都含括了70%了 07/26 17:17
61F:→ Killercat:不過std::list要改成in-list可能得用別的小手段來做... 07/26 17:18
62F:推 Casval:那個時代別說沒有標準程式庫,連C++都沒有可相容的標準,所 07/27 15:47
63F:→ Casval:以多半都要自己手工打造所有的部分。現在語言有標準,程式 07/27 15:48
64F:→ Casval:庫也很精良,正確的使用下效能沒問題,安心地用吧! 07/27 15:50