LINUX.ORG.RU

Google представил открытую библиотеку Abseil для разработчиков на C++

 , , ,


0

4

В понедельник Google выпустил исходные коды библиотеки Abseil, созданной для того, чтобы значительно дополнить стандартную библиотеку языка C++. Данный код на протяжении многих лет использовался как базовая библиотека при разработке закрытого ПО, но был вынесен в отдельный открытый проект для упрощения открытия исходных кодов и разработки других библиотек, например, protobuf, grpc и tensorflow. Код распространяется под лицензией Apache 2.0.

Библиотека собирается с помощью bazel — системы сборки с открытым кодом, которая используется в Google. Данная система сборки позволяет точно контроллировать зависимости и получать воспроизводимые артефакты, но достаточно неудобна для повседневного использования. Но библиотека предполагает статическую линковку, так что её интеграция в любую систему сборки будет тривиальной.

Интересные части библиотеки:

  • absl::Mutex — примитив синхронизации, который одновременно может служить мьютексом, condition variable и read-write-блокировкой. Данный класс был разработан до появления C++11, но не был заменён std::mutex и его аналогами, так как предоставляет менее ошибкопорождающий интерфейс.
  • Бекпорты некоторых возможностей C++14/C++17 для компиляторов, поддерживающих только C++11: absl::make_unique, absl::optional, absl::any, absl::span, absl::string_view. При этом при сборке новым компилятором большинство absl:: типов будут обычным typedef для библиотечных.
  • «Стандартный» набор функций работы со строками: split, join, replace, объединение строк, перевод чисел в строки и обратно.
  • Функции и классы для работы с временем и промежутками времени (по сути дублирующие аналоги из std::chrono); 128-битный целочисленный тип данных; InlinedVector, позволяющий хранить маленькие массивы без выделения памяти; и прочее.

В данный момент список не очень большой, но библиотека постоянно будет дополняться.

>>> Подробности на opennet

★★★

Проверено: shell-script ()
Последнее исправление: shell-script (всего исправлений: 1)

Ответ на: комментарий от x86_64

А вот как раз указано что одно время летнее, а другое зимнее.

Где и как это указано?

И имея tzdata это разрулить без можно

Это разрулить можно банальным UTC, если уж указывать дополнительную информацию.

anonymous
()
Ответ на: комментарий от anonymous

Где и как это указано?

Как вариант на фарси добавлена строка. А это существенно?

Считай что есть суффикс «DST» для летнего времени.

Это разрулить можно банальным UTC, если уж указывать дополнительную информацию.

Это от тебя не зависит.

x86_64 ★★★
()
Ответ на: комментарий от x86_64

Как вариант на фарси добавлена строка. А это существенно?

Нет, просто интересно как люди извращаются.

Считай что есть суффикс «DST» для летнего времени.

Ну т.е. используем нечто нестандартное, но хотим, чтоб все просто работало. Ок, у QTimeZone есть метод offsetData, вполне подходит для коррекции. Кода будет аж на пару строк больше, тем более что вы и так костыль написали для своего фарси. На претензию - почему Qt не умеет «из коробки», спрошу в ответ, а кто умеет?

Это от тебя не зависит.

Ну так и это не мои проблемы.

anonymous
()
Ответ на: комментарий от anonymous

Ну т.е. используем нечто нестандартное, но хотим, чтоб все просто работало.

Наличие летнего времени стандартно, то что до него сложно добраться - проблема Qt.

а претензию - почему Qt не умеет «из коробки», спрошу в ответ, а кто умеет?

Я не знаю. Но я и не говорил, что где-то использование таймзон - не боль.

x86_64 ★★★
()
Ответ на: комментарий от anonymous

Ок, у QTimeZone есть метод offsetData,

И да там интереснее методы QTimeZone::previousTransition и QTimeZone::nextTransition

Которые и вернут структуру OffsetData.

x86_64 ★★★
()
Ответ на: комментарий от anonymous

это очень серьёзная предъява.

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

vzzo ★★★
() автор топика
Ответ на: комментарий от vzzo

Первый код - говно. Второй - лучше. А эффективный код ты не сообразил как написать.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Тут я соглашусь с пользователем PETER, мода совать графический Гуй Qt во все проекты, даже те которые не нуждаются в такой большой библиотеке - это стрельба из пушки по воробьям... Можно ведь взять специальную библиотеку для временных зон типа этой: https://howardhinnant.github.io/date/tz.html

svyatozar ★★
()
Последнее исправление: svyatozar (всего исправлений: 1)
Ответ на: комментарий от anonymous

Тупые человеки постоянно вводят какие-то строки вместо того, чтобы вводить численное значение time_t :-(

vzzo ★★★
() автор топика
Ответ на: комментарий от vzzo

Пускай они вводят что хотят. ОС в которой они это вводят знает какой у нее выставлен часовой пояс и какие настройки летнего времени. Вот пускай клиент на той стороне и приводит введенное к UTC.

anonymous
()
Ответ на: комментарий от EXL

moc только для наследников QObject нужен, насколько я понимаю. А большинство примитивов сами по себе

arcanis ★★★★
()
Ответ на: комментарий от anonymous

Невозможно оперировать только UTC. Известный пример - напоминалки. Клиент в марте добавляет две напоминалки на твой сервер - одну 1 апреля в 15:00 (по местному), вторую ровно через 720 часов. В базу пишется два одинаковых таймстампа в UTC. На следующий день законом отменяют летнее время. На сервере одна из дат (первая) должна измениться на час, но ты не сможешь узнать какую менять, они у тебя одинаковые с потерянной информацией о зоне.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.