Обновить
0
Александр Данилов@DarthDAVread⁠-⁠only

Программист

Отправить сообщение

Пишем на С++ 23 под Windows 95, не вызывая подозрение у санитаров

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели25K

Что, если я скажу вам, что можно писать код на свежайшем C++23 с модулями, лямбдами и constexpr, а потом запустить его на Pentium с 16 МБ ОЗУ под Windows 95? Звучит как магия или безумие, но это работает.

В этой статье я покажу, как:

Настроить компиляцию в Visual Studio 2022 под 32-битный x86 без исключений и стандартной библиотеки. Создать минимальную реализацию std::string и аллокаторов для работы на чистом WinAPI. Собрать проект линкером 1998 года и запустить его на Windows 95. Сохранить единый код для современных и ретро-систем, используя возможности C++23.

Читать далее

Сколько энергии теряют NiMh аккумуляторы через месяц хранения

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели21K
Производители обещают сохранение до 80% заряда никель-металлогидридных аккумуляторов через два года хранения.

Я измерил остаточную ёмкость 32 аккумуляторов AA и AAA четырёх брендов после 30 дней хранения.


Читать дальше →

C++: сеанс спонтанной археологии и почему не стоит использовать вариативные функции в стиле C

Время на прочтение18 мин
Охват и читатели26K
Началось все, как водится, с ошибки. Я первый раз работал с Java Native Interface и делал в C++ части обертку над функцией, создающей Java объект. Эта функция — CallVoidMethod — вариативна, т.е. помимо указателя на среду JNI, указателя на тип создаваемого объекта и идентификатора вызываемого метода (в данном случае конструктора), она принимает произвольное число других аргументов. Что логично, т.к. эти другие аргументы передаются вызываемому методу на стороне Java, а методы могут быть разные, с разным числом аргументов любых типов.

Соответственно и свою обертку я тоже сделал вариативной. Для передачи произвольного числа аргументов в CallVoidMethod использовал va_list, потому что по-другому в данном случае никак. Да, так и отправил va_list в CallVoidMethod. И уронил JVM банальным segmentation fault.

За 2 часа я успел перепробовать несколько версий JVM, от 8-ой до 11-ой, потому что: во-первых это мой первый опыт с JVM, и в этом вопросе я StackOverflow доверял больше, чем себе, а во-вторых кто-то на StackOverflow посоветовал в таком случае использовать не OpenJDK, а OracleJDK, и не 8, а 10. И лишь потом я наконец заметил, что помимо вариативной CallVoidMethod есть CallVoidMethodV, которая произвольное число аргументов принимает через va_list.

Что мне больше всего не понравилось в этой истории, так это то, что я не сразу заметил разницу между эллипсисом (многоточием) и va_list. А заметив, не смог объяснить себе, в чем принципиальное отличие. Значит, надо разобраться и с эллипсисом, и с va_list, и (поскольку речь все-таки о C++) с вариативными шаблонами.
Читать дальше →

Коллекционирую лучшие C++ практики

Время на прочтение3 мин
Охват и читатели25K

Коллекционирую лучшие C++ практики


Что-то наши публикации всё больше о плохом, чем о хорошем. Здесь баг, тут код с запахом, это антипаттерн, вот так писать не надо. Помогите увидеть светлую сторону программирования на С++. Оставляйте комментарии.

Читать дальше →

Почему для открытия меню Windows читает один файл сто тысяч раз?

Время на прочтение4 мин
Охват и читатели160K

«Проводник тратит 700 мс на то, чтобы открыть контекстное меню панели задач. 75% этого времени он выполняет 114 801 операцию считывания из одного файла, средний объём считываемых данных 68 байт.

Мне стоит написать пост об этом, или достаточно саркастичного твита?»


За компьютером я работаю быстро, и поэтому меня раздражает, когда приходится ждать завершения операции, которая должна выполняться мгновенно. Постоянной помехой на моём сверхмощном домашнем ноутбуке стало медленное закрывание окон на панели задач. Я нажимаю правой клавишей на значок, жду, пока откроется меню, а затем выбираю «Закрыть окно». Самым медленным в этом процессе должны быть перемещения мыши, но выясняется, что наиболее долгим компонентом оказывается задержка перед появлением меню.

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

Этот пост написан как проверка скоростного блогинга. От момента нахождения проблемы и саркастичного твита о ней до публикации поста прошло примерно 90 минут.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Железногорск, Красноярский край, Россия
Дата рождения
Зарегистрирован
Активность