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)
Ответ на: комментарий от sena

альтернативы [шеллу как языку программирования] до сих пор нет

Кому нет — тому нет %)

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

Никакой путаницы тут нет. Инструменты следует применять по назначению. shell — для диалогового режима, языки программирования — для программирования.

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

Значит пишется ticket в jira, чтоб дали рута и починили интернет.

Ты не понял, Интернет не поломался, его просто нет. Жиры, кстати тоже. Вот такая ситуация.

Или вот ещё такая: скрипт надо запустить, чтобы починить Интернет.

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

Интернет не поломался, его просто нет.

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

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

где ваши крики про спутывание с языком программирования?

Так это ведь намёк, что башисты неведомо зачем изобретают то, что сто лет как изобретено и свободно доступно для использования — только с треугольными колёсами %)

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

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

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

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

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

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

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

намёк, что башисты неведомо зачем изобретают

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

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

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

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

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

А ещё инсталляция $favoritelanguage может быть недоступна не только потому что нет Интернета, а например, потому что как раз сама система инсталляции по какой-то причине в нерабочем состоянии.

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

А ещё твой скрипт на $favoritelanguage может быть несовместим с доступной для данной системы версией (потому что $favoritelanguage не стандартизован) или с какой-то библиотекой на данной системе (у нас же $favoritelanguage - полноценный язык, с библиотеками и зависимостями и всеми вытекающими).

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

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

Но конечно, он имеет свои проблемы, вот их бы хотелось исправить и получить такой же распространённый, стандартный, универсальный, совместимый и т.п. шел, но на котором ещё можно при желании(!) писать более аккуратно, красиво, безопасно. Необязательно это должен быть лисп, но идея заложенная в schemesh правильная.

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

Всё, надеюсь больше писать не придётся, вроде всё изложил.

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

Вы, кажется, предлагаете на bash (или другом, ещё более убогом шелле) скрипты писать? Раз так, то и сравнивать его нужно со взрослыми.

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

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

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

Это скорее черно-белые суждения. Предпочтения, это не про отказ, а про выбор доступного варианта. Если под рукой только sh-bash, то и выбор без альтернативы. Вы же не считаете, что у пользователя линукс знания совсем на нуле?

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

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

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

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

Это скорее черно-белые суждения. Предпочтения, это не про отказ, а про выбор доступного варианта. Если под рукой только sh-bash, то и выбор без альтернативы. Вы же не считаете, что у пользователя линукс знания совсем на нуле?

Я не уверен, что понял контекст высказывания, да и само высказывание тоже. Речь об этом:

Использование шела почти всегда это вынужденная мера ?

Вынужденная мера бывает не только потому что под рукой только sh-bash, а ещё потому что бывают нужны именно эти качества шел - вседоступность, стандартность, универсальность, переносимость, отсутствие зависимостей и т.п.

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

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

ну какая ценность у баша кроме как исторического артефакта?!

если будет реализован «безошибочный транслятор» с bash на тот же rc (ну что то более и современно молодёжное и более реально продвинутая в сторону «всеохватной простоты» )

и зафорсено китами использование сего @rc@ на круг станет лучшеЕ - однако мало кто в этом экономически заинтересован

вот zsh тот ещё «нехай хайтек»

прикол именно в том что чем кучерявей интерфейс тем больше преимущества у китов :)

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

не приходится довольствоваться ибо минус бесконечность не предел

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

имхо shell сочетающий интерактивный repl и тьюринг полную скриптоту возможен

прст наличные шелл созданные гениальными Ахо с друганами и затюненые за полвека хурдом умельцев синтаксически ориентированны на строки

питон тож не идеален но как разработка имеющая корни из командного языка амёбы в том числе в этом смысле ближе к идеалу

у классических шелей дефицит структур данных и вырвиглазный синтаксис ибо приходится постоянно в ручную транслировать в_из строки и квотить символы

awk был ходом в нужную сторону тока публике это не интересно :)

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

дык для лингвы франко достаточно sh ( от каких нить ди(л)дов времён Очакова ) не нужно(плохо для кармы) на bash zsh лепить прикладухи

повторюсь

шел это crud на файлах и каталогах и базовый crud процессов - остальное на каком угодно наличном(пост pl/i и не эзотерическом) языке

ps: ассемблер на sed командах это реально клёво и позновательно но делать всё на sed командах это буквально просто некоторая из следующих итераций где первая это писать больше чем на «страницу» скрипты - становится понятней почему Баурн не сразу функции прикрутил хотя в интервью типо удивлялся

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

Это уже по факту происходит: ansible, terraform, helm…

Это точно замена шеллу? А как ими копировать файлы? А грепать? А зпустить любимую программу? Точно проще, чем в любом другом шелле?

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

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

А можно не надо? :)

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

ipython и в перде

:) + (vs)code

+ marimo.io

всяко же уёб браузер и графоний

если же токмо tui то ipython|ppython|bpython вполне repl cреды для файло процессо обмазывания - особливо когда нет инета то есть реальная задача ибо костыли и палки в наличии и быстро собрать утилиты в виде функций творящие специфическое_всякое над списками глобальных имён из фс по необходимости(sic sick)

[upd]

подобно «всякая достаточно сложная программа содержит в себе костыльную имплементацию LISP(святаго)»

да и на python вполне за несколько приливов наносится файл осуществляющий command line interface но без возможности полнотьюринговости на этом interface тока последовательности меняющие окружение - а через это делать полнотьюринговость более тошно чем прямо говнякать на bash\zsh т.е реальный прог остаётся в пупоне

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

Речь же про что что люди всё больше выбирают куда более удобные и комфортные методы.

А можно их озвучить? Что есть более удобное и комфортное, чем шелл, за пределами задачи «Запустить стим»?

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

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

Как с помощью веб-интерфейса мне реализовать конвейер между произвольными программами?

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

Затем, чтоб больше не касаться shell и bash даже трёхметровой палкой.

А с системой то как взаимодействовать без shell? Хоть zsh, хоть fish то надо. Или как животное в кнопочки GUI тыкать?

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

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

Вот, например, банальный grep -rin pattern | less как сделать в ipython?

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

Баш, значит, изучать не лень, а петон лень.

Баш я уже немного знаю, но для скриптинга его использовать не хочу. А вот в качестве UI он весьма неплох.

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

а зачем однострок щели ваять в партянку?

In[xxx sic!]! grep -rin pattern | less

:)

речь о использовании разных синтаксисов для существенно разных задач

щель это операции посредством имён(строковых составных) объектами фс (ну и /proc там же )

tcl именно не взлетел то хоть и лучше уже общеизвестных но на практике (для мелких короткие а для упорных и общеизвестные не

препятсвия) не настолько

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

и да ваш пример не про shell как язык программирования - ваш пример как раз склейка конвеером двух внешних (относительно щели как процесса даже если grep и less это псевдонимы dash ash и проч) апликух

[upd]

и кста в ipython pattern параметримизируем из переменной как и выхлоп можно в переменную пихнуть - да в тот же датафрейм :)

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

но лисп почему-то не популярен среди молодёжи.

Когда я был молодежью и учился в ВУЗе, 20 лет назад, уже тогда лисп был «не популярен среди моложёжи». Имхо, лисп был популярен среди молодежи последний раз в 70-80х.

PS: Мы даже писали базу знаний на лиспе, но курсовик сдали и в ужасе забыли. Т.к. было абсолютно не понятно как ЭТО применять, в отличии от С, С++ и Java.

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

Несколько вымораживает, что одни и те же люди на все претензии к bash’у отвечают: „нужно быть внимательнее“, а сами не замечают, что тут 4 страницы обсуждается исключительно использование bash’а как язык программирования для написания скриптов. Вот, как с вами такими вообще разговаривать?

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

Дорогая мама, пишу тебе из горящего танка …

Ниша, о которой вы говорите, безусловно существует. Но она такая мизерная и ничтожная относительно размеров изначальной ниши shell’а, что и говорить не о чем.

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

прст наличные шелл созданные гениальными Ахо с друганами и затюненые за полвека хурдом умельцев синтаксически ориентированны на строки

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

Поэтому, мне кажется, проще сразу разорвать этот порочный круг. Диалог с машиной — shell (лучше zsh), скрипты — полноценный язык.

Раньше у shell’а было ещё преимущество в краткости и удобстве записи для соединения-перенаправления потоков ввода-вывода, позволяющем строить паровоз из команд. Стрелочные макросы и babashka/process для меня этот вопрос закрыли.

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

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

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

Что нужно пользователю – автодополнение путей, команд, параметров команд, работа с историей, поиск по активному буферу, подсветка синтаксиса, живая справка к лексеме под курсором, живое редактирование команды или скрипт-блока во внешнем редакторе (нажал например F4, отредактировал в mcedit (vim, nano и т.д.) и команда выполнилась).

Все сторонние шеллы совместимы с cli-утилитами, но вместо внутренних (builtin) команд и синтаксиса bash используют своё.

Речь же об этом. Хочешь пиши bash-скрипт, он тоже выполнится в 3rd-part-шелле.

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

apl ваще сверхинтерактивный

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

исправил на бдфлватрхэ и в продакшн

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

ниукого нет

тока во всяких морганиях-стенлиях k+ и kdb руляпедалили

j и прочий (глагол прилагательные*)

реально информативно осознать отличия нынешних от прошлых трейдоф'ов в индустрии (подсказка - значимая часть ойтишников ныне буквально не умеет считать (т.е генирировать самостоятельно(устно) последовательные имена чисел натурального ряда]

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

это программист ошибся, пущая в следующий раз не ошибается

В С++ примерно так и было десятилетиями. И только увидев как стремительно их отовсюду вытесняет Rust чуваки начали что-то понимать и в срочном порядке вносить правки в следующий стандарт. сомневаюсь что им это поможет впрочем - репутацию дырявого убожества они не один год нарабатывали.

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

Чем оно лучше емакса?

Ничем разумеется - Emacs это высочайшая вершина софтостроения.

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

и да ваш пример не про shell как язык программирования

Мой пример как раз из области использования shell как shell, как пользовательского интерфейса. Если мне нужен будет ЯП, я возьмо нормальный ЯП. Но речь то шла о замене шелла ЯП.

и кста в ipython pattern параметримизируем из переменной как и выхлоп можно в переменную пихнуть - да в тот же датафрейм

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

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

Несколько вымораживает, что одни и те же люди на все претензии к bash’у отвечают: „нужно быть внимательнее“

Если бы Вы были внимательнее, вы бы не приписывали мне чужих слов.

тут 4 страницы обсуждается исключительно использование bash’а как язык программирования

При желании можно, но практически лишено смысла.

Вот, как с вами такими вообще разговаривать?

Быть внимательнее и не садиться в лужу не предлагать?

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

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

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

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

  1. Использовать любой шелл в качестве ЯП можно только в самых примитивных случаях. Любая логика и обработка данных должна приводить к переписыванию скрипта на любом нормальном ЯП.

  2. Замены шеллу в качестве интерактивной оболочки так и не придумали. Даже баш лучше существующих GUI.

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