vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Подумавши некоторое время над концепцией семантической локальности я пришел к в некотором смысле противоположной концепции "общего контекста коммуникации".

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

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

Подумав, я пришел к выводу что

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

2. Должна быть некая система умолчаний. Сейчас в шелле контекст выполнения состоит пожалуй, из имени текущей директории (и. соответственно относительных путей). Ну с некоторой натяжкой - еще и списка фоновых задач из него запущенных - %1 меняет свое значение по ходу выполнения.

В более низкоуровневых языках программирования, которые являются аналогом письменной речи, система контекстов куда более развита. Начиная с let в Lisp-е и with в Pascal, и кончая развесистыми системами алиасов при импорте модулей в Python и Go. Где-то в промежутке namespaces в C++ и присваивание glob references в Perl. В общем придумано много способов сказать "сегодня это слово у нас значит то-то". Но это именно способы, характерные для письменной речи, причем даже скорее для научных и юридических текстов, а не для художественных и не для частной переписки.

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

(три дня эту мысль думал, а все равно непричесанная какая-то. Или я поторопился и надо было еще сутки подумать?)

…а вот в PowerShell…

Date: 2017-03-17 07:17 am (UTC)
From: [identity profile] 8df887a0-b2d1-4ca4-8758-9799a5a7bad1 [openid.stackexchange.com]
При всём отталкиващем синтаксисе Windows PowerShell, лёгкая интерпретация форматированных потоков как объектов и наоборот, это то, что там есть, а в Unix'овых шеллах — нет.

Вот пример. (https://books.google.ru/books?id=78w1953mptUC&lpg=PA197&ots=z0wBoJ-4UK&dq=powershell%20Convert-TextObject&hl=ru&pg=PA197#v=onepage&q&f=false)

Re: …а вот в PowerShell…

Date: 2017-03-17 10:51 am (UTC)
filin: (Default)
From: [personal profile] filin
Понять бы тогда, каков мог бы быть шаг в правильную сторону...

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

UPD. Хуже. Не как только форматированный, а как только структурированный. Хоть как-то.
Edited Date: 2017-03-17 10:57 am (UTC)

Date: 2017-03-17 07:23 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Вот with в Паскале был иногда штукой исключительно вредной. Того же уровня вредности, что и широкодействующий using namespace x в плюсах или from x import * в Питоне.

type Foo = record {…} end;
var
    foo: Foo;
    bar: Integer;
begin
    bar = plugh(quux);
    with foo do
    begin
        {…}
        baz = bar;
        {…}
    end
end;

В один прекрасный день в Foo появляется поле bar, и код внезапно и незаметно начинает работать неправильно. Плавали. Знаем.

Date: 2017-03-17 08:12 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Ну, тот пример был из боевого применения Паскаля. Object Pascal, aka Delphi, двумя местами работы тому назад. И, кажется, оба юнита — и поменянный, и сломавшийся — были «наши». Для поломки достаточно было, чтобы их поддерживали разные люди. (Кстати, в контексте этой проблемы, я-который-здесь-и-сейчас и я-три-месяца-назад — разные люди.)

from x import * перекрывается локальными переменными, но может перекрывать from y import *.

Date: 2017-03-17 09:31 am (UTC)
avnik: (Default)
From: [personal profile] avnik
Вообще то для компилируемого языка логично сказать "name clashing, нихачу компилировать".

Ну либо глядя на RecordWildcards в хаскеле -- смотреть что больше по типу подходит ;)

Date: 2017-03-18 11:02 am (UTC)
From: [personal profile] anonim_legion
В том языке, где это нормально реализовано - то есть в Ada, после появления поля bar код просто перестанет компилироваться.

Date: 2017-03-17 08:14 am (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
Контекст исполнения в unix shell определяется переменными среды.

Date: 2017-03-17 11:55 am (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
> разве что в мейкфайлах можно.

Ну вот неправда. Совмещение нескольких инстансов оракловых продуктов (будь то БД, веблоджик, паблишер или ещё какая фигня из стека) на одном сервере только за счёт этого механизма и работает нормально. Не говоря уже о влиянии LD_LIBRARY_PATH на выбор правильных библиотек ld. Локаль, опять же, юниксовая, таймзоны...

Date: 2017-03-17 08:16 am (UTC)
slobin: (Default)
From: [personal profile] slobin
Ну так эти языки придумывались для написания шелл-скриптов. То есть того, что машина будет делать завтра, когда контекст уже потерян. А то и вовсе в другом месте. А замена шелла для "здесь и сейчас" -- это гуй. Ну, в моём случае туй типа нортона, но это, возможно, неважно. "Мне, пожалуйста, вот это вот сюда". (Обрати внимание, что объект и локацию я назвал хотя бы указательными местоимениями, а действие вообще никак не назвал... и ничего, сошло). И вот юниксячья идея, что сценарии можно записывать и повторять завтра -- она реально сложная, именно из-за этого противоречия (насколько контекст ещё цел?).

... А на это господин дракон велел сказать: посмотрим! ...

Date: 2017-03-17 11:47 am (UTC)
allter: (Default)
From: [personal profile] allter
Кстати, что мне нравится в использовании Far/Midnight Commander такого, чего нет в Total и прочих GUI файловых менеджерах, так это то, что из текстового интерфейса можно без дополнительных телодвижений скопировать любой компонент интерфейса - имя файла, каталог, список файлов. А если не хватит интерфейса файлового менеджера, то можно запустить любую нужную команду.

Date: 2017-03-17 12:34 pm (UTC)
livelight: (Default)
From: [personal profile] livelight
Если бы Обероном люди пользовались, то эту фичу прокляли и забанили бы первой. Примерно как автоматическое скачивание с автоматическим запуском левого файлА.
Впрочем, виндузятники по дефолту до сих пор скрывают расширения файлов, что очень удобно для всяческих троянов: скайчай себе файл новый-модный-фильм.avi.exe, спрячь расширение и запусти то, что видишь, он покажет тебе кино (про трахающихся негров, отключаемое только платной СМС-кой)

Date: 2017-03-20 10:11 am (UTC)
From: [personal profile] shadowfoto
ну кстати в некотроых ММО-играх, в которых можно скриптовать/переписывать куски морды клиента - eval() или выпилен нахрен, или требует явного включения неявными способами. по тем самым причинам, да.

Date: 2017-03-17 12:50 pm (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
Оберон - вообще очень идеалистический проект. Как писал Дейсктра (правда, гораздо раньше и совсем по другому поводу ;) - "техника будущего для технологии программирования прошлого".

Date: 2017-03-17 11:53 am (UTC)
slobin: (Default)
From: [personal profile] slobin
Да, и это тоже.

... Невнимательный маньяк ...

Date: 2017-03-17 12:26 pm (UTC)
livelight: (Default)
From: [personal profile] livelight
А ещё команда clip в FAR-овском хозяйстве очень полезна.
Долго страдал от её отсутствия, потом догадался погуглить :)

Windows Explorer и его икс-виндовые клоны же совершенно не приспособлены для работы с файловыми системами, максимум - с файлопомойкой, лежащей в нескольких директориях.

Date: 2017-03-17 11:56 am (UTC)
slobin: (Default)
From: [personal profile] slobin
Ну у юниксологов до сих пор collective rename -- это отдельная фича, за которую деньги берут.

... Векторы прерываний были завязаны узлом ...

Date: 2017-03-17 12:37 pm (UTC)
stiv_sigmal: (Default)
From: [personal profile] stiv_sigmal
Не знаю, не помню, как у прочих гуевых шеллов, а у того же FAR Manager есть «применить команду [к текущему элементу либо выделенным, которые в том числе могут быть на временной панели]». Плюс есть макросы на LUA. Конечно, это получается не чистый гуй или чистый шелл, а что-то среднее.

Date: 2017-03-17 12:30 pm (UTC)
livelight: (Default)
From: [personal profile] livelight
> а действие вообще никак не назвал...

А вот это зря! Copy, move и link - существенно разные действия, и путать их череповато.

Date: 2017-03-17 08:35 pm (UTC)
livelight: (Default)
From: [personal profile] livelight
В венде с этим реально проблема, потому что шиндоуз эксплорер каждый раз сам решает, какое действие ему милее. Так что после драга надо внимательно приглядеться к курсору мышки и понажимать нужных модификаторов, прежде чем дропнуть, или сразу тащить правой кнопкой мыши.

Date: 2017-03-17 09:03 pm (UTC)
filin: (Default)
From: [personal profile] filin
Мне казалось, что его логика документирована. В пределах одного диска он выбирает move, на другой - copy.

Date: 2017-03-18 07:03 am (UTC)
livelight: (Default)
From: [personal profile] livelight
Оно, вроде, и документировано, но в реальной практике получается, что мне пногда надо одно, иногда другое, иногда третье, а система по дефолту тоже предлагает иногда одно, иногда другое (вроде, третье тоже иногда), так что проще и безопаснее заранее предполагать, что она не угадает, и тщательно проконтролировать.

Date: 2017-03-17 12:15 pm (UTC)
livelight: (Default)
From: [personal profile] livelight
В шелле как раз контекст такой огромный, что лучше бы обкромсать на порядок.
Во-первых, это environment variables -- те самые, которые со словом export в баше. Но их количество обычно обозримо, так что жить можно.
Во-вторых, кроме экспортов, в шелле есть не экспортируемые в запускаемые программы переменные. Шелловские скрипты огребают от них по полной, потому что они видны всему скрипту, включая sourcing, а local внутри функций мало кто пишет.
Ну и по мелочам: cwd (не все используют pushd/popd), %1, !! и т.д.

Date: 2017-03-17 01:11 pm (UTC)
filin: (Default)
From: [personal profile] filin
Вот с контекста-то и начинается веселье. У меня есть документированый баг: я практически всегда рассматриваю больше вариантов состояния контекста, чем собеседник. Собеседник обычно обижается, что я не понимаю, какой из них он имел в виду — с его кочки зрения вариант там один.

У машины с этим еще на порядок хуже.

Date: 2017-03-17 10:38 pm (UTC)
From: [personal profile] nureddin
>То есть меня в общем довольно давно волновал вопрос, почему за 40 лет не появилось языка программирования, который был бы shell лучше чем unix shell. То есть более высокоуровневый, с меньшим порогом вхождения. позволяющий легко формулировать сложные концепции.

А как же Rexx ?

Date: 2017-03-17 11:59 pm (UTC)
From: [personal profile] ramendik
Для меня шелл был и остаётся очень сильно слишком write only. На шаг лучше регекспов (которые write only до полной, с моей т.з., неприменимости).

Date: 2017-03-18 07:06 am (UTC)
livelight: (Default)
From: [personal profile] livelight
А перл - это на шаг хуже, чем регэкспы :)

Date: 2017-03-18 03:38 pm (UTC)
filin: (Default)
From: [personal profile] filin
Да. Но когда мне надо сделать надежно работающий скрипт, он почему-то оказывается на перле...

Date: 2017-04-14 10:01 pm (UTC)
From: [personal profile] ramendik
Насколько я понимаю, написать читабельно на перле можно, но надо очень стараться. А регэксп просто нельзя написать читаемо. Шелл зачастую тоже, из-за количества эскейпов.

Мне больше нравится, конечно, питон. Там надо специально стараться, чтобы писать НЕчитаемо.

Date: 2017-04-21 03:03 pm (UTC)
From: [personal profile] ramendik
Это да. Ну не может Си без так-её-тудыть арифметики пойнтеров.

Хочу ОС с микроядром, где само микроядро и системные сервисы написаны на Паскале или другом строго типизированном языке без арифметики пойнтеров. Недадуд, однако. Разве что DZ OS :)

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

August 2025

S M T W T F S
     1 2
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 3rd, 2025 08:07 pm
Powered by Dreamwidth Studios