Uploaded avatar of ErikSchierboom

Itt a Slimline szeptember!

@ErikSchierboom
Kb. 3 éve ezelőtt
Videó

Bevezetés

Sziasztok! Remélem, mindenki jól van.

Eseménydús augusztuson vagyunk túl az Exercism-nél. Összevontuk a Premium és az Insiders csomagot, automatikus visszajelzést építettünk közvetlenül a szerkesztőbe, elindítottuk a kurzustrófeákat, és rengeteg apró fejlesztést is bevezettünk az oldalon! Ha még nem nézted meg a kurzusaidat, hogy megtudd, milyen trófeákat szereztél, mindenképp tedd meg. Mindenkinek küldtünk e-mailt, aki egy vagy több trófeát szerzett, szóval azt is tartsd szemmel. Augusztusban azzal is jól szórakoztunk a #12in23 keretében, hogy olyan nyelveket fedeztünk fel, amelyeket az emberek általában alkalmazások készítésére használnak.

Ez a hónap a Slimline September, amelyben olyan nyelvekkel foglalkozunk, amelyek szintaxisa általában nagyon tömör és szűkszavú. Konkrétan ezekkel a nyelvekkel: 8th (a Forth leszármazottja), AWK, Bash, jq, Perl és Raku (amelyet korábban Perl 6 néven ismertek).

A jelvények

Ahhoz, hogy megkapd a Slimline September jelvényt, szeptemberben öt feladatot kell megoldanod valamelyik ilyen nyelvből.

Ott van még az egész évre szóló 12in23 jelvény is. Ennek megszerzéséhez a nyelv öt kiemelt feladatát kell megoldanod.

  • Gigasecond: dátumok kezelése
  • Atbash Cipher: stringek kezelése
  • Darts: számok és elágazások kezelése
  • Luhn: stringek, elágazások és számok kezelése
  • Series: stringek és sorozatok kezelése

Ezek a feladatok és a korábbi hónapok feladatai mind megtalálhatók a #12in23 oldalán.

Áttekintés

Vágjunk bele, és nézzük meg a nyelveket egyenként, rövid áttekintéssel.

8th

  • Ron Aaron fejlesztette ki.
  • A név szójáték a Forth nyelvre, amely egyben a fő inspirációja is. Sokban különbözik azonban a Forth-tól:
    • Erősen típusos
    • Platformfüggetlen
    • Fokozott biztonság (nincs közvetlen memóriahozzáférés és nincs beépített assembler)
  • Ingyenes és kereskedelmi verzióban is elérhető, utóbbi több funkciót kínál.
  • Zárt forráskódú, de a forráskód megtekinthető, ha valaki vállalati licencet vásárol

AWK

  • Az AWK-t a Bell Labsban alkotta meg Alfred Aho, Peter Weinberger és Brian Kernighan az 1970-es években. A név a szerzők vezetéknevéből alkotott mozaikszó.
  • Domain-specifikus nyelv, amelyet szövegfeldolgozásra terveztek, de más célokra is használható
  • Az AWK Unix-szűrő, akárcsak a sed és a grep, és arra szánták, hogy pipeline-ban használják
  • A Single UNIX Specification és a Linux Standard Base specifikáció is megköveteli, hogy minden implementáció tartalmazza, ezért megtalálható a legtöbb *nix gépen
  • Az AWK nyelv különböző implementációi:
    • awk (vagy oawk, az eredeti AWK esetében): az eredeti implementáció
    • GNU AWK (gawk), 1988-ban jelent meg, és jelentősen átdolgozta, illetve bővítette a nyelvet
    • BWK AWK (más néven nawk), a 90-es évek végén jelent meg
    • mawk: gyors, bájtkódot értelmező implementáció
  • Sok *nix rendszeren az awk parancs szimbolikus link, amely vagy a gawk-ra, vagy a nawk-ra mutat

Bash

  • A Bash egy Unix shell, amelyet Brian Fox fejlesztett ki, és 1989-ben jelent meg.
  • A Bourne shell ingyenes helyettesítőjeként tervezték, és mára a legtöbb Linux-disztribúció alapértelmezett bejelentkezési shellje lett. A Bourne shell parancsszintaxisának szuperhalmaza, ami megkönnyíti az átállást
  • Számos módon bővíti a Bourne shellt: kapcsos zárójeles kiterjesztés, parancssori kiegészítés, jelkezelés és egyebek

jq

  • Stephen Dolan fejlesztette ki, és 2012-ben jelent meg
  • Célja, hogy egyszerűvé tegye a JSON-dokumentumok lekérdezését, átalakítását és manipulálását („a sed a JSON-hoz”)
  • A jq eszközt (amely magát a nyelvet valósítja meg) eredetileg Haskellben implementálták, később C-re portolták. Készültek Go- és Rust-alapú portok is

Perl

  • A Perlt Larry Wall fejlesztette ki az 1980-as évek végén, és először 1987-ben jelent meg.
  • Általános célú szkriptnyelvnek tervezték, hogy megkönnyítse a jelentések feldolgozását
  • Nagyon nagy hatású, különösen a reguláris kifejezések támogatása terén (erre később még visszatérünk)

Raku

  • Larry Wall (a Perl megalkotója) tervezte, és 2015-ben jelent meg
  • Eredetileg Perl 6 néven ismerték, és az volt a célja, hogy rendbe tegye a nyelvet, valamint eltávolítson néhány funkciót, amelyet kevéssé hasznosnak vagy zavarónak tartottak (szórakoztató idézet: „A Perl 6-ban úgy döntöttünk, jobb magát a nyelvet kijavítani, mint a felhasználót.”, Larry Wall). A Perl 6 végül nem lett forráskompatibilis a Perl 5-tel, ezért átnevezték Rakura
  • Tervezési filozófiájának középpontjában az áll, hogy a programozás élvezetes és produktív legyen, miközben széles eszköztárat kínál sokféle programozási kihívás megoldásához (általános célú)
  • Mivel a Raku egy specifikáció, több implementációja is lehet (és van is). Jelenleg az egyetlen aktívan fejlesztett implementáció a Rakudo, de vannak régebbi implementációk is, például a Pugs (Haskellben írva), a v6-KindaPerl6 és a Niecza (amely a CLR-t célozza)

Hol használják ezeket a nyelveket?

8th

  • Sajnos nem találtunk rá példát, hol használják

AWK

  • Adatkinyerésre és jelentéskészítésre használják, valamint általában szkriptelésre

Bash

  • Elsősorban rendszergazdai feladatokra használják, de parancssori segédprogramok vagy más eszközök köré írt burkolók készítésére is. Mi rengeteget használtuk arra, hogy tömegesen dolgozzunk az Exercism repóival

jq

  • JSON-dokumentumok lekérdezésére, átalakítására és manipulálására használják, gyakran shell-szkriptek formájában.

Perl

  • Adatmanipulációra, fájlok feldolgozására, webfejlesztésre és rendszergazdai feladatokra használják. A web kezdeti időszakában lett népszerű, nagyban a stringek kezelésére való képességei és kiterjedt modulökológiája miatt.

Raku

  • Szövegfeldolgozásra, rendszergazdai feladatokra és még sok minden másra használják

Mi teszi ezeket a nyelveket érdekessé programozási szempontból?

A legtöbb nyelv dinamikusan típusos és értelmezett, ami jól illik a szkriptjellegükhöz. Ez alól azonban vannak kivételek, főleg a támogatott paradigmák terén.

8th

  • Erősen típusos
  • Többparadigmás: procedurális, de ami érdekesebb, veremalapú (veremalapú végrehajtási modell), reflektív (képes megvizsgálni és módosítani a saját szerkezetét és viselkedését) és konkatenatív (minden kifejezés függvény, és a függvények egymás mellé írása függvénykompozíciót jelöl)
  • Natív kódra fordítják, de REPL-ben is értelmezhető

AWK

  • Dinamikusan típusos, és gyakran értelmezett (a használt implementációtól függ)
  • Fő paradigmája az adatvezérelt megközelítés, ahol a programot olyan utasításokként írod le, amelyek megadják a felismerendő adatokat és a szükséges feldolgozást, ahelyett hogy kifejezetten meghatároznád a végrehajtandó lépések sorrendjét. Az AWK támogatja a procedurális programozást is

Bash

  • Dinamikus és értelmezett nyelv
  • Támogatja az imperatív és a procedurális programozást

jq

  • Dinamikus és értelmezett nyelv
  • Tisztán funkcionális nyelv (minden érték megváltoztathatatlan), a „pipeline-ok” hangsúlyozásával. Nagyon unixos hangulata van

Perl

  • Dinamikusan típusos és értelmezett
  • Többparadigmás: támogatja a funkcionális, az objektumorientált és az imperatív programozást

Raku

  • Dinamikusan típusos, de támogatja a fokozatos típusozást, ahol szükség szerint statikus típusokat adhatsz hozzá (a Perl dinamikus)
  • Többparadigmás nyelv: imperatív, procedurális, objektumorientált és funkcionális

Mi teszi őket nagyszerű nyelvekké?

8th

  • A nagyon kevés szintaxis megkönnyíti a nyelv megtanulását és megértését. JSON-t használ az adatok leírására (például objektumok és tömbök). Más tárolókat is támogat, például vermeket, sorokat és kupacokat.
  • Nincsenek fenntartott kulcsszavak. A szubrutinokat „word”-nak nevezik, és könnyen lehet újakat definiálni. Futásidőben minden word újradefiniálható, akár beépített, akár felhasználói.
  • Platformfüggetlen. Bármely támogatott platformra könnyedén generálhatsz futtatható állományt.
  • Biztonságos. Beépített biztonsági funkciók előzik meg a hibák széles körét (nincs közvetlen memóriahozzáférés, a futtatókörnyezet nem linkel dinamikus könyvtárakhoz).

AWK

  • Egyszerű szintaxis, az AWK-kód szerkezete nagyon következetes, ami megkönnyíti az AWK-kód megtanulását és olvasását. Adatszerkezetei is egyszerűek és rugalmasak.
  • Nagyon kifejező: nagyon kevés kóddal sokat lehet elérni. Tökéletes egysorosokhoz.
  • A legtöbb *nix gépen telepítve van, így sok helyen használhatod az AWK-tudásodat (a /bin/sh mellett ez az egyetlen szkriptnyelv a szabványos Unixban).
  • Kiválóan működik pipeline-okban és shell-szkriptekben, ahol az AWK más eszközök kimenetét dolgozza fel, vagy épp fordítva.

Bash

  • A legtöbb platformon használható. Szinte minden *nix gépen telepítve van, a macOS-t is beleértve. A Windows Subsystem for Linux (WSL) révén a bash mára Windows-rendszereken is elérhető.
  • Használható RE(P)L-ként, ahol egyes parancsokat futtatsz, vagy fájlokból olvasol be és hajtasz végre kódot (ezek a shell-szkriptek). Ha használtál már Linux-terminált, valószínűleg írtál is bash-kódot, mert a terminál általában egy bash RE(P)L.
  • A bash és a shell-szkriptek széles körben elterjedtek a rendszergazdai feladatokban, a devopsban és a számítógépek kezelésében.
  • Rendkívül sokoldalú és rugalmas
  • Hatékony stringkezelési képességek, köztük a nagyon egyszerű string-interpoláció

jq

  • Egyszerű, rövid szintaxis a JSON-nal való munkához, ami megkönnyíti a megtanulását
  • Egyéni függvénydefiníciókat tesz lehetővé bonyolultabb műveletekhez.
  • Támogatja a farokrekurzió-optimalizálást, ami nagyszerű a rekurzív adatfeldolgozáshoz
  • A jq eszközt egyetlen binárisként terjesztik, amely mindössze mintegy 30 KB méretű
  • A yq eszköz a jq köré épül, és ugyanazzal a szintaxissal teszi lehetővé XML-, TOML- és YAML-fájlok manipulálását (a háttérben ezeket az adattípusokat JSON-ná alakítja)
  • Mind a C-, mind a Go-implementáció beágyazható más alkalmazásokba

Perl

  • A legtöbb platformon fut. Kiváló platformfüggetlen szkriptek írásához
  • A rugalmasság a Perl tervezési filozófiájának alappillére. Híres mottója: „Több mint egy módja van rá” (TMTOWTDI). Az éppen adott feladattól függően különböző megközelítéseket lehet használni.
  • Erős közösség és nagy hatású projektek öröksége. Rengeteg szkriptet, eszközt és alkalmazást fejlesztettek Perlben. Egykor így emlegették: „a ragasztószalag, ami összetartja az internetet”
  • Gazdag modul- és könyvtárökológia, amely a Comprehensive Perl Archive Network (CPAN) révén érhető el

Raku

  • Nagy, összetett és hatékony, ugyanakkor úgy tervezték, hogy ne kelljen egyszerre az egészet megtanulnod. Könnyű vele elkezdeni, és a hatékonyabb funkciókba később is belemerülhetsz
  • Hatékony és bővíthető típusrendszer, amely magában foglalja a fokozatos típusozást. Ez azt jelenti, hogy megadhatod, milyen szintű típusellenőrzést szeretnél, így egyensúlyt teremthetsz a dinamikus és a statikus típusozás között
  • Támogatja a többszörös diszpécserelést, amivel öröklés nélkül is használhatsz polimorfizmust
  • A Unicode első osztályú állampolgár a Rakuban. Natív támogatást nyújt a különböző karakterkódolások kezeléséhez
  • Fejlett konkurencia- és párhuzamossági funkciókat kínál. Beépített támogatást nyújt az aszinkron programozáshoz, a reaktív programozáshoz és a párhuzamos végrehajtáshoz

Mik a kiemelkedő jellemzőik?

8th

  • Másfajta gondolkodásmódot igényel. Paradigmáinak egyedi keveréke nagyon eltér más nyelvekétől, és arra ösztönöz, hogy új módokat találj a dolgok megközelítésére.
  • A veremalapú és fordított lengyel jelölésű (RPN) szintaxis nagyon egyszerű gondolati modellt ad a program végrehajtásáról. Az értékek a veremre kerülnek, és a legtöbb word a veremre gyakorolt hatásuk alapján van definiálva.

AWK

  • Az adatvezérelt paradigma nagyon hatékony. Másfajta gondolkodást igényel: a programokat feltétel/művelet párok halmazaként definiálod, a szöveg rekordokra bomlik (jellemzően egy sor egy rekord), és minden rekord mezőkre tagolódik (például CSV-mezők, vagy egy szó egy mezőnek felel meg). Ha egyszer megszokod, értékelni fogod ennek a megközelítésnek az eleganciáját és kifejezőerejét, és mindenhol fel fogod ismerni a hasznát.
  • Tökéletes a szöveggel való munkához. Akár szöveget dolgozol fel, alakítasz át vagy jelentést készítesz, az AWK mindig segít. Olyan feladatoknál, mint például az egyes felhasználók shelljének kiírása a rendszeren, vagy egy CSV-oszlop összegzése, el fogsz ámulni, milyen kevés kód kell hozzá.

Bash

  • Tökéletes az automatizáláshoz. A shell-szkriptek kiválóan alkalmasak az ismétlődő feladatok automatizálására.
  • A bash-szkriptek pipeline-okat használnak, és könnyedén összefűzhetsz velük más programokat. Gyerekjáték olyan szkriptet írni, amely az egyik parancs kimenetét egy másik parancsnak adja tovább, vagy elérni, hogy a szkript meghiúsuljon, mihelyt bármelyik végrehajtott parancs hibára fut.
  • Hatékony. Az, hogy milyen könnyen használhatók vele más eszközök, hihetetlenül hatékony eszközzé teszi a basht.

jq

  • Kiváló JSON-adatok egyszerű és letisztult kinyerésére/manipulálására (amiből manapság rengeteg van). Mára a JSON-adatok átalakításának de facto eszközévé vált. JSON-adatokat akár létre is hozhatsz a jq-val.
  • Támogatja az adatfolyam-feldolgozást, ami azt jelenti, hogy „végtelen” adatokkal is dolgozhatsz memóriaproblémák nélkül
  • A pipeline-ok hangsúlyozása könnyen elsajátítható mindenkinek, aki ismeri a streameket, például a Unix-eszközöket. Emellett viszonylag könnyen átláthatóvá teszi a jq-kódot.

Perl

  • Híres tömörségéről és kifejezőerejéről. Nagyon kevés kóddal sokat lehet elérni
  • Különösen jól illik a szöveggel való munkához, nagy részben a hatékony reguláris kifejezés-támogatásának köszönhetően. Kiváltképp a Perl 5 vezetett be sok új funkciót (például visszahivatkozások, nevesített csoportok és lusta kvantorok). Philip Hazel alkotta meg a PCRE-t (Perl Compatible Regular Expressions), egy C-könyvtárat, amely Perl 5-kompatibilis reguláris kifejezésmotort valósít meg. Még azok a nyelvek is, amelyek nem a PCRE-re épülnek, gyakran PCRE-kompatibilisre tervezik a reguláris kifejezés-támogatásukat (és így a Perl 5 szintaxisát használják)

Raku

  • Támogatja az automatikus szálkezelésű junctionöket, amelyek nagyban megkönnyítik a párhuzamos programozást
  • Támogatja a lusta kiértékelést, amivel végtelen listákkal és sorozatokkal dolgozhatsz anélkül, hogy memóriaproblémákba ütköznél. Ez különösen hasznos nagy adathalmazok esetén, vagy olyan algoritmusoknál, amelyek végtelen adatfolyamokkal dolgoznak
  • Kiváló szövegfeldolgozáshoz: egyszerűbb, olvashatóbb és hatékonyabb reguláris kifejezés-szintaxist kínál
  • Beépített támogatás egyéni domain-specifikus nyelvek (DSL-ek) definiálásához grammatikák segítségével. Így parsereket készíthetsz adott adatformátumokhoz vagy nyelvekhez, ami megkönnyíti az összetett szöveges adatok kezelését

Melyiket próbáld ki?

  1. Ha elsősorban Unix-rendszert használsz, vagy devopsszal foglalkozol, a Bash felbecsülhetetlen értékű nyelv, amit érdemes megtanulni. Az AWK, a Perl vagy a Raku megtanulása is igazán hasznos lehet, ráadásul az első kettő sok rendszeren eleve telepítve van.
  2. Ha JSON-nal (vagy XML-, YAML- és TOML-fájlokkal) dolgozol, a jq kézenfekvő választás.
  3. Ha szövegfeldolgozással szeretnél foglalkozni, az AWK, a Perl és a Raku a kézenfekvő választás.
  4. Ha valami kicsit másfélét próbálnál ki, az 8th remek választás.
1. Sep 2023 · Hasznosnak találtad?