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
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.