LINUX.ORG.RU

Bash и полиморфизм

 , , , ,


0

4

ИМХО, в баше очень сильно не хватает полиморфизма. Вот, к примеру, чтобы обработать строку и файл, мы должны применять разный синтаксис

echo the_string | program foo
program foo theFile
А будь у нас полиморфизм и ООП, мы могли бы все записывать единообразно
the_srting program(foo)
the_file program(foo)
и пиша обертки над таким кодом, мы могли бы полностью абстрагироваться от входного типа.

Тут еще спасает то, что типов раз два и обчелся. А если бы их было много, мы бы вешались с этим не-ООП.

Вот такая печальная правда :(



Последнее исправление: callbackhell (всего исправлений: 3)

Ответ на: комментарий от callbackhell

Когда людям *приходится* писать на баше, то они пишут стинсув зубы, ибо баш, как ЯП, – говно. Не выпендривайся.

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

Ну, с твоим то тупняком мой не сравнится. Мой — искрометно-ироничный, а твой — тупо-олигофреничный.

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

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

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

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

Stil ★★★★★
()

Опять анонiмус не смог сделать домашку и обвинил во всем отсутствие ООП. Клинический неосилятор.

winlook38 ★★
()

пиша обертки

Не пиша, а пися.

Deleted
()

пиша

Вспыхает небо, разбужая ветер,
Проснувший гомон птичьих голосов.
Проклинывая всё на белом свете,
Я вновь бежу в нетоптанность лесов.
Шурщат зверушки, выбегнув навстречу,
Приветливыми лапками маша:
Я среди тут пробуду целый вечер,
Бессмертные творения пиша.
Но выползя на миг из тины зыбкой,
Болотная зелёновая тварь
Совает мне с заботливой улыбкой
Большой орфографический словарь.

E ★★★
()

Вот, к примеру, чтобы обработать строку и файл, мы должны применять разный синтаксис

Естественно разный, так как имя файла - это аргумент program, а значит, тоже строка

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

это аргумент program, а значит, тоже строка

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

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

Потому что шелл передает программам char**argv и не может знать, как программа будет интерпретировать эти строки

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

А шеллу и не надо об этом знать, это должны программы решать, как им обрабатывать входную строку(сообщение, в терминологии ООП)

callbackhell
() автор топика

bash создан не для ублажения эстетических потребностей школьников :)

bash - рабочая лошадка для написания простых скриптов, иногда средней сложности, как ЯП - шлак, как скриптятина - то что надо

I-Love-Microsoft ★★★★★
()

echo the_string | program foo

Не надо так делать. Вы так порождаете три процесса (две подоболочки и program) против одного при нормальном

program foo <<< 'string'

С файлом, кстати, в общем случае пишется очень похоже:

program foo < file

(program foo file — это синтаксис program, любая программа не обязана принимать file последним аргументом)

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

Вот держи полиморфизм:

 
echo the_string | program foo
cat theFile | program foo

FRWHate
()
Ответ на: комментарий от anonymous

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

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

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

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

Правильно писать шелкопряды.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

bash - рабочая лошадка для написания простых скриптов, иногда средней сложности, как ЯП - шлак, как скриптятина - то что надо

Два чая этому господину. Точнее нельзя было выразиться.

ТС, если ты WEB-программер - пиши на PHP. Я не шучу. У меня один скрипт есть на PHP, который я вызываю из коммандной строки. #!/usr/bin/php (или как там его) решает. Там тебе и нормальное (онтносительно) ООП будет. Bash не для таких задач, как ты привёл.

Kroz ★★★★★
()

Хм, а зачем из баша делать язык, к которому надо будет потом реализацию делать размером со spidermonkey?

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

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

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

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

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

что запускать её можно будет только на навороченном железе

Далеко не каждый ООП-язык требователен к ресурсам.

На нём легко пишется

Легко пишется тогда, когда есть максимальная гибкость.

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

Реализация полноценного смолтолкподобного баша будет сложнее и длиннее реализации примитивного баша. А значит ни в какой бузибокс не попадёт. Попробуй опровергни. Здесь кстати понятность кода очень важна. Понятность топорного парсера запредельна, а вот парсера смолтолка чуть не в 10 раз ниже.

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

Простота это когда просто, пойми это. Когда вместо двух-трёх или даже пары десятков тупых как тяпка понятий вводят одно-два, которые с наскоку не поймёшь - это не просто. Да, гибко, но ни разу не просто. И большинство людей никогда не будет любить такие языки. Может быть, если бы программисты были избранной кастой, куда было бы возможно попасть только сдав экзамены в виде написания 2000-3000 патчей в проекты на ocaml, lisp и smalltalk, всем программистам бы это и казалось просто:)

ixrws ★★★
()

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

contra_sperm_spero
()

ИМХО, в баше очень сильно не хватает полиморфизма

man m4

ну и эквивалентность машинки Тьюринга и Марковских алгорифмов.

а уж создателю sh(Стиву Баурну который синтаксис из Алгол68 притащил) - это(матан) всяко было известно

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

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

Так они и решают. У каждой программы свои требования ко входным параметрам. Хоть из пайпа читают обычно одинаково, и то спасибо. coreutils в плане аргументов однообразны, но лишь в общих чертах: тот же tar нехило выбивается, find, [[...

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

Эка лихо Вы приравняли похапэшников ко всем веб-программерам. А так-то PHP для CLI хорош, только параметры ему передаются через жопу, и для красивого вывода, не говоря уж о TUI, ничего не может предложить. Есть даже биндинги к GTK, только тс-с-с! В отличие от биндингов той же жабы, они даже используются где-то.

contra_sperm_spero
()
Ответ на: комментарий от ixrws

к которому надо будет потом реализацию делать размером со spidermonkey?

Ну вот берём тот же вышеозначенный похапэ, он вообще вырос из парсера-шаблонизатора, а умеет в разы больше и приятнее баша (как языка). Причём настолько, что к седьмой версии это всё задолбались тащить и превратили его в «нормальный» ЯП с AST и без выносящих мозг парсингоспецифичных ограничений. Жабоскрипт тоже на коленке изначально склёпан, кстати, всяких спайдерманки и прочие V8 начали появляться из-за того, что жабоскрипт стали массово применять для сложных вычислений и обработки данных. Баш на таковом тоже подчистую тормозит, но в здравом уме его для таких задач и не применяют, а вот жабоскрипт...

Проблема баша сугубо в обратной совместимости. Он вырос из довольно убогого шелла, который зарождался в совершенно не соответствующих современным реалиям условиях, и обмазывать шелл финтифлюшками без потери обратной совместимости можно только через жопу. Баш с этим, кстати говоря, отлично справляется, за что надо ему отдать должное. А ныть по поводу него бессмысленно, потому что буквы sh в названии недвусмысленно намекают, что используя баш — Вы имеете дело с бородатым шеллом из шестидесятых, который застал телетайпы и оперативку на железных сердечниках. И неверно при этом задавать вопрос «почему баш/фиш/зыш/кыш/etc такое говно» — верно задавать вопрос «на хрена я использую говно мамонта из 60-х?»

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

The UNIX System: Program Design in the UNIX Environment статья из спецвыпуска журнала в октябре 1984г.

такова динамика развития — многие вещи обнаружение внедряются чуть ли не через века.

и хоть на многих вещах в современном обществе время до внедрения от открытия сокращается до лет в сфере софтостроения разрыв ещё в несколько поколений - возможно обусловленый тем что в момент писиизации средний уровень программистов упал от почти поголовного phd к почти 95% php

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

в момент писиизации средний уровень программистов упал от почти поголовного phd к почти 95% php

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

Gu4
()

Не тупи, задачу свою bash решает. Для остального есть Python, Go, Erlang, например.

Deleted
()
Ответ на: комментарий от contra_sperm_spero

tar нехило выбивается

нет. я вот всегда использую как-то вроде tar -x -farchive.tar.gz

[[

тебе не нравится, что ему надо скармливать в более-менее человекочитаемом формате? и да, [[ — не часть coreutils

find

да, но больше всех них всё равно выбивается dd

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

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

количество фд даже увеличилось

однако с 1830(переход Бриташки на большую представительность свой представительной демократии) качество образование падает (при том что наука и техника огого)

вообще инфляция званий и степеней за последние 2 века очевидна.

план9 нельзя сказать что даже вымер - ибо оно предназначено для мэйнфрэймов - т.е при том что у каждого пользователя своя вселенная имён - однако одна сеть - одна машина - не удивлюсь если у гугля (за исключением некоторых особых железок) - ровно подобная система - поэтому и голэнг который для голой машины(хотя как установили опыты - и для питона не так много нужно рантайма для запуска на голой х86)

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

Не тупи, задачу свою bash решает.

Это смотря какая у него задача. По моему мнению, bash это костыль. Точнее, костыль это скрипты на нем, а не оболочка. Он годится не более чем для автоматизации пары-тройки действий. Таким образом, shell это bash, скрипты это python. В последнне время посматриваю на groovy, ООП там лучше, чем в pythone.

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

Так, кроме как автоматизация пары действий, больше и не нужно. Автоматизация на уровне обслуживания системы: вполне хватает bash, на мой взгляд. Тем более, что unixway автоматика это не программирование в стиле ООП или чего-то подобного. Это же больше pipelines, one-for-one, конвейер если совсем грубо.

Deleted
()
Ответ на: комментарий от Gu4

посматриваю на groovy, ООП там лучше, чем в pythone

Люто плюсую. Даже отдельным тредом бы обсудил, хочу побольше узнать от тех, кто уже достаточно писал на нем.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.