Как стать автором
Обновить
105
0
Евгений @Izaron

Программист C++

Отправить сообщение

Возникает чувство, что в C++ не хватает достаточно мощных инструментов для работы с типами.

"Вычисление" типа происходит через лютые фокусы. Хотя казалось бы, имея нормальную связь типов с их метаобъектами (это есть в Reflection TS, но там тоже руки сильно связаны), можно было бы посчитать тип человеческим алгоритмом. Но имеем такие статьи.

Но вы же прочитали мой комментарий, который я написал за пару минут, и ответили на него? Вот ненулевой выхлоп. А код, на который вы потратили кучу времени, я никогда не прочитаю и на меня он не повлияет. Вот и нулевой выхлоп =)

Вы уверены что у вас есть желание контрибутить, а не _искать причины чтобы не контрибутить_?

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

У меня история open source намного менее насыщенная. Я просто при очередном желании контрибьютить куда-нибудь сталкивался с подмножеством проблем из списка:

  • Неуловимый Джо: В подавляющем большинстве случаев проектом пользуется полтора человека на Земле. Раз уж мы хотим тратить свое драгоценное время, не лучше ли контрибьютить в то, чем косвенно пользуются миллиарды людей?

  • Trust me, I'm an engineer: Отсутствие на момент старта проекта каких-то фич в языке или Генеральная Линия Партии приводит к велосипедам уровня поддержки ООП в Си. В итоге от чтения исходников кровоточат глаза.

  • Nothing To Do Here: Всё самое содержательное написано в первые пару лет проекта, ничего нового особо не напишешь, "всё уже украдено до нас". Часто идёт в ногу с ревью PR раз в квартал.

  • Атлант расправил плечи: Проект билдится около 8 часов, и то приходится отключать debug-символы, чтобы он собрался в бинарник без сжирания всего RAM.

  • Ты не пройдёшь!: Иногда проект имеет высокий порог входа настолько, что надо несколько месяцев/лет учить матчасть (ядро ОС, компиляторы и т.д.) Такие проекты часто разрабатывают люди из Microsoft/Google/Apple/etc. на зарплате, потому что за "спасибо" - никому не сдалось.

  • Где деньги, Лебовски?: На факт контрибьютинга в open source всем пофигу, работодатели не выстраиваются в очередь, и офферы не начнут приходить рекой.

Круто! Про особенности переноса с VisualBasic на C++ - полноценный RangeArr можно получить "бесплатно", унаследовав от std::array

template<class T, long Begin, long End>
class range_arr : public std::array<T, End - Begin + 1> {
public:
    using underlying_t = std::array<T, End - Begin + 1>;
    using typename underlying_t::reference;
    
    constexpr reference operator[](long pos) {
        return underlying_t::operator[](pos - Begin);
    }
    constexpr reference operator[](long pos) const {
        return underlying_t::operator[](pos - Begin);
    }
};

Про опциональные ссылки - можно по умолчанию ссылаться на "свалку", если не будет проблем с многопоточностью (пример не идеальный):

template<typename T>
T dummy;

template<typename T>
T& dummy_ref(T value) {
    dummy<T> = value;
    return dummy<T>;
}

void addValue(int step, int& number = dummy_ref<int>(0)) {
    number = step;
}

Это перевод инициализации во время работы программы в инициализацию на этапе компиляции. Пример constexpr, который может находиться почти в каждом .cpp файле:

constexpr std::string_view HELLO_WORLD = "Hello world";

Если бы вместо constexpr был const, то этот объект построился бы в старте работы программы до вызова int main(). В больших программах таких объектов много, до нескольких тысяч.

Также в compile-time строить прочие простые объекты: контейнеры (пока не STL), регулярные выражения.

тут я не понял последний пример - почему ui.reset() для const unique_ptr& OK? Это ведь иммутабельный объект.

Я закомментировал строку с ui.reset(), имея в виду, что эта строка не скомпилируется, но сейчас вижу, что текущий вид сбивает с толку. Спасибо, поменяю!

Плюс к тому, я не совсем понял как propconst должен решить проблему constexpr p = make_unique<int>(); В идеале должна выделиться compile-time память под мутабельный в рантайме int.

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

По задумке авторов предложения, non-transient память должна быть разрешена, только если никаким образом нельзя получить к какой-то ее части mutable-доступ (без const_cast и пр. хаков). Ясно что объект const unique_ptr<int> недостаточно силён, чтобы это гарантировать.

Смысл попытки введения propconst в том, чтобы усилить выразительность языка, и гарантировать иммутабельность всего, что нагенерировалось в constexpr. Объект типа const unique_ptr<int propconst> смог бы это гарантировать.

Тем не менее, предложение еще в разработке, и финальный результат (non-transient память) мы увидим в С++26 или дальше, потому что feature freeze для C++23 происходит в 2021 году.

не шибко то и уклончиво - запись в const объект всегда ведет к UB. А const_cast лишь преобразует типы ссылок/указателей.

Перечитал еще раз стандарт - да, так и есть, const_cast "can produce UB" лишь постольку, что может являться "посредником" для записи в const-объект. Неоднозначностей вроде нет.

Добрый день! Интересно, как вы тестируете работоспособность новой версии "прошивки" (бэкенд + образ docker с бинарями)? Вы запускаете какой-нибудь "имитатор" типичного контеста, который стреляет в бэкенд?

разрабатывать новые алгоритмы, ОС и компиляторы

Боюсь, среднестатистический программист-выпусник вуза разработал примерно ноль новых алгоритмов, ОС, и компиляторов. Хотя нет, был один такой товарищ (Билл Гейтс), но вуз он что-то не окончил.

Ну а мантра «научить учиться» это просто религия, со всеми вытекающими.

Это секта Свидетелей Учившихся Учиться. У нас был "прохвессор", не сделавший за жизнь табуретки, но утверждавший, что человек останавливается в развитии, как только заканчивает учебу и выходит на работу.

Закончишь бакалавра, магистратуру, аспирантуру, потом кандидатскую писать, чтобы доцентом стать на кафедре, а потом докторскую и профессорскую должность, в общем, к 40 годам жизнь уже пролетит, зато заработаешь лычку "вучёного".

SDL написан на Си, код для работы с ним чисто сишный, на плюсах так не пишут. Графической библиотекой для C++ является, например, SFML.

Заклинаю вас, никогда так не делайте и не давайте таких советов.
https://eel.is/c++draft/lex.name#3.2

В данном случае нарушения нет, такие символы как члены класса, локальные переменные, методы и переменные внутри блока namespace - не являются находящимися в "global namespace".

Хаб C++ и картинка с C++ неправильные - nginx написан на кондовом C, для которого есть отдельный хаб, а принципы разработки другие.

Сам блог дает маловато контекста - непонятно что такое ngx_command_s, который в итоге нашли, но почему-то не стали смотреть его определение; что значат все аргументы в регистрации команды; и т.д. - всё время метод "скопируй и запусти".

Есть предложение в стандарт, которое вероятно попадет в ближайшие версии C++, в нем вводятся рекурсивные лямбды - self это неявный аргумент, являет собой объект closure.

auto fib = [](this auto self, int n) {
    if (n < 2) return n;
    return self(n-1) + self(n-2);
};

Пропорциональность возможности потребления определяется социальным рейтингом

"А судьи кто?..."

Или вы не понимаете разницы между однопоточным и многопоточным приложениями или не понимаете проблем с CoW.

Вы меня не так поняли - я за отмену CoW, но предпочел бы, чтобы это делал сам GCC (и прочие, к кому относится) без пинков от комитета.

Проще сказать "нас злой комитет заставил сломать строки", чем "мы сделали плохой дизайн, и поэтому решили его поломать". Пусть авторы реализаций сами берут на себя всю ответственность. Комитет уже попробовал один раз, вышло плохо, тонна хейта (именно к комитету) и напоминают уже 10 лет.

Но это личная точка зрения.

через plugin для clang добавление нового ключевого слова не провернуть?

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

Но сами плагины тоже супер мощные, и с помощью них можно форматировать код (clang-format), фиксить простые ошибки (clang-fixit), рефакторить, делать линтеры (которые ищут опасные паттерны и предлагают их убрать). Это вспомогательные программы.

Выше пишут, что на libclang сделан qt-moc. Судя по описанию, эта надстройка ищет макрос внутри класса и генерирует по нему исходник. Я не разбираюсь в Qt, не могу сказать правда ли так, но теоретически это возможно.

Это выглядит неправильно, комитет не должен исправлять неудачные решения в частных реализациях STL за счёт правок в стандарт (как попробовали со std::string в C++11).

Авторам реализаций нужно самим брать на себя ответственность и принимать решения, с аргументацией как в вашем комментарии. Тянули бы CoW-строки до 2040 года - их выбор.

А мне понравились универсальные посылы, которые актуальны во все времена, и о которых надо почаще напоминать себе. Каждый "миф" можно написать покороче:

  1. Не восходить от простоты к сложности, а наоборот - нисходить от сложности к простоте.

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

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

  4. Лычки а-ля "закончил Королевский Колледж" - bullshit и к делу не относятся.

А что касается названия поста, вспомнилась одна цитата.

Не представляю где например инжинеру без менеджерских обязаностей и хорошему знанию языка могут платить XXX

Это уже какие-то корпоративные басни. Каждый может зайти на levels.fyi и увидеть, что это почти самые топовые грейды. И потом - вы же сами в посте писали, что levels.fyi завышает реальную цифру.

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

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

Информация

В рейтинге
Не участвует
Откуда
Ян де нова о-ва
Зарегистрирован
Активность