У классической реализации фабричного метода на C++ есть один существенный недостаток — используемый при реализации этого шаблона динамический полиморфизм предполагает размещение объектов в динамической памяти. Если при этом размеры создаваемых фабричным методом объектов не велики, а создаются они часто, то это может негативно сказаться на производительности. Это связанно с тем, что во первых оператор new
не очень эффективен при выделении памяти малого размера, а во вторых с тем что частая деаллокация небольших блоков памяти сама по себе требует много ресурсов.
Для решения этой проблемы было бы хорошо сохранить динамический полиморфизм (без него реализовать шаблон не получится) и при этом выделять память на стеке.
Если вам интересно, как это у меня получилось, добро пожаловать под кат.
Рубрика «ненормальное программирование» - 82
Фабричный метод без размещения в динамической памяти
2014-11-28 в 21:35, admin, рубрики: c++, c++11, ненормальное программирование, ооп, Проектирование и рефакторинг, фабричный методКод, которого нет
2014-11-28 в 13:36, admin, рубрики: javascript, Веб-разработка, КодоБред, магия, ненормальное программирование, обфускацияПривет, читатели!
Около года назад Хабр захлестнула волна постов на тему "%string% в N строчек на JavaScript". Уже и не вспомню, чем все закончилось, но началось все с Excel в 30 строк. Следом появилось много и других интересных вариаций на эту тему, даже игра в ноль строк на JS, но это уже совсем другая история…
Как я ни старался придумать что-то еще более компактное — ничего не выходило. Тогда было принято решение посмотреть на проблему под другим углом. Примерно в этот момент в голове промелькнул вопрос: а можно ли «сколлапсировать» код так, чтобы его не было вообще? И тут мне позвонил Дэвид Блейн.
Я попробовал добавить немного магии и вот что у меня получилось.
Ответ на Решетчатое наследование
2014-11-26 в 13:38, admin, рубрики: иерархия, композиция, наследование, ненормальное программирование, ооп Эта публикация — ответ на текст «Решетчатое наследование», опубликованный хабрапользователем potan, с предложением альтернативы, на субъективный взгляд автора, более близкой к ООП с классами.
Читать полностью »
Решетчатое наследование
2014-11-26 в 7:23, admin, рубрики: clojure, иерархии, наследование, ненормальное программирование, ооп Наследование, при кажущейся простоте, часто приводит к сложным, сопротивляющимся изменениям структурам. Иерархии классов растут как самый настоящий лес.
Целью наследование является привязка кода (набора методов) к минимальному набору свойств сущности (как правило — объекта), которые он обеспечивает и которые ему требуются. Это упрощает повторное использование, тестирование и анализ кода. Но наборы свойств со временем становятся очень большими, начинают пересекаться нетривиальным образом. И в структуре классов появляются миксины и прочее множественное наследование.
Внести изменения в глубине иерархии становится проблематично, приходится думать заранее о «внедрении зависимостей», разрабатывать и использовать сложные инструменты рефакторинга.
Возможно ли всего этого избежать? Стоит попытаться — пусть методы будут привязаны к множеству характерных свойств объекта (тегов), а иерархия наследования выстраивается автоматически по вложенности этих множеств.
Пусть мы разрабатывает иерархию для игровых персонажей. Часть кода будет общая для всех персонажей — она привязана к пустому набору свойств. Код, отвечающий за их отображение будет представлен в виде вариантов для OpenGL и DirectX разных версий. Что-то будет зависеть от расы персонажа, что-то от наличия и вида магических способностей и тп. Теги персонажа первичны. Они перечисляются явно, а не наследуются. А реализация наследуется в зависимости от набора тегов (по вложенности). Таким образом умение стрелять из ПЗРК не окажется у кенгуру, потому что его унаследовали от пехотинца.
Идея такого подхода была предложена Дмитрием Кимом. Автор не стал ее воплощать в код, я попробую исправить это упущение.
Реализация такого подхода на Clojure, как обычно, на github.
Читать полностью »
Когда строка не является строкой?
2014-11-18 в 9:57, admin, рубрики: .net, Unicode, Джон Скит, ненормальное программирование, Программирование, это безумие, ЮникодВ рамках моей «работы» над стандартизацией C# 5 в технической группе ECMA-334 TC49-TG2 мне посчастливилось увидеть несколько интересных способов, которыми Владимир Решетников проверял C# на прочность. В данной статье описана одна из проблем, которые он поднял. Разумеется, она, скорее всего, никак не затронет 99.999% C#-разработчиков… но разобраться все равно любопытно.
Спецификации, используемые в статье:
- Стандарт Unicode 7.0.0 – в особенности, глава 3
- C# 5 (Документ Word)
- ECMA-335 (Спецификация CLI)
Что такое строка?
Как бы вы объявили тип string
(или System.String
)? Я могу предположить несколько вариантов ответа на данный вопрос, от расплывчатых до довольно конкретных:
- «Какой-нибудь текст в кавычках»
- Последовательность символов
- Последовательность символов Юникода
- Последовательность 16-битных символов
- Последовательность кодов UTF-16
Только последнее утверждение полностью верно. Спецификация C# 5 (раздел 1.3) гласит:
Обработка строк и символов в C# использует UTF-16. Тип
char
представляет код UTF-16, а тип string – последовательность кодов UTF-16.
Пока всё в порядке. Но это C#. А как насчет IL? Что используется там, и имеет ли это значение? Оказывается, что имеет… Строки должны быть объявлены в IL как константы, и природа этого способа представления важна – не только кодировка, но и интерпретация этих закодированных данных. В частности, последовательность кодов UTF-16 не всегда может быть представлена в виде последовательности кодов UTF-8.Читать полностью »
Arduino на службе здоровья — 2
2014-11-17 в 22:34, admin, рубрики: arduino, co2 монитор, DIY, diy или сделай сам, ненормальное программированиеВдохновленный публикацией «Ардуино на службе здоровья», решил сделать свой «оптимизатор условий» с давлением и влажностями. Разумеется, немного модернизировав его по своему усмотрению.
Были использованы компоненты:
Arduino Mini;
Датчик температуры и влажности DHT-22;
Барометральтиметртермометр BMP180;
Читать полностью »
Слайдшоу на CSS (Sass)
2014-11-15 в 8:46, admin, рубрики: css, Веб-разработка, ненормальное программирование Тема, мягко говоря, не новая, существует ряд статей — на Smashing Magazine и в блогах, а так же просто реализации (исходный код, только та часть, которая касается анимации). Но, помимо фатального недостатка, у данных реализаций есть недостатки фактические — первые два варианта не предоставляют управления, а последний хоть и предоставляет, но при переключении слайдов анимация останавливается и её приходится запускать снова. Пожалуй, можно сказать что это фича, но мне хотелось полностью спародировать поведение слайдшоу как если бы оно было написано на javascript (что в итоге всё равно не удалось) — то есть при переклчении анимация продолжается, но начинается с выбранного слайда.
Кому лень читать — сразу конечный результат.
Стековое программирование с человеческим лицом (часть вторая)
2014-11-13 в 12:10, admin, рубрики: forth, ненормальное программирование, стековое программированиеКак и следовало ожидать, предыдущий пост вызвал противоречивые комментарии. Кого-то устраивает и существующий Форт для решения вопросов, кого-то (как и меня) раздражают его особенности.
Давайте сразу расставим все точки над i: я не пытаюсь сочинить замену Форту. Форт — семейство среднеуровневых языков программирования, которое продолжает продуктивно решать поставленные задачи и на покой не собирается. Но я размышляю в другой нише: высокоуровневый стековый язык с упором на лёгкость чтения программ для начинающих (насколько это вообще возможно). Большая традиционность и высокоуровневость имеет свои достоинства, но при этом теряются некоторые особенности (в том числе и положительные) Форта.
У нового воображаемого языка появляется своя философия и свои концепции. Об этом я и продолжу писать.
Читать полностью »
Энтузиаст сконструировал самодельный 8-битный процессор в Minecraft
2014-11-12 в 10:58, admin, рубрики: 8bit cpu, cpu, DIY, minecraft, ненормальное программирование, Учебный процесс в IT, фон нейман, Электроника для начинающихЭнтузиаст, скрывающийся под ником Dj Sapsan, создал в Minecraft самый настоящий процессор, который может выполнять простейшие программы!
Подробное видео с описанием и демонстрацией работы под катом.
Стековое программирование с человеческим лицом
2014-11-11 в 15:32, admin, рубрики: forth, ненормальное программированиеДумаю, многие из вас находили в интернете статьи и книги о стековом программировании и языке Forth. Сперва волна энтузиазма: как всё просто, логично, понятно и мощно! И почему же эти идеи имеют такое незначительное распространение? Почему так мало программистов реально используют языки вроде Форта? Через какое-то время подступает волна разочарования: да, интересная мысль, но как же тяжело читать исходный код, как же муторно ведётся работа с переменными, строками и дробными числами! Интересная игрушка, полезная группе байтослесарей, не более.
Часто на этом всё и заканчивается. Но лично я никак не мог примириться с мыслью о том, что изящное конкатенативное программирование так и останется в тени других идей. Да, трудности с чтением исходного кода. Да, синдром одной строки. Да, каждый раз для понимания алгоритма приходится в воображении транслировать программу и представлять себе стек, читая исходный код. Но неужели это те недостатки, которые обязательно присущи стековым языкам и без которых стековое программирование перестало бы быть стековым? Неужели никак нельзя хотя бы сгладить подобные недостатки и облегчить жизнь программистам? Оказывается, можно и нужно!
Читать полностью »