mitä etuja on tyypittömillä kielillä esim php ja LUA verrattuna tyypitettyihin? minusta altistaa todella monille tyhmille virheille tuollainen! mistä suosio on saanut alkunsa?
tyypittömistä kielistä
edut?
9454
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
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.
"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.
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
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.
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
Tässä viisi staattisesti tyypitettyä kieltä, joissa voi käyttää sulkeumia.
C# 3.0, C 0x, Haskell, OCaml, Scala
TRRY to keep up...