KF5

Sep. 25th, 2014 11:22 pm
madf: (Default)
Вирішив потикати палочкою цей ваш KDE Frameworks 5. об не зламати основну систему розчехлив старий ноутбук яки не вмикав уже півтора року щонайменше. Ноутбук старенький, на якомусь целероні з 1 Гб оперативки, оновлюватись буде вкрай повільно. Потрібен distcc. Але от халепа — і сервер і десктоп у мене 64-бітні, а distcc не вміє кросскомпіляцію. Ну, точніше, вміє, але через задній прохід. На щастя, вихід вкрай простий. Беремо 32-бітний stage3 (базова інсталляція Gentoo), розпаковуємо, чрутимось туди, ставимо vim, distcc, налаштовуємо усе — і полетіли! А найкраще тут те що цей чрут можна потім скопіювати і на сервер, і все буде працювати ок! Є тільки пара моментів. Перший, загальновідомий, — не працює -march=native. Але робимо де треба
gcc -### -march=native -x c -

і прописуємо все що треба вручну без проблем. Другий — не очевидний. Оскільки ми у stage за-chroot-ились, а не завантажили його за допомогою openrc, то init-скрипти будуть лаятись і відмовлятись працювати. Можна, звісно, заставити їх, але навіщо? Простіше зробити так:
su -s /bin/sh distcc -c "/usr/bin/distccd --daemon --no-detach --pid-file /var/run/distccd/distccd.pid --port 3633 --log-level notice --log-file /var/log/distccd.log -N 15 --allow 192.168.0.0/16"

І радіти життю.
Read more... )

А да...

Apr. 13th, 2014 12:55 pm
madf: (Default)
„А воз и ныне там“
gcc-4.8.2
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.2/include/g++-v4/bits/stl_list.h:871
/** Returns the number of elements in the %list. */
size_type
size() const _GLIBCXX_NOEXCEPT
{ return std::distance(begin(), end()); }
_Winnie C++ Colorizer
madf: (Default)
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49561

Коротко:
2011-06-28 08:17:46 UTC
„I realized that the complexity of std::list::size() is O(n), not O(1).

This does not conform to standard. The standard states that size() function is in constant time for alls containers. So, the behavior of gcc is not as expected.“


2011-10-04 22:22:39 UTC
„Done. If you can, please stress std::list in C++0x mode in order to shake possible bugs related to the O(1) size in time for the 4.7.0 release.“

2012-07-03 01:40:12 UTC
„Patch reverted, thus in C++11 mode size() is back to O(n) but std::list can interoperate with the C++98 version of it.“

2012-07-03 03:35:31 UTC
„Why has this been reverted? If std::list<>::size() is not O(1), then GCC's C++11 standard library is not compliant with the C++11 international standard. I have personally spoken with multiple members of the standard body and confirmed that this behavior is REQUIRED by the C++11 standard.

Please re-apply this patch for C++11 mode, or state somewhere in the GCC docs that GCC is not compliant with the C++11 standard. In the C++03 and C++98 standards, it was highly suggested that compiler vendors implement std::list<>::size() as O(1).“


2012-07-03 08:31:18 UTC
„Yes, we're well aware of that, thanks.

This patch made c++98 and c++11 code incompatible and is causing serious problems for distros.

You've lived with O(n) size for 15 years, you can live with it for a while longer until libstdc++'s ABI changes.“


„15 років жрали лайно — жріть і надалі“.

Завтра буду лякати співробітників. Особливо одного який кричав і бризкав слиною шо if (cont.size() == 0) це нормально і не треба писати if (cont.empty()).
madf: (Default)
Тут шановний [livejournal.com profile] sharpc лякає людей синтаксисом C++, а мені згадались два баги компілятора (а точніше реалізації стандартної бібліотеки), на які ми на роботі наштовхнулись буквально минулого тижня.
Кому не страшно — зазирніть під кат )

Вирву із контексту: „... мир окончательно разделится на людей, которые успели выучить C++, пока он еще был простым, и на тех, кто никогда не осилит...“.
madf: (Default)
Цілий тиждень, починаючи з минулої неділі, я кожного вечора після роботи сідав за комп, логінився через два шелла на віддалений сервер і боровся з багом.
Є у мене один секретний проект який потихеньку починає виходити у люди, і от треба було запустити його на FreeBSD. На лінуксах все працювало нормально і нічого не віщало біди...
hall of shame )
Вся ця історія коштувала мені недосипання, червоних очей зранку і відчуття власного безсилля. Реалізація exceptions у C++ на низькому рівні досі для мене є загадкою.
Все, завтра поїду до друга сніг кидати і варити глінтвейн у казанку.
А з нового тижня займусь проблемою Boost + Clang + C++11.

gcc:4.6

May. 20th, 2012 05:14 pm
madf: (Default)
Мене запарив рівень підтримки C++11 у gcc:4.5 і я таки вирішив розмаскувати gcc:4.6. Якого біса, навіть у нас на роботі давно вже gcc-4.6.1!
І пофігу на всякі там гроби!
Тим паче що з ними, за останніми чутками, уже все в порядку.

Update: Ааа!!! Повне розчарування! Вони так і не заімплементили emplace для контейнерів :( Доводиться городити щось таке:
    m_registry().insert(std::move(std::make_pair(name, PluginHolderPtr(new PluginHolder(id<P>())))));

замість елегантного
    m_registry().emplace(name, PluginHolderPtr(new PluginHolder(id<P>())));

Пічалька :(
madf: (Default)

Початок

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

  • C++ не надає ніяких механізмів динамічного завантаження коду;
  • Динамічне завантаження коду можливе у мові C;
  • Для створення екземплярів плаганів використовуються функції-фабрики, а для уравління - абстрактний інтерфейс;
  • Щоб уникнути name mangling функція-фабрика помічається як export "C", при цьому цілком і повністю втрачається інформація про тип функції;
  • Доступ до функції можливий тільки через reinterpret_cast із void *.

Усе це в купі означає що за такого підходу ні про яку type safety і мови бути не може. Виходу немає?

Вихід є! У C++ можливо реалізувати систему плагінів на базі динамічно завантажуваних бібліотек і при цьому настільки типобезпечну, на скільки це взагалі можливо у C++! Як же цього добитись?

Read more... )
madf: (Default)
У пості про систему плагінів для C++ було піднято питання про template instantiation. Що це таке і з чим його їдять?
Мозковинос )
Підсумовуючи всю цю писанину скажу, що в кінці кінців, які б не були складні конструкції на вході і які б вони не мали типи - все зводиться до імен символів.

PS: довбаний редактор LJ все-таки схавав всю підсвітку коду. Ідіотська блогоплатформа!
madf: (Default)
Про що можуть думати люди напередодні Нового Року? Про випивки, про закуски, про подарунки і ялинки. Про людей в кінці кінців. Я ж, як відомо, схибнутий на строгій типізації, думав про плагіни в C++ і безпеку їх використання з точки зору типів. І надумав страшну річ: C, на відміну від C++, повністю втрачає інформацію про тип функції на етапі компіляції. Але про все по порядку.
Многабукаф )
На цьому покищо зупинюсь, бо букаф і так вийшло забагато. Вихід із цієї скрутної ситуації опишу у наступному пості.
Продовження
madf: (Default)
Slash me, відомий збочинець, крутить Gentoo на VPS. Взяв собі сервачок за мінімальним тарифом 300 MHZ / 256 Mb "на попробувать". Thanks to [livejournal.com profile] shkolin за наводку на 0x2a.
Кілька тіпсів і триксів )
madf: (Default)
Результати зборки Stargazer різними компіляторами.
raw data )
результати таблично )
висновки )
В принципі, мені різні компілятори цікаві тільки з точки зору швидкості збирання і як статичні аналізатори коду. Так що більше компіляторів нових і різних!

PS: звісно, для warning'ів я збирав усе у debug-режимі, з -W -Wall -Wextra, але без -pedantic.
madf: (Default)
Stargazer успішно збирається CLang'ом.
Також він успішно збирається GCC з увімкненим Link Time Optimization і трансформацією GIMPLE за допомогою GRAPHITE.
$ clang --version
clang version 2.9 (tags/RELEASE_29/final)
Target: i386-pc-linux-gnu
Thread model: posix
$ gcc --version
gcc (Gentoo 4.5.2 p1.0, pie-0.4.5) 4.5.2
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Після зборки він успішно запускається (з CLang я навіть трошки перевіряв працездатність).
madf: (Default)
Stargazer збирається з LLVM (а точніше з CLang)!
Для цього прийшлось встановити gcc-4.3.4, бо clang++ не хтів бачити заголовочні файли від gcc-4.4.3. А так - більше ніяких танців з бубном :)
Час зборки з CLang складає 4:34, з GCC - 4:10. Збирав один раз, так що можливі й інші цифри.
Покищо не запускається, падає з Illegal instruction прямо на старті. Але, можливо, це залишилось "сміття" від зборок з gcc.

Зібрати інший свій проект, що активно використовує Boost не вийшло. Не дружить CLang з libpqxx :)
madf: (Default)
"Хвостова" рекурсія - це спеціальний вид рекурсії коли рекурсивний виклик це остання операція у функції. Оптимізація хвостової рекурсії - важлива властивість компіляторів і інтерпретаторів функціональних мов програмування (так як цикли у функціональному програмуванні відсутні, вони перетворюються на рекурсивні виклики). Фактично, така оптимізація це розгортання рекурсії у цикл.
До сьогоднішнього дня я не задумувався про оптимізацію хвостової рекурсії у імперативних мовах програмування, поки не знайшов ключик -foptimize-sibling-calls у gcc: "Optimize sibling and tail recursive calls.". Цей ключ автоматично включається з -O2, -O3 і -Os І воно дійсно працює!
асемблерні дампи )
madf: (Default)
У gcc є "групові" флаги оптимізації (-O, -O2, -O3, -Os) і індивідуальні (-finline-small-functions, -foptimize-sibling-calls). Є один нюанс:
Most optimizations are only enabled if an -O level is set on the command line. Otherwise they are disabled, even if individual optimization flags are specified. (3.10 Options That Control Optimization).
proof )

CLang

Apr. 17th, 2010 10:17 pm
madf: (Default)
ClangBSD is a branch of FreeBSD that aims at integrating clang (clang.llvm.org)
into FreeBSD, replacing GCC as a system compiler.

Recently, we've achieved the state when clang can compile all of FreeBSD world
on i386/amd64 platforms (including all the C++ apps we have and itself)
and a bootable kernel. Thus we feel that the time has come to ask the FreeBSD
community for wider testing on i386/amd64 (you sure can help with other
platforms too :)).

Ура!
Якщо чесно, я недолюблюю FreeBSD (не зважаючи на те що вона натхнула Деніела Робінса на систему портежів), але вони активно пилять clang на пару з Apple, Adobe й іншими "монстрами", зо що їм велике людське спасибі і низький уклін!
Адже це не діло що світ компіляторів у GNU обмежується GNU Compiler Collection і десятком спеціалізованих (GHC, etc.). Свобода - це свобода вибору! :)
madf: (Default)
1. Вийшов gcc-4.5.0 з підтримкою LTO.
2. Наш відділ (програмери і адміни) нарешті переїхав у сусіднє приміщення. Тепер ми не товчемся у маленькій кімнаті, тепер у нас цілий зал :)
madf: (Default)
Думаю, кожен програміст (і не тільки) у своєму житті задавався питанням: "Якого біса мої маленькі програми - такі великі?".
Brian Raiter зриває завісу тайни над цим явищем! Рекомендую до читання: A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux
madf: (Default)
Вирішив скоротати вечір важкого дня за легким та приємним читанням "Algorithms for programmers" by Jorg Arndt. Розділ перший: "Low level algorithms: Bit wizardry" викликав легкий шок.
Read more... )

Profile

madf: (Default)
madf

April 2017

S M T W T F S
      1
2345678
9101112131415
1617 1819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 03:14 pm
Powered by Dreamwidth Studios