Можете ли вы создать быстрый текстовый процессор с помощью шаблонов дизайна GoF?

Шаблоны дизайна «Банды четырех» используют текстовый процессор в качестве примера, по крайней мере, для некоторых из своих шаблонов, в частности «Составной» и «Легковес».

Не могли бы вы действительно использовать эти шаблоны и объектно-ориентированные накладные расходы, помимо использования C или C++, для написания высокопроизводительного полнофункционального текстового процессора?

Я знаю, что Eclipse написан на Java, но я не особо им пользовался, поэтому не знаю, настолько ли он быстрый или отточенный, как что-то вроде Visual Studio, в котором есть система редактирования текста на основе C++.


Я использовал только C++ и Java в качестве примеров. Вопрос больше связан с накладными расходами, связанными с наличием большого количества объектов в памяти, как в приложении, таком как текстовый процессор или даже в игре.

Шаблоны проектирования способствуют абстракции за счет экономии, хотя обычно они указывают на то, что производительность может снизиться. Текстовые процессоры и особенно игры извлекают максимальную пользу из того, что они максимально приближены к металлу.

Мне просто было интересно, знает ли кто-нибудь о быстром объектно-ориентированном текстовом процессоре или текстовом редакторе, написанном не на C++, и будут ли они создавать его с использованием шаблонов или они откажутся от многих абстракций?

Ответов (7)

Решение

Легковес на самом деле - это просто способ сохранения ресурсов в ситуациях, когда есть тысячи объектов с внутренним общим состоянием, поэтому он может быть полезен на языках более высокого уровня, чем C/C++. Возможно, пример GoF с использованием глифов в документе не был лучшим выбором для иллюстрации этого шаблона.

Я думаю, что создание высокопроизводительного текстового процессора - это гораздо больше, чем просто эти базовые шаблоны, хотя - не уверен, есть ли в GoF что-нибудь, что исключает возможность успешно это сделать.

Как правило, Visual Studio (VS) более продвинутый и работает значительно лучше, чем Eclipse - по крайней мере, версии VS, которые я видел. Eclipse - одно из самых впечатляющих Java-приложений, хотя оно неплохо работает на более новых машинах с большим объемом оперативной памяти.

Да, современные машины достаточно быстры и имеют достаточно памяти, что это возможно. Если вы посмотрите на Squeak, вы увидите Smalltalk IDE, написанную на Smalltalk, значительно медленнее, чем Java, но все же достаточно быструю. С другой стороны, редактирование HD-видео - это то, что в настоящее время нуждается в некоторой поддержке более низкого уровня.

На самом деле этот вопрос, похоже, касается производительности Java и C++, и это не столько объектная ориентация, сколько работа на виртуальной машине со сборкой мусора и т. Д.

Этот технический документ о производительности Java и C++, возможно, стоит прочитать.

Вы должны помнить, что книга GoF была написана в начале 90-х, когда в распространенных операционных системах не было обширных графических библиотек. Даже Windows в то время еще не была ОС.

IIRC GoF был выпущен в 1994 году. Даже в 1994 была доступна бета-версия Windows 95 (и работала на моем 486DX33), а Windows 3.x существовала примерно с 1990 года.

Ну, легковес - это нелепый шаблон для использования в текстовом редакторе. IIRC, у них каждый символ упоминался как объект [примечание: это было для каждого глифа , что все еще безумие, потому что ваша ОС с радостью нарисует это для вас]. Если указатель шире символа и вся обработка связана с косвенным обращением, было бы безумно использовать этот конкретный шаблон таким образом в текстовом процессоре.

Если вас интересует дизайн текстовых процессоров, я нашел статью, в которой не рассматриваются шаблоны, но рассматриваются некоторые структуры данных, лежащие в основе дизайна текстовых процессоров, и соображения по дизайну .

Постарайтесь помнить, что шаблоны проектирования нужны для того, чтобы облегчить вам жизнь, а не для того, чтобы вы были чисты. Должна быть причина для использования шаблона, он должен приносить некоторую пользу.

Затмение + + IntelliJ NetBeans все написаны почти все в Java или что - то , что работает на JVM (не C++). По крайней мере, в двух из этих IDE я потратил некоторое время на код редактора, поэтому могу заверить вас, что это вся java (и это тоже непросто).

VS 2005 был моим последним опытом работы в визуальной студии, и даже тогда я думал, что eclipse был намного более отзывчивым (intelliJ вдвойне давал время на разогрев и индексирование).

Не уверен, насколько это актуально, но это мой опыт. Но я удивлен, что визуальная студия до сих пор написана на C++ - я думаю, что в интересах Microsoft было бы использовать C# - если бы ничего другого, это действительно сильно увеличило бы ее производительность, совсем не то, что есть собственный корм для собак!

Смысл GoF и паттернов в целом состоит в том, чтобы говорить о том, как делать вещи «правильно» как правильные, не обязательно «правильно» как правильно для обстоятельств. Если производительность является проблемой, и вы обнаруживаете, что ни один именованный шаблон не дает адекватной производительности, тогда, возможно, вы сможете оправдать свой собственный путь. Но хорошее знание шаблонов дает вам «разумное значение по умолчанию» и, вероятно, будет означать, что вы жертвуете ясностью / SoC / и т. Д. Ровно настолько, насколько это необходимо для обеспечения адекватной производительности.

Ощущение, что вы «отклоняетесь» от нормы, побуждает вас: а) подумать дважды и б) хорошо прокомментировать неидиоматический код.

Образцы - жизненно важное знание, но ничто не является Евангелием, и вы всегда должны применять суждение.

Сказав все это - я не могу придумать ни одной причины, по которой вы не могли бы написать достойный текстовый редактор, используя шаблоны и современный JDK.