За последние две недели я работал над парой вопросов.
Окружающая среда сёгуна
В Shogun было несколько глобальных переменных и глобальных методов для инициализации этих переменных. Таким образом, пользователям пришлось сначала инициализировать глобальную среду, а затем начать использовать shogun, что кажется ненужным:
init_shogun(); // code exit_shogun();
Мы заменили эти глобальные переменные/методы одноэлементным классом, который их инкапсулирует и устраняет необходимость инициализации и выхода из среды. Вы можете подумать, что синглтон ненамного лучше глобальных переменных! Но, в конце концов, нам нужны эти глобальные переменные, и нам нужен только один экземпляр из них, так что это кажется подходящим вариантом использования.
spdlog и fmtlib
Мы движемся к принятию новых функций C++. Одной из них является библиотека форматирования «fmtlib», которая частично подходит к C++20. Стандартный способ форматирования в C++ — использование iostreams. Проблема в том, что они довольно многословны. Возьмем, к примеру (взято со страницы fmtlib github):
std::cout << std::setprecision(2) << std::fixed << 1.23456 << "\n"; // vs printf("%.2f\n", 1.23456);
Таким образом, мы фактически используем sprintf
для форматирования. Проблема в том, что возможности регистрации SGIO
(класс ввода-вывода сёгуна) ограничены в том смысле, что трудно перенаправить вывод в разные потоки. Здесь сияет spdlog, удивительно гибкая и быстрая библиотека ведения журналов, использующая «fmtlib». Теперь пользователи могут перенаправлять потоки с помощью гибкого интерфейса приемника spdlog.
Чтобы работать над этим, мне пришлось сначала включить эту библиотеку в кодовую базу, используя CMake, инструмент сборки, который мы используем. Удивительно, но это был самый трудоемкий шаг! CMake был для меня чертовски запутанным беспорядком!
Заключительные замечания
Это последняя неделя второго триместра. Я многое узнал о C++, программировании в целом, лучших практиках и многом другом. На последнем семестре я начну изучать некоторые из уже реализованных алгоритмов машинного обучения в сёгуне, как побочный для меня проект, и (надеюсь) напишу о них.