Вот если брать только С++ времени компиляции — пишут Тьюринг полный. Ну ОК, это по вопросу вычислений. А по вопросу интеграции с системой — что можно а чего нельзя?
Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?
Здравствуйте, Shmj, Вы писали:
S>Вот если брать только С++ времени компиляции — пишут Тьюринг полный. Ну ОК, это по вопросу вычислений. А по вопросу интеграции с системой — что можно а чего нельзя?
S>Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, rg45, Вы писали:
R>>Коноплю тебе в компайл-тайм не нужно выращивать?
M>Судя по новостям с легалайзом на Украине — ему скоро захочется
Здравствуйте, 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", но это всё-таки не поддержка языка.
Здравствуйте, Shmj, Вы писали:
S>Вот если брать только С++ времени компиляции — пишут Тьюринг полный. Ну ОК, это по вопросу вычислений. А по вопросу интеграции с системой — что можно а чего нельзя?
S>Можно сделать assert — вывести сообщение и отменить компиляцию. А что-то еще можно? Файл создать — никак?
Перенаправь вывод компилятора в программу, интерпретирующую этот вывод и делай что угодно.
Не, ну серьёзно, 10/20 последних тем в форуме про Си++ и все — какие-то философские и алхимические изыскания джуна, который не умеет пользоваться гуглом. Реально загажен один из самых адекватных технических форумов.
Здравствуйте, SaZ, Вы писали:
SaZ>Не, ну серьёзно, 10/20 последних тем в форуме про Си++ и все — какие-то философские и алхимические изыскания джуна,
Есть же форум СВ — можно темы туда сносить, если не подходит по тематике. Вроде начальные вопросы не запрещены.
SaZ>который не умеет пользоваться гуглом. Реально загажен один из самых адекватных технических форумов.
Ну этот вопрос, наверное, да — можно сказать для поддержания разговора — можно было и в СВ спросить. Тут не было целью просто получить готовый ответ — а больше пофилософствовать на эту тему — тема вычислимости и доступа к системе, нужен ли доступ к системе коду времени компиляции.
Здравствуйте, Shmj, Вы писали:
S>Есть же форум СВ — можно темы туда сносить, если не подходит по тематике. Вроде начальные вопросы не запрещены.
Так если б ты просто вопросы задавал, без этих своих "философских" размышлений. У тебя же обычно вопросам предшествуют пласты какой-то дичи, после прочтения которой на вопросы отвечать уже не хочется.
Здравствуйте, Shmj, Вы писали:
S>Ну этот вопрос, наверное, да — можно сказать для поддержания разговора — можно было и в СВ спросить. Тут не было целью просто получить готовый ответ — а больше пофилософствовать на эту тему — тема вычислимости и доступа к системе, нужен ли доступ к системе коду времени компиляции.
Позадавать вопросы, ответы на которые тебе нафиг не нужны и пофилософствовать на темы, в которые тебе лень вникать
Здравствуйте, netch80, Вы писали:
S>> Файл создать — никак?
N>Зойчем?
Если расширить вопрос до более общего (доступ к системе и сокетам), то вот что может быть полезно:
1. Подключаться во время компиляции к СУБД и генерировать маппиги из мета-информации. Можно проверять статически заданные SQL-запросы на ошибки.
2. Парсить файлы на других языках и генерировать код исходя из этого. К примеру генерировать парсер из БНФ. Или код из IDL.
3. Запрашивать OpenAPI схему и генерировать код для неё..
По сути можно взять любой крупный проект и посмотреть, что там в скриптах компиляции происходит помимо, собственно, компиляции. Вот это всё можно засунуть в компилятор, раз уж мы его делаем полноценным программируемым окружением.
Здравствуйте, B0FEE664, Вы писали:
BFE>Может быть полезно для кодогенерации.
Для кодогенерации сущесвуют custom build steps, куда можно запихать что угодно и сгенерировать что угодно. Правда к С++ времени компиляции это имеет мало отношения. C++ времени компиляции — это седьмая фаза трансляции и единственно возможная кодогенерация в этот период — это генерация translation units, которую выполняет сам компилятор.
Здравствуйте, 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 затруднительно, а вот компилятор мог бы, но...
Здравствуйте, 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++ времени компиляции, которому посвящена данная тема? Давайте не будем заниматься подменой понятий.