LINUX.ORG.RU

Pijul 0.11

 , , ,


3

6

Вышла новая версия Pijul — свободной системы управления версиями, основанной на теории патчей и написанной на языке Rust.

Pijul развивает идеи Darcs — Pijul быстрее, лучше, в нём решена проблема экспоненциальной сложности слияния и поддерживаются ветки (для всех, кто спросил и еще спросит «чем оно лучше Git» - ссылка на FAQ)

Слово «Pijul» (произносится «пихуль») — это мексиканское названия Бороздчатоклювого ани, вида птиц семейства кукушковых, чьи особи совместно работают над строительством гнёзд.

Улучшения в версии 0.11:

  • Добавлено частичное клонирование подкаталогов: pijul clone --path и pijul pull --path. При этом скачиваются только те патчи, которые затрагивают указанный подкаталог.
  • Добавлен парсер ~/.ssh/config — теперь Pijul будет автоматически использовать настройки псевдонимов хостов, SSH-прокси, ключей и т. д.
  • Внутренняя архитектура переведена на использование библиотеки Tokio — де-факто стандарта для асинхронного программирования на языке Rust. Минус велосипеды, новичкам будет проще разобраться в коде Pijul.
  • Исправлено много мелких и две крупные ошибки. Одна из них приводила к падению производительности при использовании pijul record, другая в некоторых случаях приводила к изменении содержимого патчей и файлов после клонирования.

Для нужд Pijul автором также развиваются вспомогательные библиотеки:

  • Thrussh — реализация клиента и сервера SSH на языке Rust.
  • Pleingres — клиентская библиотека, реализующая сетевой протокол PostgreSQL на языке Rust.
  • Sanakirja — хранилище «ключ-значение» на языке Rust, основанное на B-деревьях и поддерживающее транзации (аналог LMDB). «Sanakirja» по-фински означает «словарь».

Автор также разрабатывает Pijul Nest — аналог GitHub на основе Pijul и Rust. К сожалению, Nest пока не является свободным проектом.

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



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

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

если только не писать супер-пупер-оптимизированный низкоуровневый код

Лайфтаймы совершенно не про это.

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

C Git (и любой DVCS вообще) ты автоматически используешь бранчи.

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

Rust - бесполезное дерьмо.

Я бы не скзазал. Если в итоге они сделают нормальную асинхронку, то получится очень интересный язык.

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

Что, прости? Изучение гомотопий восходит еще к Эйлеру, Риману, Жордану и Пуанкаре, а оформилась теория гомотопий фактически в работах Брауэра, Хопфа и Чеха в 20-е и 30-е годы XX века. Категорный же язык Эйленберг и Маклейн изобрели в начале сороковых.

Можешь об этом прочитать в хорошей книжке Дьёдонне.

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

Это не та проблема, из-за которой можно тормозить в разы. И fork, и exec - операции редкие.

Там про тормоза шелла было. А для шелла они очень даже не редкие. Поэтому всякие configure-скрипты под виндой работают намного дольше. Но да, VCS не должна из-за этого тормозить. Не должна...

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

Поэтому всякие configure-скрипты под виндой работают намного дольше.

Ну, конфигура - это как раз постоянные fork и exec. Хотя даже там разницы в разы не должно быть.

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

Допустить утечку памяти конечно можно, если бездумно все аллокации в shared_ptr/Rc оборачивать, но для 95% случаев достаточно использовать unique_ptr/Box, а в оставшихся 5%, даже если удалось зациклить Rc, обнаружить и разбить цикл не должно составить проблем.

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

Достаточно реализовать bash и основные команды, используя родные win api, и всё там будет ok.

Не совсем. fork в линухе быстрый, а «родной» CreateProcess в винде медленный, даже без хаков. Его использовали потому, что ничего другого-то не было. Не на чем реализовать эти основные команды. Более быстрого «родного win api» нет.

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

Можно, но 4GB оперативной памяти не хватит для `pijul record`. Интересно, что add происходит быстро, когда же в git он занимает немало времени.

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

Он уже получился.

Не уверен. Core сообщество у него довольно маленькое, поэтому они все ещё могут увязнуть.

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

Я говорил, что десятки людей пилили Git задолго до роявления Gihub. О популярности я не говорил.

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

индекс - самая дурацкая концепция из всего, что я знаю в VCS.

Задача: есть изменения в working tree. Среди них есть несколько косметических изменений и несколько качественных. Нужно разбить их на два разных коммита по этому признаку.

Как ты это будешь решать без индекса?

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

cool-vs-commit --ignore=file ...

Пардон?

Я думал, не нужно уточнять: изменения в нескольких файлах одновременно, в каждом из них есть изменения обоих типов.

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

Я думал, не нужно уточнять: изменения в нескольких файлах одновременно, в каждом из них есть изменения обоих типов.

А как тебе в этом поможет index? Или ты сперва сделал одни изменения, потом засунул в index, а потом такой... да ладно, ещё сверху понафигачу до коммита?

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

Задача: есть изменения в working tree. Среди них есть несколько косметических изменений и несколько качественных. Нужно разбить их на два разных коммита по этому признаку.

Давай усложним задачу: в одном файле есть два вида изменений - косметические и качественные. Как индекс поможет разбить их на два коммита?

Как ты это будешь решать без индекса?

Средствам работы с очередями патчей уже как минимум 17 лет - quilt, mq, stgit.

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

Давай усложним задачу: в одном файле есть два вида изменений - косметические и качественные.

Это и есть исходная задача.

Как индекс поможет разбить их на два коммита?

git add -p

Средствам работы с очередями патчей уже как минимум 17 лет - quilt, mq, stgit.

Как средства работы с очередями патчей помогут разбить их на два коммита?

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

матерые евангелисты

А нечего евангелистов слушать. Сказано же было вам: «Тот, кто знает, не говорит. Тот, кто говорит, не знает.»

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

Как индекс поможет разбить их на два коммита?

git add -p

Окей. Похоже, не самая известная команда.

Как средства работы с очередями патчей помогут разбить их на два коммита?

Кого «их», патчи? Никак, это надо делать вручную. Разбить изменения на любое количество коммитов? Например, man hg qrecord.

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

Поэтому всякие configure-скрипты под виндой работают намного дольше.

Ну, конфигура - это как раз постоянные fork и exec. Хотя даже там разницы в разы не должно быть.

Сам-то пробовал или теоретизируешь?

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

если удалось зациклить Rc, обнаружить и разбить цикл не должно составить проблем.

Сразу видно, д'Артаньян. Обнаружить - это поиск в глубину ( сложность O(n) ), а вот как правильно разорвать цикл - это уже логику надо переделывать. Поэтому ты или пишешь без циклов (графы не сложнее дерева-леса), или отказываешься от Rc и используешь «нормальный» gc. А borrow-checker в расте - это чисто творческая инженерная поделка, и не дает никаких теоретических гарантий. Поэтому то, что программа на расте не течет - это случайность (хорошо хоть со смещенным центром тяжести).

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

если удалось зациклить Rc, обнаружить и разбить цикл не должно составить проблем.

Сразу видно, д'Артаньян. Обнаружить - это поиск в глубину ( сложность O(n) )

Ты их в рантайме искать собрался? Фейспалм.

Поэтому ты или пишешь без циклов (графы не сложнее дерева-леса)

Эту проблему обошли. Не скажу, что мне нравится решение, но оно есть.

Поэтому то, что программа на расте не течет - это случайность

Еще раз, для протокола: Rust не дает гарантий отсутствия утечек. Системы со сборкой мусора, кстати. тоже таких гарнтий не дают.

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

Запускать конфигуры пробовал, мерять - нет. А ты мерял?

На самом деле, configure скрипты даже в лялехе тормозят, особенно это было заметно на Эльбрусе. Правда, тормозят они не из-за форков, а из-за кучи бесполезных проверок на наличие string.h.

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

Ты их в рантайме искать собрался? Фейспалм.

А где ты собрался их искать, в тьюринг-полном коде, генерирущем этот граф?

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

А где ты собрался их искать, в тьюринг-полном коде

Ужас-то какой, Тьюринг-полный код!!111 Я собрался их искать при проектировании структуры данных.

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

Окей. Похоже, не самая известная команда.

И эти люди пытаются спорить о нужности индекса.

Как средства работы с очередями патчей помогут разбить их на два коммита?

Кого «их», патчи? Никак, это надо делать вручную.

Okay.jpg. Их — изменения. Зачем тогда было эти «средства» упоминать?

Разбить изменения на любое количество коммитов? Например, man hg qrecord.

RecordExtension
This extensions is deprecated, the feature is now part of Mercurial core as hg commit --interactive.

Замена шила на мыло. Какие у тебя претензии к индексу тогда? То, что он вынесен в отдельную сущность, а не спрятан в кишки гипотетической команды git easycommit?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от tailgunner

структуры данных

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

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

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

Ага, я тоже всё жду аргументов. Ладно, придётся самому...

Я почти не пользуюсь Git.


А, ну ок.

Позвольте, я тоже «почти» не пользуюсь git. Так, базовые мелочи, код скоммитить, пулл-реквест составить... Но в гите даже для таких базовых мелочей надо станцевать с бубном вокруг ёлки в полнолуние в красных носках.

Инструкция по ребейзу pull-реквеста к изменениям в апстриме — это полтора десятка пунктов. Пропустишь пункт или ошибёшься с веткой, и получишь всякие «error: could not apply 987abcd...», «error: The branch is not fully merged» и т.д. И из них фиг выберешься «Warning: you are leaving commits behind, not connected to any of your branches», «It seems that there is already a rebase-merge directory», но «fatal: There is no merge to abort»...

Это если не вспоминать про общеизвестные проблемы git. Как вы думаете, что такое git push? Как бы вы его описали в документации? «Upload changes from local repository into a remote repository»? А вот хрен:

$ man git-push | head

git-push - Update remote refs along with associated objects

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

PS: и, да, я всё равно использую гит. А что делать-то?

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

Куча дублирующих друг друга кульных фишек - примета git.

Ну это нормально. Избыточность присуща любой живой и развивающейся системе. А ты как хотел: чтоб отлили в гранит сразу идеально и навсегда? Так не бывает. Посмотри хоть на свой раст, как его расколбасило уже, или лучше на цепепе (как более зрелую хрень), да хоть и бы и на питон.

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

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

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

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

Обнаружить - это поиск в глубину ( сложность O(n) ),

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

а вот как правильно разорвать цикл - это уже логику надо переделывать

Если логика содержит цикл, то в ней ошибка и ее нужно переделывать, да.

или отказываешься от Rc и используешь

Raw pointers и ручное управление памятью в unsafe блоке со всеми вытекающими.

А borrow-checker в расте

Гарантирует безопасность памяти а не отсутствие утечек. На самом деле всем глубоко плевать на твои утечки, а memory safety баги при должном усердии можно слепить в эксплойт выполняющий произвольный код в приложении, что повлечет реальные убытки и потерю репутации разработчика.

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

файловая система, разрешающая хардлинки на любые директории

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

Эта структура может не содержать циклов. В описании нигде не написано «создать цикл». Так что давай, Недевид Неблейн, «лауреат премии Тьюрига», «проектировщик нецикличных структур», выкладывай свою диcсертацию по обнаружению циклов во время статического анализа кода.

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

файловая система, разрешающая хардлинки на любые директории

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

Эта структура может не содержать циклов.

Эта структура по определению должна допускать ссылки.

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

Похоже, не самая известная команда.

И эти люди пытаются спорить о нужности индекса.

Проблемы с этим?

Как средства работы с очередями патчей помогут разбить их на два коммита?

Кого «их», патчи? Никак, это надо делать вручную.

Okay.jpg. Их — изменения. Зачем тогда было эти «средства» упоминать?

Затем, что они решают обсуждаемую задачу.

RecordExtension

This extensions is deprecated

ХЗ кто и зачем это написал, но record extension уже давно является стандартной частью Mercurial.

Какие у тебя претензии к индексу тогда?

Ненужная вещь. То, что ее смогли приспособить для решения нужной задачи, не делает ее саму нужной.

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

Ненужная вещь. То, что ее смогли приспособить для решения нужной задачи, не делает ее саму нужной.

Поздравляю, в попытках вывернуться ты переплюнул сам себя.

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

Эта структура по определению должна допускать ссылки.

Ты о чем, вообще? Совсем поплыл? Структура 'односвязный список' тоже «по определению должна допускать ссылки».

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

Поздравляю, в попытках вывернуться ты переплюнул сам себя.

Я постоянно расту над собой. Не завидуй.

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

Эта структура по определению должна допускать ссылки.

Ты о чем, вообще?

Вот об этом:

anonymous> файловая система, разрешающая хардлинки на любые директории

Структура 'односвязный список' тоже «по определению должна допускать ссылки».

Ты о чем, вообще?

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

Допустим есть файловая система, которая может быть только как односвзяный список: root->dir1->...->dirN->file.
и есть

anonymous> файловая система, разрешающая хардлинки на любые директории

И та и другая «структура по определению должна допускать ссылки». При этом первая фс - частный случай второго. По-твоему выходит, что первая структура, которая «по определению должна допускать ссылки», может содержать циклы. Так?

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

Обнаружить - это поиск в глубину ( сложность O(n) ),

Обнаружить - это прочитать исходник.

Еще один детектор циклов в графе, по порождающему его коду.

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

Если бы они более точно скопировали хаскель в области typeclassов, а может и всякие монадные и стрелочные штуки из него взяли, вот был бы язык так язык. Разобратся мне чтоле в этом деле и запилить реальные пропозалы, авось сделаю раст норм языком...

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

А нечего евангелистов слушать. Сказано же было вам: «Тот, кто знает, не говорит. Тот, кто говорит, не знает.»

А нечего евангелистов слушать.

Сказано же было вам: «Тот, кто знает, не говорит. Тот, кто говорит, не знает.»

нечего евангелистов слушать.

Мде.

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

Я говорил про циклы в Rc и утечки, а ты уже про циклы в графе 0_о... Если я открываю исходник и вижу, что нода графа хранит вектор shared_ptr, очевидно, что такой граф может течь и использовать его я конечно не буду. До рантайма такой код не доживёт.

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