四人帮Design Patterns使用文字处理程序作为其中至少一些模式的示例,尤其是复合和飞重。
除了使用C或C ++之外,你真的可以使用这些模式和面向对象的开销来编写一个高性能的全功能文字处理器吗?
我知道Eclipse是用Java编写的,但是我还没有使用它,所以我不知道它是否像Visual Studio一样快速或完美,它具有基于C ++的文本编辑系统。
我只使用C ++和Java作为示例。这个问题更多地与拥有大量内存中对象的开销有关,就像在文字处理器甚至游戏等应用程序中那样。
设计模式以牺牲简约性为代价促进抽象,即使它们通常指出何时可能会遇到某种性能损失。字处理器,尤其是游戏,尽可能接近金属,从中获益最多。
我只是想知道是否有人知道一个快速的面向对象的文字处理器或文本编辑器不是用C ++编写的,他们是否使用模式构建一个或者他们会放弃很多抽象的东西?
答案 0 :(得分:5)
Flyweight实际上只是在存在数千个具有内在共享状态的对象的情况下保存资源的一种方式,因此它在高级语言中可能比C / C ++更有用。也许GoF在文档中使用字形的示例并不是说明这种模式的最佳选择。
我认为构建高性能文字处理器不仅仅是这些基本模式还有很多 - 不确定GoF中是否有任何东西可以排除能够成功实现这一点。
通常,Visual Studio(VS)比Eclipse更高级,性能也更好 - 至少是我见过的VS版本。 Eclipse是最令人印象深刻的Java应用程序之一,它在具有大量RAM的最新机器上运行得很好。
答案 1 :(得分:4)
嗯,flyweight是一个在文字处理器中使用的荒谬模式。 IIRC,他们将每个角色都作为一个对象引用[注意:它是针对每个字形,这仍然是疯狂的,因为你的操作系统很乐意为你绘制]。用指针比字符和与间接相关联的所有处理更宽的话,就会狂使用该特定的图案在一个字处理器的方式。
如果您对文字处理器的设计感兴趣,我发现一篇文章没有解决模式,但会查看一些data structures underlying word processor design and design considerations。
尽量记住,设计模式可以让您的生活更轻松,而不是让您变得纯洁。必须有一个使用模式的理由,它必须提供一些好处。
答案 2 :(得分:1)
GoF和模式的重点一般是谈论如何做正确的“正确”事情,而不是正确的“正确”事情。如果性能是一个问题,并且您发现没有命名模式可以提供足够的性能,那么也许您可以证明以自己的方式行事。但是,对模式的良好了解会给你一个“合理的默认”,并且可能意味着你只需要牺牲清晰度/ SoC /等,以达到足够的性能。
感觉你“偏离”常规会鼓励你a)三思而行,b)很好地评论非惯用代码。
模式是至关重要的知识,但没有什么是福音,你必须始终运用判断力。
说了这么多 - 我想不出为什么你不能用模式和现代JDK写一个体面的文本编辑器
答案 3 :(得分:0)
这个问题实际上似乎是关于Java与C ++的性能,而不是像在垃圾收集等虚拟机上运行那样的对象取向。
关于Java与C ++性能的This whitepaper可能值得一读。
答案 4 :(得分:0)
你必须要记住的一件事是GoF书是在90年代早期写的,当时流行的操作系统没有广泛的图形库。甚至Windows当时还不是一个操作系统。
IIRC GoF于1994年发布。即使在1994年,Windows 95 Beta也可用(并在我的486DX33上运行),Windows 3.x自1990年左右开始出现。
答案 5 :(得分:0)
Eclipse + netbeans + IntelliJ all几乎全部用java或一些编写,它们运行在JVM(而不是C ++)上。至少有2个IDE我花了一些时间使用编辑器代码,所以我可以向你保证它的所有java(也不容易)。
VS 2005是我对视觉工作室的最后一次体验,即便如此,我认为eclipse更具响应性(智能加倍,所以给予时间热身和索引)。
不确定那是多么相关,但这就是我的经验。但令我感到惊讶的是,今天的视觉工作室仍然是用C ++编写的 - 我认为使用C#符合微软的利益 - 如果没有别的东西能真正推动它的表现,就像吃自己的狗粮一样!
答案 6 :(得分:0)
是的,目前的机器足够快,并且有足够的内存,这是可能的。如果你看看Squeak,你会看到一个用Smalltalk编写的Smalltalk IDE,它比Java慢得多,但仍然足够快。另一方面,高清视频编辑目前需要一些较低级别的支持。