Как стать автором
Обновить
8
0.1
Артем Бабаев @simplepersonru

Инженер-программист С++ Qt Qml

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

Девайс очень модный и молодежный, выглядит вкусно. Сам бы точно не купил, по причинам описанным выше @engine9

Рекламные материалы тоже выглядят отлично, дам им немного критики:

https://busy.bar/ при скроллинге на десктопе очень заметно фризит (на заметку)

Самый первый блок с демонстрационным примером, подписанный как Show you’re BUSY - ИМХО видео совсем не отражает кейс использования. Текущий порядок:

  1. Коробка неактивна

  2. подходят с вопросом

  3. коробка демонстративно активируется

  4. раздраженный коллега уходит

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

  1. Коробка активируется

  2. Таймлапсом проходит 5 минут

  3. подходят с вопросом, но видят коробку, разворачиваются

  4. Таймлапсом проходит все время занятости -> занятость снимается

  5. снова подходят с вопросом, на этот раз коллега получит ответ

ИМХО стек это не структура данных, а некий намеренно ограниченный по операциям интерфейс взаимодействия со структурой данных

С какой структурой данных? Это вопрос, т.к. стек можно реализовать и на базе массива, и на связном списке, на каких-то промежуточных типа deque, ...

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

  1. массив,

  2. связный список,

  3. хэш-таблица,

  4. стек,

  5. ассоциативный массив на красно-черном дереве

То это был бы стек

Microsoft blocked the automated download request based on your IP address.

Эх, магии не случилось, и тут нужно заклинание с трех букв

О проекте

Ты находишься на сайте, который был создан для помощи энтузиастам, программистам и просто хорошим людям. Сайт посвящен Российским процессорам архитектуры Эльбрус и не является официальным представителем какого-либо разработчика.

Когда играешь в factorio и выходишь на баланс мощностей только на панелях + аккумуляторах

Можно добавить, что "традиционная база" вполне себе может быть развернута на условном tmpfs (in memory).

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

Теперь можно из него + кучи плагинов, синхронизацией с гит и блаблабла ... Склепать корпоративную wiki ?

Агап, про [[]] пишу "вынуждено", маловероятно что будут менять синтаксис атрибутов.

Но если бы меняли, лично мне нравится Java вариант, достаточно элегантно

@trivially_relocatable_if_eligible
class Pencil {}

Спасибо, чуть понятнее стало почему так (хоть и все равно не очень нравится концептуально по причинам из пунктов)

Спасибо, окей, по кишкам нет вопросов

Возвращаюсь в область вкусовщины и синтаксиса :)

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

  2. Новое ключевое слово - еще больше усложняется разбор исходного кода C++, нужно поддержать всякие matcher-ы, разрабам компиляторов сильно больше работы (чем в сравнении с п.3)

  3. Это при том что в синтаксисе уже есть работающий механизм толкать мета-информацию к символам - атрибуты. Зачем вводить вводить новый механизм, если можно использовать старый

С атрибутом будет длиннее на 4 символа т.к. [[]]

4.Я имел ввиду что это могло бы выглядеть примерно так, как подобные вещи решаются в Java\C#\Rust\... почти любой современный язык на самом деле, про динамические и говорить не нужно:

template <class T>
[[trivially_relocatable_if_eligible]]
class Pencil {
    // ...
};

Давайте попробуем масштабировать количество атрибутов, допустим еще +2 опциональной мета-информации с большим именем появится в С++29 или еще где, неважно. Получается на любую такую фичу нужно вводить новое ключевое слово? Или только выборочно, значит какие-то вещи через атрибуты, какие-то нет

// OK
template <class T>
[[trivially_relocatable_if_eligible]]
[[serializable_if_trivial]]
[[hello_from_stdcpp_mazafaka]]
class Pencil {
    // ...
};


// Сомнительно
template <class T>
class Pencil trivially_relocatable_if_eligible serializable_if_trivial hello_from_stdcpp_mazafaka {
    // ...
};

// Сомнительно, но окей (вкусовщина, но считаю хуже первого варианта)
// + завал мусорных ключевых слов, 
// которые не должны быть ключевыми словами (имхо)
template <class T>
class Pencil 
  trivially_relocatable_if_eligible
  serializable_if_trivial 
  hello_from_stdcpp_mazafaka {
    // ...
};

#embed — ещё одна долгожданная новинка для C++26

Почему как директива препроцессора, у C++ нет "курса" на отход от этого? Только чтобы с языком C было одинаково? Как будто constexpr (consteval) функция в данном случае было бы идеоматически правильнее.

На этапе компиляции ведь файл там же где и был во время препроцессинга, если про .cpp речь, ну с хедерами не сканает так окей. Можно основной интерфейс сделать constexpr функцией c параметрами, макросом только нужную от препроцессора штуку передавать - относительный путь к файлу, в смысле разрулить абсолютный путь, чтобы у единицы трансляции был к нему доступ.

template <class T>
class Pencil trivially_relocatable_if_eligible {
    // ...
};

Честно, вызывает смущение синтаксис trivially_relocatable_if_eligible, ИМХО лучше бы это был атрибут =) Тем более такой длинный. А если потом захочется еще какое-нибудь знание протащить в класс (мета-информацию), дальше в строчку пихать или как. clang-format наверное одуреет с этого =). С учетом что щас нет пользовательских атрибутов (кроме разных самописных плагинов к компилятору), почему бы и нет, никого не обидит резервированный атрибут

Ну и очередная штука которую по идее хочется пихать почти везде, как всякие noexcept, const, explicit, компилятор сам не будет принимать решения о trivially_relocatable? Даже для какого-нибудь Point ?

struct Point {
double x = 0;
double y = 0;
}

интересно, сможет ли https://docs.docker.com/reference/cli/docker/checkpoint/ решить эту задачку, вроде по известным ограничениям проходит. Делать чекпоинты условно каждую минуту с перезаписью старого.

In processFile. ERROR 100:

смутило что эта часть лога пишется руками. как тогда парсить тонны логов, если этот кусок пишет человек? а если в одном месте он напишет ERROR, а в другом месте случайно ЕRROR. не видите разницу? а символ E кирилл цей во втором случае :)

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

[{{dd.mm.yyyy hh:mm:ss}} _ {{context}}]
{{logLevel}}: {{message}}

Несколько порядков?

Я стригусь за 500р в обычной парикмахерской, примем за базовую цену X

Допустим несколько - это 2, возьмем по минималке.

Итого X*10^2 = 50 тыс. руб

Поделитесь, где стригут за такие деньги?

Расскажите, как в С++ с его мощным метапрограммированием получить:

  • Тип, имя второго поля класса

  • Количество публичных полей класса

  • Количество чистых виртуальных функций.

  • Циклы по этим полям\функциям. Для каждой сделать что-то - в императивном стиле

В императивном, а не в страшном подмножестве языка под названием SFINAE или шаблонном функциональном стиле

Как писать более сложные конструкции, абстрактные примеры:

  • Сгенерировать оператор == для класса, реализация:
    сравнить каждое поле с каждым полем other экземпляра класса

  • Сгенерировать реализацию сеттеров для класса, например с механизмом notifyOnChanged (как в Qt или каких-нибудь других реализациях с сигналами).
    Хороший существующий пример на C# - https://github.com/Fody/PropertyChanged

Ответ никак. Никакими стандартными средствами языка такие вещи не провернуть. Есть отдельные библиотеки по типу boost::pfr или MagicEnum, решающие разные задачи с ограниченным применением, и даже суммарно все взять все эти сторонние библиотеки - они не приблизятся по возможностям генерации кода с C# \ Java. Просто потому что C++ пока предоставляет очень скудный функционал по статической рефлексии и [почти] никакой динамической рефлексии

Да, они есть и даже работают

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

КМК для решения этой задачи

... автоматизация поиска и замены различных синтаксических конструкций в исходных файлах С++. Причем не только в виде вывода пользователю в консоль или на экран в среду разработки, но и напрямую в файл.

Стандартное решение в экосистеме clang\llvm - это свой модуль для clang tidy (если не нашлось подходящего среди сотен существующих опубликованных). Многие из них с поддержкой авто-замены (колонка Offers fixes).

Есть и оффициальные гайды по вкатыванию в свои модули, с примерами и скриптами-помогаторами

В этой части статья мало чего нового предлагает и без опоры на существующий опыт

Статью я переводить не стал, так как материала много и он технически сложный, а заодно и передаю привет ППА Хабра.

А в чем собственно суть статьи? По содержанию на пост больше тянет имхо (и скорее в собственном блоге)

писал примерно об этом статью https://habr.com/ru/articles/849432/, упаковать все свое рабочее окружение в докер-контейнер
Работаю так уже 2 года

Справа от всех тарифов есть специальный "Самый быстрый", который может агрегировать от 2ух других тарифов. Например "эконом" + "комфорт" + "комфорт+", тогда по какому тарифу быстрее найдется, такой будет тариф

КМК под это определение

готовые решения общего назначения [для написания парсеров]

Подходит какой-нибудь antlr, но уж никак не LLVM

Информация

В рейтинге
3 794-й
Откуда
Екатеринбург, Свердловская обл., Россия
Дата рождения
Зарегистрирован
Активность