LINUX.ORG.RU

Комитет не может остановиться..

 , ,


1

4

Привет, ЛОР!

Я просто оставлю это здесь: https://isocpp.org/files/papers/P2996R4.html

Для Ъ: в C++26 будет добавлена поддержка статической рефлексии. Теперь C++ будет компилироваться ЕЩЁ ДОЛЬШЕ.

Ответ на: комментарий от peacelove

почему же, вполне себе принцип.

вот хочешь ты факториал времени конпеляции написать.

значит, тебе как-то нужно отсечь хвост рекурсии и её тело.

осталось придумать, как состыковать хвост и тело.

например, хвост зацепить на sizeof(известная::константа)

например. в исходниках GOODS есть такое:

#if ENABLE_CONVERTIBLE_ASSIGNMENTS
template< class Y, class T > struct sp_convertible
{
    typedef char (&yes) [1];
    typedef char (&no)  [2];

    static yes f( T* );
    static no  f( ... );

    enum _vt { value = sizeof( (f)( static_cast<Y*>(0) ) ) == sizeof(yes) };
};

struct sp_empty
{
};

template< bool > struct sp_enable_if_convertible_impl;

template<> struct sp_enable_if_convertible_impl<true>
{
    typedef sp_empty type;
};

template<> struct sp_enable_if_convertible_impl<false>
{
};

template< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value >
{
};
#endif

дальше сам догадаешься, как эту конструкцию использовать.

сюда же sizeof(константа) или enum константа внутри класса для отсечения хвоста и тела рекурсии.

anonymous
()
Ответ на: комментарий от anonymous

они наверное хотели по аналогии со SFINAE сделать UBINAE.

По аналогии? UB в C появилось задолго до шаблонов в C++.

это декларативное в императивном.

Это говно в залупе. Например, помимо традиционных извращений с указателями и числами, в C считаются UB такие штуки как:

  • Отсутствие переноса строки в самом конце файла;
  • Символы ’ или ", для которых нет пары;
  • Два обозначения (identifier) отличающиеся только не имеющими значения символами;
  • пустые struct или union (т.е. без членов внутри, типа struct s {} );

И так далее, и тому подобное. Это всё undefined behaviour, да, но почему-то в этих случаях компилятор кидает ошибку (ну либо болт забивает, если нет переноса строки). Пусть мне тут великий @zx_gamer объяснит, зачем для оптимизации кода обязательно нужен перенос строки в конце файла.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

для чего может пригодиться «ошибка подстановки не ошибка» – а перебор другой ветки — ещё можно додуматься.

что-то вроде Icon-овской goal oriented execution подручными средствами.

ну или факториал времени конпеляции написать. ошибка подстановки этого это продукция подстановки другого (а не этого). а не ошибка вообще.

сложнее додуматься для чего может понадобиться «UB не ошибка» – а перебор ХЗ чего.

я вот думал-думал – и так и не придумал.

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

нормальные люди конечно, нормальный стандарт языка сразу пишут. без всяких там дырок в стандарте и «неопределённых поведений».

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

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

чтобы понять как на этот раз это UB интерпретировать.

иначе не по феншую как-то получается.

никакой тебе книги перемен с гексаграммами – если никакого UB нет прямо в самом стандарте – и интерпретировать нечего.

настоящий даос не боится трудностей. не важен результат. важен только путь.

я бы сказал что у этого пути нет сердца. его дао кривое да и дэ какое-то с душком.

но это ж не по феншую получится.

anonymous
()
Ответ на: комментарий от anonymous

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

поддерживает только HTML 3.2. больше ничего не поддерживает.

у автора на сайтах тех времён ещё статья была про деревья решений. и конечные автоматы для парсинга на форте.

исходники наглядные и понятные.

жалко, что допилить до HTML 4 который не XHTML и HTML5 со всеми Quirks – похоже слишком сложная задача.

а так да, вот занятные исходники. браузер на форте.

при этом он реально работает. можешь погуглить в вебархиве примерно 1998-2008 годов.

хотя вряд ли найдёшь.

для этого нужно гугл-фу прокачивать.

чтобы интересные исходники сами тебя нашли.

anonymous
()
Ответ на: комментарий от hateyoufeel

Незачем. Это было сделано для упрощения компилятора. Тогда компиляторы даже код с очевидными ошибками жевали. Поэтому появились линтеры.

пустые struct или union (т.е. без членов внутри, типа struct s {} );

Ну а это очевидно: оператор sizeof что должен подставить? Ноль? Ну так в этом нет никакого смысла. Только лишние сложности с отладкой создавать.

В Си++ кстати, вроде sizeof пустой структуры будет 1. Но там пустые структуры хотя бы имеют смысл.

Современные компиляторы Си, конечно же, кидают ошибки (и даже забивают на некоторые атавизмы вроде новой строки в конце файла, если нет флага -pedantic)

zx_gamer ★★★
()
Ответ на: комментарий от zx_gamer

Это было сделано для упрощения компилятора.

И как? Упростило? Гцц вон давно за миллион строк перевалил.

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

А сейчас не жуют?

Ну а это очевидно: оператор sizeof что должен подставить? Ноль? Ну так в этом нет никакого смысла. Только лишние сложности с отладкой создавать.

А что он в итоге подставляет? Я не написал, что это ошибка. Это UB.

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

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

И как? Упростило? Гцц вон давно за миллион строк перевалил.

gcc очень сложный оптимизирующий компилятор

Простой неоптимизирующий компилятор С, вроде tcc или scc, достаточно небольшой.

А что он в итоге подставляет? Я не написал, что это ошибка. Это UB.

Соглашусь, здесь было бы лучше заявлять об ошибке.

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

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

zx_gamer ★★★
()
Ответ на: комментарий от zx_gamer

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

код покажи, лалка!

hateyoufeel ★★★★★
() автор топика