tyypittömistä kielistä

mitä etuja on tyypittömillä kielillä esim php ja LUA verrattuna tyypitettyihin? minusta altistaa todella monille tyhmille virheille tuollainen! mistä suosio on saanut alkunsa?
9454
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

Se on kivaa kun nopeasti pieraista jotain pientä kikkaretta kasaan. Mutta voi helvetti jos jotain monimutkaisempaa tekee niin siinä kyllä ampuu sitten herkästi jalkaan.

Äänestä
  • "Se on kivaa kun nopeasti pieraista jotain pientä kikkaretta kasaan."
    Mitä tuolla tarkoitat?
    Jos vertailu kohtana on Delphi (tai Lazarus) Niillähän saa kasattua tosinopesti sovelluksen (Luulisi että se on yleisesti tiedossa). Onko nuo pikkukikkareet esim vain pääteskriptejä vai mitä?

    Äänestä

  • Lisää selvitystä kaipaava kirjoitti:

    "Se on kivaa kun nopeasti pieraista jotain pientä kikkaretta kasaan."
    Mitä tuolla tarkoitat?
    Jos vertailu kohtana on Delphi (tai Lazarus) Niillähän saa kasattua tosinopesti sovelluksen (Luulisi että se on yleisesti tiedossa). Onko nuo pikkukikkareet esim vain pääteskriptejä vai mitä?

    No eihän se PHP ole muuhun suunniteltu kuin hötömölön esiprosessointiin.. Tälläiset pikkukikkareet sitten.. No, ne on skriptejä ja toimivat tuollaisissa pääosin "tilattomissa" jutuissa kuten pääteskripteissä tai WWW-sivustolla. Katsos kun kaivinkoneella ei oikein viitsi tehdä niitä hiekkakakkuja. Oikea työkalu oikeaan hommaan.

    Äänestä

  • Tiesitkö, että Adobe Lightroom -ohjelmasta 40 % on tehty Lualla? Taitavat Adoben pojat olla fiksumpia kuin sinä, kun osaavat käyttää Luaa oikeassa ohjelmassa.

    "Mutta voi helvetti jos jotain monimutkaisempaa tekee niin siinä kyllä ampuu sitten herkästi jalkaan."

    Pitäydy tasollesi sopivissa projekteissa!

    Äänestä

  • Tekivät jotain kirjoitti:

    Tiesitkö, että Adobe Lightroom -ohjelmasta 40 % on tehty Lualla? Taitavat Adoben pojat olla fiksumpia kuin sinä, kun osaavat käyttää Luaa oikeassa ohjelmassa.

    "Mutta voi helvetti jos jotain monimutkaisempaa tekee niin siinä kyllä ampuu sitten herkästi jalkaan."

    Pitäydy tasollesi sopivissa projekteissa!

    En tunne Luaa, enkä Adoben Lightroomia

    Äänestä

Muuttujien arvoilla PHP:ssa ja Luassa on tyypit, vaikka muuttujien sisältämien arvojen tyyppejä ei tarvitsekaan esitellä, ja vaikka saman niminen muuttuja voikin viitata monen tyyppisiin arvoihin ohjelman suorituksen aikana. Tästä syystä tällaisia kieliä kutsutaan dynaamisesti tyypitetyiksi, ei tyypittömiksi.

Olet oikeassa siinä, että dynaamisesti tyypitetyillä kielillä on mahdollista tehdä helposti tyhmiä virheitä. Staattisesti tyypitetyn kielen kääntäjä huomaa yleensä esimerkiksi kirjoitusvirheen muuttujan nimessä, mutta dynaamisesti tyypitetyssä kielessä virhe paljastuu vasta ajoaikana, jos sittenkään.

Dynaamisesti tyypitetyillä kielillä on kuitenkin myös monia etuja staattisesti tyypitettyihin nähden. Näitä kieliä ei yleensä käännetä konekielelle ennen suoritusta, vaan niitä ajetaan tulkissa. Tästä seuraa monta mukavaa asiaa, joista nyt äkkiseltään tulee mieleen

1. Tulkki voi helposti tarjota mukavia tietotyyppejä, kuten rajoittamattoman suuret luvut (koita laskea täälläkin taas mainostetussa Delphissä edes se, onko 34:n kertoma suurempi kuin 2 potenssiin 128) ja listat, joiden alkioina voi olla samalla kertaa merkkijonoja, numeroita ja toisia listoja.

2. Täsmälleen sama ohjelma voidaan ajaa monella eri alustalla: Windowseissa, Linuxeissa ja Symbianissa, x86-prosessoreilla, Sparceilla ja ARMeilla, kunhan vain tulkki on kannettavissa eri järjestelmiin. Usein on.

3. Eval: ohjelman ajoaikana muodostettuja merkkijonoja voidaan suorittaa niin kuin muutakin ohjelmakoodia. Tämä tekee näistä dynaamisista kielistä helppoja sisällytettäviä eri ohjelmiin mm. käyttäjän syöttämäksi skriptikieliksi.

Lisäksi sulkeumia (http://en.wikipedia.org/wiki/Closure_(computer_science)) ei oikein löydy käännettävistä staattisesti tyypitetyistä kielistä, aspektiohjelmointi (http://en.wikipedia.org/wiki/Aspect_oriented_programming) on niillä tavattoman monimutkaista tai mahdotonta, luokkien tai funktioiden luominen ajoaikana ei niillä tahdo onnistua, jopa niiden välittäminen parametreina ja paluuarvoina jää usein haaveeksi. Hyvin varustelluissa dynaamisesti tyypitetyssä kielessä (joita mainitut PHP ja Lua eivät tosin edusta) nämä kaikki ovat täysin luonnollisia asioita.

Allekirjoittanut arvostaa dynaamisissa kielissä eniten niillä tehtävän ohjelmistokehityksen nopeutta. Esimerkin vuoksi mainittakoon joskus mielenkiinnosta tekemäni ohjelmakirjasto, jonka avulla voi lähettää minkä tahansa oman ohjelman funktioista suoritettavaksi jollekin toiselle koneelle. Toisen koneen ei tarvitse omasta ohjelmasta mitään ennen lähetystä. Kirjaston tekemiseen ei mennyt kauaa ja se on vain noin 350 riviä pitkä. Staattisesti tyypitetyillä kielillä olisin tuskin koskaan edes haaveillut tekeväni tällaista.

Äänestä
  • Voinet myös kertoa onko nämä tulokset oikein

    Kertoma 34 on
    295232799039604140847618609643520000000
    ja 2 potenssin 128 on
    340282366920938463463374607431768211456


    Tehtävä on ratkaistu omalla TBigNum luokkakirjastolla
    (jonka tarkkuusrajoitteena on koneenkapasiteetti
    ja omat laskutaidot)
    Yleisesti ottaen esim. netistä löytynee vastaavia kirjastoja, komponentteja jne


    procedure TForm1.Button4Click(Sender: TObject);
    var aa,bb,cc:TBigNum;
    begin
    aa := TBigNum.Create;
    bb := TBigNum.Create;
    cc := TBigNum.Create;
    aa.AsString:='34';
    bb.AsString:='2';
    cc.AsString:='128';
    aa.Factorial;
    Memo1.Lines.Add('Kertoma 34 on');
    Memo1.Lines.Add(aa.AsString);
    bb.Exponent(cc) ;
    Memo1.Lines.Add('ja 2 potenssin 128 on');
    Memo1.Lines.Add(bb.AsString);
    FreeAndNil(aa);
    FreeAndNil(bb);
    FreeAndNil(cc);
    end;

    Äänestä

  • vaikka näin kirjoitti:

    Voinet myös kertoa onko nämä tulokset oikein

    Kertoma 34 on
    295232799039604140847618609643520000000
    ja 2 potenssin 128 on
    340282366920938463463374607431768211456


    Tehtävä on ratkaistu omalla TBigNum luokkakirjastolla
    (jonka tarkkuusrajoitteena on koneenkapasiteetti
    ja omat laskutaidot)
    Yleisesti ottaen esim. netistä löytynee vastaavia kirjastoja, komponentteja jne


    procedure TForm1.Button4Click(Sender: TObject);
    var aa,bb,cc:TBigNum;
    begin
    aa := TBigNum.Create;
    bb := TBigNum.Create;
    cc := TBigNum.Create;
    aa.AsString:='34';
    bb.AsString:='2';
    cc.AsString:='128';
    aa.Factorial;
    Memo1.Lines.Add('Kertoma 34 on');
    Memo1.Lines.Add(aa.AsString);
    bb.Exponent(cc) ;
    Memo1.Lines.Add('ja 2 potenssin 128 on');
    Memo1.Lines.Add(bb.AsString);
    FreeAndNil(aa);
    FreeAndNil(bb);
    FreeAndNil(cc);
    end;

    Oikein meni. Vertailun vuoksi, omalla suosikillani Pythonilla tarkastus sujui sohvalla makoillessa internet tablet kourassa näin:

    (kopio suoraan tulkista; jos rivi ei ala >>> tai ...-merkeillä, se on Pythonin tulostama)

    >>> def kertoma(n):
    ... if n>1: return n*kertoma(n-1)
    ... return 1
    ...
    >>> kertoma(34)>2**128
    False
    >>> kertoma(34)
    295232799039604140847618609643520000000L
    >>> 2**128
    340282366920938463463374607431768211456L

    Äänestä

  • Tässä viisi staattisesti tyypitettyä kieltä, joissa voi käyttää sulkeumia.

    C# 3.0, C 0x, Haskell, OCaml, Scala

    TRRY to keep up...

    Äänestä

Kommentoi aloitusta


edut? kirjoitti:

mitä etuja on tyypittömillä kielillä esim php ja LUA verrattuna tyypitettyihin? minusta altistaa todella monille tyhmille virheille tuollainen! mistä suosio on saanut alkunsa?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu