문제

4인의 갱 디자인 패턴 적어도 몇 가지 패턴, 특히 Composite 및 Flyweight에 대한 예로 워드 프로세서를 사용합니다.

C나 C++를 사용하는 것 외에 이러한 패턴과 그에 수반되는 객체 지향 오버헤드를 실제로 사용하여 고성능의 모든 기능을 갖춘 워드 프로세서를 작성할 수 있습니까?

Eclipse가 Java로 작성되었다는 것은 알고 있지만 많이 사용하지 않았기 때문에 C++ 기반 텍스트 편집 시스템이 있는 Visual Studio만큼 빠른지 또는 세련된지 잘 모르겠습니다.


예시로는 C++와 Java만 사용했습니다.문제는 워드 프로세서나 게임과 같은 응용 프로그램에서와 같이 많은 메모리 내 개체를 갖는 오버헤드와 더 관련이 있습니다.

디자인 패턴은 일반적으로 어떤 종류의 성능 저하가 발생할 수 있는 시기를 지적하더라도 절약을 희생하여 추상화를 촉진합니다.워드 프로세서와 특히 게임은 가능한 한 금속에 가까워지면 가장 큰 이점을 얻습니다.

C++로 작성되지 않은 빠른 객체 지향 워드 프로세서나 텍스트 편집기에 대해 아는 사람이 있는지, 그리고 패턴을 사용하여 이를 만들 것인지, 아니면 사물의 추상화를 많이 포기할 것인지 궁금합니다.

도움이 되었습니까?

해결책

Flyweight는 실제로 본질적인 공유 상태를 가진 수천 개의 개체가 있는 상황에서 리소스를 보존하는 방법일 뿐이므로 C/C++보다 높은 수준의 언어에서 유용할 수 있습니다.어쩌면 문서에서 문자 모양을 사용하는 GoF의 예는 이 패턴을 설명하는 최선의 선택이 아닐 수도 있습니다.

고성능 워드 프로세서를 구축하려면 이러한 기본 패턴보다 훨씬 더 많은 것이 있다고 생각합니다. GoF에 이를 성공적으로 수행할 수 없는 요소가 있는지는 확실하지 않습니다.

일반적으로 Visual Studio(VS)는 Eclipse(적어도 내가 본 VS 버전)보다 더 발전되어 훨씬 더 나은 성능을 발휘합니다.Eclipse는 가장 인상적인 Java 애플리케이션 중 하나이지만 RAM이 많은 최신 시스템에서 꽤 잘 실행됩니다.

다른 팁

잘, 플라이급 워드 프로세서에서 사용하기에는 터무니없는 패턴입니다.IIRC에서는 각 문자를 객체로 참조했습니다. [참고:그것은 각자를 위한 것이었다 문자 모양, 당신의 OS가 당신을 위해 행복하게 그릴 것이기 때문에 그것은 여전히 ​​​​미친 일입니다].포인터가 문자보다 넓고 모든 처리가 간접 참조와 관련되어 있으므로 워드 프로세서에서 특정 패턴을 그런 식으로 사용하는 것은 미친 짓일 것입니다.

워드 프로세서의 디자인에 관심이 있다면 패턴을 다루지는 않지만 일부 워드 프로세서를 살펴보는 기사를 찾았습니다. 워드 프로세서 설계 및 설계 고려 사항의 기본이 되는 데이터 구조.

디자인 패턴은 당신의 삶을 더 쉽게 만들기 위한 것이지 당신을 순수하게 만들기 위한 것이 아니라는 것을 기억하십시오.패턴을 사용하는 데에는 이유가 있어야 하며, 어떤 이점을 제공해야 합니다.

일반적으로 GoF와 패턴의 요점은 상황에 맞게 "올바른" 것이 아니라 올바른 대로 "올바른" 작업을 수행하는 방법에 대해 이야기하는 것입니다.성능이 문제이고 명명된 패턴이 적절한 성능을 제공하지 못한다면 아마도 자신만의 방식으로 가는 것을 정당화할 수 있습니다.그러나 패턴에 대한 좋은 지식은 "합리적인 기본값"을 제공하며 아마도 적절한 성능을 제공하는 데 필요한 만큼만 명확성/SoC/등을 희생한다는 의미일 것입니다.

표준에서 "일탈"하고 있다는 느낌은 a) 다시 생각하고 b) 관용적이지 않은 코드에 대해 잘 주석을 달도록 권장합니다.

패턴은 필수적인 지식이지만 복음은 아무것도 없으며 항상 판단을 내려야 합니다.

그렇게 말했지만 패턴과 최신 JDK를 사용하여 괜찮은 텍스트 편집기를 작성할 수 없는 이유가 전혀 없습니다.

기억해야 할 것 중 하나는 GoF 책이 널리 사용되는 OS에 광범위한 그래픽 라이브러리가 없었던 90년대 초반에 작성되었다는 것입니다.당시에는 Windows도 아직 OS가 아니었습니다.

IIRC GoF는 1994년에 출시되었습니다.1994년에도 Windows 95 베타가 사용 가능했고(내 486DX33에서 실행됨) Windows 3.x는 대략 1990년부터 사용되었습니다.

Eclipse + netbeans + IntelliJ는 모두 거의 모두 Java 또는 무엇 JVM(C++ 아님)에서 실행됩니다.적어도 2개의 IDE에서 편집기 코드를 다루면서 시간을 보냈기 때문에 모든 것이 Java임을 확신할 수 있습니다(그리고 그것도 쉽지 않습니다).

VS 2005는 Visual Studio에 대한 나의 마지막 경험이었으며, 그 당시에도 나는 Eclipse가 훨씬 더 반응성이 좋다고 생각했습니다(intelliJ는 워밍업과 인덱싱에 시간이 두 배로 주어졌습니다).

그것이 얼마나 관련이 있는지는 모르겠지만 그것은 내 경험입니다.하지만 저는 Visual Studio가 오늘날에도 여전히 C++로 작성되어 있다는 사실에 놀랐습니다. C#을 사용하는 것이 Microsoft의 이익이 될 것이라고 생각합니다. 다른 것이 없다면 C#을 사용하면 성능이 실제로 향상될 것입니다. 개 사료를 먹는 것만큼 좋은 것은 아닙니다!

예, 현재 컴퓨터는 충분히 빠르며 가능한 메모리도 충분합니다.Squeak을 살펴보면 Smalltalk로 작성된 Smalltalk IDE를 볼 수 있습니다. 이는 Java보다 훨씬 느리지만 여전히 충분히 빠릅니다.반면에 HD 비디오 편집은 현재 일부 낮은 수준의 지원이 필요한 것입니다.

이 질문은 실제로 Java와 Java에 관한 것 같습니다.C++ 성능은 객체 지향이 아니라 가비지 수집 등을 갖춘 가상 머신에서 실행되는 것입니다.

이 백서 자바 대C++ 성능은 읽어볼 가치가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top