The OpenNET Project / Index page

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

Facebook открыл код C++ библиотеки Folly

03.06.2012 21:19

Facebook объявил об открытии под лицензией Apache исходных текстов библиотеки Folly, в рамках которой представлена большая коллекция C++ классов, дополняющих стандартные библиотеки C++ и набор Boost. Сообщается, что Folly является первым шагом в процессе открытия C++ стека Facebook. Большинство C++ проектов Facebook используют функции данной библиотеки, поэтому решено начать открытие кода с Folly, после чего перейти к переводу других разработок в разряд открытых.

Примечательной особенностью библиотеки является изначальная ориентация на предоставление максимально возможной производительности. Код библиотеки является стабильным и уже давно используется в различных подсистемах Facebook, как правило решающих задачи требующие высокой скорости работы. Кроме того, библиотека очень легко интегрируется в сторонние проекты и проста в использовании. По заявлению Facebook, многими компонентами Folly пользоваться значительно проще, чем доступными альтернативными библиотеками (например, средства форматирования строк folly::format более изящные, чем iostream).

Folly охватывает различные области программирования - от обработки форматирования строк и реализации хэшей, до манипуляций с форматом JSON и упаковки объектов в компактное представление. Например, реализация хэшей AtomicHashMap специально оптимизирована для создания индексов, обслуживающих большое число одновременных запросов на чтение и добавление данных, при очень редких операциях удаления. AtomicHashMap выполняет операции выборки данных без лишних задержек и предоставляет систему блокировок для проведения операций атомарного добавления данных. Переход на использование AtomicHashMap позволил избавиться от узких мест с производительностью ряда поисковых сервисов Facebook.

  1. Главная ссылка к новости (https://www.facebook.com/notes...)
  2. OpenNews: Facebook анонсировал виртуальную машину HipHop и JIT-компилятор для языка PHP
  3. OpenNews: Facebook выступил с инициативой против фрагментации браузеров для мобильных систем
  4. OpenNews: Facebook открывает дизайн своих серверов
  5. OpenNews: PHP-транслятор HipHop позволил Facebook использовать в разы меньше оборудования
  6. OpenNews: Facebook открыл код инструмента для ускорения смены схемы данных в MySQL
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/33999-folly
Ключевые слова: folly, cpp, gcc, facebook
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (114) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 22:12, 03/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –20 +/
    ещё один  ненужный плюсовый мегакомбайн. Когда же закончится этот маразм мегакомбайнов...
     
     
  • 2.2, x0r (??), 22:16, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +11 +/
    я серьезно спрашиваю: расскажите как правильно должно быть?
     
     
  • 3.5, Аноним (-), 22:29, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    несколько тематических библиотек, решающих определённый небольшой круг задач. Со своим коммьюнити, заинтересованном хорошо выполнить задачу. А не комньюнити, которому в принципе насрать на все фичи мегакомбайна, но главное чтобы фичь было много.
     
     
  • 4.6, тоже Аноним (ok), 23:28, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Интересно, каковы критерии "комбайновости". Тот же Boost - далеко не монолит, это как раз скорее общая крыша для тематических библиотек.
    Здесь же, насколько я понимаю, объединяющий фактор - ориентация на веб с его спецификой, вовсе не обязательно плотное взаимодействие классов библиотеки между собой. При чем здесь комбайны и фичи?
     
     
  • 5.11, Аноним (-), 00:48, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Тот же Boost - далеко не монолит, это как раз скорее общая крыша для тематических библиотек.

    Что не мешает ему быть еще тем переростком...

     
     
  • 6.30, jerhsell (?), 09:56, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В каком смысле переростком? Много разных библиотек, есть большие и сложные, есть маленькие и простые, и все это объединено под названием boost, с единым стилем документации. А по вашему как должно быть? Точнее а как вообще может быть иначе, да ещё так, чтоб было ещё лучше?
     
     
  • 7.41, arisu (ok), 12:39, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > и все это объединено под названием boost, с
    > единым стилем документации

    …и граблями с обратной совместимостью.

     
  • 7.42, тоже Аноним (ok), 12:39, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не только единый стиль документации - качество библиотеки, включенной в Boost, не может быть ниже определенного уровня. Отдельные библиотеки, допиливаемые неизвестно кем, такой предварительной гарантии качества не дают.
    Очень мешает в отладке возможность, что ошибка, которую ты ищешь, может быть вовсе не в твоем коде. Boost позволяет этот вариант игнорировать до последнего.

     
     
  • 8.44, Аноним (-), 13:29, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    по крайней мере, на практике этого не видно В бусте есть куча библиотек с матем... текст свёрнут, показать
     
  • 7.98, Аноним (-), 17:21, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > В каком смысле переростком?

    В таком что здоровенная либа, которую при случае совершенно задолбаешься пересобрать, например.

    > Много разных библиотек, есть большие и сложные, есть
    > маленькие и простые, и все это объединено под названием boost,

    При том большие и сложные - с кучей зависимостей, а пересобирать все это счастье just in case - вообще замахаешься. Кутю пересобрать и то пожалуй проще.

     
  • 4.7, Guest (??), 23:58, 03/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >>Со своим коммьюнити, заинтересованном хорошо выполнить задачу.

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

     
     
  • 5.8, Аноним (-), 00:09, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    так я и не говорю про переделки и тоже не понимаю нахрена это ещё кому-то понадобится
     
  • 5.25, Тот самый аноним (?), 05:18, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Деньги кончились, пора открывать, же!
     
  • 5.31, Boboms (ok), 10:09, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    PR + халявные программисты.
     

  • 1.9, anon222333 (?), 00:29, 04/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    мало нам стандартных либ, встречаем замены:
    fbstring (@author: Andrei Alexandrescu)
    fbvector
     
     
  • 2.12, Аноним (-), 00:50, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > fbstring (@author: Andrei Alexandrescu)

    Он обнаружил в стандартной либе фатальный недостаток? :)


     
     
  • 3.125, Aleks Revo (ok), 18:06, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    стандартный фатальный недостаток!
     
  • 2.16, Crazy Alex (??), 01:04, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Если Александреску что-то сотворил на плюсах - я бы не десять, а все сто раз подумал прежде чем критиковать. Он как бы из самых крутых экспертов по ним.
     
     
  • 3.18, Аноним (-), 01:23, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Если Александреску что-то сотворил на плюсах - я бы не десять, а все сто раз подумал прежде чем использовать. Так правильнее.
     
     
  • 4.22, Crazy Alex (??), 02:26, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если не секрет - на чём пишете?
     
     
  • 5.26, 1 (??), 06:20, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +21 +/
    на опеннете же, очевидно
     
     
  • 6.56, Crazy Alex (??), 18:29, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вот и я о том же, что он явно болтун а не программист.
     
  • 3.27, kshetragia (ok), 07:37, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Если человек что-то сотворил на плюсах, я бы не десять - сто раз подумал об его адекватности. А уж если задействовал boost..
     
     
  • 4.33, Aaa (?), 10:19, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    выкинь тогда половину системы (если не больше). выкинь все браузеры, утилиты etc. Они ведь написаны на плюсах
     
     
  • 5.43, kshetragia (ok), 13:17, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да да... снова про миллионы мух. Чем прикажете пользоваться тогда?
     
     
  • 6.51, Crazy Alex (??), 18:19, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Плюсы уметь готовить надо, это да. Так вот Александреску - умеет.
     
     
  • 7.57, arisu (ok), 18:31, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Плюсы уметь готовить надо, это да. Так вот Александреску - умеет.

    он, конечно, круто делает из палок и верёвок космолёты. только это не using, а abusing.

     
     
  • 8.60, Crazy Alex (??), 20:53, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    В крайностях - да Но, во-первых, из этих крайностей и появляется понимание что... текст свёрнут, показать
     
     
  • 9.62, arisu (ok), 21:00, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    на самом деле лучше использовать инструменты, которые позволяют делать то, что х... текст свёрнут, показать
     
     
  • 10.75, Crazy Alex (??), 01:27, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так сейчас он активно участвует в разработке D, где постарался количество зуб... текст свёрнут, показать
     
     
  • 11.77, arisu (ok), 01:36, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    новый цпп, к сожалению, продолжает дело старого то есть, идёт не в том направле... текст свёрнут, показать
     
     
  • 12.106, Crazy Alex (ok), 19:58, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Не без того, но насколько я понимаю дихотомия такова либо вы сложную задачу реш... большой текст свёрнут, показать
     
     
  • 13.107, arisu (ok), 20:06, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    ну, я и не говорил, что D идеален но в общем случае он лучше C впрочем, судя... текст свёрнут, показать
     
     
  • 14.110, Crazy Alex (ok), 20:39, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Я уже с год не особо слежу - до этого честно прочел все сообщения в ньюсгруппах ... текст свёрнут, показать
     
     
  • 15.111, arisu (ok), 20:58, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    жаль только, что компилятор несвободный inb4 я не сказал 171 без исходников ... текст свёрнут, показать
     
     
  • 16.120, Crazy Alex (ok), 16:06, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Опять же - нынешнюю ситуацию не знаю, но вроде и llvm-вариант ldc , и gcc-вариа... текст свёрнут, показать
     
     
  • 17.121, Crazy Alex (ok), 16:07, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Насчет кодогенерации - команда gdc в сторону arm смотрела ... текст свёрнут, показать
     
  • 17.123, Crazy Alex (ok), 16:29, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Залез в обсуждения - gdc нормально работает на arm минимум с сентября ... текст свёрнут, показать
     
  • 17.124, arisu (ok), 16:38, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    хм надо будет опять глянуть я в курсе но, вроде, в начале boehm использовали ... текст свёрнут, показать
     
  • 11.81, Mirraz (?), 09:39, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Позвольте вмешаться в вашу милую беседу Насчёт D неотключаемое автоматическое ... текст свёрнут, показать
     
     
  • 12.83, arisu (ok), 10:32, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    по-моему, GC там вполне отрываем другое дело, что тогда останешься и без станда... текст свёрнут, показать
     
     
  • 13.87, Mirraz (ok), 11:24, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    В C далеко не в каждой программе велосипедят GC, во многих случаях от просто н... текст свёрнут, показать
     
     
  • 14.88, arisu (ok), 11:36, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    автоматические объекты на стеке 8212 это недоGC неотключаемый, кстати и кто... большой текст свёрнут, показать
     
     
  • 15.89, тоже Аноним (ok), 12:51, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Поправка автоматические объекты на стеке 8212 это не GC Это четкая система ... текст свёрнут, показать
     
     
  • 16.90, arisu (ok), 13:21, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    ах, если бы, ах, если бы 8230 точно так же слабо предсказуемо и завязано на ре... текст свёрнут, показать
     
     
  • 17.95, тоже Аноним (ok), 15:20, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Мне до сих пор казалось, что автоматический объект с неопределенным временем жиз... текст свёрнут, показать
     
     
  • 18.97, arisu (ok), 15:58, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    при чём тут 171 время жизни 187 я, вообще-то, намекаю на 171 время умиран... текст свёрнут, показать
     
     
  • 19.102, тоже Аноним (ok), 18:51, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Удаление объекта, конечно, не мгновенно Но его деструктор будет выполнен именно... текст свёрнут, показать
     
     
  • 20.104, arisu (ok), 19:01, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    171 особенно для отладки 187 можно временно включить рефкаунтеровый гибридны... текст свёрнут, показать
     
  • 15.91, Mirraz (ok), 13:52, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Кроме маленьких уютных временных переменных на стеке ничего больше хранить не на... большой текст свёрнут, показать
     
     
  • 16.109, Crazy Alex (ok), 20:09, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ладно, к D это всё не особо относится - стек там как был так и есть, сишные алло... текст свёрнут, показать
     
     
  • 17.112, Mirraz (ok), 21:41, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Реально быстрая работа со строками нудна не всем Хотелось бы верить, но не полу... текст свёрнут, показать
     
     
  • 18.113, arisu (ok), 21:56, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    а бедный Вирт об этом не знал, и написал ажно целую ОС с гуями на языке, к котор... текст свёрнут, показать
     
     
  • 19.114, Mirraz (ok), 06:27, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Это поделие никак не относится к реальному миру, оно из раздела 171 ненормальн... текст свёрнут, показать
     
  • 18.122, Crazy Alex (ok), 16:20, 06/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ссылки искать лень, но идея такова - вся сишная стандартная бибилиотека в D дост... текст свёрнут, показать
     
  • 15.108, Crazy Alex (ok), 20:07, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Предсказуемость вида я могу пнуть систему чтобы она осводбодила те два гигабайт... текст свёрнут, показать
     
  • 12.105, Crazy Alex (ok), 19:49, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Там, к примеру, реально быстрая работа со строками реализована именно за счёт то... текст свёрнут, показать
     
  • 3.32, Некто (??), 10:18, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    То, что сотворил Александреску, должно быть круто, и он действительно один из самых серьёзных экспертов, и, более того, один из оказавших очень серьёзное влияние на весь современный C++. Но, ИМХО, ценность его разработок скорее именно во влиянии на современный C++, чем в возможности практического использования. Использовать его разработки напрямую я бы тоже поостерёгся.

    Вспомним ту же библиотеку Loki. По идеям -- великолепно. Но многие ли используют её, а не возникшие позже аналогичные фичи в boost?

     
     
  • 4.36, тоже Аноним (ok), 11:07, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Видимо, потому, что сильно шаблонизированный код хорошо работает, только когда он работает.
    А вот отлаживать код с хитро закрученными шаблонами... неприятно. Внезапно оказывается, что от высокоуровневого языка ты должен снова вернуться к машинной логике и эмулировать мозгами компилятор.


     
     
  • 5.72, Некто (??), 00:12, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    По моему личному опыту, дикие шаблонизмы со списками типов приемлемо отлаживаютс... большой текст свёрнут, показать
     
     
  • 6.74, arisu (ok), 00:36, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    вообще-то можно ещё механизм формального доказательства использовать. особенно если вспомнить, что шаблоны цпп — это, по сути, функциональный язык с очень уродливым синтаксисом.

    правда, не уверен, что это будет проще толпы тестов.

     
  • 6.99, kshetragia (ok), 17:21, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще говоря в коммерческом проекте за лихо закрученные шаблоны убивать надо веником. Проще уж сразу выкинуть это г-но вместе с тестами, чтобы не вздрагивать по ночам. Код в больших проектах все-таки должен быть прежде всего читабельным и максимально доступным для понимания.
     
  • 4.46, anonymous (??), 13:44, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > То, что сотворил Александреску, должно быть круто, и он действительно один из самых серьёзных экспертов, и, более того, один из оказавших очень серьёзное влияние на весь современный C++.
    > ...

    "Не читайте Александреку" - А. Степанов

     
     
  • 5.53, Crazy Alex (??), 18:23, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    У Степанов специфический подход - для него программист это математик а не инженер. Разницу пояснять?
     
     
  • 6.79, anonimous (?), 09:28, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да. Александреску плодит фенечки ради фенечек на радость "программистам", которые не желают быть математиками и инженерами. Характерный пример --- упоминавшийся где-то здесь vector. Вместо того чтобы взять контейнер с нужными гарантиями под алгоритм (или видоизменить алгоритм под гарантии контейнера) пишем ещё-один-самый-лучший-vector. Конечно, если у тебя vector от Дольче Габбана, тьфу, от Александреску, то ты, без сомнения крутой программист, а не конь педальный, в натуре.
     
     
  • 7.84, arisu (ok), 10:35, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    мда. когда Александреску критикую я или Crazy Alex — это можно понять. но когда подобная тебе амёба, вместо чтобы стыдливо молчать, начинает Высказывать Мнение, то Шариков кажется титаном интеллекта.
     
     
  • 8.93, anonymous (??), 14:31, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Был неправ, врожденное косоглазие не дало мне возможности заметить нереально кру... текст свёрнут, показать
     
  • 4.52, Crazy Alex (??), 18:21, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Наскольок я помню сам Александреску рекомендует использовать "аналогичные фичи в boost". Время прошло - появились хорошие альтернативы.
     
     
  • 5.63, Ytch (?), 22:49, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Наскольок я помню сам Александреску рекомендует использовать "аналогичные фичи в boost". Время прошло - появились хорошие альтернативы.

    Да дело, имхо, даже не втом, что "время прошло". Александреску - это учебник, в каких-то областях/смыслах очень практичный (близкий к практике), но именно - учебник. Множество вариантов, множество тонкостей, универсализм и т. п. Для изучения и понимания особенностей и возможностей - самое то. Boost - чисто практическая реализация конкретных вещей - бери и используй (в идеале, сначала крепко подумав).

     
     
  • 6.71, Некто (??), 00:00, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да-да, я как раз об этом. Отчасти это учебник, отчасти -- освоение новых областей, но не основа для промышленного кода.
     
     
  • 7.76, Crazy Alex (??), 01:28, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Сейчас, когда есть лучшие альтернативы (а скорее - продолжатели дела) - разумеется.
     
  • 2.21, h31 (ok), 01:31, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > fbstring

    Так ведь это старая добрая традиция - писать свой велосипед для строк :D

     
     
  • 3.64, Ytch (?), 22:55, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> fbstring
    > Так ведь это старая добрая традиция - писать свой велосипед для строк
    > :D

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

     
     
  • 4.80, anonimous (?), 09:34, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/

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

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

     

  • 1.10, Аноним (-), 00:46, 04/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Да... ориентировано на скорость :) fbstring копирует данные по-бай-то-во!))) На помойку.
     
     
  • 2.13, Аноним (-), 00:52, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Да... ориентировано на скорость :) fbstring копирует данные по-бай-то-во!))) На помойку.

    Ну это как snappy от гугля. Есть например менее распиаренный LZ4. Он умудряется жать и быстрее и лучше. Одновременно. И на сях сразу, вместо каких-то огрызков от си++, притянутых за уши. Которые нафиг не уперлись и ничего кроме добавочного геморроя не создают (например в ядро хрен просто так включишь, etc).

     
  • 2.17, Crazy Alex (??), 01:20, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Побайтовое копирование там в одном единственном случае, в больлшинстве мест - memmove. В логике глубоко не копался, так что насчет того, что когда в коде встречается - не знаю. Но вообще из опыта обсуждений в группах по D - Александреску к таким вещам очень аккуратно относится, вряд ли случайно такое сотворил.
     

  • 1.14, Аноним (-), 00:54, 04/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    То же самое что есть у любой крупной конторы - свой закос под STL, обросший своими же костылями. Такое есть и у Google и у Яндекс, логично что такой же урод родился и у Facebook. Грустно то, что местный менеджмент не пресекает костыли  на корню.
     
     
  • 2.23, VoDA (ok), 02:30, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > То же самое что есть у любой крупной конторы - свой закос
    > под STL, обросший своими же костылями. Такое есть и у Google
    > и у Яндекс, логично что такой же урод родился и у
    > Facebook. Грустно то, что местный менеджмент не пресекает костыли  на
    > корню.

    Грустно, что компаниям ТРЕБУЕТСЯ перепиливать либы вместо использования стандартных для получения высокой скорости.


     
     
  • 3.24, R (?), 03:06, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Грустно, что компаниям ТРЕБУЕТСЯ перепиливать либы вместо использования стандартных для
    > получения высокой скорости.

    Да вроде как все закономерно - если хочется стандартного (т.е. универсального, чтоб на всех платформах одинаково и без костылей) - то и получится не самый быстрый вариант. А если нужна высокая скорость - то не получится универсальность, поскольку, придется "пилить костыли" под конкретную платформу и под конкретные наборы данных.
    Увы, "за все нужно платить" (С)

     
     
  • 4.28, kshetragia (ok), 07:42, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Под конкретные наборы данных - да.
    Под конкретную платформу - нет.

    Меня не волнует как это реализовано внутри. Пусть даже алгоритм уникален для каждой платформы. Главное, чтобы интерфейс был одинаков.

     
     
  • 5.29, тоже Аноним (ok), 08:51, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вас будет волновать, как оно устроено внутри, когда каждый нюанс умножится на количество информации.
    Если вектор из STL, например, несколько неаккуратно ест память (с редко используемым запасом), то при умножении на миллиарды векторов получится лишний датацентр для поддержки этого запаса. Простая замена его на "велосипед", экономящий память, позволит внезапно и безболезненно сократить расходы...
     
     
  • 6.34, Ваня (??), 10:44, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Хоть один что-то понял...

    Плюс независимость от изменений стандартов и пр. мутотни. Было два параметра, сделали три - не трогает и не колышет.

    Итог: прогнозируемое поведение. Когда это твой бизнес и твои деньги - это резко становится очень важным.

     
     
  • 7.35, тоже Аноним (ok), 11:02, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, изменение стандартов и параметров в STL - это очень маловероятно.
    Но абстрагирование от деталей языка и библиотек обычно здорово облегчает сопровождение программы.
     
  • 7.47, anonymous (??), 13:56, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Хоть один что-то понял...
    > Плюс независимость от изменений стандартов и пр. мутотни. Было два параметра, сделали
    > три - не трогает и не колышет.
    > Итог: прогнозируемое поведение. Когда это твой бизнес и твои деньги - это
    > резко становится очень важным.

    Действительно, это классический аргумент защитников парадигмы NIH (Not Invited Here).

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

     
     
  • 8.67, Ytch (?), 23:11, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Если возникла реальная потребность и делали не студенты, то, для конкретного слу... текст свёрнут, показать
     
     
  • 9.73, Аноним (-), 00:27, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Со своей геймдев-колокольни вижу то же самое Красивые абстракции - это замечате... большой текст свёрнут, показать
     
     
  • 10.82, anonimous (?), 09:49, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот это как раз правильно и хорошо Если allocator совместим по интерфейсам,... текст свёрнут, показать
     
  • 6.39, VoDA (ok), 12:06, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Если вектор из STL, например, несколько неаккуратно ест память (с редко используемым
    > запасом), то при умножении на миллиарды векторов получится лишний датацентр для
    > поддержки этого запаса. Простая замена его на "велосипед", экономящий память, позволит
    > внезапно и безболезненно сократить расходы...

    Продолжим пример: этот вектор потребляет на 1% памяти больше. Тогда чтобы набралось издержек на лишний датацентр нужно чтобы у компании уже было 100 ДЦ. Даже Гугл не набрал столько.

    С другой стороны - этот же вектор упрощает программирование на 1% (продолжая потреблять на тот же 1% больше памяти). Для компании отдать приложению на 1% больше ОЗУ практически бесплатно - вместо планки 2Гб поставить 4Гб обойдется в 450 руб (сейчас же даже блейды таскают на 16Гб и больше).

    С другой стороны 1% от ЗП программиста это примерно 14-16 тыс рублей в месяц (сама ЗП, налоги, выплаты в гс-фонды).

    Так что если вы работаете не в гос-структуре (где лучше больше освоить, но меньше сделать), то главные критерий - производительность программиста, а не такты процессора или байты ОЗУ.

     
     
  • 7.40, тоже Аноним (ok), 12:23, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вы неправильно продолжаете пример. Стандартный вектор при добавлении элемента сверх выделенной памяти добавляет себе еще до полстолька памяти про запас, в зависимости от реализации. Это совсем не 1%.
    Экономия памяти, конечно, выльется в лишние такты, но в вебе процессор давно уже не узкое место, а вот память... Вместо 2Гб 4Гб - это просто. Но сервера датацентров FB, надо думать, не дураки собирали, и памятью они забиты по максимуму.

    Программирование же не усложнится вовсе, если вместо std::vector будет использоваться fb::vector. Напротив, может упроститься - за счет ненужности низкоуровневых оптимизаций там, где std::vector был неудачен.

    Так что - оба раза мимо.

     
     
  • 8.48, ктото (?), 16:12, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    std vector reserve, не ... текст свёрнут, показать
     
     
  • 9.49, тоже Аноним (ok), 16:21, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    И так по всему коду, чудом предугадывая, сколько именно памяти понадобится в про... текст свёрнут, показать
     
     
  • 10.69, Ytch (?), 23:18, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Большая часть DSP и embedded программирования строится на точном знании чего, ск... текст свёрнут, показать
     
     
  • 11.78, тоже Аноним (ok), 08:57, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, это же совсем другая область Речь о веб-библиотеке В которой можно уверенн... текст свёрнут, показать
     
  • 10.85, anonimous (?), 10:35, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Много вставок, последовательный доступ --- list или single_list Известны оценки... текст свёрнут, показать
     
     
  • 11.86, тоже Аноним (ok), 11:05, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Представьте себе, с азами STL большинство присутствующих знакомы Речь о конкрет... текст свёрнут, показать
     
     
  • 12.94, anonymous (??), 14:42, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    С азами т е слышали такую аббревиатуру --- да, похоже Вы _знакомы_ На практи... текст свёрнут, показать
     
     
  • 13.96, тоже Аноним (ok), 15:42, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда вопрос к вам, как к специалисту Требуется обрабатывать огромное количест... текст свёрнут, показать
     
     
  • 14.100, anonymous (??), 17:52, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Если как к специалисту, то придется потратить определенное время нам обоим на вы... текст свёрнут, показать
     
     
  • 15.103, тоже Аноним (ok), 18:55, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А вот вилять не надо Первое же требование - минимизация расхода памяти - свора... текст свёрнут, показать
     
  • 7.54, Crazy Alex (??), 18:25, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Если у вас экземпляров кода много - то программист становится дешевле железок. На порядки.
     
  • 7.58, Ананимуз (?), 19:04, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > С другой стороны 1% от ЗП программиста это примерно 14-16 тыс рублей в месяц (сама ЗП, налоги, выплаты в гс-фонды).

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

     
  • 6.45, kshetragia (ok), 13:43, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Значит STL реализация вектора не подходит в данном случае и должна быть подходящая "искаробки".

      man queue - там почему-то не стесняются указать чего и как лучше использовать:

    Linked lists are the simplest of the doubly linked data structures and support only the above functionality over singly-linked lists.

         Tail queues add the following functionality:
               1.   Entries can be added at the end of a list.
               2.   They may be traversed backwards, from tail to head.
               3.   They may be concatenated.
         However:
               1.   All list insertions and removals must specify the head of the
                    list.
               2.   Each head entry requires two pointers rather than one.
               3.   Code size is about 15% greater and operations run about 20%
                    slower than singly-linked lists.

    И как видите, меня снова не волнует как оно устроено внутри. достаточно знать чем мне грозит использование функциональности.

     
  • 4.38, VoDA (ok), 11:58, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Да вроде как все закономерно - если хочется стандартного (т.е. универсального, чтоб на всех платформах одинаково и без костылей) - то и получится не самый быстрый вариант. А если нужна высокая скорость - то не получится универсальность, поскольку, придется "пилить костыли" под конкретную платформу и под конкретные наборы данных.

    я под стандартным понимаю соответствие внешнему API и идентичное поведение при использовании API. А как оно будет внутри - на самолете, на самокате или окостылено по небалуйся - не волнует. Главное соответствует спеке и работает.

    Так что было бы круто, если все либы от Гугла, Яндекса и прочих Мордокниг реализовали стандартное API и таким образом их можно было бы интегрировать в базовые либы.

    List list = new List(); // базовая реализация
    List list = new ListFromFacebookImprovedForIntegers(); // улучшенная реализация от Мордокниги

    > Увы, "за все нужно платить" (С)

    Вопрос в том кто платит и за что.

     
     
  • 5.61, Crazy Alex (??), 20:57, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот сразу навскидку - чтобы указанное сделать List должен все свои методы иметь виртуальными. Что для многих случаев будет вести к основательным потерям в производительности.
    Это не говоря о том, что в разных фирмах coding guidelines могут капитально отличаться.
     
  • 5.68, all_glory_to_the_hypnotoad (ok), 23:14, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Так что было бы круто, если все либы от Гугла, Яндекса и прочих Мордокниг реализовали стандартное API и таким образом их можно было бы интегрировать в базовые либы.

    это совершенно не было бы круто, ибо API тоже нужно разрабатывать, точно так же, как и писать сам код и мозговать алгоритмы. Твоия идиллия возможна если это самое API вдруг спустит с небес сам Он и скажет - лучше не придумаете.

    Но такого не бывает, пока ещё.

    Разнообразие в подходах помогает найти нормальное решение в процессе эволюции и ествественного отбора наиболее удачных реализаций.

     
  • 2.66, all_glory_to_the_hypnotoad (ok), 23:09, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Нужно учитывать исторический аспект проблемы. Когда многие проекты начинали расти не было много чего в стандартных библиотеках или поддержка компиляторами была посредственного качества. У меня у самого на руках есть такие проекты с бородатой историей и с аналогичным вагоном уже велосипедных библиотек если смотреть на них сейчас.

    Хз как это было у мордокниги, мб там всё развивалось похожим образом.

     

  • 1.19, Аноним (-), 01:24, 04/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > представлена большая коллекция C++ классов, дополняющих стандартные библиотеки
    > C++ и набор Boost.

    Угу, правда работать будет только с GCC (может быть Clang), ибо GCC __attribute__ syntax встречается, ну и использует фичи нового стандарта типа move semantics. Переносимость на другие платформы хромает. Хотя оно и верно, Мордокниге на другие платформы плевать :)

     
     
  • 2.37, x0r (??), 11:28, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    там же и написано C++11
     
  • 2.101, anonymous (??), 18:09, 05/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Угу, правда работать будет только с GCC (может быть Clang), ибо GCC
    > __attribute__ syntax встречается, ну и использует фичи нового стандарта типа move
    > semantics. Переносимость на другие платформы хромает. Хотя оно и верно, Мордокниге
    > на другие платформы плевать :)

    Не могу понять, это Вы про aCC, Apogee или (извините, если плохо о Вас подумал) про VS (тьфу)?


     

  • 1.50, Аноним (-), 18:04, 04/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Итить. Ну написала челы для себя либы. Ну катаются они в их приложениях у себя в конторе - их устраивает. Ну выложили они их в общий доступ. Спасибо посмотрим? Нет! Срачь на хрен пойми сколько!
     
     
  • 2.70, Ytch (?), 23:29, 04/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Итить. Ну написала челы для себя либы. Ну катаются они в их
    > приложениях у себя в конторе - их устраивает. Ну выложили они
    > их в общий доступ. Спасибо посмотрим? Нет! Срачь на хрен пойми
    > сколько!

    +1. Прям с языка снял.
    Никто ведь не заставляет ни одних открывать, ни других использовать. Никто не пихает это как "стандарт" (всем делать так) или как "что-то супероригинальное" (смотри как круто я умею). Просто еще одна открытая реализация того, о чем и так все заинтересованные в курсе. Не больше и не меньше.

     

  • 1.59, 4ertus2 (?), 19:21, 04/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Однако, товарищ умеет заинтересовать!

    FBVector.h:521

    size_type max_size() {
      // good luck gettin' there
      return ~size_type(0);
    }

     
  • 1.119, Аноним (-), 14:09, 06/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >при очень редких операциях удаления.

    Хе-хе. %)

     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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