LXF138:DrBrown1

Материал из Linuxformat.

Перейти к: навигация, поиск

Мы язы­ки-ма­лют­ки

«Язы­ки-ма­лют­ки» – те, что «за­то­че­ны» под кон­крет­ную за­да­чу. В Linux та­ких пол­но.


Кни­га Unix Power Tools — поч­ти ро­вес­ник элек­тро­дре­ли. Но вы­бра­сы­вать ее ра­но: она на­би­та ми­ни-язы­ка­ми.

Linux под­дер­жи­ва­ет мас­су язы­ков про­грам­ми­ро­вания об­ще­го на­зна­чения: C, C++, Java, Perl, PHP, Python и мно­гие дру­гие. Они – не «ма­лют­ки», хо­тя я по­доз­ре­ваю, что неко­то­рые из них на­чи­на­ли имен­но в этом ка­че­стве. Язы­ки-ма­лют­ки же­ст­ко на­строе­ны на оп­ре­де­лен­ную цель. Обыч­но это ин­тер­пре­ти­руе­мые язы­ки с усе­чен­ным син­так­си­сом.

Два клас­си­че­ских, и ста­рей­ших, язы­ка-ма­лют­ки – bc и dc. Оба они – «язы­ки чи­сло­вых рас­че­тов с про­из­воль­ной точ­но­стью», и раз­ли­ча­ют­ся тем, что в bc ис­поль­зует­ся «ин­фикс­ная» но­та­ция – мож­но, на­при­мер, за­дать та­кое вы­ра­жение:

2 + 2

dc, на­про­тив, при­ме­ня­ет стек и поль­скую ин­верс­ную за­пись. Что­бы сло­жить два и два и вы­вес­ти от­вет, нуж­но на­брать

2 2 + p

А как на­счет Sed, по­то­ко­во­го ре­дак­то­ра? Он ведь слу­жит толь­ко для вы­полнения ав­то­ма­ти­че­ских за­мен в тек­сто­вых фай­лах, да? Ну, на са­мом де­ле нет. По­зна­ко­мив­шись с про­стран­ством для хранения, шаб­ло­на­ми и осво­ив еще пару команд, кро­ме s, вы от­крое­те для се­бя но­вый мир. Про­грам­мы Sed от­части похожи на програм­мы на Awk.

Есть шту­ки, до гор­до­го звания язы­ка не до­тя­ги­ваю­щие – на­при­мер, ре­гу­ляр­ные вы­ра­жения. Их син­так­сис весь­ма бо­гат, это прав­да, но су­ще­ству­ет фор­маль­ный «кри­те­рий пол­но­ты по Тью­рин­гу», на осно­вании ко­то­ро­го уста­нав­ли­ва­ет­ся при­над­леж­ность к се­мье язы­ков про­грам­ми­ро­вания. При всех сво­их досто­ин­ствах и недостат­ках ре­гу­ляр­ные вы­ра­жения не от­ве­ча­ют это­му кри­те­рию. С дру­гой сто­ро­ны, неко­то­рые язы­ки че­рес­чур ве­ли­ки, что­бы счи­тать их ма­лют­ка­ми. Так, Awk пред­на­зна­чал­ся для ре­шения уз­ко­го клас­са за­дач, и его мож­но бы­ло бы отнести к мини-язы­кам, но бо­лее поздние вер­сии вро­де Gawk рас­ши­ри­ли его границы.

Еще из ма­лень­ких язы­ков на ум при­хо­дят Tcl (язык бы­ст­ро­го соз­дания про­то­ти­пов и напи­сания тестов) и та­кие ути­ли­ты, как Lex и Bison, ко­то­рые по­мо­га­ют в на­пи­са­нии лек­си­че­ских и син­так­си­че­ских ана­ли­за­то­ров, но по су­ти яв­ля­ют­ся ми­ни-язы­ка­ми.

Язы­ки фай­лов на­строй­ки

Обыч­но мы не счи­та­ем фай­лы в /etc про­грам­ма­ми, но не­ко­то­рые при­бли­жа­ют­ся к ним. Вспом­ни­те о фай­лах на­строй­ки для PAM или Upstart или о син­так­си­се ко­ман­ды Iptables. Вез­де встре­ча­ют­ся про­вер­ки ус­ло­вий, по­зво­ляю­щие управ­лять ло­ги­че­ским по­то­ком. Мно­гие дру­гие, та­кие как кон­фи­гу­ра­ци­он­ные фай­лы Postfix, фай­лы makefile и да­же файл su­doers, под­дер­жи­ва­ют ис­поль­зо­ва­ние пе­ре­мен­ных. На­ко­нец, есть ужас­ный кон­фи­гу­ра­ци­он­ный файл Sendmail, ко­то­рый к то­му же и чрез­мер­но за­пу­тан. Дол­го ли ко­му-то до­ка­зать, что тот или иной из этих фай­лов от­ве­ча­ет кри­те­рию Тью­рин­га?

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию