В ast представлении шланга объявление класса выглядит как
У неё есть дети-объявления (всякие using'и, методы и прочие friend'ы)
Первый деть-объявление — сама нода
Зачем? Затем
CXXRecordDecl
нодаУ неё есть дети-объявления (всякие using'и, методы и прочие friend'ы)
Первый деть-объявление — сама нода
Зачем? Затем
Когда-то очень давно хотел навалять пост про
Обожаю этот ваш
Когда вводили эту фичу, видимо понимали, что никто никогда не вспомнит вовремя навесить
~Всегда да, ну кроме случаев, когда
* есть
* * деструктор кого-то из баз или полей не бросает
* это задефолтившиеся конструкторы copy/move/default, ну кроме случаев, когда
* * у кого-то из баз/полей этот конструктор бросает
* * задефолченный аргумент бросает при конструировании
дефолтно инициализирующиеся поля бросают
* это задефолтившиеся операторы присовения, нУ кРоМеСлУчАеВ, кОгДа
* * какой-нибудь вызов в них потенциально бросает
Сами компиляторы могут вывести, бросает ли ваша функция, если видят её полностью. И помните!
*
* отсутствие
noexcept
, потом он заглох, в итоге ничего сюда не писалОбожаю этот ваш
noexcept
. Опустим мысль о том, что говорить в коде "эта функция, бля буду, не свалится с ошибкой" вместо "эта функция может свалиться вот с такой ошибкой" это само по себе восхитительно, сейчас о другомКогда вводили эту фичу, видимо понимали, что никто никогда не вспомнит вовремя навесить
noexcept
, потому есть офигенские правила вывода, бросающая ли функция~Всегда да, ну кроме случаев, когда
* есть
noexcept(true)
* это деструктор, ну кроме случаев, когда* * деструктор кого-то из баз или полей не бросает
* это задефолтившиеся конструкторы copy/move/default, ну кроме случаев, когда
* * у кого-то из баз/полей этот конструктор бросает
* * задефолченный аргумент бросает при конструировании
дефолтно инициализирующиеся поля бросают
* это задефолтившиеся операторы присовения, нУ кРоМеСлУчАеВ, кОгДа
* * какой-нибудь вызов в них потенциально бросает
Сами компиляторы могут вывести, бросает ли ваша функция, если видят её полностью. И помните!
*
noexcept
, когда из вашей функции может что-то вылететь, провоцирует неявную вставку try-catch и`std::terminate`, если исключение всё же прилетит (я так делал вместо assert(false)
, чтобы в перф сборке уронить процесс, очень удобно)* отсутствие
noexcept
сковывает оптимизации вашего кода (std::vector
загрустит на resize
, если ваши мув-конструкторы могут бросить)Я, безусловно, понимал, что питон не супер-быстрый, но не настолько же...
Наслушавшись на растконе, как мужики раст с питоном женили, решил, что хочу попробовать. Повод выдался: надо в лабе по анализу данных написать простенькую функцию, чтоб метрику посчитать
Здоровья чювакам, создавшим PyO3, супер автомагическая штука, ощущения — огонь
Растовая функция отрабатывает за норм время, ничего необычного. И тут мне стало интересно, а за сколько бы отработал питон с тем же кодом (пик1)
Входных данных порядка 10^4, обходим их за квадрат. Я, конечно, читерю и параллелю код, но... (пик 2)
В 700 раз, Карл! Эта срань работает медленнее в 700 раз! Девачьки, я в шоке. Бля буду, глобальное потепление исключительно из-за питонистов, которые жгут настолько дохера ресурсов в никуда. Сижу, охреневаю
Наслушавшись на растконе, как мужики раст с питоном женили, решил, что хочу попробовать. Повод выдался: надо в лабе по анализу данных написать простенькую функцию, чтоб метрику посчитать
Здоровья чювакам, создавшим PyO3, супер автомагическая штука, ощущения — огонь
Растовая функция отрабатывает за норм время, ничего необычного. И тут мне стало интересно, а за сколько бы отработал питон с тем же кодом (пик1)
Входных данных порядка 10^4, обходим их за квадрат. Я, конечно, читерю и параллелю код, но... (пик 2)
В 700 раз, Карл! Эта срань работает медленнее в 700 раз! Девачьки, я в шоке. Бля буду, глобальное потепление исключительно из-за питонистов, которые жгут настолько дохера ресурсов в никуда. Сижу, охреневаю
Чёт я сам себя напрягаю тем, что мне иногда сложно думать в терминах плюсов
Пытаюсь сделать коротенькую функцию, которая разруливает мне владение штуками. Буквально один ифчик. Но складывалось либо так, что мне надо мувать
И мне вообще-то не очень нравится, что я не смог дотюкать до решения, глядя в плюсовый код, я его всё-таки до сих пор своим основным языком считаю....
P.S. а потом я понял, что этот метод мне вообще не нужен, всё иначе надо делать 🙂
Пытаюсь сделать коротенькую функцию, которая разруливает мне владение штуками. Буквально один ифчик. Но складывалось либо так, что мне надо мувать
this
из константного метода, либо я выдаю ссылку на тухлый объект. Поделился дилеммой с товарищем, который не очень понимает кресты, но понимает раст. Решил для него накидать перевод на ржавом.... тут мне стало явственно до жути, в каком месте я хочу невозможного, после недолгих размышлений над своими желаниями всё легко разрешилосьИ мне вообще-то не очень нравится, что я не смог дотюкать до решения, глядя в плюсовый код, я его всё-таки до сих пор своим основным языком считаю....
P.S. а потом я понял, что этот метод мне вообще не нужен, всё иначе надо делать 🙂
Кек с поведения такой себе очевидности
Это ошибка компиляции, потому что к
struct Base
{
protected:
int a;
};
struct Derived : public Base
{
Base & as_base() { return *this; }
int get_a() { return as_base().a; }
};
Это ошибка компиляции, потому что к
protectedвы можете обращаться только через свой класс
Почему так? В частности из-за того, что дети могут менять спецификаторы доступа
struct Base
{
protected:
int a;
};
struct Derived : public Base
{
Base & as_base() { return *this; }
private:
using Base::a; // превращаем 'a' в приватное поле
};
struct GrandDerived : public Derived
{
bool is_zero()
{
int parent_a = a; // нельзя доступиться, поле приватное
int grandparent_a = as_base().a; // компилятор наебать не выйдет (а хотелось!)
}
};
Я уже говорил, как люблю дата анализ? Эта лаба будет супер. Ещё не начал, а ощущения огонь
— pipenv, скачай мне torch и torchvision
— держи
— torch, я могу исполняться на видяхе?
— нет, у тебя не специальная версия
— pipenv, можешь скачать специальный torch вот из этого репо?
— да, без проблем, 3 секунды
— слишком быстро
— я такой молодец😊
— pipenv, удали torch
— сделано!
— ты же видишь, откуда устанавливать? установи, пожалуйста
— уже готово!
— гнида, блять, я ж знаю, ты мне существующий суёшь, ну погоди, ща снесу окружение, будешь заново ставить
— да-да, создалось легко, даже скачивать ничего не пришлось
— ЁБАНЫЙ ТВОЙ РОТ! ладно... ладно... pipenv shell + pip install, ты же мне это внесёшь в конфиг?
— 😊
— ты не внесёшь это в конфиг... ну хоть теперь я вижу, что честно качается... 2 ГИГА? ЕБАЛ ВАШ РОТ
— torchvision, можно мне датасет CelebA? его надо скачать
— ага! а, нет, хуй, почему
— потому что ты его себе в зависимости не добавил, еблан, держи свой пакет
— супер!
— хост датасета держит его на гуглодиске, а там квоты не квоты, ничего поделать не можем
— конечно, у себя файл зеркалить невозможно, уёбки... ладно, скачаю руками, теперь
— отлично! вижу, тут некоторые файлики скачаны, но остальные я выкачаю ещё раз. мне тут гугл выдал страницу с ошибкой вместо файла, надеюсь ты сам в них посмотришь и всё поймёшь, а датасет у тебя не датасет
— да сука.... там мужики советуют качать с kaggle, пробуем
— винда, распакуешь этот архивчик?
— да, подожди часик-другой
— ВЫ, БЛЯТЬ, СГОВОРИЛИСЬ
— pipenv, скачай мне torch и torchvision
— держи
— torch, я могу исполняться на видяхе?
— нет, у тебя не специальная версия
— pipenv, можешь скачать специальный torch вот из этого репо?
— да, без проблем, 3 секунды
— слишком быстро
— я такой молодец😊
— pipenv, удали torch
— сделано!
— ты же видишь, откуда устанавливать? установи, пожалуйста
— уже готово!
— гнида, блять, я ж знаю, ты мне существующий суёшь, ну погоди, ща снесу окружение, будешь заново ставить
— да-да, создалось легко, даже скачивать ничего не пришлось
— ЁБАНЫЙ ТВОЙ РОТ! ладно... ладно... pipenv shell + pip install, ты же мне это внесёшь в конфиг?
— 😊
— ты не внесёшь это в конфиг... ну хоть теперь я вижу, что честно качается... 2 ГИГА? ЕБАЛ ВАШ РОТ
— torchvision, можно мне датасет CelebA? его надо скачать
— ага! а, нет, хуй, почему
requests
не установлен?— потому что ты его себе в зависимости не добавил, еблан, держи свой пакет
— супер!
BadZipFile: File is not a zip file
— ты охуел? — хост датасета держит его на гуглодиске, а там квоты не квоты, ничего поделать не можем
— конечно, у себя файл зеркалить невозможно, уёбки... ладно, скачаю руками, теперь
download=False
— не, чёт хуйня, датасет не датасет, поставь download=True
— ...... хуйло .... ладно, держи— отлично! вижу, тут некоторые файлики скачаны, но остальные я выкачаю ещё раз. мне тут гугл выдал страницу с ошибкой вместо файла, надеюсь ты сам в них посмотришь и всё поймёшь, а датасет у тебя не датасет
— да сука.... там мужики советуют качать с kaggle, пробуем
— винда, распакуешь этот архивчик?
— да, подожди часик-другой
— ВЫ, БЛЯТЬ, СГОВОРИЛИСЬ
Может, я слоупок, но таким же глупеньким, как я, совет:
Если хотите распаковать большой зип архив на винде, возьмите стандартную виндовую распаковывалку, выбросьте её нахуй и воспользуйтесь винраром
Если хотите распаковать большой зип архив на винде, возьмите стандартную виндовую распаковывалку, выбросьте её нахуй и воспользуйтесь винраром
Upd. распаковывать винраром быстрее, чем копировать виндовым эксплорером
Итак, сегодня я:
* Выяснил, что штука не в край сломана, а состоит на 100% из костылей. Костыли, конечно, сломаны
* Посмотрел на такое
Оно осталось за пределами моего понимания
* Встретил комментарий "Это должно следовать за вызовом
А ещё теперь мне страшно ломать bug compatibility в коде, потому что в меня же будут тыкать пальцем как в виноватого в том, что всё сломалось, и мне же потом разбираться, что случилось. Я боюсь и не хочу. Ещё и все сенпаи по отпускам
Помогите...
* Выяснил, что штука не в край сломана, а состоит на 100% из костылей. Костыли, конечно, сломаны
* Посмотрел на такое
#ifdef 0
some code
#else
other code
#endif
Оно осталось за пределами моего понимания
* Встретил комментарий "Это должно следовать за вызовом
foo()". Что характерно,
foo()был выжжен 10 лет назад
А ещё теперь мне страшно ломать bug compatibility в коде, потому что в меня же будут тыкать пальцем как в виноватого в том, что всё сломалось, и мне же потом разбираться, что случилось. Я боюсь и не хочу. Ещё и все сенпаи по отпускам
Помогите...
Что-то часто я начал вспоминать этот анекдот. В этот раз из-за увиденных мной костылей
Приходит русский к еврею просить в долг рубль, еврей ему и говорит:
- Хорошо, я дам тебе рубль, но ты должен что-то под залог оставить
- Да нет у меня ничего, что оставить-то?
- Да хотя бы топор
- Ладно, бери
- Слушай - говорит еврей - мне ведь невыгодно тебе просто так рубль давать, давай, ты мне через год два рубля отдашь?
- Хорошо - отвечает русский. Взял он рубль, собтрается уходить.
Еврей его останавливает:
- Да, но ведь тебе сложно будет через год мне два рубля отдавать, ты мне сейчас рубль сразу отдай, тогда через год тебе будет легче
- И правда, - подумал русский и отдал обратно рубль еврею.
Выходит он от еврея и думает:
- Денег нет, топора нет, ещё рубль должен, и ведь, сука, всё правильно получается
Приходит русский к еврею просить в долг рубль, еврей ему и говорит:
- Хорошо, я дам тебе рубль, но ты должен что-то под залог оставить
- Да нет у меня ничего, что оставить-то?
- Да хотя бы топор
- Ладно, бери
- Слушай - говорит еврей - мне ведь невыгодно тебе просто так рубль давать, давай, ты мне через год два рубля отдашь?
- Хорошо - отвечает русский. Взял он рубль, собтрается уходить.
Еврей его останавливает:
- Да, но ведь тебе сложно будет через год мне два рубля отдавать, ты мне сейчас рубль сразу отдай, тогда через год тебе будет легче
- И правда, - подумал русский и отдал обратно рубль еврею.
Выходит он от еврея и думает:
- Денег нет, топора нет, ещё рубль должен, и ведь, сука, всё правильно получается
Чёт я сюда эту пасту не вбросил. Охуительные истории, о которых невозможно молчать
Дело было на манжаре
Началось всё со жгучего желания телеги обновиться: она сказала мне, что мой клиент скоро отвалится в противном случае. Почти уверен, что это из-за рекламы, которую она, видимо, не может показывать в старом клиенте
Я, как умная Маша, вооружился пакет-менеджером (pacman, в рот он ебись) и сделал классический адейт-апгрейд
Запускаю телегу
Ответ убил:
Первый звоночек: вашим thunderbird и ffmpeg нужна
Без проблем! Обновим их всех вместе. Отлично! Всё обновилось. Помимо прочего, в ходе обновления у меня оказался
Телега просит
Unix-way, чюваки, всё собираем из сурцов
И вот тут-то мы поняли масштаб бедствия
Он нужен и самому
Не работает
Кровь-кишки-пиздец
Я не могу запустить новый терминал, это значит, что ребут убьёт мне систему окончательно
Радуюсь, что работают
Отдаю комп на спасение билд-инженеру на соседней кровати
Он находит ссылочьку, откуда можно скачать бинарём несчастную либу (при этом честно перепечатав её, поскольку отправить-то никак нельзя, кек)
Всё почти ожило
Но не телеграм
Ему нужна новая
В охуительнейшем пакет-менеджере (pacman, в рот он ебись) её хуй найдёшь
В итоге обновили
И оно заработало
Какой итог:
Телеграм — пидарасы со своей рекламой
Thunderbird — пидарасы со своими новыми
pacman — пидарасы, которые не видят, что на либе живёт вообще всё
люди, придумавшие динамические либы — пидарасы
Телеграм — пидорасы дважды за обновление вообще всех либ для проекта, который они хотят раздать всем, кому могут
Дело было на манжаре
Началось всё со жгучего желания телеги обновиться: она сказала мне, что мой клиент скоро отвалится в противном случае. Почти уверен, что это из-за рекламы, которую она, видимо, не может показывать в старом клиенте
Я, как умная Маша, вооружился пакет-менеджером (pacman, в рот он ебись) и сделал классический адейт-апгрейд
Запускаю телегу
Ответ убил:
error while loading shared libraries: libvpx.so.7: No such file or directory
Окей, мы умелые ребята, обновляем libvpx
Первый звоночек: вашим thunderbird и ffmpeg нужна
libvpx.so.6.4
Без проблем! Обновим их всех вместе. Отлично! Всё обновилось. Помимо прочего, в ходе обновления у меня оказался
libffi.so.8
. После этих слов в системе начался ссущий кошмар... Но мы пока этого не зналиТелега просит
libffi.so.7
Ладно, ща установимUnix-way, чюваки, всё собираем из сурцов
И вот тут-то мы поняли масштаб бедствия
libffi.so.7
, который был вымещен нахуй модным-молодёжным .8
нужен ВООБЩЕ ВСЕМОн нужен и самому
make
'у, он нужен БЛЯДСКОМУ GCCНе работает
wget
Любая гуёвая хрень мертваКровь-кишки-пиздец
Я не могу запустить новый терминал, это значит, что ребут убьёт мне систему окончательно
Радуюсь, что работают
ssh
и zip
, спасаю нужный код, отправив в виртуалкуОтдаю комп на спасение билд-инженеру на соседней кровати
Он находит ссылочьку, откуда можно скачать бинарём несчастную либу (при этом честно перепечатав её, поскольку отправить-то никак нельзя, кек)
Всё почти ожило
Но не телеграм
Ему нужна новая
libstdc++
))))В охуительнейшем пакет-менеджере (pacman, в рот он ебись) её хуй найдёшь
В итоге обновили
gcc
И оно заработало
Какой итог:
Телеграм — пидарасы со своей рекламой
Thunderbird — пидарасы со своими новыми
libffi
(на котором пиздец, всё завязано)pacman — пидарасы, которые не видят, что на либе живёт вообще всё
люди, придумавшие динамические либы — пидарасы
Телеграм — пидорасы дважды за обновление вообще всех либ для проекта, который они хотят раздать всем, кому могут
Такая забавная студенческая черта: жгучее желание заюзать на практике всё, что только что узнал
Замечал Замечаю за собой, с какого-то момента замечаю за падаваном