Рубрика «Программирование» - 79
Нельзя так просто взять и вычислить абсолютное значение
2021-08-16 в 5:31, admin, рубрики: double, floating point, java, абсолютное значение, математика, модуль, плавающая запятая, ПрограммированиеКажется, задача вычисления абсолютного значения (или модуля) числа совершенно тривиальна. Если число отрицательно, давайте сменим знак. Иначе оставим как есть. На Java это будет выглядеть примерно так:
public static double abs(double value) {
if (value < 0) {
return -value;
}
return value;
}
Вроде бы это слишком просто даже для вопроса на собеседовании на позицию джуна. Есть ли тут подводные камни?
Динамическая JIT компиляция С-С++ в LLVM с помощью Clang
2021-08-15 в 6:55, admin, рубрики: C, c++, clang, jit, JIT-компилятор, LLVM, llvm ir, Блог компании TIMEWEB, Компиляторы, Программирование
При создании компилятора для собственного языка программирования я сделал его как транспайлер в исходный код на С++, вот только реализация сильно подкачала. Сначала приходится генерировать динамическую библиотеку с помощью вызова gcc, который и сам по себе не очень быстрый, так еще его может и не быть на целевой машине, особенно на другой платформе (например Windows). Конечно, для первых экспериментов и такой реализации было достаточно, но сейчас, когда я начал готовить код компилятора к публикации, стало понятно, что текущий вариант с фоновым запуском gcc никуда не годится.
Из-за этого, я решил не откладывать перевод компилятора на использование LLVM, который планировался когда нибудь в будущем, а решил сделать это уже сейчас. И для этого нужно было научиться запускать компиляцию C++ кода с помощью библиотек Clang, но тут вылезло сразу несколько проблем.
Оказывается, интерфейс Clang меняется от версии к версии и все найденные мной примеры были старыми и не запускались в актуальной версии (Сlang 12), а стабильный C-style интерфейс предназначен для парсинга и анализа исходников и с помощью которого сгенерировать исполняемые файлы не получится*.
Дополнительная проблемой оказалось, что Clang не может анализировать файл из памяти, даже если для этого есть соответствующие классы. Из объяснений выходило, что в экземпляре компилятора проверяется, является ли ввод файлом**.
А теперь публикую результат своих изысканий в виде рабочего примера динамической компиляции С++ кода с последующей его загрузкой и выполнением скомпилированных функций. Исходники адаптированны под актуальную версию Clang 12. Пояснения к коду я перевел и дополнил перед публикацией, а ссылки на исходные материалы приведены в конце статьи.
- *) Кажется в 14 версии планируется реализовать C интерфейс для генерации исполняемых файлов.
- **) На самом деле, Clang может (или теперь может) компилировать файлы из оперативной памяти, поэтому в исходники я добавил и эту возможность.
Изоляция модели предметной области
2021-08-15 в 6:30, admin, рубрики: DDD, Анализ и проектирование систем, иммутабельность, ооп, Программирование, проектирование, Проектирование и рефакторинг, рефакторинг, Совершенный кодЭта статья является переводом материала «Domain model isolation».
Термин «изоляция модели предметной области» уже давно используется, но его значение может быть не таким очевидным, как многие думают. В этом посте автор оригинала попытается описать, что значит правильно изолировать модель предметной области и почему это важно.
Изоляция модели предметной области
Понятие изоляции модели предметной области очень похоже на то, что предлагает функциональная архитектураЧитать полностью »
Хватит клепать псевдопрограммистов, или «Горшочек — не в IT!»
2021-08-12 в 8:04, admin, рубрики: Блог компании ДомКлик, Карьера в IT-индустрии, онлайн-курсы, Программирование, Учебный процесс в ITВсе они были мертвы. Последний выстрел поставил жирную точку в этой истории. Я снял палец с курка — всё было кончено.
Макс Пэйн
Именно эта цитата из одной из культовых игр всплыла у меня в голове в тот момент, когда я сдал фичу заказчику и закрыл в Jira заключительную задачу в спринте, осознав, что заветное «ты прошёл испытательный срок» у меня в кармане. Для меня это было настоящее событие, сродни принятию в тайный орден, крещению, духовному посвящению.
JPEG, который можно посмотреть в блокноте
2021-08-11 в 13:24, admin, рубрики: ASCII, jpeg, open source, Алгоритмы, ненормальное программирование, обработка изображений, Программирование
Если открыть произвольный JPEG-файл в блокноте, то можно увидеть лишь хаотичный набор символов. Отсюда вопрос: возможно ли закодировать изображение так, чтобы его было можно просмотреть не только обычным способом, но и в обычном блокноте, в виде ASCII-графики. Ответ положительный, если использовать максимальное сжатие:
-
Grayscale (только оттенки серого).
Код-ревью без очередей
2021-08-10 в 13:09, admin, рубрики: java, review, Блог компании Wrike, Программирование, ревью, ревью кода, Тестирование веб-сервисов, управление разработкойПочему не все тестовые задания одинаково полезны: разбор одного фееричного провала
2021-08-10 в 7:11, admin, рубрики: .net, C#, typelevel, Карьера в IT-индустрии, никто не читает теги, Программирование, Совершенный код, тестовое заданиеВсем привет, это PsyHaSTe и сегодня я хотел бы рассказать о том, куда меня занесла нелегкая в процессе оптимизации и рефакторинга кода решения тестового задания из статьи товарища novar (кто пропустил — рекомендую ознакомиться). Какие проблемы были у этого решения? Почему все-таки человеку отказали в работе? Что можно с этим сделать? Ответы на эти и многие другие вопросы оказались слишком длинными для комментария и вылились в статью с подробным разбором, примерами и альтернативной реализацией задания.
Если вам интересно кто в здравом уме мог для выполнения поставленной задачи написать код сочетающий монады с goto, а также одновременно сократил объем кода и увеличил его производительность, то добро пожаловать под кат. И, конечно же, самое вкусное, связанное с оптимизациями на базе работы JIT — в конце. Итоговую версию решения тестового можно посмотреть на гитхабе по ссылке.
Профессионал ли ты по мнению Роберта “Боба” Мартина?
2021-08-10 в 7:01, admin, рубрики: Блог компании ГК ЛАНИТ, идеальный программист, Карьера в IT-индустрии, Ланит, Программирование, Профессиональная литература, Роберт Мартин, тест, управление разработкойВ карьере каждого программиста случаются взлеты и падения. Наверняка у каждого есть пара запоротых проектов, каких-то конфликтных ситуаций, о которых сожалеешь, миллион проваленных по срокам задач, десятки технических решений, которые противоречили потребностям заказчика, многочисленные ситуации, когда вы поддались давлению, может быть, не совсем корректные увольнения и т.д. и т.п. С некоторыми людьми работа доставляет истинное удовольствие, их можно назвать профессионалами. С другими коллегами все идет наперекосяк. Почему такое происходит? Что входит в понятие “профессионал”?
За свою более чем 42-летнюю карьеру Читать полностью »