Обновить
66
Андрей@MegaHard

программист

48
Подписчики
Отправить сообщение

Можете тогда предложить свой вариант того, как это могло бы выглядеть?

Потому и написал “может”, что это очевидно на стороне пользователя, но не компилятора. Можно предположить такое: если в выражении участвуют POD-типы, то можно посчитать результат и вписать в память. Если используются указатели на POD, то можно так же посчитать результат, выделить память и заполнить.

достаточно лишь constexpr приписать ко всему

О том и речь, чтобы не приписывать.

Boost уже стал второй стандартной библиотекой

Забиваем в поисковик “как прочитать json в python” и видим предложение использовать стандартный модуль json. Потом там же пробуем “как прочитать json в C++”, и там не видно boost. А ещё могу по второму разу спросить, как в boost называется dll, которая читает json? И да, он тяжёлый, и это проблема. В питоне хоть на маке, хоть на винде импортируешь нужную либу через pip и в продакшен. То есть вопрос не в возможности как таковой, а в пользовательском опыте. C++ просто неудобно пользоваться.

А что Вы предлагаете делать с библиотеками вроде Boost.Hana, которые целиком на шаблонах сделаны?

Предлагаю ничего не делать. Нам же не обязательно что-то сделать со всеми библиотеками в мире, достаточно добавить в SAL самые часто используемые вещи. Ну и собственно, шаблоны и шаблоны, вроде как никто не говорил, что в SAL не должно быть инклюдов. С-шники не будут плакать, если не смогут воспользоваться именно этим модулем, кому надо, тот и импортирует. Да и в принципе никто не мешает сделать отдельно папку с C-инклюдами, отдельно с C++. Вот там можно обёртки из классов написать и исключения кидать.

Так и не ясно, чем это было бы лучше подхода с constexpr сейчас

Это лучше прозрачностью написанного. Насчёт порядка выполнения блоков - тут да, надо подумать. Может обязать пользователя вручную это гарантировать, вызывая функции инициализации вручную.

Реализовывать Вы это как собрались? Предположим, что в таком блоке для “выражений” будет добавлено что-то, что закроет функцию и начнёт новую.

Это уже что-то из раздела ifdef вокруг имён функций пошло, наверное не стоит давать пользователям выходить за границы блока.

Можно было бы изучить вопрос получше, а не сразу выкидывать про это на Хабр?

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

Давайте пример кода. Отслеживать по упоминанию объекта в коде функции. goto уже не используют, код нынче не столь похож на лапшу. Найти последний блок, в котором было упоминание объекта и можно удалять.

godbolt.org говорит, что не может разобрать.

Найти бы ещё его описание. И внутри него можно пройтись по списку типов без шаблонной магии?

Убедиться, что объект не используется после передачи в функцию, требует прохода, который обычно делает оптимизатор.

Вот и пусть делает.

Также нет гарантии, что хоть и объект дальше не используется, его можно сразу же переместить и уничтожить.

И именно поэтому предлагаю добавить тег для объектов или классов, которым это надо. Я же говорю, приведите конкретные примеры, причём желательно классов не из стандартной библиотеки. Это не так просто.

есть такие проблемы как быстрое реагирование на уязвимости

Так комитету и не надо над каждой либой сидеть. Я же потому и не в пространство имён std, а в sal их предлагаю. Достаточно обговорить формат и общие правила построения либ, а всё остальное сделать как в pip: не нравится либа - идёшь и накатываешь новую версию.

Про constexpr уже написали, но вот в этом коде может быть не совсем очевидно как сделать, а сделать это можно с помощью IILE

Ну вот, начинается брейнфак. И, главное, зачем? Разве мой вариант менее понятный или менее универсальный? Его даже в C можно использовать.

Да да, и не только буст, но и ещё куча библиотек, кто во что горазд. А потом всё это место на диске и в кэше процессора занимает. И это не отменяет тезиса о том, что надо шарить по интернету в поисках, качать огромные либы типа буста, в которых "всё есть", подключать различными способами и т.д.

Как называется dll из boost для работы с json? То-то и оно.

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

Наверное то, что при выходе из функции он ещё раз вызовется. А ещё то, что это дополнительный код, который надо писать вручную.

Азот с аргоном в хозмаге не продаются и хранить их сложнее, а ещё вроде как азот реагирует с алюминием.

Каолиновая вата, надо же, и такое бывает. Его в принципе сложно расплавить, а тут ещё и нити.

Если в вакуумную камеру немного бензина капнуть, он же вытеснит воздух при выкачивании. Можно ли тогда алюминий на поверхности осаждать, не боясь окисления?

В ESP32 для объявления аппаратных структур вместо каста константы в volatile указатель сделали объявление внутри скрипта линковщика, получилось более мутно.

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

Можно ли Wine установить на Windows XP, чтобы там новые программы работали?

Насчёт того что загрузить адрес константы - это то же что и загрузить саму константу, тут понятно, exe'шники нынче бывают большие. Но это верно, когда константа лежит в другом сегменте, а если её положить в той же функции, тогда смещение от pc будет маленьким.

Не очень понятно, откуда берётся адрес 1200(zero), это данные расположены по 0 адресу?

Как вариант, после оптимизации кода смещение до блока .data превысило 11 бит, поэтому пришлось встраивать данные в команды.

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

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

Без тестов не узнать, кто быстрее. Только я не пойму, почему у вас в -O2 обращения к a5 и a0 не перемешаны, чтобы суперскалярность сработала. Наверное lui + addi как-то склеиваются.

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

А, ну да, pc же не доступен напрямую. Тогда хотя бы вторую и третью строку можно объединить: ld t1,26(t0), и если надо несколько констант загрузить, там уже по 1 инструкции на константу.

Современный веб - это динамичные веб-приложения, адаптивные интерфейсы и интерактивные элементы.

А ещё куча тормозов при загрузке, скачущий туда-сюда текст при попытке промотать, маленький кусочек окна, оставшийся для основного контента, не работающий Ctrl+V (да как вы этого добились!) и т.д.

Да, из памяти намного быстрее, примерно так:

start:
	ld t0, pc + (value-start)
	ret
value:
	.dword 0x1B2B3B4B5B6B7B8B
  1. Если таблица квантования хранится в заголовке файла, значит ли это, что её можно сделать логарифмической, чтобы на тёмных изображениях не исчезали детали?

  2. Почему бы не залить таблицу косинусов через consteval?

Информация

В рейтинге
Не участвует
Откуда
Ростов-на-Дону, Ростовская обл., Россия
Зарегистрирован
Активность

Специализация

Разработчик приложений
C++
Git
Python
Visual Studio
Xcode
OpenGL
Qt
Cmake