LINUX.ORG.RU

Mergiraf — новый движок разрешения конфликтов в коде

 , , ,


1

4

Mergiraf – новый движок для git merge, учитывающий синтаксис языков программирования и позволяющий в автоматической режиме решать конфликты, например, в случаях, где изменения в одной строчке производятся над независимыми синтаксическими элементами или где порядок изменений не играет роли. Список поддерживаемых языков программирования и форматов данных весьма обширен. Для работы с исходным кодом используется библиотека Tree-sitter, что также позволяет легко добавлять поддержку новых языков при наличии парсера для TS.

Сам Mergiraf написан на языке Rust, исходный код опубликован на условиях GNU GPL 3.

>>> Документация по использованию

>>> Исходный код

★★★★★

Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 6)
Ответ на: комментарий от Manhunt

Сам факт такого вопроса выдаёт в тебе отсутствие знания. Во-первых, unsafe нужен для разыменовывания сырых указателей, борроу чекер не перестаёт работать в коде, помеченном unsafe. Во-вторых, при правильном проектировании с учётом правил владения тебе не придётся бодаться с чекером.

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

Сам факт такого вопроса выдаёт в тебе отсутствие знания. Во-первых, unsafe нужен для разыменовывания сырых указателей, борроу чекер не перестаёт работать в коде, помеченном unsafe. Во-вторых, при правильном проектировании с учётом правил владения тебе не придётся бодаться с чекером.

А вот чувак, который пропердолился с растишкой 8+ лет, и даже страдает стокгольмским синдромом по этому поводу, считает иначе. Оставляю тебя наедине с его статьёй: https://blog.polybdenum.com/2024/12/21/four-limitations-of-rust-s-borrow-chec...

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

Во-вторых, при правильном проектировании с учётом правил владения тебе не придётся бодаться с чекером.

Как там с автореферентными структурами? А боров уже юзабелен для ссылок (с алиасингом) в арену, или единственное что на практике можно сделать это аналог сырого указателя?

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

Столяров знатный фрик, к программированию имеющий отношение весьма посредственное. Упоминать его с серьёзным лицом - только дескредитировать себя.

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

Он мне друг уже 25 лет. Кое в чем я с ним согласен. В отношении к последователям секты Раста уж точно. Сам язык я обсуждать не намерен.

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

No guys, we won’t feed your hunger for arguments

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

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

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

Чел написал что это ОТДЕЛЬНАЯ утилита. Т.е. слияние без каких либо систем типа git и т.д.

Так и есть:

hello.rs:

struct Info {
    foo: &'static str,
    bar: u32,
    baz: f64,
}

const INFOS: &[Info] = &[Info {
    foo: "Hello",
    bar: 42,
    baz: 0.0,
}];

pub fn main() {
    for i in INFOS {
        println!("{} {} {}", i.foo, i.bar, i.bar);
    }
}

hello_l.rs:

struct Info {
    foo: &'static str,
    bar: u32,
    baz: f64,
}

const INFOS: &[Info] = &[
    Info {
        foo: "Hello",
        bar: 42,
        baz: 0.0,
    },
    Info {
        foo: "World",
        bar: 13,
        baz: 0.1,
    },
];

pub fn main() {
    for i in INFOS {
        println!("{} {} {}", i.foo, i.bar, i.baz);
    }
}

hello_r.rs:

struct Info {
    foo: &'static str,
    bar: u32,
    baz: f64,
}

const INFOS: &[Info] = &[Info {
    foo: "Hello World",
    bar: 42,
    baz: 0.0,
}];

pub fn main() {
    for i in INFOS {
        println!("{} {} {}", i.foo, i.bar, i.baz);
    }
}
mergiraf merge hello.rs hello_l.rs hello_r.rs
struct Info {
    foo: &'static str,
    bar: u32,
    baz: f64,
}

const INFOS: &[Info] = &[
    Info {
        foo: "Hello World",
        bar: 42,
        baz: 0.0,
    },
    Info {
        foo: "World",
        bar: 13,
        baz: 0.1,
    },
];

pub fn main() {
    for i in INFOS {
        println!("{} {} {}", i.foo, i.bar, i.baz);
    }
}
AlexVR ★★★★★
()
Ответ на: комментарий от kaldeon

Ну есть такое подозрение, но каков ответ на детский вопрос: «если все пойдут топиться в колодце, ты тоже пойдешь?». Как бы, меня не раст смущает, а растаманы.

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

Относящиеся к языку, сухие и неэмоциональные, поддающиеся качественной оценке.

Сам язык ничем не примечателен вообще. Ну язык как язык, языков этих полно. Проблема вовсе не в языке, а в секте вокруг него, которая этот ничем не примечательный язык, да ещё и с анноящими и by design дырявыми причендалами в виде карги и т.п. пытается выдать за что-то божественное и искусственно изобразить его якобы популярность. Результат ничего кроме смеха и/или отвращения не вызывает.

Нормальному программисту совершенно пофиг на каком языке писать, он язык под задачу выбирает, а не наоборот, как сектанты. Я не буду вебню писать на сишечке, драйвер на лиспе, а демона на жабоскрипте не потому что то или иное плохое или негодное, а потому что для разных задач могут быть удобнее разные языки. Для чего может быть удобнее раст - я х.з. Может быть и есть какая-то очень узкая ниша для него. Однако такое дерьмо как Rust Evangelism и его адепты агрессивно препятствуют тому, чтобы раст, наконец, нашёл и занял свою нишу. Так что если растосектанты не прекратят свою деятельность, судьба раста как потенциально полезного для какой-нибудь задачи ЯП будет весьма печальна. После всех этих лет агрессивного и дебильного маркетинга и откровенно ЛГБТшного поведения адептов раста, нормальный человек не станет использовать раст даже если он для какой-то конкретной задачи вдруг окажется удобным. Исключительно из-за таких как ты растофанатиков.

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

Но можно же принять факт, что раст лучше си/цпп

Ну вырвиглазный же. Плюсы тоже могут быть вырвиглазными, но это надо чуть ли не специально запутанно и мудрёно писать. А тут любой хелловорлд уже вырвиглазный. Сравни с кодом на C++\Qt. Я недавно влез в довольно сложный проект на культях, и знаешь, всё сразу понятно, потому что язык + фреймворк подразумевают понятный код.

PS: По синтаксису мне ruby больше всего понравился.

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

Сам язык ничем не примечателен вообще. Ну язык как язык, языков этих полно. Проблема вовсе не в языке, а в секте вокруг него, которая этот ничем не примечательный язык, да ещё и с анноящими и by design дырявыми причендалами в виде карги и т.п. пытается выдать за что-то божественное и искусственно изобразить его якобы популярность. Результат ничего кроме смеха и/или отвращения не вызывает.

Я, кажется, понял, почему сишечники так не любят руст. Поведение фанатов что того, что другого абсолютно одинаковое. By design дырявые причиндалы у сишечки просто аховые, но сишечники обмазываются и просят добавки.

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

Он мне друг уже 25 лет.

Что ты такого ужасного сотворил в своей жизни, что у тебя такие друзья?

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

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

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

Последние 2 пункта - одно и то же. И это последние веяния - все современные ЯП, кажется, поступают так же. Go тоже собирает статические бинари.

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

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

Вправил Крокодилу позвоночный диск после того, как он, бедолага, на запаске приземлился. :)

Я стараюсь не смешивать профессиональное и человеческое. Не все это понимают, к сожалению.

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

Та еще смесь бульдога с носорогом... :)

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

Как там с автореферентными структурами?

Невыразимы в рамках языка. Любая структура имеет право переместиться в памяти, поэтому автореферентность отпадает из-за семантики.

А боров уже юзабелен для ссылок (с алиасингом) в арену, или единственное что на практике можно сделать это аналог сырого указателя?

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

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

Rust community is a dangerous sect

Чья бы корова мычала

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

Ну вырвиглазный же

Мне глаза не вырывает, ЧЯДНТ?

проект на культях

Несчитово. В Qt всё пишется почти как на бейсике, никаких концептов с лямбдами особо и не нужно.

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

Сделал в 1ом файле (hello.rs)

const INFOS: &[Info] = &[Info {
    foo: "Hello",
    bar: 42,
    baz: 0.0,
    bam: 0.0,
}];

Сделал: mergiraf merge hello.rs hello_l.rs hello_r.rs

Результат как у вас 1 в 1.

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

Проблема вовсе не в языке, а в секте вокруг него

Тебе секта мешает взять книжку по языку, почитать, написать пару программ и составить своё ЛИЧНОЕ мнение именно о языке?

дырявыми причендалами

пытается выдать за что-то божественное

О, любой тред про UB будет заполнен сишниками/цппшниками, делающими ровно это.

Исключительно из-за таких как ты растофанатиков.

Каких «таких»? Я плевался ядом? Агитировал всех всё писать на расте? Что я сделал «такого»?

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

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

пишется почти как на бейсике

О! Вот такого синтаксиса и ждешь от нового языка. Но чтобы с нормальными возможностями конечно. А не чтобы апострофы через амперсанды с восклицательными знаками. Это сишке(с плюсами) простительно, у них груз обратной совместимости из 70х. А тут-то, можно было сделать по человечески?

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

О! Вот такого синтаксиса и ждешь от нового языка.

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

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

Ну человеки все разные и у каждого свои критерии человечности. Кому-то и APL — идеал синтаксиса. :)

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

Невыразимы в рамках языка.

С появлением Pin вполне выразимы.

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

Ожидаемо. hello_l.rs и hello_r.rs - это два варианта изменения hello.rs. Следовательно, оба решили удалить строку bam: 0.0,. Следовательно её и не должно быть в результате.

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

считает иначе

Я только рад отличному от моего мнению, когда оно подкреплено чем-то кроме голых эмоций.

По самой статье: она интересная. Первый пункт уже починен, может даже в прошлом году, не помню точно, про асинк особо не знаю, а вот четвёртый пункт какой-то… нелепый. Конечный код не только удовлетворяет борроу-чекер, он и сам по себе более красивый и понятный!

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

Зашел на страничку, почитал там немного. Если у кого там и сектантское поведение, так это у автора этого манифеста. Пафос о «спасении мира», апелляция к избранности малой группы, набор жестких предписаний, которые ни в коем случае нельзя нарушать, потому что это ЗЛО ЗЛО ЗЛО. В общем, обычное зеркалирование.

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

Ожидаемо. hello_l.rs и hello_r.rs - это варианта изменения hello.rs. Следовательно, оба решили удалить строку bam: 0.0,. Следовательно её и не должно быть в результате.

А теперь логика понятна. Добавил в l и r два других взаимоисключения, получил:

<<<<<<< hello_l.rs
        baz: 0.2,
||||||| hello.rs
        baz: 0.0,
=======
        baz: 0.1,
>>>>>>> hello_r.rs

Фигня какая то, git(без этой штуки) точно также выдает.

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

Писал на бейсике, паскале, дельфях, перле, асме, си, цпп, хаскелле, луа, жабоскрипте, расте, sql… ну там по мелочи всякого ещё. На профессиональном уровне - лет 20 уже, на любительском около 30. А что?

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

Ну есть такое дело, сам не ожидал :(

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

Фигня какая то, git(без этой штуки) точно также выдает.

Волшебной таблетки нет.

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

Это https://anubis.techaro.lol/. Там без брендинга доступна только платная версия https://anubis.techaro.lol/docs/admin/botstopper.

Для популярного некоммерческого ресурса сложно без такого теперь обойтись. Кроме того, (по задумке) это помогает защитить пользователей от обучения нейросетей на их публичном коде, не всем такое обучение нравится.

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

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

С Go не работал, но с ходу, выглядит приятно. Не перегружен.

Loki13 ★★★★★
()

Список поддерживаемых языков программирования и форматов данных весьма обширен

Нет ни Perl, ни R, зато руби с растом и жабоскрипом тут как тут. Так сказать, «по пожеланиям молодёжи». Вывод: нинужно.

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

Фигня какая то, git(без этой штуки) точно также выдает.

Ну так ты поменял ровно один и тот же синтаксический элемент в двух разных ветках. Чего ты ожидал-то?

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

Тебе секта мешает взять книжку по языку, почитать, написать пару программ и составить своё ЛИЧНОЕ мнение именно о языке?

Бгг. Я это не только с растом делал, но и с прочими языками которые появлялись на горизонте. И с зиг, и с гошечкой и т.д. И буду это делать, если что-то интересное появится.

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

Переписывать на расте какой-нибудь очередной cat и вопить об этом на весь ЛОР, как это в вашей секте принято, разумеется я не собираюсь.

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

Чего ты ожидал-то?

Да хз, правильно чел написал: волшебной таблетки нет.

Я прислучае ЭТО испытаю с гитом, но что то мне кажется не пригодится этот инструмент …

mx__ ★★★★★
()

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

https://news.itsfoss.com/linus-torvalds-criticizes-drm-merge/

Суть срача: Линус говорит, что надо писать:

  use crate::{
     xyz,
     abc,
  };

или даже

use crate::abc;
use crate::xyz;

Потому что git diff так сможет нормально светить отличия.
А растоформаттер это всё сливает в рандомном порядке в

  use crate::{xyz, abc};
PPP328 ★★★★★
()
Ответ на: комментарий от Stanson

никаких проблем язык не решает

Что, совсем никаких? А как же безопасная многопоточность без рантаймового оверхеда? Отсутствие уб при использовании только safe-подмножества? Сильная типизация?

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

Ну тут дело вкуса, конечно, но растоформаттер чот недоделали и не учли все тонкости обращения с кодом.

Второй вариант мне нравится больше. Никто же в одном питоновском use не пишет по 10 модулей и в одном сишном инклюде не перечисляют по 10 файлов.

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

Тебе секта мешает взять книжку по языку, почитать, написать пару программ и составить своё ЛИЧНОЕ мнение именно о языке?

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

То есть понятно, что оно не всё такое. И плюсовики - не образец здоровья. Но все равно пока что побеждает брезгливость от этого безумия в стиле нового дивного мира.

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

О! Вот такого синтаксиса и ждешь от нового языка. Но чтобы с нормальными возможностями конечно. А не чтобы апострофы через амперсанды с восклицательными знаками. Это сишке(с плюсами) простительно, у них груз обратной совместимости из 70х. А тут-то, можно было сделать по человечески?

100%.

Если Си можно простить за убогость синтаксиса как легаси, то этих-то за что прощать. Сраная перловка нас не отпускает.

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

Для начала, перепишите на расте код автомата разбора инструкций bpf'a в ядре линуха.. Там встречаются вычислимые goto, :) есть такое расширение для gcc. Код там, конечно, не самый читаемый, но очень быстрый.

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

Для начала, перепишите на расте код автомата разбора инструкций bpf’a в ядре линуха.. Там встречаются вычислимые goto, :) есть такое расширение для gcc.

В Rust такое делается через tail-call и инлайнинг, либо через передачу следующей функции параметром (т.е. тупо CPS). Как и в случае с computed^Wлюбым goto, эта шняга преобразуется в jmp.

Релевантный тред на ихних форумах: https://users.rust-lang.org/t/how-can-i-approach-the-performance-of-c-interpreter-that-uses-computed-gotos/6261/3

Но мне нравится, что про CPS ты не слышал, зато сишечку оправдываешь. Хачкель весь в CPS, например, компилируется, и поэтому в GDB его отлаживать почти нереально.

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

Ну в расте так можно, у них функции являются объектами первого класса.

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

А двухсвязные списки они уже запили без unsafe? Это был эпический пример пердолинга когда-то

ckotctvo
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.