Задать вопрос
  • Какая разница на практике между clang и gcc?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Однажды я на подобный вопрос уже отвечал, правда там вопрос был о кроссплатформенности, а не о трансляторах.

    Какая разница между clang и GCC.
    Разница большая. GCC обладает обширной поддержкой наследия идиом и конструкций из языка C, которые, вынужденно или по своей воле, поддерживает в современном C++.
    VLA, тип по умолчанию, всевозможные изыски синтаксиса C. Это все GCC не глядя принимает за C++ код и позволяет трансляцию.
    GCC даже сегодня многократно нарушает стандарты C++ просто потому что выбрал стратегию поддержки экзотической функциональности C в коде C++. Так же GCC не хвастается и скоростью поддержки стандартов C++.
    В 2016 году Google полностью отказались от поддержки GCC в Android NDK из-за слишком плохой поддержки стандартов и слишком свободного следования стандартам C++. В этот момент GCC стал неконкурентоспособным относительно оставшихся двух самых широко используемых трансляторов.
    Clang же, наоборот, сегодня считается, буквально, бастионом идеального следования стандартам C++. Clang точно поддерживает стандарты во всех деталях, максимально быстро интегрирует изменения и добавления стандартов, позволяет в самых первых рядах поиграться с функциональностью из драфтов следующего стандарта C++.
    Clang обладает обширной системой статической и динамической проверки кода: богатый статический анализ, возможность подключения санитайзеров, поддержка C++ Core Guidelines, очень качественные отчеты об ошибках трансляции, хорошая скорость трансляции.
    Это все ставит clang в предпочтение перед GCC на третьих для GCC платформах.

    О полной совместимости между трансляторами.
    Полная совместимость между трансляторами есть. Иначе я бы не мог делать то, что я делаю. А дело мое заключается в создании полностью кроссплатформенного кода, который однозначно собирается на всех целевых платформах и на всех них выполняется так же однозначно.
    Полная совместимость между трансляторами заключается в строгом соответствии кода выбранному стандарту C++. Всё, точка. На этом к трансляторам требования заканчиваются.
    Только тут есть небольшая проблема. Каждый транслятор по-своему поддерживает стандарт и по-своему реализует неоговоренные стандартом механики. Каждый транслятор имеет свои ошибки трансляции. И вскрывается это все именно в процессе работы над кроссплатформенным кодом.

    Я в своей работе видел многое. Я видел как при смене GCC на clang люди хватались за голову и отказывались от последнего просто потому что он нашел горы нарушений стандарта, которые молча принимал GCC. Я видел как группа из 5 человек 3 месяца рефакторила код при переходе с MSVS2015 на MSVS2017 (т.е. просто при смене версии транслятора) просто потому что разработчики из рук вон плохо знают используемый ими стандарт C++.
    Я видел ошибки в clang, приводящие к неверной генерации кода. Я видел ошибки в GCC, не позволяющие использовать его для кроссплатформенной сборки. Я видел ошибки в MSCL, в результате которых последний явно нарушает стандарт, а команда его разработки отказывается это исправлять потому что "иди нафиг".

    И, тем не менее, конкретно у меня есть возможность писать код ровно один раз и собирать его на 5 совершенно разных целевых платформ совершенно разными трансляторами, на которых этот код работает абсолютно равнозначно. Просто потому что я знаю стандарт и то, как этот стандарт поддерживают выбранные мной трансляторы.
    Ответ написан
    3 комментария
  • Как написать код для таблицы истинности функции на C++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    = - присваивание
    == - сравнение
    Ответ написан
  • Как научиться декомпозировать задачи?

    Adamos
    @Adamos
    Дробить задачу еще на более мелкие совсем не охота

    Ну и зря. Вообще-то технологиям планирования совместной работы уже не первый век, и важнейший этап - как раз выделение тех участков работы, которые критичны для начала работы на других участках, и подтягивание их на диаграмме Ганта как можно раньше, чтобы уменьшить простой. Потом уже менее критичные задачи ложатся на свободные участки и параллелятся относительно друг друга.
    Так, например, нас учили делать генплан строительства еще 30 лет назад. До популяризации в РФ всяких там Скрамов и Канбанов.
    Ответ написан
    8 комментариев
  • Как из гита навсегда удалить файл?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Самый надёжный способ вычистить репозиторий от файла — использовать скрипт filter-repo
    # клонируем репозиторий в соседний каталог
    # иначе придётся использовать ключ --force
    git clone --no-local . ../clonerepo/
    # переходим в свежий клон
    cd ../clonerepo
    # чистим
    git filter-repo --path "path/to/file" --invert-paths
    # проверим что файл исчез
    git log --all --oneline --name-status -- "path/to/file"
    Ответ написан
    Комментировать
  • Как обезопасить jenkinsfile в каждой ветке при mergre веток в multibranch pipeline?

    akelsey
    @akelsey
    Мультибранч чем и хорош, тем что файлы Jenkinsfile идентичные. А вся логика реализуется на переменных (хотя бы BRANCH_NAME). По этому меняйте логику файла, а не придумывайте костыли.
    Ответ написан
    Комментировать
  • Как с помощью рефлексии получить дженерик метод принимающий дженерик параметр?

    class Test
    {
        public T X<T>(T x) => x;
        public T X<T>() => throw new InvalidOperationException();
    }
    
    typeof(Test)
    .GetMethods() // Берём методы
    .Where(x => x.Name == "X") // с именем "X"
    .Where(x => x.IsGenericMethod) // обобщённые
    .Where(x =>
    {
        var parameters = x.GetParameters();
        var genericParameters = x.GetGenericArguments();
        // У которых только один generic-параметр и 1 аргумент, которые равны
        if (parameters.Length == 1 && genericParameters.Length == 1)
        {
            var t0 = parameters[0].ParameterType;
            var t1 = genericParameters[0];
            return t0 == t1;
        }
        else
        {
            return false;
        }
    })
    Ответ написан
    Комментировать
  • Что представляет собой C# без .Net?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Мащинный код невозможно представить без процессора, в котором есть огромный функционал, но можно ли работать на чистом машинном коде и в каких областях это может использоваться?
    Ответ написан
    1 комментарий
  • Зачем нужны корневые сертификаты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кажется, что вся эта конструкция держится на том, что тот единственный корневой (?) сертификат, которым подписаны все остальные, есть только у удостоверяющего центра.
    Именно. Система держится на доверии к УЦ.

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

    И сразу второй вопрос: почему какой-нибудь Fiddler, который устанавливает в систему свой корневой сертификат вообще работает?
    Без установки своего корневого сертификата Fiddler не сможет перехватывать https-трафик. Тот, кто ставит себе Fiddler, должен понимать, что в системе возникает уязвимость.
    Ответ написан
    2 комментария
  • Xamarin актуален?

    Лучше под нет кор профилироваться.
    А вместо xamarin сейчас maui
    Ответ написан
    Комментировать
  • Как найти функцию?

    GavriKos
    @GavriKos
    Микропетпроджект - домашнее облако homeCloud
    Задачу можно разбить на две подзадачи:
    - перевод графика в чиселки - т.е. в пару x-y. Тут надо исходить из того что там за картинка.
    - по паре x-y можно математическими методами получить функцию, вот только она может быть не той что была изначально. Задача чисто математическая.
    Ответ написан
    Комментировать
  • Какой объем знаний и навыков нужно для того чтобы стать middle Rust разработчиком?

    vabka
    @vabka Куратор тега Rust
    Сейчас редко нанимают чистых растаманов, тк язык молодой.
    Обычно нанимают тех, кто переходит с других, более традиционных языков.
    Так что тебе сначала надо стать мидлом/сеньором в C++/Java/C#/C а потом дотянуть знания раста, чтобы уметь на нём решать задачи, аналогичные тем, которые ты решаешь с основным языком.

    Ну и соответствующий коммерческий опыт ~5 лет.
    Учитывай ещё и специфику Rust-проектов: это что-то новое, что требует безопасности и эффективности, где нельзя/нежелательно/невозможно использовать "Традиционные" языки.
    Так что и уровень ответственности и требуемых знаний будет выше, чем на аналогичную, например Java-позицию.
    Ответ написан
    1 комментарий
  • Почему метод дженерик типа в го существенно медленнее нативного?

    hugga
    @hugga Автор вопроса
    Из обсуждения https://github.com/golang/go/issues/50182 видно что проблема с производительностью generics не новая.
    При запуске бенчмарков с флагами получается ожидаемое мной ± равное время выполнения ф-ций:
    go test -bench=. -count=2 -gcflags=all=-d=unified

    BenchmarkNativeFunc-4            2029149               600.5 ns/op
    BenchmarkNativeFunc-4            2018277               591.7 ns/op
    BenchmarkNativeMethod-4          1962086               592.0 ns/op
    BenchmarkNativeMethod-4          2024234               603.9 ns/op
    BenchmarkGenericFunc-4           1985313               573.4 ns/op
    BenchmarkGenericFunc-4           2053454               585.1 ns/op
    BenchmarkGenericMethod-4         2067790               591.3 ns/op
    BenchmarkGenericMethod-4         2054346               612.2 ns/op

    что форсирует применение при компиляции stenciling (трафарет по отдельным типам) вместо словарного подхода реализации дженериков (текущая реализация).
    Остаётся ждать оптимизаций в обновлениях языка
    Ответ написан
    Комментировать
  • Как правильно клонировать приватный репозиторий github?

    Там же написано

    Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
    Ответ написан
    Комментировать
  • Почему в СТЕКЕ разрешается выделять достаточно мало памяти?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да, большинство ресурсов выделяется динамически.

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

    Во-вторых, часто неизвестно заранее, сколько и каких ресурсов надо будет выделять. Плюс ресурсы могут быть использованны в куче разных функций, а значит должны жить глобально или отдельно от какой-то одной функции (например в main), но тогда все будет в куче в одном месте и это тупо неудобно.

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

    Edit: да, если вам нужно больше стека, можно сделать так, чтобы программа получала больше стека. В С++ это делается параметром линкера.
    Ответ написан
    Комментировать
  • Какой стек технологий лучше всего подойдет для работы с объемными базами данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    исходя из вышеизложенного, какой бы стек технологий вы бы выбрали как разработчик чтобы решить вышеописанную задачу?

    Для начала немного контекста - 2 важных примечания:
    1) Описанная задача решается на любом упомянутом стеке, + еще десяток возможных вариантов (Java/Spring, питон, нода, дотнет, голанг и т.д.).
    2) Быстродействие системы зависит от ее самой медленной части, и в 95% случаев самая медленная часть - БД, просто в силу специфики работы: много данных со сложными связями, выборки с сортировкой и фильтрацией из большого массива и вот это все, в то время как язык бэкенда в основном выполняет достаточно простые манипуляции с уже готовыми наборами данных (за редчайшими исключениями, которых в вашем кейсе нет, или они не описаны в вопросе).

    В вашем случае:
    - база можно сказать совсем небольшая, до 1 миллиона записей условный мускуль ворочает весьма шустро, если железо соответствует.
    - задача сбора метрик достаточно тривиальная, особого ума в сохранении действий пользователя не надо, бОльшая часть работы - вывод в красивые графики и написание быстрых запросов с хитрыми выборками/агрегациями, немного пошаманить с формулами, возможно делать какие-то сводные выборки с денормализованными результатами для отчетов и прочие мелочи. Работа не сложная, но нудная, и ее много.

    Насчет стоимости и условий:
    полный самопис 150к+ (я это не тяну) или же сайт на Laravel +MySQL а дальше варьируется.
    полный самопис - либо маркетинг, либо идиотизм, писать на голом языке не будет ни одна нормальная студия, в принципе в данном случае либо используется фреймворк и заказчику преподносится как "сделано вручную программистами девственниками под светом серебряной луны", либо разработчики идиоты, мнящие себя круче всех (нет). В первом случае это то же что и "сайт на Laravel +MySQL" (норма и стандарт для среднего уровня студий), во втором - развод на мани на пустом месте и попытка продать г**но в обертке "иксклюзивнасти".

    По цене - на сегодняшний день, если я не ошибаюсь, 150к деревянных это +- 1000уе. Цена приемлемая за нормальную работу, если найдете дешевле "на Laravel" - думаю будет вообще ок. Опять же, цены штука такая, кто-то за копейки сделает хорошо, кто-то за дорого каку сляпает. Влияет так же регион, понятно что в Мск цена будет серьезно больше чем в условном Челябинске...

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

    UPD:
    проект планируется на 100 к+ посетителей в месяц...
    предупреждают что если аудитория достигнет условных 100 тысяч в месяц Лара начнет потихонечку задыхаться от нагрузки,
    ок, пусть будет 200к для наглядности.
    В среднем, если это маркетплейс, то постоянных посетителей будет не много, думаю около 10%, так что ими можно пренебречь. Условно - 200к / 30 дней = 6600 в сутки, при активных 10-12 часах посещения это ~600 в час. Пусть на 1 посетителя будет 5 запросов страниц, это 600*5=3000 в час = 50 в минуту или менее 1 запроса в секунду.
    Даже если умножить это на 30 (допустим такая пиковая нагрузка), 30rps вообще "ниачем". Не знаю кто там вам считал то это проблема, любое современное железо среднего уровня вытягивает без напряга.
    Ответ написан
    2 комментария
  • Корректно ли сравнивать цифры объявленные как строки, т.е объектом string?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как в ситуации ниже, поступает компилятор?

    Компилятор вставляет вызов string::operator <. Если это std::string, то оператор выполняет лексикографическое сравнение, т.е. сравнивает символы обеих строк по очереди до первой различающейся пары, меньшей будет та строка, которой принадлежит символ с меньшим кодом.
    В примере "100.05" < "100.03" результат будет false потому что 5 > 3.

    Могут ли быть какие-то проблемы

    Для такого сравнения строковые представления чисел должны начинаться разрядами одного веса. Т.е. можно сравнивать "100.05" и "099.1" (первая цифра и слева и справа -- сотни), но нельзя сравнивать "100.05" и "99.1" (слева первая цифра -- сотни, справа -- десятки).
    Ответ написан
    Комментировать
  • Какую конфигурацию лучше использовать для гипервизора с многопользовательской рабочей станцией?

    @LuchS-lynx
    инженер-ПТО
    посмотрите в сторону ProxMox, полностью бесплатный, с веб-интерфейсом, позволяет делать бэкапы, работает как на серверном, так и на игровом железе, установил на свой рабочий ноут и пробросил ВК в ВМ... Под капотом Debian Linux + KVM, что будет точно быстрее Hyper-V.
    https://www.proxmox.com/en/

    https://pingvinus.ru/gallery/4067

    Эта опенсорс-платформа виртуализации, построенная на базе Debian, KVM, LXC, Ceph, давно зарекомендовала себя. Авторы, кстати, говорят о более чем полумиллионе хостов, где она развернута.

    https://habr.com/ru/post/589901/
    Ответ написан
    7 комментариев
  • Как хранить строку в виде байтов?

    @Akela_wolf
    Extreme Programmer
    Что-то я не понимаю чего вы хотите добиться. То что вы говорить - низкоуровневое программирование, для этого вам не нужен C#. Берите C/C++ и наслаждайтесь прямой работой с памятью.

    Вообще со строками есть два подхода. Первый использовал Pascal: в нулевом байте строки хранится её длина. Так как паскаль использовал однобайтную кодировку (ANSI), то этого было достаточно для хранения строк длиной до 255 байт. Вы, в принципе, можете использовать и 2 и 4 байта. И это неплохо работало.
    Второй подход - это подход из C++, когда строка заканчивается символом '\0' (zero-terminated string). Тут тоже есть свои тонкости, в основном связанные с тем, что при определении длины строки нужно помнить что '\0' не входит в её длину. Еще есть потенциальная ошибка, связанная с выходом за пределы строки и повреждением следующих за ней блоков памяти.

    Выбирайте - какой подход вам больше нравится.
    Ответ написан
    2 комментария
  • Почему транслятор ожидает указатель в моем коде?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Параметр функции int arr[],

    Но далее у вас arr[i][j]. Компилятор пытается взять индекс j, но перед ним же уже число. Вот он вам и говорит "начальника, индекс я у массива (указателя) взять могу, а тут число, непонятно".

    Вы обращаетесь с одномерным массивом, как будто бы он двумерный.
    Ответ написан
    Комментировать
  • Как сделать проверку на null?

    Вообще хз, как ты не додумался до самого простого - через if:
    string name;
    if(entity.Name == null)
    {
      name = "Name";
    }
    else
    {
      name = entity.Name;
    }
    DataModel dataModel = new DataModel()
    {
      Id = entity.Id,
      Name = name
    };
    // ...

    Но вообще есть вот такой синтаксис:
    new DataModel
    {
      Id = entity.Id,
      Name = entity?.Name ?? "Name"
    }

    Если нужно ещё обрабатывать пустоту, то самый короткий вариант будет как у freeExec
    Вот ссылки на документацию:
    string.IsNullOrEmpty: https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Про ??: https://docs.microsoft.com/en-us/dotnet/csharp/lan...
    Про ?.: https://docs.microsoft.com/en-us/dotnet/csharp/lan...
    Ответ написан
    Комментировать