LINUX.ORG.RU

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

 , , ,


1

4

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

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

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

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

★★★★★

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

Почему Вы пишите что С++ убили JAVA и .net, а Cи убьет только Rust?

Tут больше вопрос как долго продержится Rust и кто его заменит …

И кстати Java и net это не совсем компиляторы, но в любом случае они проще с++, а Rust сложнее Си, причем на много.

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

По-видимому, слабой типизацией и прямой работой с памятью

Тогда и Rust близок к ассемблеру. И Форт. И даже Лиспы.

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

Почему Вы пишите что С++ убили JAVA и .net, а Cи убьет только Rust?

Кто мы? Я не писал про «только Rust» нигде.

И кстати Java и net это не совсем компиляторы, но в любом случае они проще с++, а Rust сложнее Си, причем на много.

Что значит «сложнее»? Сишечка — это весьма сложный язык с огромным количеством заковыристых мест.

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

Кто мы? Я не писал про «только Rust» нигде.

Т.е. программ на си будет меньше не только из за Rust но и за других языков, да и на Rust тоже будет со временем меньше.

Что значит «сложнее»? Сишечка — это весьма сложный язык с огромным количеством заковыристых мест.

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

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

Т.е. программ на си будет меньше не только из за Rust но и за других языков, да и на Rust тоже будет со временем меньше.

Да, всё так. Но в нише, где раньше практически единолично рулила сишечка, теперь довольно популярен Rust. Другие недоязычки пока так не представлены.

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

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

Реализация Rust алгоритмически сложнее реализации Си, это факт. Но это играет роль только если писать новую реализацию с нуля, а этим мало кто будет заниматься. Хотя увидеть формально верифицированную реализацию Rust в духе CompCert для Си было бы интересно, но это очень нишевый случай. Ядерным говнокодерам этого не требуется (CompCert люнексовое ядро даже не соберёт, например).

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

Реализация Rust алгоритмически сложнее реализации Си, это факт.

И java c .net по сути проще с++, поэтому они перетянули часть одеяла с с++ на себя.

С растом такая фигня не прокатит, хайп по нему прошел он уже сейчас сдает по всем позициям, через 5-10 лет про него и не вспомнит.

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

И java c .net по сути проще с++, поэтому они перетянули часть одеяла с с++ на себя.

Проще в чём?

С растом такая фигня не прокатит, хайп по нему прошел он уже сейчас сдает по всем позициям, через 5-10 лет про него и не вспомнит.

Готов ли ты поспорить на штуку баксов об этом?

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

С растом такая фигня не прокатит, хайп по нему прошел он уже сейчас сдает по всем позициям, через 5-10 лет про него и не вспомнит.

Только что вышел очередной отчет от JetBrains. Растёт популярность, как и в прошлые годы. Нигде не видно, чтобы сдавал позиции, наоборот, всё чаще встречаешь упоминания, что пишут на нём.

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

Ну я как миниумум видел вот это: https://www.opennet.ru/opennews/art.shtml?num=63878

Да я понимаю что я вижу то что я хочу видеть а вы будете видеть то что Вы хотите, так что все это так …

Время покажет. Подождем 5-10 лет для начала.

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

Готов ли ты поспорить на штуку баксов об этом?

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

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

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

Tree-sitter — это хорошо, руст — это плохо. Вывод — НИНУЖНО.

А вот если git без перла не может, почему они не поюзали обвязку к ts из того же перла?

Для растофобов и тут плохие новости:

Gives the path to the compiled object file which contains the language grammar. Optional; if not provided it will be presumed to be named based on the language name, as tree-sitter-$LANG.so

А чтобы сгенерировать эти парсеры, нужно «всего лишь» поставить node.js и написанный на rust tree-sitter-cli.

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

Забавно видеть как сумасшедший что-то пишет про секты.

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

что утечки памяти — страшное зло.

Забавно, но раст не ставит своей целью защиту от утечек и сделать утечек в safe rust довольно легко.

Не стоит помогать им жить.

А этот помешанный хоть кому-то помогает жить? Я бы даже так спросил, от его деятельности хоть на что-то есть влияние?

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

из-за которой старый gtk должен считаться небезопасным

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

сишный код, использующийся для сравнения следует собирать БЕЗ ОПТИМИЗАЦИЙ

Пфф, а проверим, просто вот на вскидку:

#include <stdio.h>
int main () {
  double numf = 42.42;
  for (int i = 0; i < 1000000; ++i){
      printf ("%f %f %f %f %f %f %f %f %f %f %f %f %f %f", 
              numf, numf, numf, numf, numf, numf, numf,
               numf, numf, numf, numf, numf, numf, numf);
    }
}
gcc ./c.c -O3  -o c
hyperfine './c > /dev/null'
Benchmark 1: ./c > /dev/null
  Time (mean ± σ):      2.275 s ±  0.029 s    [User: 2.265 s, System: 0.009 s]
  Range (min … max):    2.216 s …  2.312 s    10 runs
fn main() {
  let numf = 42.42f64;
  for _ in 0..1000000  {
    println!("{} {} {} {} {} {} {} {} {} {} {} {} {} {}",
            numf, numf, numf, numf, numf, numf, numf,
             numf, numf, numf, numf, numf, numf, numf);
    }
}
hyperfine './r>/dev/null'
Benchmark 1: ./r>/dev/null
  Time (mean ± σ):      1.640 s ±  0.022 s    [User: 1.447 s, System: 0.193 s]
  Range (min … max):    1.607 s …  1.685 s    10 runs

40%. А ведь лучшие, без сарказма, сишники этот printf вылизывали, т.е. дело в самом языке. При этом сишный принтф ни фига не проверяет, спутал спецификатор -УБ, а типичные сишники путают, они почему-то считают всё вокруг числами, включая указатели.

Зато умеет в strict aliasing

Лол что. Хреново умеет, через убшную жопу, в том числе когда и restrict костылёк не там поставишь. И это если забыть что «настоящие» сишники считают стрикталиасинг происками комитетских вредителей и просто выключают нахрен. А вот раст как раз проектировался чтобы фундаментально порешать проблемы с алиасингом, и порешал, лучше него сейчас никто не умеет, это ж самая его суть.

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

Это всего лишь мое мнение, я же не оракул какой нибудь.

Ты не считаешь своё мнение верным? Зачем тогда такое мнение?

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

Это буквально синтаксис от C++.

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

Я писал на асме и утверждаю, что Си наиболее близок к асму,

Там мало чего близкого. В ассемблере чётко документировано что делает каждая инструкция (иногда даже количество тактов указано). А в Си шаг влево, шаг вправо и undefined behavior. Оптимизатор может менять программу до неузнаваемости, что немыслимо в ассемблере.

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

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

Ты не ответил на вопрос: что тебе в типах Си не зашло, вот тут я не понял…?

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

Это вкусовщина, назови еще один распространенный язык под железки, чтоб только не Си и асм…? (сразу оговорюсь, что С++ - это уже не очень вариант, т.к. он тяжеловат и с магией таки, а если писать на нем как на голом С, то зачем использовать С++)

Если ты видел/помнишь последний асм, то он уже не так явно отличался от ЯП более высокого уровня за счет макросов. Но и в Си ты можешь прям до такта посчитать команды глянув просто во что Си компилируется и можешь прям на асме прописать критичные места, в Си магии практически нет, потому что его ближайший сосед - это низкоуровневый Асм, других нет, иначе бы для систем критических ко времени/потребляемым-ресурсам использовался бы не Си.

Си не считает себя «умнее» программиста - в этом его сила и все вытекающие достоинства (в т.ч. близость к машинному языку)…

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

В ассемблере чётко документировано что делает каждая инструкция

и можешь прям на асме прописать критичные места

Давайте прекратим уже это мракобесие? Что делает каждая инструкция было понятно до первого пентиума. С тех непонятно, неочевидно, и вообще определяется драйверами операционной системы.

На асме прописывать критичные места стало моветоном со времен первого x86_64.

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

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

включая даже откровенные антипаттерны

Да, зато вот современный веб, который уж точно соответствует паттернам, но бл. увешан индикаторами загрузки на каждый чих и выглядит как тормозное говно - вот это я понимаю, и генерирование html на клиенте через js, и обилие объемных js фреймворков, зато без php антипаттернов.

Вообще адепты «делать все по бест практисес» видят в этом самоцель как таковую, и не обращают внимания, что иногда сделать по паттерну - это громоздко и усложнено и не дает ничего кроме факта того, что зато по паттерну.

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

Давайте прекратим уже это мракобесие?

и

на асме
Что делает каждая инструкция
определяется драйверами операционной системы

кажется, ты тут главный мракобес, так-то…

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

vsdiffmerge

Это какая то тулза из Visual Studio? Она умеет сама все разруливать? Или это просто ui для ручного разруливания типа kdiff3?

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

Ну у меня получилось с gcc:

gcc 1.c -O3

time ./a.out > /dev/null

real 0m1,451s

user 0m1,446s

sys 0m0,004s

с clang:

clang 1.c -O3

time ./a.out > /dev/null

real 0m1,444s

user 0m1,439s

sys 0m0,004s

Используй Clang для Си и будет тебе скоростное счастье, т.к. gcc имеет бэкграунд, который нельзя «забывать»…

PS это я через wsl на винде делал под Debian’ом, т.к. виндовая машина под рукой)))

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

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

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

со времен первого x86_64

Cо времен первого x86_64 ничего особо не поменялось, просто пошустрее машинки появились, и на Си тебя никто не заставляет особо пользоваться драйверами ОС (ну винда только если заставляет, еще и апи свои втюхивает), пиши напрямую в регистры (считай будь сам драйвером)

На асме прописывать критичные места стало моветоном

это ерунда, так как эмбдед (который реального времени) никуда не делся.

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

И что ты доказал этим листом?

Жаль ты не в состоянии извлечь из ссылки никакой полезной информации. Драйвера для ЦПУ есть. Драйверами заведует ОС – в данном случае Дебиан. У пакета есть описание, есть история изменеий. Изменения микрокода на удивление частые. В изменениях прекрасное, типа mitigation когда определенная последовательность инструкций приводит к подвисанию. То есть, сначала пакет в системе одной версии, и ЦПУ на этой системе подвержен ДоС через определенную последовательность инструкций; потом дебиан обновляет этот пакет, и инструкции ЦПУ на этой системе начинают делать совсем другое. Давайте посчитаем число тактов в случае первого пакета, и в случае второго пакета.

Эпл Силикон так вообще своим микрокодом эмулирует x86/x86_64 (за исключением AVX2).

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

Ради интереса глянул на раст и ты нечестный друг, там вывод в расте до одной сотой))))

на Си тогда нужно писать хотя бы так:

#include <stdio.h>

int main () {

double numf = 42.42;

for (int i = 0; i < 1000000; ++i){

  printf ("%2.2f %2.2f %2.2f %2.2f %2.2f %2.2f %2.2f %2.2f

%2.2f %2.2f %2.2f %2.2f %2.2f %2.2f",

          numf, numf, numf, numf, numf, numf, numf,

           numf, numf, numf, numf, numf, numf, numf);

}

}

тогда gcc -O3 даст:

real 0m1,092s

user 0m1,092s

sys 0m0,000s

clang -O3 даст:

real 0m1,097s

user 0m1,097s

sys 0m0,000s

rustc даст:

real 0m1,126s

user 0m1,036s

sys 0m0,088s

Где скорость хваленная???

Все упирается в оптимизации, а теперь докинь туда «Безопасность» раста и о «раст быстрее чем Си» можно ничего не говорить…

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

Ну так эти микрокоды как-то же пишутся, не в вакууме они существуют, и при их написании там вполне точно исполняются команды, микрокоды - это уже прокладка между железом, тут Си не при чем, но он «и так умеет»…

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

Cо времен первого x86_64 ничего особо не поменялось

Подумал, и резко не соглашусь. До x86_64 у пользователей был зоопарк из систем: у кого-то 10-летний Pentium Pro, у кого-то инструкции 3DNow, что-то еще векторное. Рукописный ассемблерный код мог полагаться на что, на наличие MMX? Или чисто на существование EAX?

x86_64 во-первых обнулил calling conventions. Во-вторых, оптимизации на 32-битных регистрах обнулились наличием 64-битных регистров раз, и новейшими жирными векторными расширениями два.

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

Ну это все, считаю, минорная история, фундамент та тот же: есть железка со своей архитектурой и периферией, есть номер команды, делается обзывание номера команды в буквенное, соответственно получаем asm, а из asm делаем Си компилятор = пруф…

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

Добавил \n в выводе на Си, чтоб как в выдачи раст строка отступалась:

real 0m1,101s

user 0m1,101s

sys 0m0,000s

и все равно Си быстрее всего лишь с одной оптимизацией вывода printf…

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

Но и в Си ты можешь прям до такта посчитать команды глянув просто во что Си компилируется и можешь прям на асме прописать критичные места

Краткий перевод: «да, и в С можно то же самое, что и на Assemblere, но „через Ж***“». :)

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

«да, и в С можно то же самое, что и на Assemblere, но „через Ж***“»

Тут бы пояснить что тебя не устраивает… asm() - не нравится или что?

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

Книга, проект, конференция - не столько важен тип, сколько полезность. Иной проект бывает бесполезней чем книга. Так что нет смысла считать книги чем то крамольным.

rumgot ★★★★★
()

Я тут подумал, что проекты на rust продвигают по похожему шаблону, что и воук активистов. Например вот есть компания или проект, вот пусть будет фильм. В всех командах обязаны присутствовать черный, гомы, трансы, женщина и т.п. И так же проекты на rust, вот кому бы пришло в голову переписать core-utils на c/c++ и продвигать их: смотрите, вот мы переписали, давайте как быстро внедрять и менять существующие. А вот мы переписали что-то на rust, теперь вот точно внедрять!!! Или что-то новое выходит и пометочка, а вот на rust же. Т.е. этот ярлык уже навешивают в качестве рекламной фичи. Фигня, что там написано может быть через жопу, кто бы код полез изучать, кто бы баги пошел тестить, на rust же, зачем вам какие-то еще вопросы задавать…

Мне думается, это дебильная практика.

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

Это какая то тулза из Visual Studio?

Ага

Она умеет сама все разруливать?

Всё не умеет, но многое разруливает и правда сама. Автослияний обычно 20-30, а конфликтов остается 5-10, там где и правда в одних строках изменения в разных ветках.

Ну и там кнопочки удобные сделаны на всё. Поудобнее, чем в kdiff3.

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

У меня ключевое слово: Своей, а не книга.

Я не спорю, что тут плохого ничего нет, просто как то подозрительно выглядит, как будто чел зарегался только для того что бы СВОИ книжки пропихнуть. (сделать им рекламу на халяву).

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

Тогда заключаем спор?

Не вижу в этом смысла. Каждый останется при своем мнение и мнение опонента для него не важно (по крайне мере для меня).

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

как то подозрительно выглядит, как будто чел зарегался только для того что бы СВОИ книжки пропихнуть

Проецируем и переносим?..

(сделать им рекламу на халяву)

Неправда, не «на халяву». Даже если это и в самом деле реклама, то человек прилагает некоторые усилия, то есть, уже не «на халяву», а трудом своим.

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

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

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