Ajattelin vain kysyä, että minkälainen olisi se teidän unelma kielenne, ja vaikkapa hahmottelemaan syntaksia. Voisitte myös kertoa siitä tausta tietoa kuten miksi se on niin hyvä.
Seuraava olisi aika hieno vaikkei nyt sillä hirveän suuria ohjelmia taida tehdä.
MiukuASM:
#tulostaa sanan "HELLO". #kaikki käskyt ja operaattorit ovat muotoa: "nknn" @1<- 48,@2<-45,@3<-4c,@4<-4c,@5<-4f, 0x01:@1, 0x01:@2, 0x01:@3, 0x01:@4, 0x01:@5,
Unelmakieleni on tietysti kaunis, tyylikäs, helppokäyttöinen, nopea ja paras. Kun sellaista ei ole täytyy eri asioihin käyttää eri kieliä.
Kun noita omia kieliä on tultu muutama tehtyä, niin täytynee sanoa että tuollaisia hauskoja pikku kieliä, kuten tuo sinun, kannattaa myös toteuttaa ja oikeasti ohjelmoida niillä. Kehittävää.
Tein tässä taannoin tällaisen pikkukielen:
"fibonaccin luvut"% ',>a>c'1>b[,$b,$a+,>c>b,>a d"\n"d\],._
En jaksa selittää miten se toimii.
Blu-yhteys. Va,ka blu-users. Connect ja send: Virus. Virus: Vaara aste: Max
Omakin ääneni menee ehdottomasti AA Coodaukselle.
Hkr-Ankallispankki: keskustietokone. Kv,ka: Pankkitilinumerot. Send-tänne.
Edit: Ylläpito saisi lisätä koodin väritystuen myös AA Coodaukselle!
Mod. huom: aacoodaus lisätty!
Kielessäni on suomenkielinen syntaksi, joka muistuttaa Basicia. Merkkijonojen ja taulukkojen käsittely on lähellä PHP:tä. Kielen syntaksissa on piirteitä myös Pythonista, ja kielessä on vakiona rajoittamattoman suuret luvut. Tehokkuudeltaan kieli on lähellä C++:aa.
Nimen kysyminen:
LUE "Anna nimi:", nimi JOS nimi = "Uolevi" TULOSTA "Terve, vanha veikko!" MUUTEN TULOSTA "Häivy pois!"
Alkulukujen etsiminen:
TOISTA i = 2..100 alkuluku = 1 TOISTA j = 2..i-1 JOS i%j = 0 alkuluku = 0 JOS alkuluku TULOSTA i
Taulukon käyttäminen:
fibo[0] = 0 fibo[1] = 1 TOISTA i = 2..100 fibo[i] = fibo[i-2]+fibo[i-1] kaannos["apina"] = "monkey" kaannos["banaani"] = "banana" kaannos["cembalo"] = "harpsichord"
Mietin lisää, ja minun unelmien kieleni olisi varmaan tulkattava, syntaksiltaan C:n ja Luan välistä ja tukisi olio-ohjelmointia, nimettömiä funktioita, dynaamista tyypitystä, olisi yksinkertainen ja omaisi erittäin laajan standardikirjaston.
Kun Antti esitteli suomenkielisen kielen, tuli mieleen, että tulkki voisi tukea useita erikielisiä avainsanoja. Avainsanat olisi suffiksoitu :
-merkillä, jolloin ne on helppo tunnistaa esim. syntaksinvärityksessä ja niitä voi käyttää myös muuttujien niminä.
Nopeutta en tietenkään voi vaatia, eihän se ole kielen vaan toteutuksen ongelma.
Kieleni näyttäisi tältä:
# suomeksi tulosta: "hei ohjelmointiputka" (fun:(x) jos: x <= 0 palauta: 0 muulloin: palauta: x+minä(x-1))(5) # minä viittaa nykyiseen nimettömään funktioon x = 0 kun: x < 10 { tulosta: x++ } # enkuksi w = "world" print: "hello " + w # ruotsiksi om: x == 0 x = 1
Fergusq: pitää alkaa koodailemaan.
Deffi: tuo AA vaikuttaa kyllä aika mielen kiintoiselta..
Ot-yhteys Akurobottiin Akurobotti kulku suora loputon Jos tiellä este : Käännös 180° Jatka suora loputon
Tässä on vielä funktionaalinen kieli, jossa voi myös käyttää makroja ja jossa on tuki silmukkalle.
.fibo [ x=y+z; z=y; y=x; print(x); ? i == 27: break; i++; ] .end .main .var i=1; x=0; y=1; z=0; .end .fibo .end
Lumpio- kirjoitti:
Mod. huom: aacoodaus lisätty!
Ebin 5/5
Oskuz kirjoitti:
Tässä on vielä funktionaalinen kieli,
Kielesi näyttää kylläkin imperatiiviselta (kuten C tai Java) eikä lainkaan funktionaaliselta (kuten Lisp tai Haskell). Oletkohan koskaan edes käyttänyt funktionaalista ohjelmointikieltä?
Juu, sen piti olla funktionaalinen, mutta vähän levisi.
summa x=a+b if(a!=b):tulosta(summa x)
Eipä noita ole kun vaan Lispiä pikasen.
Joku sankari voisi kyllä kirjoittaa tulkin AA-koodaukselle.
...fergusq?
En tiedä ihan tarkalleen mikä ohjelmointikieli olisi se unelma, mutta tiedän kyllä mitä en halua nähdä.
Ei pakkosisennystä. Jos jossain vain tekstinä niin siitä ei kukaan selvitä mitä kamaa siinä on. Koodin sisentäminen on fiksua.
Montako erikoismerkkiä oikeasti tarvitaan? Pärjäisikö heittomerkillä, pilkulla ja pisteellä. Nykyisin kun tuo parsiminen ei maksa oikeasti mitään kääntäjässä. Tämä ominaisuus siis siksi, että tiukemman näppiksen pieksemisen jälkeen on pikkurillit kipeinä.
Unelmakieleni olisi tietenkin toteutettu mahdollisimman hyvin, eli se olisi käännettävä, kääntyisi nopeasti ja tukisi monia eri alustoja.
Hyvä toteutus voidaan viedä hyvin pitkälle. Esimerkiksi roskienkerätty kieli voidaan toteuttaa niin että se hallitsee suurinta osaa muistista perinteisellä tavalla.
Kun unohdetaan toteutus niin minusta tärkeintä on että kirjoittaminen on nopeaa, lukeminen on helppoa ja ei tule ajonaikaisia virheitä. Kirjoittamis- ja lukemisnopeus on paljon syntaksista kiinni. IDEt parantavat kirjoitusnopeutta. En jaksa miettiä millainen syntaksi on hyvä; se riippuu paljon kielen ominaisuuksista.
Pythonissa on minusta liian helppo tehdä virheitä jotka jäävät kiinni vasta testeissä. Minusta hyvä ratkaisu tähän on Golang-tyylinen staattinen tyypitys. Ainakin merkkijonon ja numeron yhteenlaskemisessa käännösvirhe on mukavampi kuin ajonaikainen virhe tai arvaus siitä mitä käyttäjä haluaa. Jos Go:ssa yrittää laskea jotain float64 ja float32 -datatyypeillä sekaisin tulee virheilmoitus kääntäjältä. Minusta se ei ole liioittelua.
Osoittimilla laskeminen aiheuttaa helposti ajonaikaisia virheitä, eikä se ole välttämätöntä. Eli osoittimien tarvitsee ainoastaan voida tallentaa dataa ja kertoa datansa. Osoittimien ja arvojen eron voi jopa unohtaa kokonaan, jos on erikseen operaattori kopioimiselle ja osoittamiselle. Jos kaksi osoitinta yritetään laskea yhteen, voidaan sen sijaan laskea yhteen arvot joihin ne osoittavat. Oletuksena kaikki muuttujat ovat osoittimia, mutta kääntäjä voi optimoida. Ehkä jossain kielessä on tällainen ominaisuus, mutta en ainakaan tiedä sellaisesta.
Hypoteettinen syntaksi:
a = b
a:n osoite on nyt b:n osoite
a: b
a:n osoitteessa on nyt arvo joka oli b:n osoitteessa
Joonazan kirjoitti:
Osoittimilla laskeminen aiheuttaa helposti ajonaikaisia virheitä, eikä se ole välttämätöntä. Eli osoittimien tarvitsee ainoastaan voida tallentaa dataa ja kertoa datansa. Osoittimien ja arvojen eron voi jopa unohtaa kokonaan, jos on erikseen operaattori kopioimiselle ja osoittamiselle. Jos kaksi osoitinta yritetään laskea yhteen, voidaan sen sijaan laskea yhteen arvot joihin ne osoittavat. Oletuksena kaikki muuttujat ovat osoittimia, mutta kääntäjä voi optimoida. Ehkä jossain kielessä on tällainen ominaisuus, mutta en ainakaan tiedä sellaisesta.
Hypoteettinen syntaksi:
a = ba:n osoite on nyt b:n osoite
a: ba:n osoitteessa on nyt arvo joka oli b:n osoitteessa
Tuollainen aiheuttaisi mielestäni enemmän haittaa ja turhia huolimattomuusvirheitä, kuin toisi hyötyä.
Itse pidän PL/I:n toteutus tavasta:
dcl x char; dcl p ptr; dcl c char based(p); p = addr(x); c = 'A';
Eli siis, osoitin itsessään on tyypitön, mutta based muuttujan avulla käyttö on helppoa ja turvallista.
vuokkosetae kirjoitti:
Montako erikoismerkkiä oikeasti tarvitaan? Pärjäisikö heittomerkillä, pilkulla ja pisteellä.
Minimaalisen kielen voi toteuttaa kahdella merkillä.
Deffi kirjoitti:
Minimaalisen kielen voi toteuttaa kahdella merkillä.
Öh.. Miten toimisi, koska 3merkkiä on vähiten minkä voi ajatella että sillä tekee jotain?
Itse asiassa yksi merkki riittää. Yhdestä merkistä saa äärettömästi erilaisia ohjelmia (koodin pituus määrittää ohjelman toiminnan).
Oskuz kirjoitti:
Deffi kirjoitti:
Minimaalisen kielen voi toteuttaa kahdella merkillä.
Öh.. Miten toimisi, koska 3merkkiä on vähiten minkä voi ajatella että sillä tekee jotain?
Kaikki ohjelmat tietokoneellasi muodostuu ykkösistä ja nollista.
Auts..:)
Kielen voi toteuttaa kahdella merkillä, mutta siitä ei suinkaan tulisi minimaalinen vaan hyvin monimutkainen, koska niille kahdelle merkille on ladattu paljon tietoa.
Binääri on sitä paitsi vain pelkkä koodaustapa. Kieltä pitäisi merkkien sijasta ajatella sanoina ja niiden merkityksinä. Voihan suomeakin kirjoittaa muilla aakkostoilla tai vaikka morsekoodata, mutta sanat ja niiden merkitykset ovat ne jotka vaikuttavat. Ohjelmointikieliä pitäisi mitata "sanoissa", yksiköissä joilla on merkitys. Binäärikoodin yksittäisillä biteillä ei juurikaan merkitystä ole.
Antti Laaksonen kirjoitti:
Itse asiassa yksi merkki riittää. Yhdestä merkistä saa äärettömästi erilaisia ohjelmia (koodin pituus määrittää ohjelman toiminnan).
Ikävästi tällä kielellä ohjelmista tulee valtavia (eivät mahdu levylle ilman pakkausta) ja niistä on todella vaikea erottaa eri kohtia. Esimerkiksi jo 2-merkkisellä kielellä 40 merkin mittainen ohjelma voisi viedä yksimerkkisellä kielellä jopa teratavun tilaa.
Metabolix kirjoitti:
Esimerkiksi jo 2-merkkisellä kielellä 40 merkin mittainen ohjelma voisi viedä yksimerkkisellä kielellä jopa teratavun tilaa.
2-merkkisessä aakkostossa 40-merkkisiä tai lyhyempiä ohjelmia on 241-1 eli yli 2000 miljardia. Tämä on paljon enemmän kuin käytännössä tarvitsee, ja miljardi yleisintä ohjelmaa riittää jo erittäin pitkälle. Tällöin 1-merkkisessä aakkostossa koodin pituus on vain gigatavun luokkaa.
Toisaalta tuolloin myös kääntäjän koko nousee gigatavuihin eikä ohjelmointikieli ole enää yleiskäyttöinen.
Mikä ohjelmointikieli on yleiskäyttöinen jos koodilla on maksimipituus?
Varmaankin kieli, jossa on paljon erikoissyntaktillisia toimintoja, jotka lyhentävät koodia. Jos standardikijasto lasketaan osaksi kieltä, kieli, jolla on laajin kirjasto, jolle ulkoistaa toimintoja, on tiivein.
Scripti kieli?
Antti Laaksonen kirjoitti:
Mikä ohjelmointikieli on yleiskäyttöinen jos koodilla on maksimipituus?
Ei mikään, mutta yleensä kuitenkin on paljon enemmän vaihtoehtoja ja ohjelmia voi oikeasti laatia itse, kun taas tuossa kielessäsi ohjelma pitäisi käytännössä valita listasta. Melkein kuin kehittäisit shakista uuden version, jossa on pakko vastata aina jostain shakkikirjasta löytyvällä vastasiirrolla: pelistä häviää idea, kun ei voi vapaasti valita siirtoa, vaikka itse asiassa oikeassakin pelissä vaihtoehtoja on rajallisesti.
Metabolix: Teoriassa ohjelmia pitäisi olla rajaton määrä, mutta käytännössä tallennuskapasiteetti on aina rajallinen. Joskus saattaa tiiviistä yleiskäyttöisestä kielestä olla hyötyä esim. vanhojen tietokoneiden tai muiden laitteiden ohjelmoinnissa, jolloin muistia saattaa olla hyvinkin vähän.
fergusq, en ymmärrä, mitä oikeastaan yrität sanoa ja miksi minulle. Ehkä missasit jotain minun ja Antin keskustelusta.
Hups, tosiaan luin vähän nopeasti. Pitää kiinnittää enemmän huomiota.
Aihe on jo aika vanha, joten et voi enää vastata siihen.