Re[3]: Что умеет C++ времени компиляции?
От: rg45 СССР  
Дата: 21.07.23 21:47
Оценка:
Здравствуйте, 3V, Вы писали:

3V>ей вроде свет нужен (УФ), а не тепло — так что мимо


"Вроде"? А "мимо" — тоже "вроде", или инфа 100%?

Еще один бродячий клоун.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 21.07.2023 22:09 rg45 . Предыдущая версия . Еще …
Отредактировано 21.07.2023 22:08 rg45 . Предыдущая версия .
Отредактировано 21.07.2023 22:05 rg45 . Предыдущая версия .
Отредактировано 21.07.2023 21:51 rg45 . Предыдущая версия .
Re[12]: Что умеет C++ времени компиляции?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 22.07.23 05:25
Оценка:
Здравствуйте, so5team, Вы писали:

S>>>Т.е. вы настолько оптимистичны, что считаете, что этого еще не случилось?


N>>Ну вот call/cc, например, в него не успели встроить.


S>А что, call/cc -- это необходимое условие для того, чтобы язык считался монстром?


Если вопрос ставится в стиле

BFE>>Считаю, что в конечном итоге из C++ должен получится монстр включающий все возможные техники и парадигмы программирования.


то да, монстр, в котором _все_ техники и парадигмы — без call/cc недостаточен.

С другой стороны, если не ограничиваться им, то это не необходимое, а достаточное условие — по крайней мере для тех 95-99% коллег, что на любую рекурсию начинают смотреть как на признак присутствия самого Люцифера.

S>Одной россыпи UB в языке (как унаследованной из C, так и собственной) уже вполне достаточно. А если добавить сюда еще и список способов инициализации локальных переменных...


Подозреваю, что кое-кто в комитете или рядом с ним думает, что этого недостаточно.
The God is real, unless declared integer.
Re[10]: Что умеет C++ времени компиляции?
От: Alekzander  
Дата: 23.07.23 09:33
Оценка:
Здравствуйте, FR, Вы писали:

FR>Из относительно массовых только rust наверно, там есть полноценные процедурные макросы, правда гораздо менее удобные чем в немерле, так как из коробки работают только с токенами, но есть библиотеки который их поднимают до уровня квазицитирования. С файловой системой, и даже с сетью, эти макросы отлично могут работать Разработчик показал, как получить SSH-ключ с помощью compile-time макроса в Rust в VSCode просто при открытии приложения


Большое спасибо за ответ. А можно я попрошу прямо здесь показать, на что они годятся? На двух актуальных примерах, обсуждавшихся на этих форумах в последнее время.

Первый это is in set
Автор: Alekzander
Дата: 17.06.23
. Как записать вот такой код:

void adns__querysend_tcp(adns_query qu, struct timeval now) {
  ...
  if (!(errno == EAGAIN || EWOULDBLOCK || // Sic!
        errno == EINTR || errno == ENOSPC ||
        errno == ENOBUFS || errno == ENOMEM)) {
  ...
}


Вот в таком виде, не потеряв в производительности?

if (!(errno is in (
                       EAGAIN,
                       EWOULDBLOCK,
                       EINTR,
                       ENOSPC,
                       ENOBUFS,
                       ENOMEM
                   ))
{
...
}


(Я понимаю, что дизайнер языков из меня так себе и синтаксис "is in", возможно, не лучшее решение, и если это ещё выразительнее можно записать, то я не против ).

Второй пример
Автор: netch80
Дата: 16.07.23
(нужен тип, который бы не давал выйти за диапазоны уже в момент присваивания):

template <int _T_min, int _T_max>
RangedInteger& operator=(int new_value) {
  if (new_value < _T_min || new_value > _T_max) { throw range_error(); }
  mValue = new_value;
  return *this;
}


На самом-то деле, шаблон тут довольно уместен. Может быть даже, это самое выразительное решение при объявлении переменной. Но, допустим в духе идеи того обсуждения, нам захотелось изобразить псевдовстроенный тип с ограничениями и каким-нибудь выразительным синтаксисом наподобие (более удачные вариации приветствуются):

a: int 1..100


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

A>>А если этот ЯП в итоге транспилируется в C++ (как сами плюсы изначально транспилировались в си), то я даже знаю, где применить


FR>Тут разве что nim, там есть макросы близкие к процедурным и шаблоны уровня C++, еще возможно haxe но не помню как там с макросами. Оба умеют транслироваться в си, а nim и в с++.


Ещё раз спасибо, читаю документацию.
Отредактировано 23.07.2023 9:34 Alekzander . Предыдущая версия .
Re[11]: Что умеет C++ времени компиляции?
От: FR  
Дата: 24.07.23 08:02
Оценка: 3 (1)
Здравствуйте, Alekzander, Вы писали:

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


A>Большое спасибо за ответ. А можно я попрошу прямо здесь показать, на что они годятся? На двух актуальных примерах, обсуждавшихся на этих форумах в последнее время.


Сейчас с примерами разбираться времени нет, может позже посмотрю.
Но сразу скажу что rust далеко не nemerle или lisp и произвольно менять синтаксис везде не дает, весь измененный синтаксис должен быть внутри макроса, и токены все должны быть допустимыми в rust, но примерно такое:
html! {
    <div>
        <div data-key="abc"></div>
        <div class="parent">
            <span class="child" value="anything"></span>
            <label for="first-name">{ "First Name" }</label>
            <input type="text" id="first-name" value="placeholder" />
            <input type="checkbox" checked=true />
            <textarea value="write a story" />
            <select name="status">
                <option selected=true disabled=false value="">{ "Selected" }</option>
                <option selected=false disabled=true value="">{ "Unselected" }</option>
            </select>
        </div>
    </div>
};

вполне при этом позволяет. Подробнее про пример выше можно тут посмотреть.
Твои примеры вполне реализуемы на процедурных макросах, но с теми ограничениями что я описал кажутся не очень полезными. Ну и второй пример наверно проще и удобнее будет реализовать через new type idiom.
Re[5]: Что умеет C++ времени компиляции?
От: vdimas Россия  
Дата: 04.08.23 16:36
Оценка:
Здравствуйте, B0FEE664, Вы писали:

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

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

Так и есть.
Можно получить модель кода с помощью clang — у него есть режим дампа AST.

https://opensource.apple.com/source/clang/clang-425.0.24/src/tools/clang/docs/IntroductionToTheClangAST.html

А так же есть тулзины (если поискать) по чтению этого AST и манипулированию им.


BFE>иначе нам придётся парсить код ещё раз и не факт, что код будет рапарсен одинаково


Тоже верно.
Если пользоваться cmake, то есть возможность взять именно те же аргументы командной строки и добавить нужный аргумент -ast-dump.

Насчёт ситуации с другими целевыми компиляторами — clang может выступать фронендом для msvc и gcc, что покрывает щепетильный вопрос однозначности парсинга для кодогенерации и для целевого образа.
Отредактировано 04.08.2023 16:37 vdimas . Предыдущая версия .
Re: Что умеет C++ времени компиляции?
От: CEMb  
Дата: 21.09.23 14:33
Оценка: :)))
Здравствуйте, Shmj, Вы писали:

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


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


- Что делаешь?
— Пишу игру на шаблонах.
— И как?
— Победил во время компиляции.

Re[8]: Что умеет C++ времени компиляции?
От: zx zpectrum  
Дата: 23.09.23 03:18
Оценка: 12 (1)
R>Ты имеешь в виду ран-тайм кодогенерацию, наподобие дотнетовых Emit и CodeDOM, или же генерацию исходного текста программ?
А вот в nim, например, и не то, и не другое. И не эмитирование, и не генерация текста. А генерация AST. Коммон-лисповская идеология, так полюбившаяся в свое время Полу Грему, да натянутая на нативно компилируемый язык — это ж пЭстня же ж Да и вообще, как говаривал один мудрый Лиспер, "язык, не позволяющий размышлять в терминах AST больше мешает, чем помогает". Если б ещё сам nim в целом не был глючноват (при переходе от версии к версии порой происходит полный трындец), то цены б ему не было.
Re: Что умеет C++ времени компиляции?
От: zx zpectrum  
Дата: 23.09.23 03:31
Оценка:
А может тебе сразу и ключ от квартиры, где деньги лежат? ))
Re[2]: Что умеет C++ времени компиляции?
От: zx zpectrum  
Дата: 23.09.23 03:33
Оценка:
R>Коноплю тебе в компайл-тайм не нужно выращивать?
Тссс, не подсказывай. А то кто-нибудь из прочитавших упорется, и действительно такое сделает. И если раньше программисты пинали балду во время компиляции, играя в пинг-понг, то теперь будут ждать урожая
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.