LINUX.ORG.RU

Schemesh v0.9.0 — оболочка командной строки на Scheme

 , ,


1

5

Пока сограждане предавались праздничным развлечениям, разработчик Schemesh разрабатывал и в результате наразрабатывал очередной релиз своего проекта: оболочка командной строки, представляющая собой довольно элегантную амальгаму синтаксиса Chez Scheme и классического UNIX Shell.

В данном выпуске:

  • добавлены функции работы с историей и портами (в том числе и совместимые с Racket);
  • улучшена работа с фоновыми процессами;
  • несколько мелких исправлений и обновлённые инструкции по сборке.

Из нетривиальных особенностей проекта стоит отметить возможность смешивать синтаксис Lisp с обычным shell в рамках одного скрипта и возможность подгружать schemesh в качестве библиотеки в Chez Scheme. Детальнее с примерами можно посмотреть здесь.

От других REPL-образных оболочек с Lisp/Scheme синтаксисом данный проект отличается наличием полноценного job control (fg\bg и прочее).

На вкус автора новости получилась бы отличная замена того же Fish если бы поддерживался right prompt – на удивление редко встречающаяся фича среди оболочек командной строки.

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

★★★★★

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

К слову, многие сишники ведут себя так же и с тем же почти результатом. Но в С хотя бы понятно чего ради ведётся рукопашная с утечками памяти, use-after-free и т.п. трудностями *). А с шеллом-то зачем, собственно, башисты не могут объяснить, к чему эти пляски, какую выгоду мы в результате получаем?


  • — Хотя и тут последние бастионы падают. Даже в микроконтроллеры проникают js, python и прочие lua.
ugoday ★★★★★
()
Ответ на: комментарий от ugoday

А какие средства баш предоставляет, для того чтобы предотвратить подобные ошибки?

shellcheck

в emacs flycheck+shellcheck

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

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

Вопрос философский. Если среднего крестьянина можно было отвезти и высадить в чистом поле с топором и лопатой и он мог сам себе построить жильё, посадить и вырастить урожай, сделать и починить себе одежду, развести скот и ещё начать приторговывать, а современный гражданин очень быстро помрёт, то это деградация? Наверное да… но есть нюансы.

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

А пользователи могут просто выбирать более удобные молотки

Но и это не спасёт их от волшебного удара по пальцу :) Даже трижды профи от такого не застрахован. И не будет застрахован, кто бы что ни говорил :)

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

Это хорошая штука. Сам пользуюсь. Только это не часть баша (как языка), а внешняя программа. А спрашивалось про баш.

Вот, например в бабашке fs/list-dir возвращает коллекцию типа PersistentVector, содержащую объекты типа sun.nio.fs.UnixPath. Функция map обходит коллекцию, применяя к каждому элементу другую функцию, например fs/file, которая превращает UnixPath в java.io.File. Как-то так:

(->> "/tmp" fs/list-dir (map fs/file) (take 3))
(#object[java.io.File 0x191e32f5 "/tmp/.ICE-unix"]
 #object[java.io.File 0x46320b56 "/tmp/.org.chromium.Chromium.r3YjVq"]
 #object[java.io.File 0x66d08b13 "/tmp/dbus-VoNtUK9qr8"])

При этом map’у пофиг, что за элементы нахохятся в коллекции. Он просто её обходит. fs/file’у безразлично откуда взялся аргумент функции. Наконец, UnixPath и File — это тупо данные, которые никак не влияют на механизмы обхода и обработки списков. Тут в принципе невозможно, чтобы случайный пробел поломал работу. Это не вопрос внимательности и прилежания программиста. Это не вопрос вдумчивости девопса, который вышеназванный shellcheck в git hook проекта не поленился написать. Просто такой класс проблем заведомо исключён путём правильного проектирования ЯП.

Вот, хотелось бы, чтобы и у bash’а было так же.

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

написать баш-скрипт

Башизмы — зло! И те кто считает sh==bash, должны мучительно и медленно умирать за подмену понятий. Есть POSIX Shell, абсолютно стандартизированный инструмент, ведущий себя везде одинаково — хоть в свежем Bash в режиме совместимости (с поправкой на то, что он молча жрёт башизмы, которые за пределами баша работать не будут), хоть в Almquist Shell тридцатипятилетней давности.

CI/CD

Не надо всё в кучу сметать! CI/CD ≠ автоматизация.
Хотя, учитывая что в yaml-портянки нередко пихают &&-портянки, это сравнение отчасти уместно.

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

Натягивание на интерпретатор команд роли языка программирования в это мировоззрение чудесно укладывается.

чудесно укладывается

…в фантазию моего оппонента. (%
@Nervous приплёл к Bash программирование (очевидно, притянутое за уши) и обвинил @mord0d в том что он смешивает эти понятия.


С аргументацией на ЛОРе стало что-то совсем жиденько. Пятизвёздочные (@ugoday тоже), предел которых — троллинг тупостью. (%

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

Вопрос философский.

С этой фразы начинается почти вся демагогия. (%

но есть нюансы

Да, действительно — демагогия. (%

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

должны мучительно и медленно умирать

Вы очень злой. Должно быть это из-за bash’а.

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

За пределами Linux, очевидно:
macOS

Т.е. при переходе на zsh они bash выпилили? На моих древних OS X 10.6 и 10.9 bash из коробки.

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

Вот, хотелось бы, чтобы и у bash’а было так же.

Ну конечно было бы отлично, чтобы в шеле сделали что-то такое, что работало бы без всяких приседаний с пробелами всегда хорошо, но только пожалуйста без джавы :)

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

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

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

но только пожалуйста без джавы :)

Ну, вот, $subj, например. Настоящий ЯП и без жабы, если вдруг у кого фобия на земноводных. Да хоть питон. Всё одно лучше баша будет. (но хуже кложи в современном многопоточно-асинхронном мире).

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

Я не думаю, что это возможно. Базовая идея использовать строку как единственный тип данных и метаданных несостоятельна. Получается, что у нас кроме строк ничего нету, но и строк нету тоже, я не могу положить в переменную строку, сказать башу, что это строка, строчка, строченька, не массив, не список, не словарь, а строка символов. И надо пытаться её интепретировать. Никак. Вообще. Это просто строка.

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

Так что имеет смысл сказать башу спасибо и отпустить старика на пенсию.

И тут возможен сценарий, как с инит - шел просто выкинут и вместо него засунут какого-то монстра

Всё так, только шелл это и есть монстр.

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

Так любой косяк оправдать можно.

За исключением багов - да.

После чего всё сводится к двум простым вопросам:

  1. Насколько инструмент прост в освоении и использовании
  2. Используется ли инструмент по назначению

И вот в тут bash вне конкуренции: для своих задач он самый простой.

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

для своих задач он самый простой.

Отнюдь. Он очень сложный. На уровне С++. Там тоже нужно очень внимательно каждую закорючку рассматривать, строить в голове модель как и что может пойти не так.

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

Ок, по dpi/скейлинг забираю свои слова обратно. Только что попробовал - работает. Раньше не работало.

кроме remote desktop

Он и на иксах нахрен не сдался, хотя те кому надо вроде настраивали

Вообще-то еще и как сдался - в эпоху-то ухода от опенспейсов. Да и вообще люди по свету перемещаются.

Хочешь поспорить - не трать на меня ресурс клавиатуры. Лучше ответь что-то умное в этой ветке: Меня огорчает Remote Desktop в Linux

и многого другого по мелочам…

В смысле тебе надоело новое враньё выдумывать?

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

Нет? Ну тогда подскажи какого лешего под иксами Spare Layouts работают как надо, а в Wayland нет. Давай по делу, без пустых восклицаний.

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

Там тоже нужно очень внимательно каждую закорючку рассматривать, строить в голове модель как и что может пойти не так.

Давай на примерах.

Покажи что-то проще запуска команды с агрументами вроде ls -la. Или алиасов. Или перенеправления вывода вроде dmesg | grep -i 'error'.

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

шел просто выкинут

Это уже по факту происходит: ansible, terraform, helm… массовое администрирование огромного парка машин обходится без шелла ввиду полной убогости последнего. У меня, например, в качестве логин-шелла dash - и этого хватает за глаза.

системд вместо инита

systemd это лучшее что происходило с миром GNU/Linux с момента добавления поддержки сети в ядро. Если для shell найдётся столь же качественно спроектированная и отлично документированная альтернатива - это можно только приветствовать.

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

Я там выше целый сайт с примерами показал. Ничего кроме «да тебе просто слабо» и «чтобы программа работала без ошибок постарайтесь не ошибаться» в ответ не услышал. Может у вас получится найти какие-нибудь аргументы?

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

строить в голове модель как и что может пойти не так

А просто запомнить кучку паттернов? Ну и как обходить косяки, да. Например, кто-то тупо кавычит все строки, чтобы чего не вышло, — выглядит ужасно, но каждый спасается по-своему :-)

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

Это как? Строка же единственный вид данных в баше.

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

брызгать гаразд

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

под иксами Spare Layouts работают

Это что-то столь же нужное как rdesktop?

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

Что и требовалось доказать…

Ушёл общаться с LLM…

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

Это уже по факту происходит: ansible, terraform, helm… массовое администрирование огромного парка машин обходится без шелла

Представляю себе — запускаю это я терминал, а там ансибл вместо шелла. Прекрасное далёко, не будь ко мне жестоко.

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

Ну, вот, $subj, например. Настоящий ЯП и без жабы, если вдруг у кого фобия на земноводных.

Так может быть и взлетит.

Я не думаю, что это возможно.

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

Всё так, только шелл это и есть монстр.

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

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

Это уже по факту происходит: ansible, terraform, helm… массовое администрирование огромного парка машин обходится без шелла ввиду полной убогости последнего. У меня, например, в качестве логин-шелла dash - и этого хватает за глаза.

Странно, а почему dash, а не ansible, terraform, helm? :)

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

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

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

Перечитайте пожалуйста всю ветку заново. Я на этот вопрос уже отвечал.

ugoday ★★★★★
()
Ответ на: комментарий от papin-aziat

А просто запомнить кучку паттернов?

Но зачем? Это и сложно, и всё равно отвлечёшься, да о чём-то забудешь, и рядом лежит куча инструментов, где таких ошибок в принципе не возникает.

Строка же единственный вид данных в баше.

«Это не строка» — является одновременно и строкой и списком из трёх строк, смотря как это потом будет обрабатываться. А может быть и не из трёх, если где-то IFS переопределено.

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

Конечно возможно, вот же сабж сделали

Так это не развитие баша, это совершенно отдельный язык.

и позволяет решать простые задачи просто.

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

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

для чего-то посложнее и нужно приделать расширение типа лиспа

Но зачем? С практической точки зрения, а не из чистого любопытства — «а что из этого выйдет?» %)

Возможности шелла прекрасно расширяются путём написания новых команд. Хоть на лиспе, хоть на чём.

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

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

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

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

Мне отчего-то кажется, если к такому хозяйству докинуть ещё и нестандартных возможностей шелла, жызнь поддерживающих его бедолаг в целом легче отнюдь не станет %)

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

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

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

«Это не строка» — является одновременно и строкой и списком из трёх строк, смотря как это потом будет обрабатываться. А может быть и не из трёх, если где-то IFS переопределено.

Чутка запутано, да, поэтому первым делом и надо начинать изучение с механизма разбиения на слова, да и вообще с того, как видит строку баш, иначе будет очень больно 😁

papin-aziat ★★★★★
()
Ответ на: комментарий от ugoday

Скрипты будут работать до тех пор пока у них будет интерпретатор, я не вижу перспективы отказа от bash и sh (bash –posix). Ну а утилиты работают независимо от шелла, им как-то все равно откуда их запускают.

dmitry237 ★★★★★
()
Ответ на: комментарий от papin-aziat

Чутка запутано … будет очень больно

А можно, чтобы было просто и не больно? Жизнь и так сложная и местами тяжёлая.

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

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

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

А можно, чтобы было просто и не больно?

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

Ты докопался до баша, а почему не до qwerty (клавиатура), например? И я уверен, что спецы по отдельным частям компьютеров как по железу, так и по софту тоже плюются из-за неудобств и неудач в архитектуре.

Так устроен мир и человек — всё несовершенно. Кстати, знаешь где живёт совершенство?! Совершенство есть, но оно не в устройстве человека или вещи, его там не найти, — совершенство обретается во взаимодействии человека с вещами.

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

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

Не получится.

А надо перейти из парадигмы «всё или ничего» в «что я могу сделать для себя полезного прямо сейчас». И тут шаг за шагом можно немножко улучшить жизнь.

Ты докопался до баша, а почему не до qwerty (клавиатура), например?

Ну, было бы странно, если в теме про новый shell я бы прикапывался к клавиатуре. Кроме того, bash — слабое звено, которое почти уже добили, можно и поднажать. А вот qwerty — это скала, тут всё слишком сложно.

ugoday ★★★★★
()
Ответ на: комментарий от papin-aziat

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

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

nano нуно только если требуется отредактировать apt/source.list, чтобы установить emacs.

А т.к. nano я побаиваюсь, то и прелестей emacs мне из-за этого не видать… как жесток этот мир!

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

…кроме remote desktop, dpi/скейлинга и многого другого по мелочам…

А вот это было предельно низко!

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

запускаю это я терминал

Для любителей неудобного способа управления системой тот же баш или что-то менее убогое (см ссылку «подробности») по прежнему будет доступен. Речь же про что что люди всё больше выбирают куда более удобные и комфортные методы.

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

а почему dash, а не ansible, terraform, helm?

Поищи что значит login shell.

прекрасен тем, что позволяет просто решать простые задачи

Простые задачи он же… просты - поэтому они легко и просто решаются на чём угодно. Хоть с помощью веб-интерфейса, хоть с помощью ИИ-агента с МСР. Вот когда нужно регулярно решать сложные задачи - например прозрачное выполнение команд на нескольких машинах с доступом через stepping-stone VPN, то очень быстро спотыкаешься об ограничения инструментов и понимаешь что TRAMP внутри Emacs это то что нужно, несмотря на пугающе крутую learning curve. И всё остальное (в том числе и решение простых задач) уже подстраивается под это основное решение.

А так-то да - как промежуточная остановка на пути миграции в eshell, вполне себе удачный проект. В том числе и благодаря изящной интеграции таких слабосочетаемых вещей как scheme и shell.

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

Так это не развитие баша, это совершенно отдельный язык.

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

если скрипт вдруг перестал влезать в один экран, лучше сразу переписать

и будет прекрасно если это можно будет сделать в рамках того же интерпретатора, типа schemesh

И мегакруто, если его можно будет просто поставить вместо шел или баш, с полным сохранением совместимости!

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

Простые задачи он же… просты - поэтому они легко и просто решаются на чём угодно

До сих пор, проще и удобней, чем на шеле, ни у кого не вышло.

как промежуточная остановка на пути миграции в eshell

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

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