The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

26.09.2017 23:47

Компания Google представила проект Abseil, в рамках которого открыта коллекция полезного кода для разработчиков на языке C++, расширяющего стандартную библиотеку функций. Исходные тексты распространяются под лицензией Apache 2.0.

В состав библиотеки включены функции общего назначения, используемые в продуктах Google и хорошо протестированные на реально работающих проектах. Одна часть предложенных в Abseil функций заполняет ниши, не определённые в стандарте C++, а другая предоставляет альтернативные реализации штатных возможностей стандартов C++14 и C++17, адаптированные для использования в коде на C++11 (например, типы optional, any и string_view). Google не пытается продвигать Abseil как альтернативу стандартной библиотеке, а лишь желает поделиться с сообществом кодом, который оказался полезен в собственных проектах.

Компоненты библиотеки:

  • base - базовая часть, включающая код для инициализации и первичные примитивы, которые используют только стандартную библиотеку C++, но при этом выступают в качестве зависимостей для других компонентов Abseil;
  • algorithm - библиотека с коллекцией алгоритмов, дополняющая одноимённую стандартную библиотеку C++ и включающая варианты предложенных в ней алгоритмов, оформленных с использованием контейнеров;
  • container - библиотека с дополнительными контейнерами в стиле STL;
  • debugging - отладочная библиотека, добавляющая проверки для выявления утечек;
  • memory - включает совместимую с C++11 реализацию std::make_unique() и других функций, связанных с управлением памятью;
  • meta - включает совместимые с C++11 версии механизмов проверок типов, появившихся в библиотеке type_traits в C++14 и C++17;
  • numeric - предоставляет совместимые с C++11 реализации 128-разрядных целых типов;
  • strings - подборка функций для обработки строк, включая absl::StrCat(), absl::StrJoin() и absl::StrSplit(), а также совместимую с C++11 версию типа std::string_view, появившегося в стандарте C++17
  • synchronization - примитивы для организации параллельно выполняемых потоков, класс absl::Mutex (оптимизированная замена std::mutex) и набор абстракций для синхронизации потоков;
  • time - функции для операций с абсолютными моментами времени (absl::Time), отрезками времени (absl::Duration), форматирования и разбора значений времени. Также предложен absl::Now() , оптимизированный вариант std::chrono::system_clock::now();
  • types - подборка типов, например, совместимый с C++11 вариант absl::optional.

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

  1. Главная ссылка к новости (https://opensource.googleblog....)
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/47275-cpp
Ключевые слова: cpp, abseil, google
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Crazy Alex (ok), 00:06, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –11 +/
    Какая-то совершенно бессмысленная штука. Зачем нужна (почему не взять сразу нормальный компилятор) - непонятно, зато фактически обещают всё постоянно ломать и исключают возможность нормального использования как shared lib, от которой зависит софт в дистрибутиве.

    Хотя, к моему удивлению, они в кои-то веки плюс-минус поддержали исключения. Надо же, окстились слегка.

     
     
  • 2.3, skybon (ok), 00:24, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Самое весёлое, что с std::variant<T, E> и std::expected на горизонте исключения больше не нужны для современной обработки ошибок.
     
     
  • 3.4, Аноним (-), 01:03, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Только во влажных мечтах растодетей.
     
  • 3.7, Crazy Alex (ok), 02:44, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Какая милая наивность. expected иногда хорошо подходит, но никоим образом не делает исключения ненужными (не говоря о том, Что оно само на исключениях основано). Во многих случаях оно излишне или прямо мешает, путая основной code path с разного рода реакциями на экзотику.

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

    Ну, или вам в C/go, это там любят всё явно на каждый чих проверять.

     
     
  • 4.8, angra (ok), 03:12, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +15 +/
    > Ну, или вам в C/go, это там любят всё явно на каждый чих проверять.

    Вот лохи то, не то что реальные пацаны, программы которых просто падают с абсолютно одинаковым unhandled exception по совершенно разным причинам. Ведь пользователь ни в коем случае не должен узнать, что именно пошло не так. А то еще загуглит решение или сам решит проблему. Нет, пользователь программы должен страдать.

     
     
  • 5.18, Анинимим (?), 10:06, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    То ли дело error codes --- пусть пользователь даже не знает, что программа игнорит критическую ошибку, пока не станет слишком поздно
     
     
  • 6.27, Crazy Alex (ok), 11:12, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это как раз с expected решается (не проверишь, а там ошибка - получишь старый добрый exception), но код уж больно замусоренный когда проверка на ошибки перемешана с основной логикой.
     
  • 5.24, Crazy Alex (ok), 11:05, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, ты передёргиваешь, и сам это понимаешь. Отложить обработку исключений в конец функции - совсем не то же самое, что один try-catch на всё про всё. Ну а чтобы вообще unhandled exception получить - такое я в плюсах очень редко вижу в отличие от питона того же.

    Во-вторых, часто пользователю и правда абсолютно побоку, что именно пошло не так. Главное - этом должно быть вывалено  достаточно инфы чтобы осмысленно репортить проблему.

    А вот с проверкой на каждой строке код становится весьма неудобно читать - слишком отвлекается внимание от основной логики. Что уменьшению количества ошибок никак не способствует. Плюс это много медленнее, чем исключения (если исключения достаточно редки, конечно).

     
  • 5.28, А (??), 11:16, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Код ошибки: Опаньки что-то пошло не так
    ГуглХроме стайл
    Когда же доктора научатся вместо истории болезни такие коды ошибок использовать?
     
  • 4.10, Vkni (ok), 04:58, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Во многих случаях оно излишне или прямо мешает, путая основной code path с разного рода реакциями на экзотику.

    Для такого сценария как раз почти подходит variant. Но я сомневаюсь, что в нём сделали bind.

     
  • 3.9, Vkni (ok), 04:52, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    std::variant - это довольно дeбильная штука, т.к. если T и E - это один тип, то получается карачун.
     
  • 2.12, Sabakwaka (ok), 05:31, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +8 +/
    >> Какая-то совершенно бессмысленная штука.

    Но у тебя против неё есть волшебная сила — идти мимо.

     
     
  • 3.25, Crazy Alex (ok), 11:07, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А то! У гугла вообще много странного, которое, вероятно, не с пустого места родилось, но либо нормально себя чувствует именно в их экосистеме либо вообще дохнет со времененм по ненужности. Одно GWT вспомнить.
     

  • 1.2, deadfood (ok), 00:19, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Зачем это нужно, когда есть буст?
     
     
  • 2.5, Аноним (-), 02:31, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +9 +/
    от буста в последние годы разрабы бегут как от дуста ...
     
     
  • 3.17, RaizerHall (?), 09:56, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Едрить коптить. То его все задрачивали, а теперь оказывается все от него бегут. Что произошло?
     
     
  • 4.20, Аноним (-), 10:19, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    вышли стильно молодежные стандарты? с более понятными доками и прочим?
     
  • 4.23, Аноним (-), 10:33, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Что произошло?

    Джун сэкстраполировал свою неосиляторскую шаражку на весь мир.

     
  • 3.33, Аноним (-), 14:11, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А мужики-то не знали...
     
  • 2.6, Аноним (-), 02:36, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Зачем это нужно, когда есть раст?
     
     
  • 3.15, Аноним (-), 09:36, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +17 +/
    Потому, что не каждый разработчик педе...ст.
     
     
  • 4.39, burjui (ok), 12:24, 28/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    пупоразрывающий хохот, сопровождаемый руколомными аплодисментами, Петросян вскочил со своего места в зале и пустился в пляс
     
  • 3.29, Василий Теркин (?), 11:43, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А что, Rust как язык, уже стандартизировали?
     
  • 2.13, Аноним (-), 07:56, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Когда-то было скучно и я писал многопоточный процесс-сервер на boost. С тех пор я не то, чтобы boost не люблю, но неприязнь ко всем плюсам. Там была ошибка передачи данных в какой-то конструктор, у которого была нехилая перегрузка. Сообщение об ошибке настолько непонятным, что даже Гугл еле помог. Точнее, он помог найти описание ошибки на форумах, где говорилось, что её текст Вам ничем не поможет, а на самом деле в конструктор просто передавался неверный аргумент или что-то в этом духе.
     
     
  • 3.16, Аноним (-), 09:42, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты просто не умеешь в многопоточность. Ни в одном языке против неё не существует серебрянной пули.
     
     
  • 4.19, анон (?), 10:09, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    сообщения об ошибках компиляции в плюсах известная слабость. Про это и деды писали, то ли меейрс то ли этот, как его, забыл какого-то пенсионера из собеса для всяких александреску. В советах про эффектив стл вроде пару советов было - как читать ошибки размером со страницу текста. При этом сишечка, что характерно, за все эти десятилетия до такого не дошла. В дом престарелых не собирается.
     
  • 4.31, anonymous (??), 12:12, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    erlang
     
     
  • 5.37, Crazy Alex (ok), 17:42, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    О да, там-то сообщения - вершина понятности. Причём, блин, в рантайме.
     

  • 1.14, Аноним (-), 08:07, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Зачем это нужно, когда есть dlib?
     
  • 1.21, Аноним (-), 10:26, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >предоставляет альтернативные реализации штатных возможностей стандартов C++14 и C++17, адаптированные для использования в коде на C++11

    ой, а можно тоже самое, только с c++11 и c++03?

     
     
  • 2.34, Аноним (-), 14:13, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>предоставляет альтернативные реализации штатных возможностей стандартов C++14 и C++17, адаптированные для использования в коде на C++11
    > ой, а можно тоже самое, только с c++11 и c++03?

    Boost.

     
     
  • 3.38, SPYIIS (?), 22:34, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Hooyust
     

  • 1.22, yet another anonymous (?), 10:30, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В google coding standard использование своего метапрограммирования (да и шаблонов) было запрещено. Как они дошли до создания subj?
     
     
  • 2.26, Crazy Alex (ok), 11:10, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И исключений. Тем не менее дошли. А куда деваться - текущие плюсы без всего этого становятся совершенно бессмысленными - это стало слишком важной частью языка.
     
     
  • 3.35, Аноним (-), 14:45, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее "выработалась методика правильного использования эксепшенов"
     
     
  • 4.36, Crazy Alex (ok), 17:41, 27/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Она сто лет как выработалась - с момента ухода от checked exceptions. Но гугл зависел (и зависит), от старого кода, где эксепшны не живут. Но сейчас ежу ясно, что плюсовая библиотека общего пользования без эксепшнов и прочих удобных и полезных плюшек просто не взлетит. Тем более, если они претендуют на использование современного тсиля плюсов и реализацию фишек новых стандартов.
     
     
  • 5.40, анон (?), 16:05, 28/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    никаких изменений по поводу исключений нет.
    https://google.github.io/styleguide/cppguide.html#Exceptions

    Сомнительная вкусность плюшек исключений всё так же недостаточно заманчива для гуглокодеров.

     

  • 1.30, Аноним (-), 12:08, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > container - библиотека с дополнительными контейнерами в стиле STL;
    > в стиле STL;

    Ничем не учатся...

     
  • 1.32, dq0s4y71 (ok), 12:30, 27/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Очередная реализация strings для С++? Пора уже, а то давненько что-то не было...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру