LINUX.ORG.RU

Endo 0.1.0

 , endo, , ,


0

2

Состоялся первый публичный выпуск 0.1.0 кроссплатформенной интерактивной командной оболочки и интерпретатора функционального языка в стиле F# Endo.

Проект создан автором и основным разработчиком эмулятора терминала Contour на языке C++ (стандарт C++23) и распространяется по лицензии Apache 2.0.

В этом выпуске:

  • Язык
    • связывания, по умолчанию являющиеся неизменяемыми при использовании let, и изменяемые при использовании let mut;
    • вывод типов (Hindley-Milner) — типы проверяются, но их редко приходиться указывать явно;
    • сопоставление шаблонов с условиями, деструктуризация и шаблоны «или»;
    • дискриминированные объединения, записи и встроенные типы Option/Result;
    • функции-карри, частичное применение и композиция функций (>>, <<);
    • лямбда-выражения с синтаксисом заполнителей (_ + 1, _.field);
    • списочные конструкции с диапазонами и фильтрами;
    • «ленивые» вычисления и последовательности;
    • оптимизация хвостовой рекурсии;
    • модули и импорт.
  • Средства разработки
    • Language Server Protocol — полнофункциональный сервер LSP ($ endo --lsp) с диагностикой, автодополнением, подсказками при наведении курсора, переходом к определению, поиском ссылок, переименованием, форматированием, семантическими токенами, действиями над кодом, встроенными подсказками, Code Lens и многим другим;
    • Debug Adapter Protocol — полнофункциональный сервер DAP ($ endo --dap) с поддержкой точек останова, пошагового выполнения, просмотра переменных, вычисления выражений и дизассемблирования;
    • расширение для VS Code — подсветка синтаксиса, интеграция с LSP/DAP, фрагменты кода и отладка без дополнительной настройки.
  • Оболочка
    • выполнение команд, совместимое с Bash: перенаправление, шаблоны, &&/||, управление задачами;
    • структурированные встроенные команды — ls, ps, jobs, git log, git status, docker ps — возвращают типизированные записи с данными;
    • двойные конвейеры: |> для композиции функций, | для процессов;
    • подстановка переменных/команд/процессов, развертывание фигурных скобок и тильды;
    • более 110 встроенных команд и функций языка;
    • выполнение скриптов .endo с разрешением модулей.
  • Режим «ИИ»-агента
    • встроенная «ИИ»-помощь, запускаемая с помощью символа # в пустом поле ввода;
    • поддерживаемые онлайн-провайдеры: Claude, OpenAI, OpenAI-совместимые (Ollama, vLLM, LM Studio) и Gemini;
    • поддержка локальных моделей в формате GGUF проекта llama.cpp;
    • 18 встроенных инструментов для работы с файлами, git, выполнения команд и доступа к веб-ресурсам;
    • потоковая передача ответов в формате Markdown.

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

★★★★★

Проверено: CrX ()
Последнее исправление: dataman (всего исправлений: 7)

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

А в отрыве от этого — ну вроде шелл как шелл, нормальный. Пайпы прикольные. Посмотрим, что в итоге станет с ним (вангую ещё 2–5 лет плавно угасающего развития, а потом забвение).

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

вангую ещё 2–5 лет плавно угасающего развития, а потом забвение

Я какое-то время так же думал о Contour, а потом и в команде побыл чуть-чуть. :)

dataman ★★★★★
() автор топика

На скрине println - побочные эффекты - не чисто функциональный - не нужен =Р

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

зачем тащить функциональщину в интерактивный шелл в качестве основной киллерфичи

Чтоб конкурировать с Nushell. :)
На https://endo-lang.org/comparisons/ есть сравнение.

А в отрыве от этого — ну вроде шелл как шелл, нормальный.

Из популярных на C++ была fish, но Рыба ржавеет заржавела.

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

Я какое-то время так же думал о Contour, а потом и в команде побыл чуть-чуть. :)

Выглядит прикольно, но как-то ради терминала вот это всё тащить, если оно больше ни для чего не было нужно, не хочется:

qt6-qt5compat>=0
qt6-core>=6.10.0_1
qt6-gui>=6.10.0_1
qt6-multimedia>=6.10.0_1
qt6-network>=6.10.0_1
qt6-declarative>=6.10.0_1
qt6-widgets>=6.10.0_1

При этом есть терминалы, не менее прекрасно выполняющие свои функции без такой кучи зависимости. Тот же urxvt под иксы или foot под вяленого — просто работают и лёгкие при этом.

Чтоб конкурировать с Nushell. :)

А, ну это очень важная задача :)

CrX ★★★★★
()

функции-карри

Ну, во-первых, «каррирующие функции», а во-вторых, если уж пишете так, то хотя бы с заглавной буквы. Карри это фамилия.

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

а во-вторых, «черножопая обезьяна» следует писать с большой буквы: всё-таки, наследный принц. (С)

;)

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

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

ugoday ★★★★★
()

F# даже в мире dotnet особо не популярен, сложно сказать, дает это какие-то плюсы шелу.

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

как-то ради терминала вот это всё тащить, если оно больше ни для чего не было нужно, не хочется:
qt6-*

Ну и что. У Konsole их ещё больше, что не мешает побеждать в здешних опросах.

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

А кому-то нужны не их скудные функции, а более другие.

Тот же urxvt под иксы или foot под вяленого — просто работают и лёгкие при этом.

Что это за «лёгкость» такая? Какое-то ненужно.

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

Ну и что. У Konsole их ещё больше, что не мешает побеждать в здешних опросах.

Вообще не аргумент. Konsole побеждает потому что KDE побеждает. Любители кед с очень малой вероятностью решат заменить Konsole на Contour.

А кому-то нужны не их скудные функции, а более другие.

Ну а чего не хватает? Терминал — достаточно простая штука с вполне определённым набором функций.

Нет, есть конечно всякие гиммики, никак на опыт использования не влияющие, вроде «gpu accelerated» — сперва выглядело как шутка, когда появилось в alacritty, но потом остальные, видимо, не выкупив прикола, взяли да повторили — я так и не понял зачем.

Что это за «лёгкость» такая? Какое-то ненужно.

Малый объём на диске ив памяти. Также высокая скорость работы.

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

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

Ну а чего не хватает?

  • Вкладки и разделение окна.
  • Просмотр изображений (поддержка форматов Sixel, Kitty Image, iTerm2).
  • Какой-нибудь встроенный движок для скриптов.

Вот это всё есть в WezTerm, поэтому его и использую чаще всего.

Малый объём на диске ив памяти. Также высокая скорость работы.

А, экономия байтов и миллисекунд это очень важная задача. :)

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

Вкладки и разделение окна.

Имхо — антифича. Это должно быть отдельно и универсально, средствами WM/композитора, а не частью терминала. Хотя для urxvt вкладки есть.

Просмотр изображений (поддержка форматов Sixel, Kitty Image, iTerm2).

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

А, экономия байтов и миллисекунд это очень важная задача. :)

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

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

Это должно быть отдельно и универсально, средствами WM/композитора, а не частью терминала

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

В iterm2 под оффтопик есть например интеграция с tmux https://iterm2.com/documentation-tmux-integration.html , для некотрых прям киллер фича. Не знаю, есть ли вм/де в линуксе, которые это умеют

Ну вообще там могут быть и десятки и сотни миллисекунд в некоторых юзкейсах (а это весьма заметно)

полностью поддерживаю, долгое время думал что плевать на скорость вывода, жирный выхлоп после tail -f как-то не быстро обрисовывался, но не придавал этому значения. А потом попробовал шустрый терминал и оказалось что тормозил рендеринг в iterm2, а в быстром терминале 500мб текста могут моментально отрисовываться

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

а в быстром терминале 500мб текста могут моментально отрисовываться

А зачем?? Для чего может понадобиться «моментально отрисовывать» «500мб текста», если даже просто на просмотр отрисованного человеку потребуется на много порядков большее время??.. Не говоря уже о каком-то понимании отображаемого текста или, не дай баг, анализе увиденного на экране... ;P ;)

А ведь «500мб текста» - это сильно больше, чем один экран... Зачем его, весь этот текст, так быстро отрисовывать, а??..

Ы? За чем «гонитесь»? Для чего вам такая «скорость»??.. ;))

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