LINUX.ORG.RU

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

 , , ,


1

4

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

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

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

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

★★★★★

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

Ты утверждаешь, что «Си близок к асму». Что такое близок, в таком случае?

Перечетай переписку, а то устроил тут почемучки бесполезные, не способен осознать, тогда представь на обозрение высокоуровневый ЯП по твоему мнению ближе к асму…

АПХАХАХАХАХАХАХАХАХАХАХАХАХ ГОСПОДИ ОТКУДА ЖЕ ТЫ ВЫЛЕЗ-ТО

Это ты сейчас детсад демонстрируешь, недоросль?

/me тихо рыдает в тряпочку.

Папке тебя в тряпочку надо было в свое время (смотри я тоже так шутить умею)

Volatile делает совершенно другое, к тому как «часто» меняется объект отношение не особо имеющее.

Цитата из стандарта:

An object that has volatile-qualified type may be modified in ways unknown to the implementation or have other unknown side effects. Therefore any expression referring to such an object shall be evaluated strictly according to the rules of the abstract machine, as described in 5.1.2.3. Furthermore, at every sequence point the value last stored in the object shall agree with that prescribed by the abstract machine, except as modified by the unknown factors mentioned previously.

A volatile declaration may be used to describe an object corresponding to a memory-mapped input/output port or an object accessed by an asynchronously interrupting function. Actions on objects so declared shall not be ‘‘optimized out’’ by an implementation or reordered except as permitted by the rules for evaluating expressions

Ты ж читай на что ты ссылаешься, там написано ровно то, что я тебе и говорю что «может» вести себя анамольно, что волатайл предотвращает такое поведение (я тебе больше скажу, он его не особо и оптимизирует после этого) Не шаришь - не умничай (твои сугубо личные интерпретации стандарта - это твои проблемы, бери и смотри как и что на железе происходит, а не в фантазиях твоих)…

А что про «часто» - так это следствие, как правило, вышеописанного (посмотри во что твой for в машинных кодах порой превращается без волатайла)…

Sm0ke85
()
Последнее исправление: Sm0ke85 (всего исправлений: 3)
Ответ на: комментарий от no-such-file

А зачем на них влиять? Это реалтайм веб-сервис с гарантией обработки за 100мс? Я таких не знаю ни одного. Можно пример?

Выше всё написано. Потому что будет значительное количество недовольных пользователей. Как минимум.

Если у тебя 10% запросов тормозят из-за GC, то ты просто криворукий и не умеешь в правильное распределение нагрузки.

Нет, эта проблема присуща всем языкам с GC, всем приходится с ней бороться теми или иными способами. Не только мне.

Кто реально занимается разработкой таких сервисов, тому и объяснять ничего не нужно: и сами сталкивались, и кучу статей читали, и доклады видели.

А теоретикам объяснять бесполезно. С опреленного момента времени, у меня складываеся впечатление, что на ЛОР - огромное количество теоретиков, которые вообще не работают в IT, или точно не разработчики. Является он, например, админом, и понятия не имеет о сложностях разработки. т.к. самое большое, что писал - bash скрипт на 1000 строк, или Perl-скрипт. Но хрипя и брызгая слюной указыает эти «неудачникам-снобам»: низя Rust! Низя ORM! Низя то! Низя это! Мне не нравится!

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

тогда представь на обозрение высокоуровневый ЯП по твоему мнению ближе к асму…

Всё ещё не понимаю, что такое «близко к асму», но пусть будет, например, C– (Си минус минус). А если ещё ближе, то LLVM IR. Съел?

Или это не близко к асму? Что такое близко к асму-то?

я тебе и говорю что «может» вести себя анамольно

Там нет никакой «анамольности». Всё происходит ровно так, как написано в стандарте.

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

Это реалтайм веб-сервис с гарантией обработки за 100мс? Я таких не знаю ни одного. Можно пример?

Любой видео стриминг типа нетфликса или ютуба.

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

Всё ещё не понимаю, что такое «близко к асму», но пусть будет, например, C– (Си минус минус). А если ещё ближе, то LLVM IR. Съел?

Я уверен что простых ЯП море, но то что ты перечислил работает в некоей среде (по-умолчанию, медленнее, сложнее, больше ресурсов требует), но победил Си: из-за практически прямого преобразования в машинный код (буквально 1 команда С бывает = просто 1 команде асм), а также понятный стандарт (ты можешь сегодня скомпилировать иходники 20-летней давности), прямое обращение к памяти, возможность напрямую использовать асм, легковесный компилятор, практически отсутствующий рантайм по сравнению с остальными ЯП - это все делает Си самым близким к асму, по сути «надстройкой над асм с небольшим рантаймом»…

Там нет никакой «анамольности». Всё происходит ровно так, как написано в стандарте.

Вот интересно, а почему по твоему в стандарте вдруг появился volatile, вот не было его и вроде все ок было (и прерывания и многое другое, а volatile не было)…?

И вот дополнение для понимания «аномальности»:

https://en.wikipedia.org/wiki/Volatile_(computer_programming)

Standards defects While intended by both C and C++, the current C standard fails to express that the volatile semantics refer to the lvalue, not the referenced object. The respective defect report DR 476 (to C11) is still under review with C17.[7]

Compiler defects Unlike other language features of C and C++, the volatile keyword is not well supported by most C/C++ implementations - even for portable uses according to the C and C++ standards. Most C/C++ implementations are buggy regarding the behavior of the volatile keyword.[8][9] Programmers should take great care whenever using the volatile keyword in C and C++.

Кстати, попробуй перевести слово с англиского, чтоб увидеть какой смысл в него закладывали создатели…

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

Про UI любой сложности — преувеличение.

Вовсе нет. Любые капризы можно сделать.

Gdi, wine

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

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

Я же написал критерий win/linux/osx, какой win32?

Win32 + wine на лялехе и маке и нативно на Windows же. У меня так Winamp работает, когда половина плееров отваливаются каждый апдейт.

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

Чуть реже, чем всегда, GUI-программе нужны простейшие контролы

Если только нужна спарстанская софтина, то ок. Но если нужно делать по замыслам дизайнера, с плавными переходами, анимациями и свистоперделками, то qml божит. И мне думается синтаксис qml приятнее, чем на web/html/js/css делать.

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

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

Электронная подпись в Adobe Acrobat Reader — достаточно серьезно для работы?

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

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

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от no-such-file

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

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

Нет, эта проблема присуща всем языкам с GC

А как же всяческие асинхронные gc?
gc не обязательнол должен ставить раком все потоки, как делает это в java

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

Опиши кейс, как и для чего оно используется?

Кейс электронной подписи в Adobe Acrobat Reader? Врачи, юристы, нотариусы, немного корпоративный сектор и бухгалтерия.

Тут важно, что обладатель крипто-токена должен быть линукс-энтузиастом — чтобы работать с Adobe Acrobat Reader под линуксом, а не на виндовз и не на макбуках. И если я правильно помню, под убунту он идет как snap-пакет два в одном: wine+виндозный ридер. И если не ошибаюсь, этим пакетом подписи не получится ставить. Надо взять отдельно wine, отдельно накатить туда виндозный акробат-ридер и туда же виндозный драйвер крипто-токена.

Думаю, не надо объяснять, что компания Адобе — флагман дизайна. Что пдф-документы ближе к полиграфии, чем к гиковским PNG. Соответственно, у Adobe Acrobat Reader референсный рендеринг пдф и референсная валидация электронных подписей внутри.

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

Это отличная идея!

Отличная от чего? На каждый вызов каждый раз проверка на ошибка/не ошибка. При этом в 99.9% там нет ошибки и проверка просто жрёт время проца.

Нет, UB ты не получишь. Получишь панику (вызов panic!()).

Не будет никакой паники. Будет просто проглоченая ошибка (типа тут никогда её быть не может) и всё. Результат - UB. Это не лечится никакими программными проверками и костылями в синтаксисе языка.

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

Отличная идея до такой-же степени, как и ручные лайфтаймы. Примерно никто не пользуется в свежем коде этой «отличной» идеей. Аналогичная фигня будет и с проверками каждого чиха. Современное «фигак-фигак и в продакшн» прям заставляет забивать на всё это вот… В противном случае и в С проверяли-бы коды возврата. Но это всё не отменяет слов про обработку исключений, которые легко видно в коде и в результате неотловленного исключения получится падение программы, в отличии от .unwrap где-то в чепыжах кода.

Можешь.

Нет не можешь. Зависимости зависимостей и зависимости зависимосетй зависимостей ты не контроллируешь никак без патчей.

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

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

Так подожди, адоб акробат ридер позволяет подписывать pdf-ки своим ключем и потом открывать на других компах и проверять, что подписал именно тот, чье имя указано в подписи? Типа как https у сайта? А где хранится цепочка сертификатов в таком случае? В самом адоб акробат ридере?

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

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

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

Да просто не часто вспоминаем IUP. Несправедливо! :)
TGUI тоже не очень богата на виджеты, HikoGUI застопорилась. Многие проекты из awesome-cpp/GUI тоже загнулись…
Остаётся SDL3. :)

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

поменял на

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\n"
Benchmark 1: ./c > /dev/null
  Time (mean ± σ):      2.137 s ±  0.013 s    [User: 2.131 s, System: 0.005 s]
  Range (min … max):    2.118 s …  2.164 s    10 runs
hyperfine './r>/dev/null'
Benchmark 1: ./r>/dev/null
  Time (mean ± σ):      1.616 s ±  0.015 s    [User: 1.424 s, System: 0.192 s]
  Range (min … max):    1.594 s …  1.634 s    10 runs

~30%

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

Да всё на месте. Вообще, это уже мухлёж как раз в пользу си, за счёт урезания функциональности. С растовой стороны всё честно - println!(«{}») по дефолту печатает full precision, можно добавить значащих разрядов и он их напечатает ничего не обрезая. К тому же, хоть с стороны Си и печатаются лишние нули, это должно компенсироваться дополнительной логикой с растовой, которая что-то там проверяет чтобы НЕ печатать ненужные нули.

Но ладно, допустим разброс машин и компиляторов, но даже так Си еле-еле нагнал (с дополнительным ковырянием) и только СРАВНЯЛСЯ, в пределах погрешности, с растом. Так что вот, именно, где хвалёная скорость сишки которая на 20 - 30 процентов быстрее раста? На самом-то деле и такой-то размен был бы просто шикарен с учётом того что язык на три головы лучше Си

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

упоротого синтаксиса с костылями и велосипедами, хреновой читаемости кода из-за предыдущей претензии

Это не претензия, это что-то твое личное. По мне - отличный синтаксис и нормальная читаемость, на уровне крестов. Даже при том что я раст лишь чуть-чуть знаю, а просто посмотрел на код в паре реальных проектов.

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

А где там запрет то? Один и тот же стейт/память всё ещё можешь менять и читать из разных скоупов, просто не делай это как муд… попало, откуда попало и когда попало.

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

Slint is implemented in Rust and benefits from Rust’s focus on memory safety, performance, and concurrency

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

Or perhaps, you are looking for a better QML?

Ой, как самоувернно. Причем ни одного кейса, типа вот мы можем так, а qml так не может, так и нет.

Указано, что производительнее чем qml, но ни одного теста конечно же не будет.

Налицо паразитирование на известности qml.

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

о победил Си: из-за практически прямого преобразования в машинный код (буквально 1 команда С бывает = просто 1 команде асм)

Можно пример программы на Си, где каждая команда транслируется в команду на асм?

а также понятный стандарт (ты можешь сегодня скомпилировать иходники 20-летней давности)

Не можешь. Как минимум, объявления функций в стиле K&R давно выкинули. А ещё триграфы. А ещё штуки типа gets(). Ну и прочего по мелочи.

легковесный компилятор

И гцц и clang оба по миллиону строк. Легковесный, угу.

Кстати, оба написаны почему-то не на Си.

Там нет никакой «анамольности». Всё происходит ровно так, как написано в стандарте.

Вот интересно, а почему по твоему в стандарте вдруг появился volatile, вот не было его и вроде все ок было (и прерывания и многое другое, а volatile не было)…?

Я перестаю понимать, что ты вообще несёшь. Volatile к «аномальности» всё ещё не имеет отношения.

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

При этом в 99.9% там нет ошибки и проверка просто жрёт время проца.

А в 0.01% случаев ты согласен насрать в память или попортить данные? Отличный из тебя программист, чо.

Не будет никакой паники.

Можно пример кода, где не будет паники и ошибка молча будет проглочена?

Нет не можешь. Зависимости зависимостей и зависимости зависимосетй зависимостей ты не контроллируешь никак без патчей.

Можешь, конечно. Про локфайлы выше написали.

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

Потому что на нём легко …

Остальное не так важно.

Да нет, важно. Если серьёзно, пердон популярен во многом потому что его гугел очень активно продвигал в 2000х. В остальном, ничего выдающегося (за исключением просто чудовищного синтаксиса) в нём нет.

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

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

unwrap на ошибке приводит к панике, а не «проглачиванию» ошибки.

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

Устранение возможности ошибиться, это когда ты в принципе не можешь составить неправильную программу.

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

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

и без него гарантировано неверное поведение кода (тем более не зная флагов компиляции и компилятора)

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

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

его нет. windows и microsoft разучились в дизайн если не после чикаго, то после нептуна/milennium/2k - точно

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

ну если rustовый макросный println еле еле может сравняться с костыльной реализацией сишного printf в glibc, то у меня для него оочень плохие новости (т.к это одна из самых медленных реализаций printf). Как насчёт сранвения с stb_printf, который в рамках сишки работает куда быстрее гнутой реализации или вообще fmt, который мне в своей реализации лишь с большим трудом удалось обогнать?

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

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

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

кстати, есль случаи, когда просрать пару миллисекунд ничем не лучше, чем насрать в память. Пусть они и редкие, они есть и я с ними сталкивался

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

А где хранится цепочка сертификатов в таком случае? В самом адоб акробат ридере?

Wine может в cert-store в своей песочнице. Сюрприз, что над wine работали шарящие в винапи программисты? Сюрприз, что в природе в принципе существуют шарящие в винапи программисты?

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

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

Какого другого? Древней версии gcc?

кстати, есль случаи, когда просрать пару миллисекунд ничем не лучше, чем насрать в память. Пусть они и редкие, они есть и я с ними сталкивался

Это какие? Расскажи же нам!

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