LINUX.ORG.RU

DNF будет переписан на языке C

 


0

3

DNF — пакетный менеджер, используемый в дистрибутиве Fedora. Его предшественник Yum был полностью написан на Python, в DNF же на данный момент низкоуровневый функционал вынесен в отдельные C-библиотеки (hawkey, librepo, libsolv и libcomps).

Начиная с этого момента, код DNF будет постепенно переписываться на C в рамках отдельного проекта libhif; функционал hawkey уже влит в libhif.
Пока в libhif реализовано скачивание метаданных, разрешение зависимостей и исполнение RPM-транзакций; в будущем планируется доработка libhif для поддержки других базовых функций пакетного менеджера.

Внедрение libhif со встроенным hawkey ожидается к релизу Fedora 25.

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

★★★★★

Проверено: tailgunner ()
Последнее исправление: Wizard_ (всего исправлений: 3)

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

Уже есть portage на питоне, который тупит дольше, чем gcc собирает прогу

Поставил SSD, все работает моментально. Наверное SSD ускоряет работу Python интерпретатора до уровня С++ :-)))

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

Лол :-) Ты даже не понял, о чём речь :-) Пожалуйста:
(add (h 1) (ms 100))

Это аналог:

hour( 1 ) + milliseconds( 100 )

на С++, не виляй.

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

Это аналог:

Но на C++ ты будешь писать «using namespace std::chrono::literals» в каждой единице трансляции :-)

на С++, не виляй.

Так что не виляй :-)

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

ВНЕЗАПНО! Гугли про refined types.

Внезапно, я про них знаю. А теперь расскажи - как часто ты их используешь?

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

Какой язык - такие и разрабы.

Тот-же apt-get или pacman решает почти те же задачи за секунды. portage неоправданно медленный. Нормальны способ хранения метаданных, нормальные алгоритмы, нормальный язык и нормальные разрабы - получим дичайший прирос производительности.

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

Но можно вообще положить с прибором на аппарат типов и написать просто:

(+ 60*60*60*1000 100)
что с успехом и делают, пока ты «using namespace std::chrono::literals» корякаешь в каждый файл :-) Да, и кстати, правильно писать "::std::chrono::literals", а то твой любимый цепепе может тебя неправильно понять :-)

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

Но на C++ ты будешь писать «using namespace std::chrono::literals» в каждой единице трансляции :-)
Так что не виляй :-)

Держи:

#include <chrono>
using namespace std::chrono;

int main() {
    hours( 1 ) + milliseconds( 100 );
}

Итого у меня два рабочих примера на С++, а у тебя один выдуманный.

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

Тот-же apt-get или pacman решает почти те же задачи за секунды. portage неоправданно медленный. Нормальны способ хранения метаданных, нормальные алгоритмы, нормальный язык и нормальные разрабы - получим дичайший прирос производительности.

Чем тебе питон не нормальный?

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

portage неоправданно медленный

Выше сказали, что paludis работает примерно с той же скоростью.

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

Почти те же задачи. Только дело обычно в большем количестве текстовой информации, которая лежит в дереве ебилдов, против хорошо проиндексированых баз apt-get. Ебилды просто в состоянии готовности быть измененными прямо на диске, потому их нужно постоянно парсить заново. В apt-get взаимодействие обычно только через тулы, только с индексами. Это просто разные начальные условия игры

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

Итого у меня два рабочих примера на С++, а у тебя один выдуманный.

Да никто же не сомневается, что ты ещё и boost сюда притянешь, или даже Loki :-) И тогда у тебя будет 4 рабочих примера :-) Но ведь это не отменит корявость цепепе :-)

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

Моментально - это сколько? Может любителям пистона и 10 мин - это быстро.

Уточню: быстро - это меньше 1с.

PS: у меня у самого хороший ssd, но вот заветной производительности portage так и не увидел.

% time emerge --pretend chromium
[ebuild     U ] www-client/chromium-48.0.2564.109 [48.0.2564.82]

The following mask changes are necessary to proceed:
 (see "package.unmask" in the portage(5) man page for more details)
# required by chromium (argument)
# /etc/portage/package.mask:
=www-client/chromium-48.0.2564.109

emerge --pretend chromium  9.83s user 0.18s system 99% cpu 10.016 total
anonymous
()
Ответ на: комментарий от anonymous

Корявость плюсов в том, что ты не можешь троллить не прикидываясь идиотом? Достижение, да.

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

Когда он обновляется? Нужно ли при его наличии как-то перепроверять реальные ебилды на возможность изменения при его использовании?

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

Да никто же не сомневается, что ты ещё и boost сюда притянешь

Я привел два примера исключительно на стандартной библиотеке.

И тогда у тебя будет 4 рабочих примера :-)

Окай.

Но ведь это не отменит корявость цепепе :-)

Зато это явно показывает натянутость твоих претензий.

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

Ну вот у меня столько же, не вижу проблемы. Какой-то софт, который не тянет за собой портянку зависимостей - 3 сек

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

Я привел два примера исключительно на стандартной библиотеке.

Да :-)

Зато это явно показывает натянутость твоих претензий.

Нет, это показывает что ты не понял сути претензий :-) Ты всего лишь показал, как умеешь вводить имена с помощью директив using, и пользоваться std::chrono :-)

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

И?

Это я ошибся и не успел удалить.

Больше ничего не запущено. Load 0.02.

А что показывает paludis на таком запросе?

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

Мне как-то не улыбается ждать по пару минут, пока emerge рассчитает обновления. При условии что есть более быстрые решения.

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

А я хочу запилить свой велосипед на базе сишки и идей из golang:

  • Импорты
    import module;
    и
    import (
        module 1,
        module 2
    );
    
    после чего кодом пользуешься, как:
    module.function()
  • defer'ы с поведением: переносят данный блок кода в конец перед каждым ret'ом, который после этих defer'ов. Ну и defer'ы выполняются в обратном порядке, то есть самый первый выполняется последним - для того, чтобы не дублировать код закрытия файлов, очистки памяти и т.п. Т.е. абсолютно одно и то же:
    mut somech char* = malloc(size);
    defer free(somech);
    if (...) {
        ret EXIT_SUCCESS;
    }
    ret EXIT_FAILURE;
    
    mut somech char* = malloc(size);
    if (...) {
        free(somech);
        ret EXIT_SUCCESS;
    }
    free(somech);
    ret EXIT_FAILURE;
    
  • тип указывается после переменной (это уже не совсем golang):
    let a int; - константа
    mut a int; - переменная
    
    Хотя тут, наверно, надо сделать просто var и дополнить const в стандартном для Си поведении.
  • тип fn как замена указателя на функцию, т.е. стандартный qsort (объявление) писалось бы так:
    fn qsort(base void*, nitems size_t, size size_t, cmp fn(const void*, const void*) int) void;
    
  • возврат кортежа из функции, т. е. нескольких переменных, например:
    ret err, discription;
Deleted
()
Последнее исправление: merhalak (всего исправлений: 4)
Ответ на: комментарий от tailgunner

paladius нету, не осилил его сконфигурировать не убив систему =)

Но есть убунта:

$ time sudo apt-get install chromium-bsu --dry-run
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  chromium-bsu-data fonts-uralic libalut0 libglc0 libopenal-data libopenal1
  libsdl-image1.2 libsdl1.2debian
Suggested packages:
  libroar-compat2
The following NEW packages will be installed:
  chromium-bsu chromium-bsu-data fonts-uralic libalut0 libglc0 libopenal-data
  libopenal1 libsdl-image1.2 libsdl1.2debian
0 upgraded, 9 newly installed, 0 to remove and 231 not upgraded.

// много-много

real	0m0.768s
user	0m0.732s
sys	0m0.024s

Быстрее больше чем в 10 раз. Даже если расчёт зависимостей такой сложный, он не может быть настолько медленным.

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

Но можно вообще положить с прибором на аппарат типов и написать просто:
(+ 60*60*60*1000 100)

Нет, это показывает что ты не понял сути претензий :-)

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

П.С. погуглил scala, там не можно сделать, а уже готовое, пишется почти так же само, либо вертухай выпендривался, либо сам не знал и потом тоже нагуглил.

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

Они жрут проц в пределах погрешности, ака < 1%

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

Как это ничего нет? Как минимум синяя изолента, которую можно намотать на рукоятку (препроцессор).

Это скорее наждачка. Потому что отрезать себе руку с препроцессором проще простого.

kirk_johnson ★☆
()

Чё ток люди не придумают что бы апт-гет не запиливать, смехота)))

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

Да все с тобой ясно. На лиспе ты положишь с прибором и на типы, и на отсутствие функций для работы с отрезками времени

Когда мне реально нужно будет работать с отрезками времени, я возьму для этого какую-нибудь либу: https://common-lisp.net/project/local-time/manual.html :-) Когда мне нужно будет передать функции время в миллисекундах, то я вызову её как (f 250) :-) Всё просто :-)

а на цэпэпэ будешь материться, что тебе дали и то и другое, но не такое как тебе лично хочется.

Нет, буду жрать кактус, увы :-)

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

Внезапно, я про них знаю.

Если ты про них знаешь, то почему спрашиваешь как типы могут разрулить доступ к массиву?

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

На самом деле, вертехуй может быть прав. Я посмотрел на strace - emerge действительно чуть ли не каждый ебилд stat'ом трогает, а потом fseek и ещё какая-то хрень.

kirk_johnson ★☆
()
Ответ на: комментарий от shkolnick-kun

O_о Так там еще и больше одного проекта???

Ну а что помешает мне/тебе взять и создать хоть 100500 «аналогов»? Это мало о чём говорит. Ну кроме того, что ты даже не посмотрел что находится по твоей ссылке (фигня годичной давности с 11 комитами).

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

Он и так на C++

Парень, ну ты жжешь! Продолжай так и дальше :)

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

Но пакетный менеджер, стандартное мобильное приложение, плеер, редактор и т.п вещи не требуют реал-тайма.

Вот поэтому ты должен каждые три года покупать новый комп/телефон/кофеварку и жить по принципу «работай,потребляй,умри».

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

У меня Nexus 5 2013-го года выпуска. Всё работает без тормозов. Покупаете говно - да, готовьтесь постоянно его обновлять. Технологии тут не при чём.

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

у меня apt-get снёс полсистемы, была у меня лет 5 назад, когда я тщательно перемешал пакеты из stable, testing и expiremental и дополнительно украсил сборкой из сорцов кое-чего.

Да вы смотрю пилотажник невежества. Debian wiki вам в помощь...

Odalist ★★★★★
()
Последнее исправление: Odalist (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.