1
Ohjelmointi, palvelimet ja muu edistyneempi käyttö / Vs: Skriptiajuri
« : 17.04.24 - klo:10.05 »
BASH:issa on vanhoja käskyjä enemmän kuin uusia - ja ne ovat aivan erilaisia kuin uudet käskyt: ne eivät ole omissa tiedostoissaan eivätkä ne käsittele tiedostoja vaan matriiseja ja muuttujia - joten ne toimivat nopeasti. Niistä ei virallisesti puhuta missään: tosin saatetaan niiden olemassaolo mainita ylimalkaisesti. Mutta netti ei koskaan unohda ja sinne kerkisi kauan sitten tulla niistä enemmänkin asiaa - tosin missään ei mainittu kuinka nopeita ne ovat varsinkin ryhmänä. Eikä missään ei ole minkäänlaista yhteenvetoa niistä - ja kattavan yhteenvedon tekemisessä olisikin kauhea työ.
Vanhat käskyt ovat tekstinkäsittelyä eivätkä matematiikkaa vaikka saahan niillä matematiikankin toimimaan. Mutta tekstinkäsittelyä ne nopeuttavat paljon enemmän - en yritäkään ymmärtää sitä umpihullua tilannetta jossa nyt olemme:
Aikaisemmin olin varma että find-käsky on erinomainen. Entäs printf, grep, sed ... ja monet muut. Kuitenkin esitin aikoinaan epäilyksen siitä että uudet käskyt on tehty jotta nuo muut käskyt voisivat loistaa - maailmalla yksi pätevä virtuoosikin oli esittänyt jotain samankaltaista. Silloin en täysin uskonut siihen itsekään, mutta nyt alan epäillä että osuin oikeaan. Mahdottomasti töitä kyllä on tekemättä - niin paljon ettei ole selvää olisiko niiden tekemisessä enää mitään mieltä - sillä BASH on päästetty niin surkeaan tilaan etteivät isotkaan parannukset ehkä riitä.
Tosin vanhoista käskyistä ei ainakaan toistaiseksi ole vakavasti otettavaa vastusta noille erinomaisille ohjelmille vaikka satunnaisesti vanhat käskyt vievätkin voiton - toistaiseksi on täysin epäselvää kuinka satunnaisesti. Sillä kolmenkymmenen vuoden laiminlyönti tuntuu kyllä niinkuin myös tahallinen sabotointi. Virtuoosien syyttäminen kaikesta tapahtuneesa lienee hieman väärin sillä useat heistä ovat päinvastoin tehneet ihailtavaa työtä - mutta tuolla huipullahan syyllisten täytyy olla - joten voi vain sanoa että kuka homman on tehnytkin ei skriptaamisesta ole konnan-töissään välittänyt vähääkään.
Varsinkin matriisien toiminta on tekemällä tehty huonoksi - esimerkiksi BASH:issa kaikkilla viitataan matriisin jäseniin: ${matriisin_nimi[$jäsen_numero]} - noiden aaltosulkujen tarpeeseen annetiin aikoinaan sellainen seli-seli etteivät selittäjät itsekään siihen uskoneet. Mutta tavallaan ei voi sanoa että vanhoja käskyjä käsiteltäisiin jotenkin sorsivasti sillä myös uudet käskyt toimivat samallatavoin. Mutta kuinkas sattuikaan niin vanhoilla käskyillä asia kirpaisee paljon enemmän:
Matriisien - elikä tiedoston muistissa olevan kuvan - käsittely uusilla käskyillä on sellaista ettei kukaan viitsi matriisien kanssa toimia - oikeastaaan kyse on nopeudesta ja sitähän ei uusilla käskyillä saavuteta muutenkaan. Mutta vanhoilla käskyillä matriisien käsittely sujuu ihan kätevästi ja nopeasti. Esimerkiksi kun ison tiedoston joku sana pitää muuttaa kaikkialla toiseksi - uusilla käskyillä työ kestäisi iäisyyksiä ja niinpä turvaudutaan sed:iin. Mutta vanhoilla käskyillä luetaan tiedosto ensin matriisiin ja muutetaan sitten:
Tai koetapa etsiä tiedostosta se mitä lukee esimerkiksi sanan: höikäsenpöläys jälkeen. Tavallisesti tähän on käytetty käskyä grep. Mutta sama etsintä toimii nopeasti myös vanhoilla käskyillä:
Vain mielikuvitus on rajana kaikessa nopeassa ja kummallisessa - aika kyllä vasta näyttää saako kokoon tarpeellista määrää luotettavasti toimivia ihmeellisyyksiä - sillä ei tulos enää taitaisi olla vaivan arvoista olipa tulos kuinka erinomaista hyvänsä. Katsopa esimerkisi seuraavaa käskyä:
- onko tämän ryhmän neljällä mielettömällä käskyllä jotain käyttöäkin? Mutta ainakin käskyt kertovat yhden oleellisen eron vanhojen ja uusien käskyjen välillä: vanhat toimivat niinkuin jo etukäteen voi arvella ja aina samalla tavalla - mutta sensijaan kun uusilla käskyillä vaihtaa dataa niin tehdäänkin jotain muuta.
- tosin tämänkaltaisten skriptien tekemisessä olisi ihmiselle ihan liian suurin työ ja niiden tekemiseen olisikin tehtävä skripti - ja skriptaus nousisi ihan uudelle tasolle. Kauheaa - mitä noille hienoille ohjelmille tapahtuisi?
- eihän tästä mitään varmaa voi sanoa ennenkuin kymmenvuotisen tutkimisen jälkeen mutta näin vajain todistein: nykyisin käytettävät uudet käskyt ovat pahantahtoista murhaa. Pakko niitä on silti toistaiseksi käyttää sillä eihän niistä vanhoista käskyistä vielä kunnon käsitystä ole. Kenelläkään ei voi olla aavistustkaan mihin nämä päätyvät.
Vanhat käskyt ovat tekstinkäsittelyä eivätkä matematiikkaa vaikka saahan niillä matematiikankin toimimaan. Mutta tekstinkäsittelyä ne nopeuttavat paljon enemmän - en yritäkään ymmärtää sitä umpihullua tilannetta jossa nyt olemme:
Aikaisemmin olin varma että find-käsky on erinomainen. Entäs printf, grep, sed ... ja monet muut. Kuitenkin esitin aikoinaan epäilyksen siitä että uudet käskyt on tehty jotta nuo muut käskyt voisivat loistaa - maailmalla yksi pätevä virtuoosikin oli esittänyt jotain samankaltaista. Silloin en täysin uskonut siihen itsekään, mutta nyt alan epäillä että osuin oikeaan. Mahdottomasti töitä kyllä on tekemättä - niin paljon ettei ole selvää olisiko niiden tekemisessä enää mitään mieltä - sillä BASH on päästetty niin surkeaan tilaan etteivät isotkaan parannukset ehkä riitä.
Tosin vanhoista käskyistä ei ainakaan toistaiseksi ole vakavasti otettavaa vastusta noille erinomaisille ohjelmille vaikka satunnaisesti vanhat käskyt vievätkin voiton - toistaiseksi on täysin epäselvää kuinka satunnaisesti. Sillä kolmenkymmenen vuoden laiminlyönti tuntuu kyllä niinkuin myös tahallinen sabotointi. Virtuoosien syyttäminen kaikesta tapahtuneesa lienee hieman väärin sillä useat heistä ovat päinvastoin tehneet ihailtavaa työtä - mutta tuolla huipullahan syyllisten täytyy olla - joten voi vain sanoa että kuka homman on tehnytkin ei skriptaamisesta ole konnan-töissään välittänyt vähääkään.
Varsinkin matriisien toiminta on tekemällä tehty huonoksi - esimerkiksi BASH:issa kaikkilla viitataan matriisin jäseniin: ${matriisin_nimi[$jäsen_numero]} - noiden aaltosulkujen tarpeeseen annetiin aikoinaan sellainen seli-seli etteivät selittäjät itsekään siihen uskoneet. Mutta tavallaan ei voi sanoa että vanhoja käskyjä käsiteltäisiin jotenkin sorsivasti sillä myös uudet käskyt toimivat samallatavoin. Mutta kuinkas sattuikaan niin vanhoilla käskyillä asia kirpaisee paljon enemmän:
Matriisien - elikä tiedoston muistissa olevan kuvan - käsittely uusilla käskyillä on sellaista ettei kukaan viitsi matriisien kanssa toimia - oikeastaaan kyse on nopeudesta ja sitähän ei uusilla käskyillä saavuteta muutenkaan. Mutta vanhoilla käskyillä matriisien käsittely sujuu ihan kätevästi ja nopeasti. Esimerkiksi kun ison tiedoston joku sana pitää muuttaa kaikkialla toiseksi - uusilla käskyillä työ kestäisi iäisyyksiä ja niinpä turvaudutaan sed:iin. Mutta vanhoilla käskyillä luetaan tiedosto ensin matriisiin ja muutetaan sitten:
Koodia: [Valitse]
< tiedoston_nimi readarray teksti; echo -e ${teksti[@]//mikä/miksi}
- tosin käsky on hieman hitaampi kuin sed mutta eipä paljoa. Ja sivuvaikutuksena on tiedostosta tehty matriisi.Tai koetapa etsiä tiedostosta se mitä lukee esimerkiksi sanan: höikäsenpöläys jälkeen. Tavallisesti tähän on käytetty käskyä grep. Mutta sama etsintä toimii nopeasti myös vanhoilla käskyillä:
Koodia: [Valitse]
< tiedosto readarray teksti; echo ${teksti[@]##*höikäsenpöläys }.
Kuinkahan BASH pärjäisi jos ulkoisiin käskyihin laitetut kehitys-ponnistukset olisi laitettu BASH:iin?Vain mielikuvitus on rajana kaikessa nopeassa ja kummallisessa - aika kyllä vasta näyttää saako kokoon tarpeellista määrää luotettavasti toimivia ihmeellisyyksiä - sillä ei tulos enää taitaisi olla vaivan arvoista olipa tulos kuinka erinomaista hyvänsä. Katsopa esimerkisi seuraavaa käskyä:
Koodia: [Valitse]
a=(99a 88a 98a 89a 1234 zeta5 jaakkokulta 15 kiiski 1jones8 1joonas9 17 18 209); echo ${a[@]##*[0-8jk]}
- käsky suodattaa pois kaikki numeroihin 0-8 loppuvat matriisin jäsenet - samoin kuin poistaa jäsenistä alusta viimeiseen numeroon 0-8 tai kirjaimiin j tai k asti. - onko tämän ryhmän neljällä mielettömällä käskyllä jotain käyttöäkin? Mutta ainakin käskyt kertovat yhden oleellisen eron vanhojen ja uusien käskyjen välillä: vanhat toimivat niinkuin jo etukäteen voi arvella ja aina samalla tavalla - mutta sensijaan kun uusilla käskyillä vaihtaa dataa niin tehdäänkin jotain muuta.
- tosin tämänkaltaisten skriptien tekemisessä olisi ihmiselle ihan liian suurin työ ja niiden tekemiseen olisikin tehtävä skripti - ja skriptaus nousisi ihan uudelle tasolle. Kauheaa - mitä noille hienoille ohjelmille tapahtuisi?
- eihän tästä mitään varmaa voi sanoa ennenkuin kymmenvuotisen tutkimisen jälkeen mutta näin vajain todistein: nykyisin käytettävät uudet käskyt ovat pahantahtoista murhaa. Pakko niitä on silti toistaiseksi käyttää sillä eihän niistä vanhoista käskyistä vielä kunnon käsitystä ole. Kenelläkään ei voi olla aavistustkaan mihin nämä päätyvät.