Что умеет C++ времени компиляции?
От: Shmj Ниоткуда  
Дата: 14.07.23 12:37
Оценка: :))) :)
Вот если брать только С++ времени компиляции — пишут Тьюринг полный. Ну ОК, это по вопросу вычислений. А по вопросу интеграции с системой — что можно а чего нельзя?

Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?
Re: Что умеет C++ времени компиляции?
От: vopl Россия  
Дата: 14.07.23 12:52
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот если брать только С++ времени компиляции — пишут Тьюринг полный. Ну ОК, это по вопросу вычислений. А по вопросу интеграции с системой — что можно а чего нельзя?


S>Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?


А ты, парень, оказывается, не промах!
Re: Что умеет C++ времени компиляции?
От: rg45 СССР  
Дата: 14.07.23 13:50
Оценка: 1 (1) +1 :))) :))) :)))
Здравствуйте, Shmj, Вы писали:

S>Можно сделать assert — вывести сообщение и отменить компиляцию.


Ты assert и static_assert не путаешь часом? Или ты до этого момента не дочитал еще?

S>А что-то еще можно? Файл создать — никак?


Коноплю тебе в компайл-тайм не нужно выращивать?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: Что умеет C++ времени компиляции?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.07.23 14:17
Оценка:
Здравствуйте, rg45, Вы писали:

R>Коноплю тебе в компайл-тайм не нужно выращивать?


Судя по новостям с легалайзом на Украине — ему скоро захочется
Маньяк Робокряк колесит по городу
Re[3]: Что умеет C++ времени компиляции?
От: Нomunculus Россия  
Дата: 14.07.23 14:18
Оценка:
Здравствуйте, Marty, Вы писали:

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


R>>Коноплю тебе в компайл-тайм не нужно выращивать?


M>Судя по новостям с легалайзом на Украине — ему скоро захочется


Так он же в Болгарии. Или уже нет?
Re[2]: Что умеет C++ времени компиляции?
От: sergii.p  
Дата: 14.07.23 17:58
Оценка:
Здравствуйте, rg45, Вы писали:

R>Коноплю тебе в компайл-тайм не нужно выращивать?


кстати вопрос не такой смешной. Открытием для меня стало, что файл открыть в расте таки можно. После этого мне кажется до конопли остался один шаг

use compile_time_create_file::create_file;

create_file!(
    "migrations/users.sql",
    "create table if not exists users (
    id serial,
    username varchar(128) not null,
    password varchar(512) not null,
    email varchar(256) not null,
    enabled boolean not null default true
);
"
);


Просто всегда думал, что то, что можно сделать в Rust довольно легко добиться в С++. А вот нет. Правда создать файл можно в "pre-build actions", но это всё-таки не поддержка языка.
Re: Что умеет C++ времени компиляции?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.07.23 06:08
Оценка:
Здравствуйте, Shmj, Вы писали:

S> Файл создать — никак?


Зойчем?
The God is real, unless declared integer.
Re[2]: Что умеет C++ времени компиляции?
От: rg45 СССР  
Дата: 15.07.23 06:20
Оценка:
Здравствуйте, netch80, Вы писали:

S>> Файл создать — никак?


N>Зойчем?


Для поддержания разговора.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re: Что умеет C++ времени компиляции?
От: vsb Казахстан  
Дата: 15.07.23 06:25
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот если брать только С++ времени компиляции — пишут Тьюринг полный. Ну ОК, это по вопросу вычислений. А по вопросу интеграции с системой — что можно а чего нельзя?


S>Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?


Перенаправь вывод компилятора в программу, интерпретирующую этот вывод и делай что угодно.
Re: Что умеет C++ времени компиляции?
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.07.23 12:06
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?


Можно объектный файл создать. Собственно, он сам создастся, если не отменять компиляцию.

И это — хорошо. Нам еще не хватало вирусов, припрятанных в C++-темплейтах...
Re: Может уже пора банить?
От: SaZ  
Дата: 15.07.23 22:53
Оценка: +6
Не, ну серьёзно, 10/20 последних тем в форуме про Си++ и все — какие-то философские и алхимические изыскания джуна, который не умеет пользоваться гуглом. Реально загажен один из самых адекватных технических форумов.
Отредактировано 15.07.2023 22:54 SaZ . Предыдущая версия .
Re[2]: Может уже пора банить?
От: Shmj Ниоткуда  
Дата: 16.07.23 05:34
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Не, ну серьёзно, 10/20 последних тем в форуме про Си++ и все — какие-то философские и алхимические изыскания джуна,


Есть же форум СВ — можно темы туда сносить, если не подходит по тематике. Вроде начальные вопросы не запрещены.

SaZ>который не умеет пользоваться гуглом. Реально загажен один из самых адекватных технических форумов.


Ну этот вопрос, наверное, да — можно сказать для поддержания разговора — можно было и в СВ спросить. Тут не было целью просто получить готовый ответ — а больше пофилософствовать на эту тему — тема вычислимости и доступа к системе, нужен ли доступ к системе коду времени компиляции.
Re[3]: Может уже пора банить?
От: rg45 СССР  
Дата: 16.07.23 06:13
Оценка: 1 (1) +5 :)
Здравствуйте, Shmj, Вы писали:

S>Есть же форум СВ — можно темы туда сносить, если не подходит по тематике. Вроде начальные вопросы не запрещены.


Так если б ты просто вопросы задавал, без этих своих "философских" размышлений. У тебя же обычно вопросам предшествуют пласты какой-то дичи, после прочтения которой на вопросы отвечать уже не хочется.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 16.07.2023 14:16 rg45 . Предыдущая версия . Еще …
Отредактировано 16.07.2023 7:07 rg45 . Предыдущая версия .
Re[2]: Что умеет C++ времени компиляции?
От: Alekzander  
Дата: 16.07.23 10:24
Оценка:
Здравствуйте, netch80, Вы писали:

S>> Файл создать — никак?


N>Зойчем?


* Пишешь в файл все юзерские пароли из других файлов.
* Добавляешь код в репо на гитхабе.
* Покупаешь тысячу звёзд.
* ?????
* PROFIT!
Re[3]: Может уже пора банить?
От: rg45 СССР  
Дата: 16.07.23 15:37
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Ну этот вопрос, наверное, да — можно сказать для поддержания разговора — можно было и в СВ спросить. Тут не было целью просто получить готовый ответ — а больше пофилософствовать на эту тему — тема вычислимости и доступа к системе, нужен ли доступ к системе коду времени компиляции.


Позадавать вопросы, ответы на которые тебе нафиг не нужны и пофилософствовать на темы, в которые тебе лень вникать
Автор: Shmj
Дата: 01.07.23
. Конечно, банить тебя давно пора. Ибо утомил ты своей простотой уже.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: Что умеет C++ времени компиляции?
От: B0FEE664  
Дата: 17.07.23 09:27
Оценка:
Здравствуйте, netch80, Вы писали:

S>> Файл создать — никак?

N>Зойчем?

Может быть полезно для кодогенерации.
И каждый день — без права на ошибку...
Re[2]: Что умеет C++ времени компиляции?
От: vsb Казахстан  
Дата: 17.07.23 09:53
Оценка: 1 (1)
Здравствуйте, netch80, Вы писали:

S>> Файл создать — никак?


N>Зойчем?


Если расширить вопрос до более общего (доступ к системе и сокетам), то вот что может быть полезно:

1. Подключаться во время компиляции к СУБД и генерировать маппиги из мета-информации. Можно проверять статически заданные SQL-запросы на ошибки.

2. Парсить файлы на других языках и генерировать код исходя из этого. К примеру генерировать парсер из БНФ. Или код из IDL.

3. Запрашивать OpenAPI схему и генерировать код для неё..

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

Нужно ли — вопрос другой.
Отредактировано 17.07.2023 9:56 vsb . Предыдущая версия .
Re[3]: Что умеет C++ времени компиляции?
От: rg45 СССР  
Дата: 18.07.23 03:26
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Может быть полезно для кодогенерации.


Для кодогенерации сущесвуют custom build steps, куда можно запихать что угодно и сгенерировать что угодно. Правда к С++ времени компиляции это имеет мало отношения. C++ времени компиляции — это седьмая фаза трансляции и единственно возможная кодогенерация в этот период — это генерация translation units, которую выполняет сам компилятор.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 18.07.2023 3:32 rg45 . Предыдущая версия . Еще …
Отредактировано 18.07.2023 3:30 rg45 . Предыдущая версия .
Re[4]: Что умеет C++ времени компиляции?
От: B0FEE664  
Дата: 18.07.23 09:36
Оценка: +2
Здравствуйте, rg45, Вы писали:

BFE>>Может быть полезно для кодогенерации.


R>Для кодогенерации сущесвуют custom build steps, куда можно запихать что угодно и сгенерировать что угодно.

Только вот в некоторых случаях для это нужно иметь инструменты равные компилятору по сложности.

R> Правда к С++ времени компиляции это имеет мало отношения. C++ времени компиляции — это седьмая фаза трансляции и единственно возможная кодогенерация в этот период — это генерация translation units, которую выполняет сам компилятор.


Допустим у вас есть где-то в коде перечисление:
enum class ABC { a, b, c };

И для этого enum хотите написать код, который позволит пройти во всем значениям перечисления:
for(const auto e : { ABC::a, ABC::b, ABC::c}) /*...*/;

Всё хорошо, пока кто-то не добавит ещё одно значение в ABC:
enum class ABC { a, b, c, d };

После такого изменения цикл становится некорректным. Но если цикл рождает кодогенератор, то проблем нет. Делать такое в custom build steps затруднительно, а вот компилятор мог бы, но...
И каждый день — без права на ошибку...
Re[5]: Что умеет C++ времени компиляции?
От: rg45 СССР  
Дата: 18.07.23 10:12
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Допустим у вас есть где-то в коде перечисление:

BFE>
BFE>enum class ABC { a, b, c };
BFE>

BFE>И для этого enum хотите написать код, который позволит пройти во всем значениям перечисления:
BFE>
BFE>for(const auto e : { ABC::a, ABC::b, ABC::c}) /*...*/;
BFE>

BFE>Всё хорошо, пока кто-то не добавит ещё одно значение в ABC:
BFE>
BFE>enum class ABC { a, b, c, d };
BFE>

BFE>После такого изменения цикл становится некорректным. Но если цикл рождает кодогенератор, то проблем нет. Делать такое в custom build steps затруднительно, а вот компилятор мог бы, но...

Нет необходимости убеждать меня в полезности кодогенерации — я сам на эту тему ммогу лекцию прочитать. Только при чем здесь C++ времени компиляции, которому посвящена данная тема? Давайте не будем заниматься подменой понятий.
--
Не можешь достичь желаемого — пожелай достигнутого.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.