Недавно заинтересовался инстанцированием плюсовых шаблонов. В интернетах втречается термин code bloat. Для с++ это может означать неконтроллируемое увеличение кода генерируемого компилятором. Код увеличивается за счет того что инстанцирование новой функции имеет более высокий приоритет чем преобразование аргументов к более удобному типу. Т.е. template T foo(T a); для int и char — это две разные функции. Получить одну функцию можно либо отказом от шаблонов, либо использованием явного преобразования типов.
Но давайте вывернем проблему наизнанку и попробуем получить из минимума строк кода исполняемый файл максимально возможного размера.
Результат не очень впечатил — у меня получилось всего 53Mb из 60 строк кода. И то лишь для одного из трех опробованных компиляторов и ценой нескольких часов компиляции. Максимальное отношение объем/строки — 2.3МБ/строку для объема 14МБ.
Как и почему так получилось — под катом.
Читать полностью »
Рубрика «ненормальное программирование» - 106
Несколько подробностей о шаблонах или форк-бомба этапа компиляции
2013-05-11 в 18:51, admin, рубрики: c++, linux, templates, ненормальное программирование, метки: linux, templatesПочем оптимизация или «бесплатных завтраков не бывает»
2013-05-10 в 11:16, admin, рубрики: javascript, ненормальное программирование, оптимизация, Программирование, профит, метки: javascript, оптимизация, профитToday's software engineering word is «farpotshket.» This is a Yiddish word meaning, «broken, because someone tried to fix it.»
(с) Andr Zerozero
Схлеснулись мы тут на днях на работе по вопросу «А хорошо бы закешировать регулярку», в совершенно банальной функции
uncached = function(data_in) {
return /_(d)+(?:#(d)+)?$/.exec(data_in);
};
сделав как-то так
cached = (function() {
var pattern = /_(d)+(?:#(d)+)?$/;
return function(data_in) {
return pattern.exec(data_in);
};
})();
Идея популярная, но многие ли задумывались о реальном профите и накладных расходах?
Читать полностью »
Что-то посложнее факториала
2013-05-08 в 11:28, admin, рубрики: c++, DFA, nfa, templates, КодоБред, ненормальное программирование, ностальгия, метки: c++, DFA, nfa, templates, ностальгия Давным-давно, когда трава была зеленее, а деревья выше, жил-был тролль, по имени Xenocephal. Жил он, в принципе, во многих местах, но мне повезло встретить его на одном форуме, где я, в то время, набирался ума-разума. Я уже не вспомню топика, в котором протекала беседа, но суть ее сводилась к тому, что Xenocephal пытался убедить всех окружающих, что Lisp (с его макросами) — всему голова, а C++, с его шаблонами, жалкое подобие левой руки. Также утверждалось, что наметапрограммировать в нем что-то сложнее набившего оскомину факториала не представляется возможным.
Читать полностью »
Реализация стека за счёт … стека вызовов
2013-04-29 в 7:22, admin, рубрики: nemerle, ненормальное программирование, метки: nemerle, ненормальное программирование Пришла мне однажды идея: есть стек вызовов и стек как структура данных. А нельзя ли использовать стек вызовов для хранения данных?
Немного поразмыслив я понял, что можно, только с ограничениями: во первых для обработки значений придётся использовать колбеки (ведь пока значение на стеке, нельзя выходить из того вызова, в котором мы его сохранили). Во вторых доступ строго LIFO.
Реализация — под катом.
Читать полностью »
Борьба с мельницами или «О безопасности с умом»
2013-04-24 в 9:55, admin, рубрики: rdp, windows, данные, информационная безопасность, ненормальное программирование, метки: rdp, windows, данныеС развитием интернет удаленная работа уже не кажется чем-то необычным. На практике встречаются случаи, когда заказчик предоставляет «Рабочее место», а работник имеет к нему удаленный доступ для выполнения поставленных задач. Для достаточно крупного заказчика, у которого есть своя служба безопасности встает проблема защиты от утечки информации, которую пытаются решать таким варварским способом, как отключением буфера обмена и запрета передачи файлов между терминалом (за которым физически работает исполнитель) и удаленным рабочим местом.
В статье будут затронуты вопросы:
- Работают ли реально эти технические ограничения?
- Как сказываются эти ограничения на заказчике и исполнителе?
- Что делать в итоге?
Марафонские задачки по С++
2013-04-22 в 11:53, admin, рубрики: c++, задачки, ненормальное программирование, Программирование, С++, метки: задачки, ненормальное программирование, С++Приветствую всех!
В этом посте мы обсудим решение нескольких задачек, которые я подсмотрел из «Марафон задач по С++» (мне кажется ссылки легко найдутся поисковиком). Нет, к сайту я решительно никакого отношения не имею, однако узнал о нем с хабра: либо был у кого-то в профиле, либо была ссылка в комментариях. Итак, определимся с задачками, решения которых будут рассматриваться (задачек всего 9, но эти показались мне интересными):
- Забыл, как умножать. Помогите!
Умножить число на 7, не используя операцию умножения. - Два в одном.
Какой-то умник поменял местами кнопки в лифте. Поставил вместо первого этажа второй, а вместо второго – первый. Честное слово, мне лень ковырять кнопки. Я лучше перепрограммирую лифт. Но программировать мне тоже лень. На вас вся надежда. Напишите, пожалуйста, функцию-переключатель, которая возвращает 1, если на входе 2 и 2, если на входе 1.
Играем в Pong на стене 29-этажного здания (видео)
2013-04-21 в 18:10, admin, рубрики: Pong, Игровые приставки, игры, ненормальное программирование, метки: Pong, игры
В пятницу вечером жители Филадельфии могли любоваться непривычным зрелищем: игрой в Pong на стене 29-этажного здания. Здание покрыто сетью светодиодов, которые и позволили создать соответствующую систему. Автор системы — Фрэнк Ли, профессор Университета Дрексела. Система, созданная этим специалистом, позволила контролировать игровой процесс с обычного ноутбука, подключенного к управляющей системе.
HackDay #25 в Нижнем Новгороде – теперь с конкурсом Intel
2013-04-19 в 4:18, admin, рубрики: hackday, Perceptual SDK, Блог компании Intel, ненормальное программирование, разработка, метки: hackday, Perceptual SDK
С 12 по 14 апреля в Нижнем Новгороде прошел очередной, 25-ый, конкурс разработчиков HackDay. За два рабочих дня, которые для всех остальных людей являются выходными, участникам предстояло воплотить заранее придуманную или тут же пришедшую в голову идею в более или менее работоспособный проект. Отличие этой итерации HackDay от предыдущих состояло в том, что компания Intel устроила тут нечто вроде «конкурса в конкурсе» и предложила программистам попробовать свои силы в создании приложений на Perceptual SDK. Победителя конкурса ждал хороший приз – ультрабук. Ну а теперь небольшой отчет о том, как все было.
Читать полностью »
Промышленные сети в контексте четвертой промышленной революции
2013-04-17 в 4:47, admin, рубрики: Realtime, x86, Блог компании Intel, ненормальное программирование, роботы, Сетевые технологии, метки: Realtime, x86, роботы
Сначала небольшое историческое отступление о том, что такое четвертая промышленная революция, анонсированная в прошлом году.
- Появление промышленности. Первая промышленная революция произошла в начале XIX века и была связана с массовым переходом от использования мускульной силы к энергии парового двигателя. Ключевые технологии — паровой двигатель, фабрика. Появилась возможность массового производства, но его продукты стоили дорого.
- Массовое производство. Вторая революция случилась в начале 20 века, и ознаменовала начало дешевого массового производства. Ключевые технологии — конвейер и Тейлоризм. Продукты массового производства подешевели на порядок.
- Автоматизация. Третий переворот в промышленности произошел в 80-е годы. Станки с ЧПУ и роботы сделали современные фабрики практически безлюдными. (Аутсорсинг ручного труда в развивающиеся страны сгладил эту тенденцию.) Продукты массового производства подешевели еще на порядок (стало дешевле выкинуть, чем чинить).
- Децентрализация. Революция четыре точка ноль происходит сейчас. Ключевая технология — конвергенция промышленности и IT, 3д принтеры. Появляется возможность производства мелкой серии или уникального продукта по цене, приближающейся к стоимости того же самого в крупной серии.
Это немецкий взгляд на 4 четыре фазы развития промышленности. Существует еще и американский, который не разделяет третью и четвертую фазы.
Мне кажется, во вступлении я написал слишком много общих фраз и слишком мало технического хардкора. Исправлю это под катом, описав некоторые технические детали о промышленных сетях и продуктах Intel, связанных с ними (+ еще одна картинка с роботом).
Читать полностью »
Несколько подробностей об std::string
2013-04-10 в 21:01, admin, рубрики: c++, linux, ненормальное программирование, метки: c++Недавно заинтересовался реализацией std::string в libstdc++. Не в связи с принятием нового стандарта, а чтобы разобраться. Благо требования к строковму типу почти не изменились.
Основным средством для анализа кода несомненно является метод пристального вглядывания, но чтобы сузить область вглядывывания и сделать процедуру более захватывающей можно реализовать для строки идиому «трассер» подсмотренную в «C++ Templates: The Complete Guide». Трассировка позволяет выявлять подозрительные интересные операции над строками.
Как известно, std::string это псевдоним для std::basic_string<char>
и нам ничего не мешает определить std::basic_string<X>
. В X можно определить несколько статических счетчиков и итерировать их в конструкторе, деструкторе и остальных методах. Выполняя разные операции над такой строкой можно будет проследить эффективность применяемых алгоритмов в терминах количества операций.
Кроме того, в g++ для std::string a(«entrails»);
выражение
std::cout << reinterpret_cast<char*>(*((void**)(&a)));
выведет содержимое строки. Т.е. std::string — является, по сути, указателем на char.
Вобщем, эти и другие шокирующие поднобности под катом. Читать полностью »