Re[20]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 30.11.24 22:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Критерий ГДЕ и КОГДА исполняется код — очень важен.


Давай попробуем идти от частного к общему. Рассмотрим такой несложный пример:

#include <iostream>

int foo(int x) { return x * 10; }
int bar(int x) { return x * 100; }

int main()
{
   int value = foo(3) + bar(5);
   std::cout << value << std::endl;
}


Согласно твоим критериям, на каком языке написана данная программа?

  Спойлер
В зависимости от опций компиляции, значение value может вычисляться как в компайл- так и в ран-тайме. И согласно твоим критериям, мы не можем определить, на каком языке написана программа, пока не изучим сгенерированный код, так получается?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 30.11.2024 22:23 rg45 . Предыдущая версия . Еще …
Отредактировано 30.11.2024 22:21 rg45 . Предыдущая версия .
Отредактировано 30.11.2024 22:20 rg45 . Предыдущая версия .
Отредактировано 30.11.2024 22:19 rg45 . Предыдущая версия .
Отредактировано 30.11.2024 22:18 rg45 . Предыдущая версия .
Отредактировано 30.11.2024 22:13 rg45 . Предыдущая версия .
Отредактировано 30.11.2024 22:13 rg45 . Предыдущая версия .
Re[2]: Вы пользуетесь constexpr?
От: cppguard  
Дата: 30.11.24 23:16
Оценка:
Здравствуйте, vopl, Вы писали:

V>без капитализации нарабатываемой кодовой базы

Что такое "капитализация нарабатываемой базы"? Получение выгоды раз за разом из единожды написанного кода?


V>Как то раз пришлось озаботиться собственным автоматом для разводки событий, аля boost::signals, но со своим блекджеком. И вот чтобы достигать zero-cost в максимальном количестве вариантов использования, применяется вся эте чертыхня с constexpr/шаблонами и прочей метапрограммирование-шнягой. То что получилось в итоге я бы оценил как "охренительно великолепно", удалось добиться быстродействия, сравнимого с наивными виртуальными вызовами с одной стороны и занчительного удобства для прикладного использования с другой. Тут можно посмотреть код


Выглядит сложно, но можно в двух словах о том, что там действительно происходит? Почему, скажем, на Java это должно работать медленее (без учёта времени на JIT и сборку мусора)?
Re[3]: Вы пользуетесь constexpr?
От: vopl Россия  
Дата: 01.12.24 08:14
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Здравствуйте, vopl, Вы писали:


V>>без капитализации нарабатываемой кодовой базы

C>Что такое "капитализация нарабатываемой базы"? Получение выгоды раз за разом из единожды написанного кода?

Да. К такому капитальному коду практически всегда относятся инструменты, которые сами по себе являются средствами производства — библиотеки/фреймворки, подобное. Почему в таком коде находит применение сабж — потому что пользователем данного кода является сам инженер, и его варианты использования лежат внутри инструмента а не снаружи, вот ему и требуются всякие "чтоб было посчитано в компайлтайме", "чтоб функцию с таким типом аргумента можно было вызвать а нестаким нет", "чтоб не писать ручками 100500 бойлерплейта а оно само чтобы сгенерировалось"...


V>>Как то раз пришлось озаботиться собственным автоматом для разводки событий, аля boost::signals, но со своим блекджеком. И вот чтобы достигать zero-cost в максимальном количестве вариантов использования, применяется вся эте чертыхня с constexpr/шаблонами и прочей метапрограммирование-шнягой. То что получилось в итоге я бы оценил как "охренительно великолепно", удалось добиться быстродействия, сравнимого с наивными виртуальными вызовами с одной стороны и занчительного удобства для прикладного использования с другой. Тут можно посмотреть код


C>Выглядит сложно, но можно в двух словах о том, что там действительно происходит? Почему, скажем, на Java это должно работать медленее (без учёта времени на JIT и сборку мусора)?


В двух словах — имеет место некая система, сложенная из множества подсистем (то есть сложная), полностью выполняющая свое предназначение (функционально полная) с хорошим уровнем быстродействия/удобства использования (эффективная), при этом она не разваливается под тяжестью собственной сложности (органичная), и как следствие, вполне устойчива при использовании/доработке (робастная в аспекте жизненной динамики). Всех этих показателей вряд ли можно достичь без использования метапрограмминга (constexpr, шаблоны, ...)

На Яве это будет работать не менее замечательно, при условии что в стандартной бибилиотеке Явы найдутся средства чтобы сделать это именно так. Если задача прецедентная — то такие средства с большой вероятностю там таки найдутся, и все будет хорошо. Но если задача не вполне прецедентная (со своим блекджеком), то таких средств в Яве не найдется, придется лепить костылями из доступных средств, вследствие чего быстродействие/удобство и прочие тактико-технические характеристики просядут. Собственно, в этом и есть сила C++, в нем ты можешь сам себе построить "средства производства" чтобы потом на их основе строить прикладуху как второй уровень. И вся система будет органична/эффективна. В Яве же средства производства поставляются центральным вендором, что в некотором смысле ограничивает разработчика.
Отредактировано 01.12.2024 18:06 vopl . Предыдущая версия .
Re[21]: Вы пользуетесь constexpr?
От: Shmj Ниоткуда  
Дата: 01.12.24 12:57
Оценка:
Здравствуйте, rg45, Вы писали:

R>Согласно твоим критериям, на каком языке написана данная программа?


Компил-тайм язык отличается тем что:

1. Не позволяет обращаться к изменяемым глобальным переменным (включая constinit) а так же не позволяет иметь static-переменные внутри функции, т.е. как бы запрет на состояние между вызовами функций. Сюда же запрет на const_cast.
2. Не позволяет динамически выделять память, использовать указатель на базовый объект, полноценно работать с полиморфизмом и вирт. функциями. Запрет на dynamic_cast.
3. Почему то запрет на reinterpret_cast.
4. Запрещены вызовы системных функций — результат вычисления можно поместить либо в constexpr/constinit переменную либо использовать для static_assert. Все — больше никакого внешнего воздействия с миром.

Вроде мелочи, но это сокращает возможности языка до неузнаваемости. Даже если вы попытаетесь сделать банальный счетчик вызовов функции (а оказывается это можно сделать
Автор: rg45
Дата: 27.11 18:42
) — код получится трехэтажно сложным.

В итоге из-за этой разницы получаем совсем другой язык.
Отредактировано 01.12.2024 12:58 Shmj . Предыдущая версия .
Re[22]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 01.12.24 12:58
Оценка:
Здравствуйте, Shmj, Вы писали:

R>>Согласно твоим критериям, на каком языке написана данная программа?


S>Компил-тайм язык отличается тем что:


Не нужно, читать лекции. Просто ответь на вопрос
Автор: rg45
Дата: 01.12 01:07
.
--
Справедливость выше закона. А человечность выше справедливости.
Re[23]: Вы пользуетесь constexpr?
От: Shmj Ниоткуда  
Дата: 01.12.24 13:05
Оценка:
Здравствуйте, rg45, Вы писали:

R>Не нужно, читать лекции. Просто ответь на вопрос
Автор: rg45
Дата: 01.12 01:07
.


Поскольку:

1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции.
2. Нет динамического выделения памяти.
3. Нет reinterpret_cast.
4. Нет вызова системных функций.

— то на компил-тайм языке.
Re[24]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 01.12.24 13:12
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Поскольку:


S>1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции.

S>2. Нет динамического выделения памяти.
S>3. Нет reinterpret_cast.
S>4. Нет вызова системных функций.

S>- то на компил-тайм языке.


Подожди, давай сначала актуализируем критерии. До этого критерий был такой: http://rsdn.org/forum/cpp/8860037.1
Автор: Shmj
Дата: 01.12 00:13
. Я правильно понимаю, что тот критерий больше не актуален?
--
Справедливость выше закона. А человечность выше справедливости.
Re[25]: Вы пользуетесь constexpr?
От: Shmj Ниоткуда  
Дата: 01.12.24 13:18
Оценка:
Здравствуйте, rg45, Вы писали:

R>Подожди, давай сначала актуализируем критерии. До этого критерий был такой: http://rsdn.org/forum/cpp/8860037.1
Автор: Shmj
Дата: 01.12 00:13
. Я правильно понимаю, что тот критерий больше не актуален?


Когда критерии соблюдены — компилятор оставляет за собой право вызывать код и в компил-тайм.
Re[26]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 01.12.24 13:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Когда критерии соблюдены — компилятор оставляет за собой право вызывать код и в компил-тайм.


Да ты не спеши за компилятор говорить. Ты актуализируй сперва все свои критерии. А то у тебя получается, что ты правой пишешь, левой зачёркиваешь.
--
Справедливость выше закона. А человечность выше справедливости.
Re[27]: Вы пользуетесь constexpr?
От: Shmj Ниоткуда  
Дата: 01.12.24 13:44
Оценка:
Здравствуйте, rg45, Вы писали:

R>Да ты не спеши за компилятор говорить. Ты актуализируй сперва все свои критерии. А то у тебя получается, что ты правой пишешь, левой зачёркиваешь.


Оно связано.

Для компил-тайм сильно ограничили язык, фактически до неузнаваемости. Хотя в теории могли бы и снять ограничения, наверное.

Даже написать тот же счетчик для компил-тайма — это отдельный вид мастерства.
Re[28]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 01.12.24 13:45
Оценка:
Здравствуйте, Shmj, Вы писали:


S>Оно связано.

S>Для компил-тайм сильно ограничили язык, фактически до неузнаваемости. Хотя в теории могли бы и снять ограничения, наверное.
S>Даже написать тот же счетчик для компил-тайма — это отдельный вид мастерства.

Ну вот, опять какие-то общие слова и никакой конкретики. Я от тебя устал, если честно.
--
Справедливость выше закона. А человечность выше справедливости.
Re[28]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 01.12.24 13:49
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Оно связано.

S>Для компил-тайм сильно ограничили язык, фактически до неузнаваемости. Хотя в теории могли бы и снять ограничения, наверное.
S>Даже написать тот же счетчик для компил-тайма — это отдельный вид мастерства.

Я тебе, правда, очень признателен за то, что ты вписался за меня, когда меня отправили в бан. В то же время, у меня к тебе огромная просьба: не заваливай этот форум своими философскими "концепциями". Пускай технический форум остается чисто техническим. Ладно?
--
Справедливость выше закона. А человечность выше справедливости.
Re[29]: Вы пользуетесь constexpr?
От: Shmj Ниоткуда  
Дата: 03.12.24 01:36
Оценка:
Здравствуйте, rg45, Вы писали:

R>Я тебе, правда, очень признателен за то, что ты вписался за меня, когда меня отправили в бан. В то же время, у меня к тебе огромная просьба: не заваливай этот форум своими философскими "концепциями". Пускай технический форум остается чисто техническим. Ладно?


Так эта тема то не мной создана и изначально холиварная. Вопроса технического никакого нет. Чел. просто не согласен с философией — максимум вопрос тяняет на Философию программирования. Ну раз не удалили — то почему бы не обсудить?

И второе. Форумное членство так сказать — не особо важно. Важно другое — как в мелком люди поступают — так поступят и в крупном. Т.е. если у вас в жизни что-то плохое случится, то поддержат только такие люди как я. Кто-то проигнорит а кто-то еще и камень кинет.
Re: Вы пользуетесь constexpr?
От: Великий Реверс google
Дата: 03.12.24 02:02
Оценка:
под свои нужды переделал один известный, но мало использоваемый regex либ
что бы конструирование стейт машины было на этапе компайл тайм
собственно можно поискать по форуму
я просил апать баг репорты для clang что бы пофиксили consteval

в чем суть

regex r("(.*?)(end)+(.*?)$"); //конструирование стейт машины
std::string input;
r.match(input);
std::string a = r[1];
std::string b = r[2];


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


надеяться на constexpr не приходиться
лезть потом в бинарь и проверять
а сбилдилось ли оно в бинарный массив состояний или осталось строкой, слишком накладно
а consteval это делает наверняка

вообщем то сейчас многие начнут возражать
агааааа есть же regex компаил тайм от Даши Гуськовой(Hana Dusikova)
ну он мне не зашел
Re[2]: Вы пользуетесь constexpr?
От: cppguard  
Дата: 03.12.24 09:42
Оценка:
Здравствуйте, Великий Реверс, Вы писали:

ВР>под свои нужды переделал один известный, но мало использоваемый regex либ


Чем это лучше run-time компиляции, если не считать экономию в несколько миллисекунд?
Re[30]: Вы пользуетесь constexpr?
От: rg45 СССР  
Дата: 03.12.24 09:57
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Так эта тема то не мной создана и изначально холиварная. Вопроса технического никакого нет. Чел. просто не согласен с философией — максимум вопрос тяняет на Философию программирования. Ну раз не удалили — то почему бы не обсудить?


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

S>Важно другое — как в мелком люди поступают — так поступят и в крупном.


В этом я не раз убеждался.
--
Справедливость выше закона. А человечность выше справедливости.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.