Effective C++中文版 烂!!!

Prog_cn 2002-01-18 05:21:24
看了两天的Effective C++中文版 2nd Edition(华中科技出版社)

一个字:

烂!

我不知道问题出在eng->繁体中文的翻译过程
还是繁体中文->简体中文的转译过程,

我只是感觉很多翻译只停留在字面上,并且并不符合大陆的语言习惯,
令全文晦涩难懂。
尤其Item 10中的一个翻译错误令我思考了半天!!!
在讲Memory Pool的时候:
“如果采用pool策略,你的软件跑起来会比较慢而且耗用较多内存”
而原文是:
“your software runs slower and uses more memory than it would if you adopted the pool strategy.”


哎,看e文太累太费时,这本译文也难读。
上网搜了一天,找到了另外一个中文版,只好两个结合起来看了。

链接如下,希望对大家有帮助:
http://www.vckbase.com/study/ebook/Effective_C++2e.zip
http://wlbookwl.myrice.com/book/more%20effective%20c++.zip


原版CD链接:
http://www.dingbing.com/book/new/C_C++/standand_c/cppefmef.rar
...全文
4459 66 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
66 条回复
切换为时间正序
请发表友善的回复…
发表回复
redkit 2002-01-23
  • 打赏
  • 举报
回复 2
仅仅1处错误就说烂,我觉得该帖子的创始者水平很低,要不就是有不轨用心
solar 2002-01-23
  • 打赏
  • 举报
回复
侯sir,人家指出你的一处错误,你就说了那么多那样的话,有失风度吧!况且这里没有太过激的言词啊(最甚莫过于“烂”吧,不过我没有仔细看)!
shornmao 2002-01-23
  • 打赏
  • 举报
回复 1
译者已经承认错误了,我想这个话题到此为止了,个人认为以后有这些讨论,不妨先试着与作者/译者联系,等有了结果,在发到论坛不迟。不然大家在那里辨的你死我活,也解决不了什么问题。
shornmao 2002-01-23
  • 打赏
  • 举报
回复
請轉貼我的回應如下,於原帖之後,謝謝。

**********************************
讀者Shorn寫給我一封信,要我來看看這裡的討論。我上來看了,並仔細做了檢討。是我的翻譯有誤。以下是勘誤,將於侯捷網站下次更新時刊出,並由華中出版社於新刷(第三刷)修正。此次勘誤涉及一整大段,侯捷網站上的勘誤表有顏色區分,比較容易找出修正前後之差別所在。

我想說點題外話。

技術性的東西,一是一,二是二;翻譯有誤,我要向讀者道歉。明確點出問題所在,是正確的科學討論態度。但是唯有大家都使用理性的、節制的、有風度的措辭,才會導入一個良性循環,才是大家的福氣。諸如「以前說的,可能引起攻擊誤會的話,我這裡全部收回」這種措詞或類似措詞,我看過很多。覆水難收,你能收回什麼 :) 技術正確,不表示贏得尊敬。如果你認為不打緊,反正沒人知道誰是誰,我愛怎麼說就怎麼說,現實社會再換個臉孔,那就錯了。天知、地知,你知。

最重要的是你知。

一個人若不從根性著手,成不了大器 — 當然如果你認為技壓眾人賺很多很多錢,就是成大器,我們之間確實沒什麼可談。這裡全都隱姓埋名,唯有侯捷真面目上陣,但是任何言詞都不會傷害一個對自己的敬業有充份信心的人。我只淡然一笑。

以上感想,並非特指本帖,也非特指某人,而是從本帖出發的聯想。對於我的這些聯想,如若有人不服,儘請繼續發言,並且儘請繼續使用你們認為適當的言詞。佛法還度有緣人:) 我寫這信,也花了不少時間,如果看這帖子的數百人中,有那麼一兩個人受了影響,我也就滿足。
ed9er 2002-01-23
  • 打赏
  • 举报
回复
同意a_ray1(罗嗦),后悔中。。。。


ed9er 2002-01-23
  • 打赏
  • 举报
回复
不释放内存才叫Pool?你就是死读书,没有实践经验的典范
本来好久不想在csdn胡乱跟贴了,总是在这些低级问题上纠缠,讲来讲去,讲来讲去。。。

pool的本意是,对于同一类型,经常需要重新创建的对象,使用自己的内存管理方式,使得对象构造和析构的效率提高,且如果对象的size很小的话,还可以防止过多的内存碎片产生。自己管理它的内存分配,实现方法很多,一种就是meyers写的这种(在看这本书之前其实我已经这样用过了),用动态的malloc来构造list,还有一种就是malloc大块的内存,用另外一个索引来表明哪一段已用,对于更特定的情况(最大数量是可预知的),甚至可以用结构数组来实现,结构里放一个标志位inuse,(这个我最早是从quake的源码里看来的),这些,都是pool,pool不是meyers在effective CPP里发明的名词

用动态申请,不管是list还是index,都会碰到空间占用造成浪费的情况,然后meyers就说 如果要modify Airplane's memory management routines so that the blocks of memory returned by ::operator new were automatically released when they were no longer in use,然后。。。。我上面已经说的很清楚了
a_ray1 2002-01-23
  • 打赏
  • 举报
回复
别在这里哗众取宠了!
shornmao 2002-01-23
  • 打赏
  • 举报
回复 1
to Shornmao(死貓):「技術書籍的翻譯,難就難在技術層面」,這句話是正確的,但這次是我的錯誤,很抱歉。 “your software runs slower and uses more memory than it would if you adopted the pool strategy”,這裡的 “it would” 是指「如果接受了pool策略」。我翻譯此段時前前後後確實感到不太對勁兒,但沒能瞧出這個英文關鍵所在,導致連整段稍後的語氣語感也都弄錯了。如你所言,pool的確會帶來較多的memory耗費,但如果將free-list的每個node的前4個bytes拿來做為維護free-list之用,便可去除這項overhead。至於 memory pool的速度,比起 ::operator new還是比較快的(後者需搜尋system heap中的可用memory)。另外,::operator new抓取system heap時會連帶挖取一塊所謂cookie(p40圖),也會浪費memory。總之,一切都是相對的。

■Effective C++, 2e, p45,最後一段
說明:由於誤會了一個關鍵性的語意,導致翻譯錯誤。非常抱歉。
原文:
第一個理由是你可能想要「擁抱」定制型內存管理系統。有許多理由使你會這麼做,最平常的一個理由就是,默認的 operator new 和 operator delete 對你而言使用了太多內存或是速度太慢(或兩者兼具)。正是這樣,每一個你貢獻出來用以追蹤和釋放那些大塊內存的額外程序空間和額外的程序代碼都筆直地達陣得分:如果採用 pool策略,你的軟件跑起來會比較慢而且耗用較多內存。但是對那些抱持著「效率只不過是額外獎賞」態度的數據庫和應用軟件而言,由於你可以預期pool 的大小會合理地受到約束,所以 pool 作法可能是最好的一種策略。

更正:
第一個理由是你可能想要「擁抱」定制型內存管理系統。有許多理由使你會這麼做,最平常的一個理由就是,默認的 operator new 和 operator delete 對你而言使用了太多內存或是速度太慢(或兩者兼具)。正是這樣,每一個你貢獻出來用以追蹤和釋放那些大塊內存的額外內存空間和額外的程序代碼都筆直地達陣得分:如果不採用 pool策略,你的軟件跑起來會比較慢而且耗用較多內存。對那些抱持「效率乃十分必要」之態度的程序庫和應用軟件而言(並且由於 pool 的大小可受到適度約束), pool 可能是最好的一種策略。

感謝:Prog_cn
日期:2002/01/21
招RD和QA 2002-01-23
  • 打赏
  • 举报
回复 1
楼上的说的太棒了。
dynamic_cast 2002-01-23
  • 打赏
  • 举报
回复
To ed9er(始祖鸟),
你的解释看似合理,但你对本文中的Pool的理解是错的。
Pool 在原文中的定义:
Nevertheless, the blocks of memory returned by ::operator new are never released by Airplane::operator delete, and there has to be some name for that. There is. You've created a memory pool.
不释放内存才叫Pool.(可能我表达得不准)。

作者的原意是:如果修改飞机的内存管理方法,使得由::operator new返回的内存在不再使用时自动释放,这并不难实现。但有两条理由不能这样做。
后面作者的叙述是围绕hold住内存的理由而来的(也就是说要采用Pool)
理由1:第一条理由,有两个论据,一是有争议的这条,二是大多数情况下Pool的大小是可以预期的(reasonably bounded)
理由2:略。
如果我的这个论证理解和对pool的理解不错的话,那以细节不用看也可以猜到这句有争议的话的正确翻译了,ed9er(始祖鸟)的解释在这里不显得逻辑不通么?

to chandler(阿欣). zhangyan_qd(doggyzone)
初中英语书我没有,不过有一本张道真的英语语法书(版本比较老)。另外我不是什么高级知识分子,所以灌灌水也无妨。高级知识分子做学问也要实事求是吧。只要是人就会犯错误。
P184页:
表示现在及将来的虚拟语句
谓语主要是形式如下:
从句:过去式 , 主句would+动词原形
在这句有争议的句子中,if you adopted the pool strategy 不管怎么断,如果其修饰前面的成份,前面的主句要用would+动词原形而不是一般现在时。 这点楼上有人已经提出过。
//----------------------------------------------------------------------------------------------------------------------
我再把LostMouse翻译的上下文贴上:
修改airplane的内存管理程序使得::operator new返回的内存块在不被使用时自动释放并不难,但这里不会这么做,这有两个原因:
第一个原因和你自定义内存管理的初衷有关。你有很多理由去自定义内存管理,最基本的一条是你确认(我认为这个“确认”即原文的determined在这里是发现的意思)缺省的operator new和operator delete使用了太多的内存或(并且)运行很慢。和采用内存池策略相比,跟踪和释放那些大内存块所写的每一个额外的字节和每一条额外的语句都会导致软件运行更慢,用的内存更多。在设计性能要求很高的库或程序时,如果你预计内存池的大小会在一个合理的范围之内,那采用内存池的方法再好不过了。
第二个原因…
//---------------------------------------------------------------------------------------------------------------------
这场争议的主要原因除了这句英文本身外,还有对Pool的理解,再就是作者用了大量晦涩难懂的语句。如这一段中就有好几句。

我觉得最好的办法是请LostMouse和侯sir两人交流一下,他们水平比我们要高,即便错了也能发现自己错了。


helloeveryone 2002-01-23
  • 打赏
  • 举报
回复
英文是比较难.
大家出于不同的原因,可以得出相反的结论.
zgtt 2002-01-23
  • 打赏
  • 举报
回复
挺好啊,
就是有错啊
不应该出错啊.
尤其是计算机书.
fiend_angel 2002-01-23
  • 打赏
  • 举报
回复
关注
shornmao 2002-01-22
  • 打赏
  • 举报
回复
to : dynamic_cast(梦的解析)
我觉得不对,从技术角度理解,所谓的跟踪和释放那些大内存块所写的每一个额外的字节和每一条额外的语句,就是pool的实现。
这里要表述的意思是:
支持大块内存自动分配和释放是不合理的,第一个原因采用pool策略的方法会导致运行更慢和更耗内存(也就是好心办了坏事),第二个原因......
这就是jjhou说的,技术书籍的文章难就难在技术层面的东西,否则的话找个英语专业的学生配本计算机字典就可以翻译了。
多想想什么是内存池,如何实现内存池,你就会对这段话有理解了。
chandler 2002-01-22
  • 打赏
  • 举报
回复
: smartbigcat(聪明的大猫) 你这只“烂”猫,
smartbigcat 2002-01-22
  • 打赏
  • 举报
回复
我也觉得翻译没错...it would 后面省略了一些东西....
我的英文烂,错了别见笑....
chandler 2002-01-22
  • 打赏
  • 举报
回复
不要随意用"烂"字,很不文明
chandler 2002-01-22
  • 打赏
  • 举报
回复
to Prog_cn(Programmer)
 jjhou 翻译的是正确的,你的断句有误.your software runs slower and uses more memory than it would **************,if you adopted the pool strategy.
不过敢于提出问题,鼓掌
maojunhua 2002-01-22
  • 打赏
  • 举报
回复
同意gigix(透明)
我也是这样理解的
if you adopted the pool strategy,your software runs slower and uses more memory than it would
如果采用pool策略,你的软件跑起来会比较慢而且耗用较多内存(比它原本的情况)。
虚拟语气,每年高考必考的语言点。
shibichen 2002-01-22
  • 打赏
  • 举报
回复
每一本书都会存在或多或少的错误;仅仅一处翻译失误并不能算“烂”吧!
加载更多回复(46)

15,447

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧