Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Бесплатный CLion?

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

Казалось бы дело в шляпе, но там надо показать регулярные коммиты за три месяца, а у меня пока ещё и месяц не прошёл. Но я придумал план, надёжный, как швейцарские часы, — два месяца рефакторинга. Буду перетаскивать очевидные сишные части на Си++. Начал со строк — переписываю сишные указатели на нормальный std::string.

Придётся, видимо, пока взять в качестве редактора VSCode, вот только он не IDE. Ну а какой выбор? В процессе знакомлюсь с тем, что умеет Си++. Смотрите какая прелесть:

std::ostream &operator<<(std::ostream &os, const Colors &color) {
    static const std::map <Colors, std::string> colorNames = {
            {RESET,   "39;49m"},
            {BLUE,    "01;34m"},
            {GREEN,   "01;32m"},
            {CYAN,    "01;36m"},
            {RED,     "01;31m"},
            {MAGENTA, "01;35m"},
            {YELLOW,  "01;33m"},
            {WHITE,   "01;37m"},
            {BLACK,   "01;30m"},
    };

    os << "\033[" << colorNames.at(color);
    return os;
}

В Си это была большая функция с оператором switch, которая выводила на экран последовательности для переключения цвета, её надо было вызывать отдельно каждый раз. На Си++ всё удобнее:

std::cout << YELLOW << mess[2] << std::flush;

Рраз и строка жёлтая. YELLOW тут у меня — значение перечисляемого типа Colors.

8 комментариев
Al.zatv 11 мес

Vscode — не ide? Нет:) он ide, и фичей у него побольше чем в пайчарме. Особенно в части отладки в докере, или по ssh, или в мультиязыковой отладке.

Надо только не забыть войти во вкладку расширений, и кликнуть инсталл на расширении для С++. И будет всё идешное: отладчик, навигация по коду и прочее что мы любим.

Евгений Степанищев 11 мес

Я ставил плагины, но возможно я действительно просто не умею его готовить. Он мне даже код форматировал как в JS, а не как в Си++.

Сергей Чебан 11 мес

Вместо std::string лучше использовать std::string_view или даже const char *. А для истинных ценителей — std::array<char, 7>.

Евгений Степанищев 11 мес

Мне тут чатгпт подсказывает, что std::string_view без копирования и изменения. Это интересно, а std::array<char, 7> зачем?

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

Антон 11 мес

Он мне даже код форматировал как в JS, а не как в Си++.

Это как? Мусташи в египетском стиле, а не на следующей строке, как прадеды завещали, что-ли?

Евгений Степанищев 11 мес

Наоборот, ставит на следующую строку.

Кирилл 11 мес

Надеюсь, никогда не придется работать там, где кодстайл требует скобку на той же строке.
А по делу: в современном с++ рекомендуется использовать enum class. Придется, конечно, везде писать Colors::yellow, зато общее пространство имён не загрязняется и отсутствует возможность случайного неявного преобразования в целочисленные типы.

Евгений Степанищев 11 мес

Надеюсь, никогда не придется работать там, где кодстайл требует скобку на той же строке.

Почему? Это же дело привычки и ничего более.

А по делу: в современном с++ рекомендуется использовать enum class.

Я смотрел на него, но так многословно получается (( Загрязнять глобальную зону плохо, но но ведь у этого «плохо» есть аргументация — конфликты имён, а тут откуда им взяться?

Кирилл 11 мес

Почему? Это же дело привычки и ничего более.

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

а тут откуда им взяться?

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

Евгений Степанищев 11 мес

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

На мой взгляд, это не так. Я в разных языках сталкиваюсь с разными правилами форматирования кода, на любое из них перестаёшь обращать внимание, главное, чтобы они были.

Впрочем, тут говорит мой профессиональный опыт работы с большими проектами…

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

Я понимаю, что с хорошо развитым языком, как правило, идут и хорошие практики, но у них всегда есть аргументация, — «не используем то-то, потому что»… Мне кажется загрязнение глобальной зоны видимости здесь не существенный аргумент — я один в проекте и эту зону контролирую единолично.

abrakadabr80 11 мес

Кирилл, держите ваши бляцкие «практики» при себе!
«Наследие текстовых дисплеев» напрочь засело мусором в вашей тупой башке; гниёт, воняет и никак не хочет оттуда высраццо!
Жаль… Очень жаль.
Поистине Титанического Терпения вашим коллегам, что по неосмотрительности али недоразумению вляпались в работу с вами.

Евгений Степанищев 11 мес

Давайте снизим градус, всё-таки.

Кирилл 11 мес

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

ppavel 11 мес

Jetbrains выдаёт all products license тем кто проходит их курсы.
Пройти 3 раздела в бесплатном https://hyperskill.org/tracks/41?category=8 и пришлют лицензию на месяц. Через месяц пройти следующие три. В качестве временного решения годится

Евгений Степанищев 11 мес

О, спасибо, хороший способ!