Это копия, сохраненная 14 октября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2379873 (OP)
Лучший тред для лучшего языка.
факт. база.
> Первый - древний говнокомбайн, который не выучить за всю жизнь
Так учи и используй современные фичи, а не древний говнокомбайн C++98.
Ага, а как же тот самый метод, который однажды пригодится, но ты его не знаешь? Алсо, бОльшая часть готового кода как раз на старом говне и написано. А новые проекты на плюсах почти никто не начинает.
> Ага, а как же тот самый метод, который однажды пригодится, но ты его не знаешь?
Открываешь документацию и узнаешь блять.
> А новые проекты на плюсах почти никто не начинает.
Будто на шарпе пишут. Это не кресты умирают, а десктоп и системщина. Сейчас всем вебдрисню подавай.
> неплохой ноунейм ЯП
Только в фантазиях прыщечмох. Уже 3 года прошло, а там всё ещё пре-альфа, на которой невозможно нихуя написать не столкнувшись с багами компилятора, даже D лучше и стабильнее. А ещё куча ебанутых решений. У автора этого говна, кстати, опенсорс головного мозга, он там настоящую борьбу ведёт против злых проприетарных корпораций. Выглядит нелепо и результат как у всех опенсорс-фанатиков.
Причина подрыва? Я просто сказал о фактическом положении дел с этим говном. 2к issues и каждое второе - баг компилятора, каждое сотое - мисскомпиляция. Как было на первых версиях, так же и сейчас - новые фичи добавляют, а качество реализации всё такое же нулевое с бесконечным потом багов. Причём пердолики обещают какую-то безопасность, но по факту как всегда пиздят, я помню в начале пиздели про отсутствие UB, но теперь его официально добавили.
И чем он даёт пососать? Работой учителем информатики в школе?
Я не понял, это пост в защиту плюсов или что ?
То есть, например:
struct Algo1 { static void func() { std::cout << "algo1\n"; } }
struct Algo2 { static void func() { std::cout << "algo2\n"; } }
/ шаблонный параметр A обязан иметь метод void func() /
template<class A>
Math
{
/ вычисления по указанному алгоритму /
void calc() { A::func(); }
}
Конкретно для этого примера правильно использовать функтор в классах Algo1 и Algo2, но когда в каждом Algo по два и более метода, то уже хз как правильно, функтор то один на класс может быть.
По ощущениям, для Algo1 и Algo2 хочется унаследовать от какого-то интерфейса типа
struct IAlgo { virtual static func() = 0; }
но это 1) динамическая дедовская пидорасня и 2) virtual static запрещен.
Предполагаю, что в C++ есть некий механизм проверки полей типа static_cast<>, который будет в Math, но я этого не знаю.
Чё за шиза, чел. Используй концепты типа такого:
template <typename T>
concept bool HasFunc =
requires(T t) {
{ t.func() } -> void;
};
Для вывода строк нормальные люди пишут "operator std::string()".
> Не все
Это какие? Нахуй ты используешь компилятор пятилетней давности? Не хочешь использовать нормальный компилятор - ебись сам как хочешь.
Только что кстати собрал, ура! Добавил ключ -static при компиляции, и как я понял он библиотеку libc.so.6 в исполняемый фаил засовывает, ну ниче, зато работает. Подумаешь HelloWorld 11 мегабайт весит. А что если попробовать скинуть библиотеку с orange Pi и заменить ее у компилятора. Тогда может он будет под нужную версию компилировать
а ты шутник
Статик ассертом проверить чтобы тип имел какую то функцию
Если что, код должен заполнить List3 элементами, из List1, которых нет в List2.
На джаве пишут. Петушарп и правда никому не нужен.
Сейчас для этого, похоже, все есть. Современный C++ имеет явно функциональный уклон, да и темплейты являются важной частью языка. Компайл-тайм оптимизация считается наиболее желанной, и язык ориентирован на это.
В линуксах есть нехитрый способ подгрзузки в рантайме дллки. Компилятор типа цланга может быть частью проекта. Сборщики типа cmake тоже могут как-то подготовить сборку к таким фокусам
Как к вам устроитья на работу, если ты неделю капчуешь как пытаешься хеллоуворлд запустить? Сколько платят?
И компилятор такой: Так, падажжи ёбана. Делаю инклуды, разворачиваю макросы, делаю шаблонную подстановку, разворачиваю <...> и элипсисы, вот тута вот не минимально по включению, а вот тут вот зависимости надо внешние прилинковать.
Чё-то не выходит JIT - кидаю эксепшен во время обработки эксепшена.
Тем временем спутник теряет управление и падает нахуй на марс, открывая портал в ад.
Ну мне иногда страшно, вдруг уволят потому что я так медленно все делаю и всему учусь так медленно, но не увольняют, а даже зп повышают потихоньку. Может я тут и нужен что бы я сам сидел и обучался. И все равно тревога у меня, вдруг мой начальник узнает насколько же я еще мало всего знаю. Надо С++ знать, и тогда сможешь устроиться
Опять трёхэтажная std::zlp_gvn::zalupa_govna<is_ochka>(sosi.begin(), sosi.end(), std::borschehleb<std::ebaniy>) вместо ламового array.join(","). Ну чё за хуйня?
У нормальных людей есть итераторы с монадами.
Шарпобляди меряются письками со всеми языками, даже JS.
я чёто мельком видел в интерете, что якобы он для строк не подходит, но походу в 20 уже всё норм и там не будет лишних копирований строк, да чёто затупил
Есть один с++11. И есть классические битфилды. (struct msb { bit0: 1; bit1: 1; bit2: 1; ...)
Что я хочу. Обертку чтобы писать int i = msb.bit(1); msb.bit(2) = 1; msb.bit(4) = 1;
И чтобы при этом все соптимизировалось компилером в i = msb.bit1; msb.bit2 = 1; Ну и в идеале в компайлтайме в msb = 0b1010;
Мой подход к станку - работает, но не оптимизирует.
https://godbolt.org/z/ME7x5Mhvj
Идеи, мысли, предложения.
Не интересует. Надо чтобы менялись биты прямо указанной переменной. Она будет в конкретном месте в памяти.
что ты имеешь ввиду под констекспр строками?
https://godbolt.org/z/9Gdd4Ksxe
первое что пришло в голову
или ты про то что строки внутри констекспр функций?
их вроде же и так можно использовать там и векторы тоже, только возвращать вроде нельзя
>>398182
просто я дебил
Зачем темплейт если все типы указаны?
Зачем уебанская запись в 13 строке когда можно написать нормально =0;
хахах, ну мне это надо, я должен был узнать каким образом писать программы под orange pi, осталось решить проблему с glibc и понять как добавить в qt компилятор что бы он там работал
>Почему бы одному из сервисов не быть перекомпилируемой говной с автопрогоном юнит-тестов?
Чтобы пользователи 2 дня смотрели на сообщение "извините проводятся технические работы", пока это все собирается?
^&|<<>>
>Что мне делать и как?
1. Установи нужную версию на целевой машине.
2. Статическая линковка.
3. Откажись от библиотек и пиши через системный вызов. Из мюслей код можешь спиздить.
Выбирай любой вариант.
Нахуй не нужон, привыкай видеть двоичный код в хексе, это удобней
Статическую линкову я тут применил >>397847
Мне вот в идеале нравится версия с принуждением компилятора к сборке нужной мне версии библиотеки. Пока не знаю как это сделать, надо скачать либо готовую библиотеку нужной версии, либо собрать самому, а это опять морока.
Все равно наверное мне придется ставить на Orange Pi новую систему с графическим интерфейсом, так как сейчас у меня просто консоль, за одно и GLIBC обновится
Просто попробуй пописать на шарпе - плюсы после них будут выглядеть как ебаная палка копалка
Пробовал, даже на JS и петузоне пробовал. Плюсы всё ещё лучший язык всех времён и народов.
Новый язык с++2.0, который будет компилиться сразу в плюсы
Какие фичи минимально нужны:
1) Вместе темплейтов дженерики, с нормальной системой концептов
2) Статическая рефлексия
3) Вместо дефайнов крутые макросы можно прям как в у раста спиздить
4) Возможность использовать с++ код в с++2.0
...
Такое сможет заменить плюсы?
думаю диплом по такой штуке написать, но если без шуток, насколько мертворожденная идея?
он работает на работе кстати и получает за это зп
а ты сиди дальше дома и дрочи "шаблоны" вандервуда дальше
Петушарп реально говнище, не слушай шарпошиза. Пиши на джаве.
Если заменить на закомментированную лямбду, то работает, но с mem_fn меньше символов печатать
А всё, неважно, я понял. Там просто две перегрузки для метода value и компилятор не мог выбрать видимо. Вот так работает
Ты вообще понимаешь о чём пишешь? Где логика? Если возвращать rvalue, то ты с этой ссылкой ничего сделать не сможешь. Алсо && - это не rvalue ссылка, шиз.
Опохмелись
Не работать кодером, очевидно же. ИТ не только из кодеров состоит. Никто не мешает тебе вкатываться в ИТ без кодинга и получать столько же. Верхняя планка может и доступна только кодерам, но кресты далеко не самый высокооплачиваемый язык, так что 150к можно даже в техподдержке найти, не говоря уже про что-то получше.
Я не хочу чтобы надо мной смеялись на собесе. Я хочу придти, раскидать все вопросы и собеседующего в 0 и получить жирный оффер.
Можете порекомендовать чего-нибудь почитать на предмет подходов к организации кода, работающего с БД?
Суть вот в чём: в текущем рабочем проекте имеется специальный класс, который работает с БД -- подключается к ней, создаёт таблицы при первом запуске, получает запросы на помещение/извлечение данных и всякое в таком духе.
В проекте есть группа структур с общим интерфейсом и многие вещи с ними делаются через виртуальные функции интерфейса, переопределённые в наследниках. И вот вроде бы просится ебануть в этот интерфейс ещё и функции записи/извлечения структур из БД, чтобы каждая структура могла себя записать/считать из БД.
Но. Непонятно, как тогда быть с созданием таблиц. Структура должна сама себе таблицу создавать (поскольку она знает, чего ей хранить надо) или же таблицу создавать классом работы с БД, а структуре говорит, мол, клади себя сюда.
Вроде бы логично структуре самой создать таблицу. Но тогда возникает вопрос, как быть с внешними ключами, у меня часть таблиц ими связана, чтобы при удалении некоторых записей (а-ля удаление юзера, устройства), всё связанно с ними вычищалось. Структура, естественно, ни о каких внешних ключах знать не знает и знать не должна, по идее, не её ума это дело.
Вощем, непонятно.
Потому что operator[] возвращает референс, а если у функции в качестве return value референс, то это lvalue. Ты сам себе стреляешь в ногу таким кодом. Можно много подобных ситуаций воспроизвести специально, но это не минус языка, а его незнание
Нихуя ты умный.
Ну смотри, у rvalue и lvalue нет какого то определенного типа
Любой тип может быть как rvalue, так и lvalue
Всё что ты можешь с ними делать - это попытаться принять в функцию как аргумент
Причем, для того чтобы параметр сматчился в rvalue - в плюсах есть магия как &&, то есть, T&& - будет матчить все rvalue of type T если Т не темплейт параметр, иначе же будет матчить всё
Причем, как только ты значение засовыеваешь в T&&, оно перестаёт быть rvalue
Краткий итог:
- Ты не можешь сказать в С++ чтобы функция у тебя возвращала rvalue или lvalue, ты их можешь только принимать в функции
- Если переменная имеет видT&& еще не значит что это rvalue (только если как параметр функции и T не темплейт параметр)
Что значит нельзя? На пике ты это и делаешь. Rvalue ref как return type в функциях считается rvalue. Но lvalue ref считается lvalue.
То есть с lvalue ref можно сделать foo() = 5;
А с rvalue ref так нельзя, ибо он будет считаться rvalue, а rvalue is not assignable.
На пике у тебя вызывается ведь перегрузка с rvalue ref - все работает как ты и хотел.
Имплементация operator[] в std::array возвращает lvalue ref на элемент. Хочешь, можешь написать свою имплементацию array с оператором, который возвращает rvalue ref. Но зачем? Либо можешь просто std::move использовать для случая в первом твоем пикриле.
> Не это другое
Концепт тот же, куте так реализует статическую и динамическую рефлексию
Я к чему пример привел - много кто делал кодогенераторы для плюсов, просто они либо проприетарные либо простые как qt MOC
Вообще, для кодогенерации лучше использовать си или llvm на худой конец, так делают zig, jai, nim вроде
Учитывая мощность qt рефлексии, я бы кастомную орм запилил - она бы создавала таблички и по инфе от классов прокидывала связи и генерировала методы чтения/записи
Но это нетривиальная работа, да и новое колесо по сути
Учитывая, что это кресты, я удивлён, что не в каждой первой.
Потому, что каждая 2 вакуха это НИИ, а туда без вышки берут только в лаборанты или по родству/знакомству.
>или по родству/знакомству
То есть, с вышкой в НИИ никого нет, ведь корешей/кумов всегда больше.
В cmake написано find_package(Boost COMPONENTS system)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
В гитхабе с помощью vcpkg установил boost командой vcpkg install boost-asio:x64-windows
При сборке ошибка длинная
-- Could NOT find Boost (missing: Boost_INCLUDE_DIR system)
Build with MSVC
-- Configuring done
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
Boost_INCLUDE_DIR (ADVANCED)
used as include directory in directory D:/a/i2p_sam/i2p_sam
CMake Error in CMakeLists.txt:
Found relative path while evaluating include directories of "ZERO_CHECK":
"Boost_INCLUDE_DIR-NOTFOUND"
CMake Error in CMakeLists.txt:
Found relative path while evaluating include directories of "ZERO_CHECK":
"Boost_INCLUDE_DIR-NOTFOUND"
CMake Error in CMakeLists.txt:
Found relative path while evaluating include directories of "ZERO_CHECK":
"Boost_INCLUDE_DIR-NOTFOUND"
и там еще дальше подобное. Я сначала думал, что я может установил boost x64, а компилирую для x86, но нет, вроде компилятор x64 запускается.
Я не знаю пока что в чем проблема. Помогите, пожалуйста
Подожди, дай сначала с симейком и хеллоуворлдами разберёмся.
Статическая рефлексия и метапрограмирование будут. Наверное в 26 стандарте.
Посмотри как optional возвращает &&
Блин, опять капчу не туда ввёл
каждый метод 4 разными способами описывать?
каждый из которых делает одно и тоже?
ладно еще константность, а 3 и 4 нахуя
>>401846
В школе турбо паскаль, qbasic и перволого. Какой ещё питон?
Не слушай еблана из пту. Все учат. Только поступать надо в нормальный вуз
Справа от функции - это cv-qualifiers и reference-qualifiers. Они ограничивают, над какими объектами можно вызывать эту функцию (только над const, только над rvalue, и тд).
tl;dr Кури https://en.cppreference.com/w/cpp/language/member_functions#member_functions_with_ref-qualifier
Уже нахуй не нужны, deducing this уже запилен.
Предположим, я распарсил в джейсоне поле "surname", и в поле структуры с именем .surname присвоил это значение без if ов - это пример рефлексии?
В крестах нет того, что в других языках называют рефлексией, соответственно, ни на каких примерах и аналогиях ты не поймёшь, что это такое. Ближе всего к рефлексии RTTI.
Посмотри на систему метаобьектов в qt. Вкратце, ты в рантайме можешь получить информацию о классе объекта - какие есть методы, конструкторы, енумы и т.д., можно узнать кто вызывает метод и всякое такое.
Рефлексия это понятие у скриптов, которые в рантайме интерпретируются машиной, поэтому машина-интерпретатор в рантайме имеет информацию о кодовых объектах этого скриптового языка.
С++ же это компилируемый язык. После компиляции получаются, и на самом деле выполняются - машинные коды, а у машинных кодов нет никаких объектов языка С++, это вообще не язык, точнее это хардварный язык процессора, соответственно никакой информации о С++ там нет и быть не может, потому что кода С++ уже давно нет, он есть только у тебя в текстовом редакторе кода, не дальше.
Это бессмысленная приблуда сбоку, которая только будет раздувать программу и тормозить. Конечно, С++ это нативный язык железа, поэтому при желании из него можно вылепить и подобие динамического скрипта. НО ЗАЧЕМ?
Нужен скрипт - пользуйся скриптами, полно этих языков. А компилируемый язык нужен для нативного кода, собранных машинных инструкций, чтобы код работал сам по себе, без сраных машин управления сбоку.
Как хорошо, что комитету насрать на твое авторитетное мнение.
Они уже давно пытаются его запихать (https://en.cppreference.com/w/cpp/experimental/reflect), но никак не определятся как именно это сделать. Последний вариант вроде этот https://github.com/cplusplus/papers/issues/1002
Ну это всё шляпа уровня rtti. Главная фишка рефлексии - пилить в рантайме новые типы данных.
Qt позволяет добавлять проперти в рантайме, можешь брать пустые объекты и пихать в них что хочешь.
С C# вообще трудно сравниться. Язык багов.
Хэлп
Да, я зря проигнорировал, что хоть рефлексии нет в рантайме, но она есть во время компиляции. Но это ограниченая фича, похоже очередной костыль для темплейтов или вроде того. Ну имеет кое-какое применение, но не широкое, и даже если такое абузить вместо кода будут помои.
Ну тут я согласен, если нужна рефлексия, скорее всего ты накостылиль какую то хрень, хрен знает чем тут гордятся шарписты... Я использовал только раз и до сих пор стыдно за тот Новгород.
Ну надмножество, да.
Eigen::MatrixXd N(n, m);
for (int i = 0; i < n; ++i)
N.row(i) << a[0] << a[1] << a[2] << a[3] << a[4];
Если m заранее не известно, то можно сделать вложенный цикл. А можно целиком присвоить a для N.row(i)? Как это сделать? Ни в мануале, ни на стэковерфлоу этого нет.
warning C4238: nonstandard extension used: class rvalue used as lvalue
Ну и не скопировало, да.
Там у тебя матрицы из комплексных чисел состоят. Ну и вектора тоже. Поэтому да, не сработает.
Eigen::MatrixXd N(n, m) состоит из действительных чисел типа double.
В доке указано, что это частный случай block(), как и col(). Видимо это индекс над матрицей, а не прямой доступ к данным.
Опять же, если верить докам, то есть отображение Map.
Map<Eigen::RowVectorXd> vec(a, length);
И возможно потом что-то типа
N.row(i) = vec.row(0)
Кринж. В нормальных языках есть функциональщина и можно через точку вызывать map, лямбдой что надо делать с каждым элементом.
>В нормальных языках есть функциональщина и можно через точку вызывать map,
В крестах это называется transform, и он был уже в первом стандарте, но возможно твой Эйген его не поддерживает.
Нет, это троллинг. Шарп компилится в скриптовый код, который выполняет отдельная программа.
IL
С дотнета 7 уже сразу в машинный код может компилироваться, а IL останется для кроссплатформенности. Тот же юнити уже давно умеет IL в крестовый код конвертить и компилировать.
Но
>Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Это вот не верно. Лучше сразу узнать про потоки, типы данных, память, функции и их значения и прочее, чтобы писать более грамотно на иных языках в том числе, а не быдлокод.
Алгоритмы и вовсе учить до программирования первых приложений - путь в никуда и способ отбить весь интерес. Кому интересно рисовать "сортировку пузырьком" 4 часа, не зная про циклы? Переписывайте лучше.
>Это не кресты умирают, а десктоп и системщина. Сейчас всем вебдрисню подавай.
А как же программирование микроконтроллеров?
>А как же программирование микроконтроллеров?
Выучив c++ и деграднуть до c, освоив несколько библиотек - лучший язык для широкого охвата:
Можешь писать десктоп приложения, программировать микроконтроллеры, писать модули ядра линукса.
В чем я заблуждаюсь?
Микроконтроллеры нишевые, а не массового применения. Маркетологи могут хоть тысячу раз произнести 'IoT', суть от этого не изменится.
Смузихлёбы кста пишут прошивки на петухоне
Можешь-то можешь, вот только зарплату ты за них будешь получать скорее всего маминым борщом.
>Микроконтроллеры нишевые, а не массового применения.
Так в этом же и фишка, чем уже ниша, тем выше спрос, а значит и больше денег. Конечно, если речь не идет об очень узких нишах и редких вещах уровня хаскеля из трех человек.
Т.е. зная плюсы можно вкатиться в серьезный десктоп или в микроконтроллеры или в модули ядра или в инфбез.
>Смузихлёбы кста пишут прошивки на петухоне
Соболезную
>вот только зарплату ты за них будешь получать скорее всего маминым борщом
Не работаешь за борщ и шлешь быдло, как на гитхабе написано.
Нужно уметь посылать к хуям быдло, пусть ищут себе миллиарды лет программиста тогда.
>чем уже ниша, тем выше спрос
На специалиста имеется ввиду.
Пример 1: .в нише 10 человек и 1 гуру, нужно еще одного, а его нет. Пока остальные наращивают скилл, бизнес предложит любое бабло на рынке, чтобы спрос удовлетворить.
Пример 2: В нише 100 человек и 10 гуру. Нужен еще один и переманивают из других контор, т.к. они есть. Бизнес предлагает бабло, но рыночную стоимость в конкуренции этих десяти.
Чем уже ниша, но широкого охвата, тем больше вероятности поднять бабла.
Под бизнесом понимается бизнес, а не плановой экономики быдло нахрюк.
>Маркетологи могут хоть тысячу раз произнести 'IoT', суть от этого не изменится
"IoT от маркетологов" это уровень развития "пузыря в айти" от эйчара-совкокабанчика. На это не ориентируется никто, но есть конторы даже малого бизнеса с собственными устройствами в нормальной стране. Вопросики?
Суть в том, что в случае, если lshift >= 0, то всё работает нормально.
Но если lshift < 0, мне надо, чтобы сдвигалось на абсолютное значение lshift, но уже вправо. А вместо этого в результате отрицательного сдвига получается какой-то бред (видимо, сдвиг на отрицательное число - это UB).
Есть ли какой-то оператор, который сдвигает как надо: при положительном левом сдвиге сдвигает влево, при отрицательном левом сдвиге - сдвигает вправо? Или наоборот.
Хотел бы сделать без условного оператора.
> сдвиг на отрицательное число - это UB
Да.
> Есть ли какой-то оператор
Нет, делай через условный оператор.
Вот только по сишке не так много хорошей работы в странах СНГ, да и ща рубежом не сказать что прям ярмарка.
Я когда перешёл го, офигел от щепок и количества приглосов от хрюшек. Правда я там напиздел мальца и из 6 лет только год на году писал. Но типа в чем пофиг, если прошёл собес(на помидора) - велком.
Конечно есть свои минусы, там прям надо знать конкретный стек технологии, всякую бэкхенд дичь, но это только по началу. Из минусов - через год будет ооочень скучно. Задачи везде +- похожие, Толе подходы могут отличаться.
Разговорился с одним лидом, так у него прямо набор шаблонных решений заготовленной под всё случаи жизни. Он из тупо на новых работах и развертывает.
Вот только по сишке не так много хорошей работы в странах СНГ, да и ща рубежом не сказать что прям ярмарка.
Я когда перешёл го, офигел от щепок и количества приглосов от хрюшек. Правда я там напиздел мальца и из 6 лет только год на году писал. Но типа в чем пофиг, если прошёл собес(на помидора) - велком.
Конечно есть свои минусы, там прям надо знать конкретный стек технологии, всякую бэкхенд дичь, но это только по началу. Из минусов - через год будет ооочень скучно. Задачи везде +- похожие, Толе подходы могут отличаться.
Разговорился с одним лидом, так у него прямо набор шаблонных решений заготовленной под всё случаи жизни. Он из тупо на новых работах и развертывает.
С одной стороны плюсы это иногда язык с которым впервые знакомят перепуганных студентов заставляя их потом писать крестики нолики, тетрисы и морские бои.
С другой же стороны, плюсы идеальный язык для систем, движков, серверов и всего великого и могучего в этом мире. Но такие проекты пишуться огромными командами и хоть какой-то игровой движок и можно на коленке соорудить в одиночку, всё-равно это будет не самый полезный проект для реализации (вон Cherno кучу лет проработал с движками в больших компаниях, а свой собственный в одиночку уже который год пишет, да и то только потому что уже знает многие элементы которые нужно будет реализовать для полноценного движка).
И вот я столкнулся с проблемой что писать маленькую шелупонь мне больше не хочеться, а писать матёрые штуки вроде движков я пока просто не выдержу.
Короче как вы рождаете\рожали идеи для проектов которые можно будет понемногу писать, а потом со временем не будет стыдно их закинуть в портфолио?
Ну так начинай сразу делать большой проект мечты. Просто разбей его на максимально мелкие подзадачи, что бы они были >> маленькую шелупонь мне больше не хочеться
Постепенно из нее у тебя и соберется проект. Вон иди пиши игру, или браузер, или что в голову вбредет.
>С другой же стороны, плюсы идеальный язык для систем, движков, серверов и всего великого и могучего в этом мире.
Не. Плюсы это язык, попытавшийся смешать в себе низкоуровневость и высокоуровневость и проигравший. Типа объекты есть, но это недообъекты без инкапсуляции. А разгадка одна - нельзя сделать ооп в неуправляемом окружении, вот нельзя и всё тут, не бывает такого. К жопе вопросов нет, к питону вопросов нет, к си вопросов нет, к крестам - вопросы есть, но нет ответов.
Но ты попиши что-нибудь, увидь это сам.
>Короче как вы рождаете\рожали идеи для проектов которые можно будет понемногу писать, а потом со временем не будет стыдно их закинуть в портфолио?
Создал тред в crypt:
https://2ch.hk/crypt/res/49335.html (М)
Пока ничего для этого не выучил, но планирую.
Опять ты шизло ебучее
>Так на сишке много или нет хорошей работы в снг, я не понял?
Думаю, что в снг нет.
Но если ты дойдешь до уровня гуру, то можно уехать, и вот тогда уже зарабатывать много денег в нишевом сегменте широкого охвата, лол.
Ну, допустим, абстрактный интел делает новое устройство и надо писать на нем модули ядра. Много ли интелов в снг? Их нет. Не в снг они есть, но нужно иметь прокаченный скилл, а не в машинки играть.
> свой string с другими правилами, подходящий под конкретную задачу.
Ты на пороге очень больной темы. Дело в том, что ВСЕ плюсовики хоть раз писали свои реализации строк.
Это минус, а не плюс. Потому-что в других языках это нахуй не нужно писать самому
Потому что другие языки говно. Тебе дают хрючево, а ты жрешь причмокивая, ом ном ном.
я утверждаю то, что язык, в котором надо писать свою строку, потому-что стандартная хуевая - не очень.
А уж какая боль с юникодом работать - это не описать.
При чем тут строка? Может мне нравятся array в другом языке или я хочу добавить функционала, а должен довольствоваться тем, что для наговнокодили макаки-содатели языка.
ну собстно ты описать суть крестовиков - делать костыли и хуйню, а не проект или задачи
Ну сделал ты проект, а потом видишь, ага, вот тут можно ускорить производительность. И переписываешь реализацию какого-нибудь класса.
> в его случае больше раскрутки как дохуя гения,
Он находил уязвимости в процессорах, имея скилл, исходя из самообразования, перенеся инсульт в детстве из-за отека мозга. Он точно гений.
>Это минус, а не плюс. Потому-что в других языках это нахуй не нужно писать самому
Ну надо писать валидацию тогда, все равно надо писать в других языках что-то.
Производительность никогда не будет упираться в реализацию строк.
Чем тебе boost не угодил? Он дефакто стандарт, и как раз та блотварьная хуйня что ты так любишь в других языках.
Это ты думаешь, что умеешь работать и пилить фичи. Я тоже так думал, а потом меня просто так обоссали на трех собесах подряд, что я понял что я вообще нихуя не знаю и не умею.
Вкатился еще через 4 месяца задротства после этого
Да не выёбывайся ты
Допустим, если toc = 4, соответственно, мне нужно число 0xF (0b1111).
Если toc = 2, то мне нужно 0x3 (0b11).
Варианты, которые приходят на ум беспомощному джунишке:
1. массив заранее подготовленных значений для всех возможных toc;
2. устанавливать нужные биты в цикле.
Будут ли более грамотные идеи у бывалых крестогоспод?
Может еще работать за тебя устроиться? Кстати где ты работаешь что стак и гугл в блеклисте, а двач нет
Если долго тупишь сходи проветрись. Затупы часто из-за того что мозг отключается.
При всем уважении - буст это конченая залупа, и тянуть его надо только когда ВООБЩЕ вариантов других нету.
пишу реализацию класса string
имею this.пик проблему, перегрузка конструктора выглядит так(полностью соответствует "учебнику", пробовал брать разные материалы, везде одна и та же ошибка):
https://pastebin.com/WJWEKsJ1
пробовал инициализировать массив типа char (статический), и затем его отправить в объект класса - работает
p.s. IDE - Visual Studio, версия последняя
Вместо того, чтобы переизобретать что-то что уже было сотню раз изобретено напиши простенькую консольную рпгшку. ООП учится за пару часов, чел.
разобрался сам - в перегруженном конструкторе класса, который я прикрепил не использовалось слово const
в VS все строковые литералы преобразовывались к типу const char, а не просто char
что было нужно для решения - я прикрепил
ответ нашёл случайно (часа полтора голову ломал)
вдруг кто встретит то же самое:
в перегрузке конструктора по умолчанию нужно добавить ключевое слово const к принимаемому параметру
Пчел, посмотри на сообщение об ошибке.
других не наблюдаю, я скидывал на пастебин только часть кода, проблема была в том что компилятор преобразовывал стороку "Hello" в тип const char[], а в перегруженный конструктор принимал не константный массив типа char
пока ещё не научился понимать сам такого рода ошибки(
Тебе говоришь: "покажи поля класса", а ты в ответ: "сложно, я не понимаю! язык говно!".
Сама ты мерзкая
вообще куска кода было достаточно для решения проблемы, я не хотел нагружать анона большой простынёй кода
>Тебе говоришь: "покажи поля класса"
нет, этого у меня не спрашивали, запрос на весь класс - был, но как уже писал выше (в этом же посте) - данная информация избыточно
>а ты в ответ: "сложно, я не понимаю! язык говно!".
язык как язык, такого, что ты мне приписываешь, я не писал
>>405462
ну на вкус и цвет... (мне особо не с чем сравнивать - на моём уровне приходится есть то что дают)
Из того что я использоал компилирпвались тольео регэксы, корутины и внезапно опции программы. А ты что нашел?
+1488 суток к компиляции хелловорлда
+Адовое порно с линковкой и БОЖЕ УПАСИ ЕСЛИ - обновлением буста (решается вцпкг, но все же).
Хуй знает. Юзал только азио через vcpkg. Компилировал все быстро, пробоем с линковкой не было
Чушь. Использую буст в одной маленькой программе, компилится одинаково мгновенно, что и бустом что без него. И какие могут быть проблемы с линковкой? Берешь и используешь как любйю библиотеку.
Лучше бы няшный VSCode поставил бы, куда ставится все что нужно, от линтеров, до форматеров. Еще и под любой компилятор. И кроссплатформа.
Проходи дальше.
Ничего.
1) Это одна из самых тупых операций. Там негде накосячить
2) В std не просто цикл копирования по байту, а еще и всякие оптимизации под конкретные архитектуры.
Короче ты сам лучше не сделаешь
ER?
Ты про constexpr?
А еще overlapping source and destination - UB. А еще memcpy это compiler intrinsic, он его может поменять на свою имплементацию не из libc.
ПКМ -> Go to Definition отдельным файлом либо ПКМ -> Peek если окошечко маленькое открыть
Все 3 имплементации STL (Микрософт, Шланг, ГЫЦЫЦЫ) - опенсорс. МС на гитхабе хранит например
Так это и не за один день писалось, а много лет вылизывалось, дебажилось, оптимизировалось.
я понимаю что там идеальный код, проблема в том что я ничего не понял - не похоже на тот С++ с которым я познакомился на курсах вроде "С++ для идиотов"
Это ты еще сорцы STL от GCC не открывал. По стандарту, STL может использовать только символы "__name" и "_Name", там вся библиотека из-за этого нечитаема, как будто обфускатором прошлись.
Но с другой стороны я когда то копипастил код std::vector и его имплементация была вполне себе понятна.
>>405701
Там наверняка куча говна ifdef связанного с small string optimization
Там очень много концепций слеплено:
1. Контейнеры и итераторы.
2. Кастомный менеджер памяти (_Alloc, allocator<>)
3. Кодировки unicode и ascii (char, wchar_t, _Traits).
4. Оптимизация (small string optimization)
5. Представление одной строки на основе другой (string_view, c++17)
6. ???
Всё обильно смазано шаблонами, макросами, условной компиляцией. Чтобы нормально читать STL сырцы, надо годик-другой покодить и книжки полистать.
>Есть ли что быстрее memcpy?
Ничего, обычно это интринсик, т.е. компилятор даже вызова функции не производит, тупо несколько ассемблерных кодов.
Почему в вашем смешном языке это означает нечитаемый код? Ровно та же нечитаемая хрень происходила в 80-х в stdio.h. Где прогресс-то?
хочешь читаемую стандартную библиотеку -- учи ocaml
Должен быть быстрее: даже если не запрашивается память у системы менеджер памяти подыскивает тебе кусок из выделенной ему памяти.
В случае обычного new.
Посмотри реализацию Metaparse, например. Да вообще любого из модулей.
>>405486
Помню использовал Program Options и еще что-то по мелочи. Скорость компиляции падала в разы.
Буст это какая-то ебическая химера, дитя бюрократии и оверинжиниринга. Единственное оправдание её использования это когда надо хуяк-хуяк и в продакшн. Это также касается Qt и либ от гугла.
>Буст это какая-то ебическая химера
У тебя в башке ебическая химера.
Буст это сборник библиотек. Просто много библиотек в одном комплекте, вот они и занимают много, но это и естественно, ведь их много. Но никто не заставляет их использовать сразу все, дебил. Испольщзуешь только те либы буста, которые тебе нужны, вот и всё. Надо быть совсем наглухо ёбнутым дебилом, чтобы ругать за то, что тебе дают много библиотек. Это достоинство, а не недостаток.
>Program Options и еще что-то по мелочи. Скорость компиляции падала в разы.
Чет не верится, програм опшанс как раз одна из компилируемых бустовских либ, из-за чего там падать.
>и книжки полистать
можешь сказать какие?
меня терзают сомнения что я хоть что-нибудь там пойму, так что буду рад ещё каким-нибудь советам
те либы, которые нужны тебе, тянут весь Core, а там пиздец
есть объекты одного класса: A, B, C
выполняем действие:
A = B + C;
сначала выполняется сложение с помещением результата объект класса, назовём его RESULT, который возвращается как параметр оператору присвоения:
RESULT = B + C;
A = RESULT;
касательно первой части: RESULT = B + C (при скложении происходит конкатенация динамических массивов в моей реализации)
объект RESULT объявляется в реализации оператора присвоения(присваивания? - гугл ответа не дал) в классе, то для его создания должен вызываться конструктор по умолчанию, если в его реализации предусмотрено выделение динамической памяти - получается её нужно очистить сразу после объявления объекта RESULT в реализации оператора сложения и выделить динамическую память по новой, верно?
Собственно вопрос - что с освобождением, что без работает одинаково и ошибок не выдаёт, почему так?
код прилагаю, нужная мне строчка помечена директивой ifdef DEBUG :
https://pastebin.com/zF6M8kTW
Ошибок и не будет, память все равно вся освобождается после закрытия программы, за ней ос следит.
это я знаю
вот в конструкторе по умолчанию у меня создаётся массив на 10 элементов в динамической памяти, потом, без очищения памяти этих 10 элементов я выделяю место на 20 элементов (потребуется после "сложения"), по сути это утечка памяти, которая должна приводить к ошибке при закрытии программы, о том что из элементов A, B, C, D элементы A, B, D "сообщили" (через деструктор) системе что им память больше не нужна, а элемент C сделал это только для одного участка памяти на 20 элементов, хотя запрашивал 2 участка на 10 и на 20 элементов
И что такого? Нормальный код же. Это ты ещё пикрилейтеды не видел с битмапами, по которым потом сдвигом гоняются данные.
>которая должна приводить к ошибке при закрытии программы,
Да с чего ты взял то? Система срать хотела на твои объекты, она выдает память страницами по несколько килобайт, и прекрасно знает кому сколько выдала, т.к. ведёт таблицы трансляции виртуальных адресов твоей программы на физические в памяти.
Тупое опасное говно, что в одном случае, что в другом.
а если первый раз выделяя динамическую память на 10 элементов я попаду на одну страницу, а выделяя 20 элементов - на другую?
система мне сообщит об ошибке?
- Уже проверил, просто удалил деструктор, ошибок не было
У тебя в стандартной библиотеке менеджер памяти, вызываемый при new, malloc и тп. Запрашиваешь 10 элементов, он берет целую страницу у системы. Запрашиваешь ещё 20, он выделяет их с той страницы которую уже запросил, т.к. она гораздо больше твоих 30 элементов. При выходе из программы система забирает себе все, неважно освободил менеджер память или нет. Утечки есть только во время работы программы, а не после. А менеджер нужен для эффективного управления твоей мелочью, которая системе неинтересна.
Все, я пошел домой, лекции закончены =)
Нормальный код, который можно читать в отличии от крестовых библиотек.
хорошего пути
Метапрограммирование в с++ изначально было плохо читаемым. Сейчас ты с этим ничего не поделаешь. Соглашения об именовании std тоже вытекают из базового дизайна языка.
Только вынос страуструпа из мавзолея и разгон комитета позволят создать новый современный язык.
Можешь подсказать где про это "метапрограммирование" можно на русском почитать? и по возможности чтоб ещё понятно было для тугих
> позволят создать новый современный язык
Уже раст сделали. А второго раста не будет, даже индусы уже официально поддерживают раст и полностью всё виндовое API на него биндят. Так что вариантов не много и больше не станет. А кресты уже ничем не спасти из-за обратной совместимости, какие-то базовые вещи типа implicit move или выражений уже не запилить даже закопав труп страуса.
По общему дизайну и немного о особенностях реализации
Josuttis: The C++ Standard Library
Для понимания шаблонов. По началу будет казаться кашей, ибо синтаксис в языка крайне уебанский и многословный.
Josuttis & Co: C++ Templates: The Complete Guide
В остальном - общее повышение эрудиции через гугление увиденных вскользь терминов и идиом.
Бизнес денег туда особо не вливает. Хуяндекс сидит в комитете с++ и генерит сотни вакансий на плюсах. В других МЯСО конторах спрос на системшину скромнее и раст там тоже не замечен. Хуйвей наверное единственный, кто в свои манялаборатории на раст берёт.
Спасибо
С понимания того, зачем тебе это нужно, и почему стандартные языки не подходят.
inb4: лохчейн
Размер кода чтоб был очень низкий. Эта таблица заменяет кучу ифов и повторений кода.
И что будет если в проект придёт левый чувак который никогда такой ебаниной не занимался?
Выделят ему угол в опенспейсе возле туалета и кофемашину с дырявыми стаканчиками.
это стандартный С++ с тем самым винапи оконным.
Вообще - винапи можно и из соснольного приложения дергать.
А почему заинклюжена какая-то хуйня, вместо Windows.h? А любой код из гайдов по винапи выдает ощибки. Что майкрососы опять нахувертели?
там внутри какие-то обертки над виндовс.х
Чел, я хз что ты там смотришь, я только что собрал пару проектов из Windows-classic-samples на 22 студии v143, c Windows.h, все собирается с пол тычка.
> мастер классических придожений
Бля, как вы это едите.
Не знаю такого языка
двачую
может это может помочь:
https://docs.microsoft.com/ru-ru/windows/win32/learnwin32/learn-to-program-for-windows?view=msvc-170
сам не пробовал
>по русски загуглил - по русски получил выдачи
Я про это и говорю — получил выдачу струи в лицо
Достаточно знать, что оператор a[x] равносилен ⚹(a+x), из этого следует, что для получения a[x][y] надо произвести операцию над результатом операции ⚹(y+result), где result это ⚹(a+x), то есть ⚹(⚹(a+x)+y).
Из интересного я заметил, что [][] массив адресов и a это указатель на указатель, я почему-то думал, что такое только у динамических массивов.
>>406732
Да заебали, разобрался уже
>поебень с другим синтаксисом
Кекус.
Как определить дебила - по хрюсеку вместо интерфейса. Аналог мелкобуквы, сразу однозначно дебил и можно идти мимо, всё равно блеяние не имеет никакого смысла.
Можно конечно на листочке выписывать из таких примеров каждую такую операцию побитово и увидеть на каких-то примерах, что да, вроде правильно. Но это нихуя не прибавляет понимания и навыка в чтении такого кода. Как это читать не как китайскую грамоту? Как такое самому научиться придумывать?
Особенно порвался от подчёркнутой фразы, ага, конечно средний читатель сразу заметил лишнюю маску (это для первокуров пособие к занятиям по С++).
Все битоверчение состоит из шаблонов.
(1<<n)-1
n & (n-1)
n<<8 | n>>8
n = p - 1, m = -p
После того, как 100 раз увидишь и применишь каждый из них, научишься декомпозировать задачи. Ну и двочиный счет в уме, само собой. Надеюсь, ты хотя бы 16 степеней двойки помнишь?
классы в с++ и есть пользовательские типы
а шаблоны классов позволяют вводить семейства типов
раньше - да, потому что делалось в функцональном стиле - константы времени компиляции не было, использовали рекурсию и ограниченный паттернматчинг
в новых стандартах все это делается в императивном стиле, с циклами, условными конструкциями и константами, времени компиляции, поэтому читать такой код легко, так как по концепции он не сильно отличаеться от кода который отрабатывает в рантайм
Раст - это совершенно другой язык. Актуальную кодовую базу на него не перенести. Актуальные работающие крестовики его не знают (кроме единичных ноулайферов).
Но медленное вытеснение будет происходить.
Только чтобы "кластер" мог соединяться через интернет, а не шнурком. В любой момент подключиться, расшаривая ресурсы, и отключиться. Должно же что-то быть такое уже, да?
>distcc?
да. Есть что-то готовое уже, как писал тут:
https://2ch.hk/s/res/3176094.html#3177232 (М)
>Рефлексия это понятие у скриптов
>С++ же это компилируемый язык
Пиздец, с кем я здесь сижу.
Для начала, нет такого понятия как "компилируемый язык". Есть язык. Для него можно сделать компилятор (транслятор в машинный язык). Для него можно сделать интерпретатор.
Если пчелики в шарпе решили, что у них будет байткод и некая виртуальная машина для него - это не значит, что для шарпа нельзя сделать транслятор в машинный код. Аналогично для плюсов.
На остальное время лень тратить. И я мидл, пчел. Миддл в мухосрани. Если выяснится, что ты помидор, и такую ахинею с серьёзным лицом нёс в массы, то это пиздец.
>нет такого понятия как "компилируемый язык"
Есть такое понятие - отсутствие мозгов. Дебилодрон может попугаить только по предварительно заученному.
В то время как любой мыслящий человек прекрасно понимает, что компилируемый язык - который компилируется, а некомпилируемый - который интерпретируется. Как же сложно для понимания, ебать пиздец, но скриптодебилу и в самом деле сложно, у него
>врёти нисущиствуит!
>можно сделать
>нельзя не сделать
Охуительная ЛОГИКА скриптодебила, только при чем тут реальность? Лучше этот гнойник кретинизма не вскрывать.
> рефлексия понятие у скриптов
Сынок, я видел рефлексию на сях
Достаточно просто мета инфу о типах хранить в сях это делалось руками и магическими дефайнами
да и на qt она тоже есть
Я тебя не спрашивал раздувает она программу или нет
Я говорю что это нихуя не скриптовая фича
Скриптовая конечно, потому что это фича именно интерпретатора скриптов, а не компилятора компилируемых языков.
> Для начала, нет такого понятия как "компилируемый язык".
Тут ты не вполне прав.
Всё же есть языки для которых компиляция это необходимый шаг
в процессе разработки (то есть от изменения кода до ошибки),
и есть для которых нет.
Можно задрючиться в тонкости что мол и это можно откомпилировать, и то заинтерпретировать, но разница между плюсами и питоном поганым например -- налицо
8-32 байт должно в регистры влезать тащемта
> Аноны, насколько memset быстрый?
Анон, надежнее всего померить. В проприетарных либах попадается страшное говно.
> Есть какие-то способы быстрее заполнить байтом небольшой участок памяти в 8-32 байт?
Цикл, если размер переменный. Если размер известен, можно мемсет, хороший компилятор сам разберется.
> Я же правильно понимаю, там в любом случае в ассемблере будет цикл с mov?
Или rep stos. Или call memset. Или stmia...
если например заполнить байтом 8 байт то делаешь
uint64 mem = 0;
uint64 byte = input("введите число от 0 до 255");
mem = (0x0101010101010101) * byte;
а у кого адрес не кратный восьми тот сам себе злобный буратин
звездочки похерились само собой
Ты не прав.
Компиляция как необходимый шаг это не компиляция, а бессмыслица. Это исключительно мелкий квирк реализации, не больше, ничего не значащий.
Смотри, классический BASIC считается интерпретатором, отдельного процесса компиляции там нет. Но на самом деле компиляция там есть, только компиляция не программы полностью, а одной строчки.
Суть в том, что в BASIC отсутствуект текстовое представление кода. Как только ты вводишь очередную строку (нажимая Enter), она тут же компилируется в байткод и заносится в память уже скомпилированной. Текстовой программы нигде нет вообще. А когда тебе нужно посмотреть код или его отредактировать, ты запускаешь процесс декомпиляции специальной командой list, которая декомпилирует код в текст и печатает тебе на экран.
Улавливаешь? Компиляции в явном виде нет, но она есть (незаметная, построчная), просто не в привычном виде как отдельный процесс. Но зато есть процесс декомпиляции, чтобы посмотреть на свой код и его редактировать - построчно, сразу же компилируя обратно незаметным образом.
Но тем не менее, это не называют компилятором, а называют интерпретатором, потому что компилированный код это не код исполнения, а код для машины-интерпретатора. То есть, настоящий компилятор это только такой компиляторр, который производит код непосредственного выполнения, а не какой-то промежуточный код для интерпретатора его выполнения. Последнее будет интерпретатором всё равно, даже если код для интерпретатора был скомпилирован промежуточным компилятором, и даже как отдельный процесс, это просто не имеет значения.
Шизик, спок. Компилятором называют то, что (1) выдаёт результат преобразования исходного текста. Хоть на пролог, хоть на васемблер at&t. Или (2), генерирует по исходному тексту исполняемый код. Хотя бы в память. Хотя бы для виртуального процессора.
Это бессмысленная демагогия, другой контекст.
Речь шла про рефлексию - свойство языка. Рефлексия это свойство только интерпретатора, который непосредственно выполняет код. Процесс компиляции к этому вопросу не относится, не имеет значения. Важно только кто выполняет код: либо никто - код выполняется сам, либо выполняет интерпретатор кода. Вот и вся разникца. А без интерпретатора рефлекции нет, ибо код это код процессора, а процессоры не поддерживают рефлексию.
Таким образом, в контексте свойств языка, и в частности рефлексии, рефлексия существует в языке только благодаря интерпретатору. А С++ это компилятор непосредственного кода выполнения, поэтому рефлексии там нет.
Ты конечно можешь написать любую программу, и даже с рефлексией, но это будет свойство твоей программы, а не языка. На языке можно написать всё что угодно, это вообще не имеет значения, не является аргументом ничему.
Вот допустим есть обычный айтимакак штат бангалор
Если он пишет на компилируемом языке то получать унижение будет от компилятора до запуска в продакшн
а если на интерпретируемом то после и уже не от компилятора
В теории разницы нет но нельзя отрывать теории от реалий
Недопустимое преобразование типа. С-стайл преобразует, но не так как хочется. Он 5.0 превращает в 5.
наверное можно записать в память и сделать int -> void -> double*
потом посмотреть какие там байтики
что там не так с reinterpret_cast я хз
Рефлексии как свойства языка нет, значит, рефлексия свойство того, кто исполняет. Если железный процессор исполняет код + понимает rtti, то у него есть рафлексия для компилированных крестов?
>Рефлексии как свойства языка нет, значит, рефлексия свойство того, кто исполняет.
Рефлексия это свойство интерпретатора, поэтому интерпретируемые скрипты имеют рефлексию нативно из коробки. Рефлексия это натуральное свойство скриптовых языков.
Для компилируемых же языков, рефлексия чужеродна, её там нет. Конечно можно накостылять и запихнуть, всё можно, но смысла не вижу. Нужна рефлексия, вот и пользуйся скриптами. Если разводить скрипты в компилируемом языке получится химера.
У меня от тебя китайская комната.
Рефлексия есть там, где она реализована (т.е. доступна программисту).
Компилятор отличается от интерпретатора по другому признаку.
>КИТАЙСКАЯ КОМНАТА
Дело не в том, что и где есть или нет.
Дело в понимании принципиальной разницы между скриптами и нативным кодом, между интерпретатором и компилятором.
Это именно принципиальная разница на фундаментальном уровне, а не какая-то ерунда вроде необходимости генерации файликов или нет, установки машины-интерпретатора в систему или нет, текстом распространяется программа или экзешником, с зависимостями или нет. Это всё ерунда, не имеющая никакого серьезного отношения к обсуждению того, что такое язык, что он из себя представляет, его концепции акк языка, что такое код который ты там пишешь, эти вещи разные у скриптовых и компилируемых языков, вот что важно.
А что куда можно запихнуть расскажи своей мамаше шлюхе, которая себе в анус всё пихает, даже не предназначенное, ведь не запретишь, долбоебов всегда хватает.
>Это именно принципиальная разница на фундаментальном уровне
>Это всё ерунда, не имеющая никакого серьезного отношения
Яскозал.
Академоблядь, спок. Я самоучка по нескольким направлениям, я уже выше тебя, которого за ручку ко всему привели.
Ну типо, не задираю нос и открещиваюсь от плебса как многие проебланившие 4 года, а остаюсь близким к народу каким бы уебанским тот ни был.
Точку с запятой себе перегрузи, а потом ищи где не работает.
>открещиваюсь от плебса
Кто сказал, что я открещиваюсь? Просто учить других чему-то типа различию между языком и программами для обработки языка - себе дороже. Это нужно только когда ты какую-то теоретическую хуету обосновываешь. Лучше ещё раз вчерашнему студенту объяснить, зачем слово виртуал при наследовании и почему нельзя копировать объекты, используя интерфейс. Это больше пользы принесёт.
Но совершенно другое дело, когда начинают нести чушь, будучи абсолютно уверенными в том, что это правда. Приумножают заблуждения типа. Сам таким был, и мне-то нос утёрли. А вот вам похоже нет. Ну продолжайте, хули я ещё могу сказать.
>>мыслящий человек
Что тебе в этой фразе непонятно? Ладно, даун, поясняю: тупо заучивать что тебе вливают в бошку, а потом это тупо цитировать, это не мышление, не мыслящий человек, а безмозглый гуглобот. Так что можешь своими теоремами подтереться, они всё равно для идиота бесполезны, раз не умеет думать, а только цитировать как попугай.
> у скриптовых и компилируемых языков
>Так что можешь своими теоремами
Ты только что определения. С определениями не спорят. Выдумывают свои, если другие не нравятся. Другое дело, насколько твои определения будут полезны.
Это и есть идиотия в чистом виде. Пациент может только повторять заученное под копирку. Не может читать и понимать что мыслящий человек говорит когда речь отличается от заученной копирки. Это классическая проблема искусственного интеллекта (ИИ) - тупость, неспособность соображать за пределами обученной модели.
Когда мыслящий человек ситает и понимает написанное, он понимает и значение терминов, ибо всё в контексте. А безмозглый гуглобот выкидывает экзепшен "Ошибка Терминологии" и прекращает функционирование. Сейчас даже роботов делают умнее, они не крашатся от одной фразы как ты.
Нет блять тут анон сидит дремучий, который дальше прикладной теории категорий не продвинулся.
Еще раз для тех кто проспал диалектический материализм :
Понятие компилируемый язык есть.
Оно возникает в ходе производственных отношений в капиталистическом обществе когда макак типа тебя пишет код с ошибками.
То в какой момент вылезают ошибки и макак получает в пердак -- вот это и определяет разницу между средствами разработки.
Твоя ошибка в том что ты рассматриваешь язык отдельно от сопутствующих человеческих процессов. А так делать нельзя потому что язык это прежде всего средство человеко-компьютерного взаимодействия
Тут есть пара человек с пенсией по шизе, это кто-то из них
> за два предложения закрыла тему
Как и ожидалось от человека, что вовсю потакает своей предвзятости подтверждения, второй абзац ты даже не читал.
Алсо, как выше анон отписал, формальные языки - это академическая область, а не хуй собачий.
Я не могу никому запретить этот самый хуй сосать, но всё же, попробуй посмотреть на источники в этой статье. А когда поймёшь, что этот хуй слишком большой и вонючий, переключи на ангельскую версию.
Алсо, как же я много времени здесь проебал на хуйню.
Ты значит у английский господ хуй сосегь. Но ничего, госпожа Логика выебет тебя в жопу страпоном.
Да нет. Просто в ангельской версии источников аж два, лол. И хуй, который ты будешь сосать на английском менее вонюч.
Я же хуй совсем не сосу, потому что я знаю, что компилируемый язык - это костыльное определение, созданное неучами. Как и многие неологизмы. Из недавнего помню хороший глагол эмоционировать.
Тащемта у нас тоже как такового не было. Назвали его чё-то типа "Введения в ТФГиЯ" или "Основы ТФГиЯ". Хуй уже вспомню.
Зато помню, что у нас выкинули лямбда-исчисления, хотя я его больше всего хотел. Оставили классеку - машину Тьюринга, рекурсивные функции и алгорифмы Маркова. И теория была не очень объёмной. Никаких лиспов, крутых теорем о трансляции из произвольного языка в произвольный. Начало по языкам с автоматами, регулярками, БНФ и прочей лабудой. А закончили описанием трансляции из си-подобного языка в подобие ассемблера для x86_32.
Очень круто было тогда, да. Но это всё абсолютные основы. Собственно, я никогда экспертом по этой еболе и не был. Поэтому и удивляюсь, что люди делают ошибки, которые даже такой чел, как я, может задетектить.
> машину Тьюринга, рекурсивные функции и алгорифмы Маркова
> теорем о трансляции из произвольного языка в произвольный
> по языкам с автоматами, регулярками, БНФ и прочей лабудой
Нахуй это говно вообще нужно кодеру в отрыве от реальности? Когда столкнёшься с проблемой, для решения которой нужно подобное говно - за час разберёшься на ходу. Это намного продуктивнее будет, чем учить какую-то теорию непонятно нахуя и для чего это можно применить ИРЛ.
> описанием трансляции из си-подобного языка в подобие ассемблера для x86_32
Опять же, написание AST и кодогенерация ASM или IR - довольно простое занятие. Компилятор простого псевдокода на LLVM пишется за день. Нахуй этому учиться, если после ебучего Калейдоскопа в доках всё понятно становится за час?
>Когда столкнёшься с проблемой, для решения которой нужно подобное говно - за час разберёшься на ходу.
Может быть мы вообще из разных миров, в конце-концов я из мухосрани за уралом. Ты можешь быть гением. Но всё же, из всех своих одногруппников только я нормально выучил регулярки. Не "обрезаные" для теории, а perl-compatible которые. "С час на ходу", ага.
>Опять же, написание AST и кодогенерация ASM или IR - довольно простое занятие.
Не для всех же. Не ровняй вчерашнего школьника, который лишь года два как пересел на линукс с собой нынешним.
Тащемта это был хотя бы нормальный предмет, в отличии от матана и диффуров, которыми мне очень так хорошо подзатыльник дали. До сих пор нихуя не помню как я сдал их.
> кодогенерация ASM или IR - довольно простое занятие. Компилятор простого псевдокода на LLVM пишется за день.
Чел, ты встал на плечи всем этим челам, которые учили теорию. И занимаешься компиль-макакингом.
Все эти студентики начинают с зазубривания, выбирая программирование на похуе потому что в ИТ платят хорошо. А у нормальных людей наоборот всё - им нравится кодить и они начинали с чистой практики, имея из теории только половину трупа страуса.
Ахах, а ты хуль на плечи встал инженеров интела, давай напильником камень обтачивай да плату паяй.
>имея из теории только половину трупа страуса
Кек, люблю хвастатся тем, что я читал только одну главу страуструпа. Он в первой главе начинает бросаться всякими конструкциями направо и налево (в отличии от K&R, который к тому времени был прочитан). Ну и я подумал, что недорос до книжки. Начал читать про плюсы в других источниках и пилить игрушечные проги, чтобы понять как это всё работает.
Когда вернулся и смог нормально первую главу прочитать оказалось, что это всё было "размахивание хуём" и вот сейчас, со второй главы он начнёт объяснять. Я тогда очень долго ржал.
Ну так-то LLVM без проблем можно заменить чистым ассемблером, разница лишь в оптимизациях, а это уже совсем другая история, не связанная с теорией ЯП.
> люблю хвастатся тем, что я читал только одну главу страуструпа
Я тоже дропнул его мгновенно на первых 50 страницах, шлюху александреску тоже не осилил - у него вообще пиздец вода. Так ни одной книги по крестам и не прочитал. В давние времена просто ушёл на MSDN и шарп, а потом уже и нахуй книги не нужны стали для вката в кресты, когда документация и гугл есть.
А yacc можно заменить рекурсивным спуском, за день напишу. Ну за неделю. Ой...
Труп страуса бывает разный. В "Язык программирования C++" он уже на 155 странице пишет парсер формул.
Ебать там русек.
Ошибаешься, я анонимный никто, которого невозможно презирать. Ты презираешь высказанную информацию, правду, т.е. самого себя, но переводишь стрелки. Это стандартный психологический инстинкт.
И недовольство даже не в самой правде, а в серьезном аргументированном изложении которое не легко отрицать, так что ты оказываешься припертым к стенке. Спокойные грамотные аргументы, когда не за что зацепиться чтобы отрицать и игнорировать, чем создается безвыходное положение, не увильнуть от правды. Именно это вызывает настоящую ненависть. А например грубые оскорбления и тому подобные простые бессодержательные посты почти никого не задевают. Скорее наоборот, часто даже нравится так переругиваться, негатива не видно.
Компилятор выдаёт что-то про couldn't deduce template parameter '_Sent2', когда пытаюсь дописать явно шаблонные параметры set_difference<здесь>, то не помогает https://godbolt.org/z/b1e5q8joK
>У первого и второго рейнджа обязательно должны быть одинаковые типы элементов что ли?
Очивидно
>Компилятор выдаёт что-то про couldn't deduce template parameter '_Sent2'
Там несколько перегрузок, эта тебя не интересует
> пытаюсь дописать явно шаблонные параметры
Для set_difference это невозможно
>constraints not satisfied
>mergeable
А, ок, ясно, спасибо. Всё равно как-то странно, set_difference по смыслу вроде же выдаёт значения из
Программач поздравь меня, я вроде даже нашёл работу на плюсах. Вот только есть одно - проект. Он выглядит примерно как дом на пике, без документации и прочих человеческих радостей.
Есть ли методы обуздать эту кучу дерьма и с чего начать?
>Есть ли методы обуздать эту кучу дерьма и с чего начать?
Ищешь точку входа и идешь дальше по цепочке, т.е. банально читаешь код.
void*
Ну на хх начал слать резюме. Только опыт поставил не нулевой, а от 1 до 3-х лет. Прошёл собесы в апреле-мае. Хрка сказала - согласуем с руководством - сообщим. Я через пару недель подумал что ребята отмазали. Вот уже в июне вышли на свзяь, и приняли.
какой стек технологий?
я тоже хочу перекатиться, но кроме сишечки ничего не знаю, куда дальше учить тоже идей особо нет
Так почему бы не инкапсулировать весь этот кал и не обращаться к нему через интерфейс.
Да норм, я примерно на таком же проекте работаю, вопрос времени, как во всех комнатах побываешь, за все двери посмотришь, везде стены подкрасишь, будешь как дома.
> Есть ли методы обуздать эту кучу дерьма и с чего начать?
Бтв с изучения проекта, как только поймешь как проект устроен, что в каких модулях обрабатывается и какими средствами достигается решение, станет легко
Да вроде чистые плюсы (Сам учил. В универе только хелоу ворды писать учили), но придётся ещё ндк подтянуть. А так ещё чутка графики да вот и весь стек.
>>409155
Хули там смотреть то? Образование - 4 курса без диплома, да и отработка около года в аутсорсной конторе.
>>409163
Да ни чего такого страшного не спрашивали.
>>409171
Да сейчас у меня задача закрепиться и наработать хотя бы год два опыта работы. И да ты бы потерпел бы самопальный смарт пойнтер у себя в доме?
> Да ни чего такого страшного не спрашивали.
Чел, ну откуда мне значть, что для тебя не страшно. Может ты дифуры решал или писал на листочке хитровыебанную сортировку.
Раньше были векторы, после того, как узнал о плюсах и минусах, применяю по задаче. unordered_set нравится за самую большую скорость большинства операций.
When choosing a container, remember vector is best
Leave a comment to explain if you choose from the rest
– Tony Van Eerd
Ну про сеты и мапы - я упоминал что в практике не попадались.
Вектор на самом деле по ощущениям решает процентов 80 если не 90, задач с которыми я встречался. Плюс его можно быстро скастовать до сишного куска памяти, что полезно при работе с теми же видяхами (занесло меня в геймдев на мобилки) да и процы его не плохо оптимизируют. Но он не идеален. Большой кусок памяти слишком большой - хер ты его выделишь. А так же, при вне плановом расширении итераторы летят по пизде.
Лист - имеет проблемы и подводные камни. Наверно самый весёлый - с 11 стандарта size вычисляется за константное время
А вставка и удаление за линейное. Но у него есть не явный плюс, что в многопоточности итераторы не проёбываются.
Дек - как попытка совмещения сильных сторон первых двух хорош и решает проблему хранения гиганских объёмов данных, но у него есть то же свои проблемы. К примеру он в некоторых ситуациях медленнее на 20 или 30 процентов вектора.
Как-то так чего вспомнил, примерно то же самое рассказал.
hzaddr_t
>uint8_t
Ты внимательнее посмотри на тип. u - обозначает беззнаковое
int - целое 8 кол-во бит. Его конечно можно использовать для хранения битовых значений (целых восьми штук!)
Указатель uint8_t хранит в себе адрес ячейки памяти (32 или 64 бита), на которую он указывает. В данном случае ты говоришь компилятору что по данному адресу лежит 8-ми битное число. Но то что лежит там на самом деле - твои проблемы.
Если ты приведёшь его к char указателю, то компилятор работая с ним будет рассматривать эту ячейку как указатель символ.
И как мне сделать захват по константной ссылке, например чтобы захватить объект.
> Объясните, почему этот код работает, я захватываю х по ссылке
А ты что ожидал? Что у тебя за шиворотом кусок говна окажется из-за этого? Ну говори свой адрес, мы тебе всем тредом это обеспечим.
Что токсик, блять. Что ты ожидал увидеть? Что такое "код работает"? Как ты это определяешь? Кодоработометром?
Ну вот у меня есть код (не твой), который не выводит 50. Он работает?
Тебе повезло. Перекомпилируешь с другими флагами/другим компилятором/не в ту фазу луны ии он перестанет работать
Это UB. А вообще труп страуса уже давно пишет гайд как правильно плавать к этой каше конструкций языка и не оказываться по верхнюю губу в говне. Будешь всё это соблюдать - будешь жить счастливо без UB и вопросов почему работает/не работает.
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
Вместо void-функции.
Это действительно антипаттерн? Мне лично такой подход нравится.
Читать такое невозможно. Если для того чтобы понять код нужно скролить в начало или даже смотреть в хедер, то это чистейший говнокод. А если там snake_case, то это говно невозможно отличить от вызова конструктора.
понял
Я бы установил просто qt и просто собирал бы на orange pi проекты, но там не откуда qt скачать, во всех ОС все ссылки для скачивания qt не работают
Тебе надо указать под какую архитектуру ты компилировать собрался. Предположу что в конфиге или мейке есть переменная. Поищи.
По делу есть что сказать?
Извини, в глаза ебусь. Проблема не в указании сборки.
При поиске "orange pi bits/libc-header-start.h"
Выдало ссылку на гитхаб https://github.com/sirfz/tesserocr/issues/130
Попробуй в там посмотри или по ключевым словам.
Также узнал, что string это просто typedef для инстанцирования шаблона родительского класс <char>. Попробовал инстанцировать шаблон для интов, получил строку интов, ощущения как будто залез в подкорку мироздания.
Решил проблему, почему то фаилы лежали не там где надо, помогло создание ярылков
ln -s /home/zloyben/orangepipc/sysroot/usr/include/arm-linux-gnueabihf/sys/* /home/zloyben/orangepipc/sysroot/usr/include/sys
Все получилось
ух ты строка интов, надо будет почитать про шаблоны, а то я в свое время так и не изучил
какая функция будет точкой входа решает не ОС а компилятор
ОС ожидает определенный формат файла бинарника
например в линуксе это эльф
https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format
и там в поле e_entry лежит адрес точки входа
Лол двачую. Установил себе рядом с виндой дебиан, думал буду изучать особенности программирования под линукс, posix, gcc, вся хуйня. А потом понял, что так может продолжаться долго и решил, что лучше буду специализироваться на винде, чем знать все платформы, но по верхам.
Кстати, а могу я в линуксе напрямую обратиться (не через системный вызов) к клавиатуре например и заставить ее могнуть лампочкой? Винда я так понял только через винапи позволит такое.
> могу я в линуксе напрямую обратиться (не через системный вызов) к клавиатуре например и заставить ее могнуть лампочкой
Тебе придётся писать модуль ядра. А API там максимально каловое, почти винапи.
> Винда я так понял только через винапи позволит такое.
Под виндой наверняка найдёшь либу для своей клавы.
>Кстати, а могу я в линуксе напрямую обратиться (не через системный вызов) к клавиатуре
Через файл.
Не считается, файл это интерфейс ОС.
Возьми любую штуку из повседневной жизни. Например реализуй систему заказов в кафе, где посетители асинхронно делают заказы, а ты это автоматизируешь. Пример посложнее придумай
+++
Сортировку.
Купи по первой ссылке в гугле/торе
Любой VPS или, если подходит, хостинги докер-контейнеров. Последние даже бывают бесплатные.
У меня теорию формальных языков читала максимально похуистичная бабуля на кафедре, лабы принимала она и еще какой-то древний доисторический дед.
Из курса максимум смог запомнить что такое детерменированный конечный автомат.
А так еще конечно было всякое, и про ast, и про нка, теоремы о преобразовании дка <-> нка, лабы оп yacc и lex, которые вроде бы все списали по итогу, и регулрярки, и т д, жалею конечно что на интересный предмет по итогу забил хуй (как и на 90% остального, что нам преподавали), но и преподы у нас говноеды были еще те.
Все минусы, которые ты перечислил, происходят из твоего криворукого ДНК. А жесткие ссылки - это охуенно, и виндобляди сосать, что так не можете. Это позволяет мне в одно и то же время производить разное деление фотографий на категории, и использоване места на диске от этого не множится. Symbolic сосать, короче.
Поясните за ABI который так не хотят ломать. У меня вообще какой то эффект Манделлы с этой хуиты, будто я перенесся из параллельного измерения. Разве ABI не меняется с каждым релизом компилятора и либ, мажорным-минорным похуй, да буквально с каждым пуком. И по этой самой причине прыщеблядье качает по сотне мегабайт аптейтов каждый день.
И еще
> ABI is .. mangling ..
Разе это не определяется целиком компилятором и ровно для этого придуман "extern C" или как там его.
> производить разное деление фотографий на категории
Бля, теперь также хочу. А еще хочу, чтобы у каждого графического файла были вшиты теги, по которым их можно отбирать
ftp сервер
>теорию формальных языков
один из интереснейший курсов которые можно (если повезет с преподом), получить в вузике учась на программиста
При чем тут вообще это говно древнее когда речь идет про изменение ABI плюсов?
>Кстати, а могу я в линуксе напрямую обратиться (не через системный вызов) к клавиатуре например и заставить ее могнуть лампочкой?
Да, понажимай пальцем на NumLock.
Да всмыыыыыысле, я специально правила искал, нихуя не нашел такого, и много тредов рядом вижу с перекатом на 500. Я думал, вы тут так долго сидите, потому что иногда и до 2000 доходите, ебанутые просто.
Чел, если ты не можешь досидеть хотя бы до 1000, то какой из тебя крестовик? Тебе тогда надо в питон идти.
Так под правилами я имею ввиду технические особенности всей борды, когда там бамплимит наступает и тред тонет. Это ж не может оверрайдиться для отдельной серии тредов, потому что живые люди перекатывают, а человек человеку человек, может и обосраться, и кончи сглотнуть... Вот есть бесконечные треды, которые сверху режутся на 502 где-то, а про другое не знаю.
А с чем он еще связан, лол? После определенного количества постов дальнейшая активность перестает поднимать тред в списке, и все больше и больше других тредов поднимаются выше него, пока он не выпадает из списка. Перекаты нужны, чтоб тред снова ожил в списке. Не?
Это тебе не /b/. Нужен тематический тред - переходишь в него по тегу. А тред, висящий в топе, привлекает только всяких мимокрокодилов, толстяков и шизиков. Сразу после бамплимита резко повышается адекватность треда.
Ладно, я просто случайно осознал, что для объявления параметра-ссылки не обязательно определение структуры, которая по ссылке, и придумал шутку для шапки.
for (cost auto & it : entries)
{
auto I = std::distance(entries.begin(), it);
}
Как взять индекс I в таком цикле, работает при for (auto it=entries.begin(); it! = entries.end(); it++), а в варианте #1 нет. Не то, чтобы проблема, но хочется знать.
На хранение мантиссы отводится 52 явных + 1 неявный бит.
Соответственно, получаем, что целое максимальное число, которое точно может храниться в мантиссе - это (2^53)-1, что примерно равно 10^15.955 или 9007199254740990 (16 десятичных цифр).
Где ещё одна десятичная цифра?
В данном случае "точность" значит количество знаков, необходимых для точного раунд-трипа string->double->string (15 знаков) или double->string->double (17 знаков). Я давно с флоатами не имел тесных отношений поэтому не могу сказать больше, чем гугл.
Если версия старше 20 и нет концептов, то можно попробывать https://ru.wikipedia.org/wiki/Curiously_recurring_template_pattern
Получится задизайнить как с виртуальным наследованием, но вся магия будет на этапе компиляции
Если версия старше 20 и нет концептов, то можно попробывать https://ru.wikipedia.org/wiki/Curiously_recurring_template_pattern
Получится задизайнить как с виртуальным наследованием, но вся магия будет на этапе компиляции
Вопроса два:
1) какую посоветуете виртуалку именно для отладки и теста драйверов (virtualbox я уже возненавидел и удалил, его даже поставить и использовать без анальной дрочки и гуглинга нельзя)
2) И где можно в принципе почерпнуть опыта современного котенга с реальными примерами, чтоб механику понимать, бсодов избегать и баги не плодить (не дохуя поймёшь трейсингом, когда каждый первый вызов улетает в syscall-ебеня)
Это копия, сохраненная 14 октября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.