Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Ohjelmointikielet

Sivun loppuun

Oskuz [16.12.2013 17:16:28]

#

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,

fergusq [16.12.2013 17:40:30]

#

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.

Deffi [16.12.2013 18:21:13]

#

AA coodaus.

Blu-yhteys. Va,ka blu-users. Connect ja send: Virus. Virus: Vaara aste: Max

Lumpio- [16.12.2013 18:30:25]

#

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!

Antti Laaksonen [16.12.2013 19:00:06]

#

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"

fergusq [16.12.2013 19:43:18]

#

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

Oskuz [16.12.2013 19:45:08]

#

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- [16.12.2013 19:45:16]

#

Lumpio- kirjoitti:

Mod. huom: aacoodaus lisätty!

Ebin 5/5

Metabolix [16.12.2013 19:58:22]

#

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ä?

Oskuz [16.12.2013 20:17:39]

#

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.

samip [16.12.2013 20:24:58]

#

Joku sankari voisi kyllä kirjoittaa tulkin AA-koodaukselle.

vesikuusi [16.12.2013 21:13:53]

#

...fergusq?

vuokkosetae [17.12.2013 01:22:58]

#

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ä.

Joonazan [17.12.2013 15:15:35]

#

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

jalski [17.12.2013 18:34:58]

#

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 = b

a:n osoite on nyt b:n osoite

a: b

a: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.

Deffi [18.12.2013 13:25:45]

#

vuokkosetae kirjoitti:

Montako erikoismerkkiä oikeasti tarvitaan? Pärjäisikö heittomerkillä, pilkulla ja pisteellä.

Minimaalisen kielen voi toteuttaa kahdella merkillä.

Oskuz [18.12.2013 13:30:33]

#

Deffi kirjoitti:

Minimaalisen kielen voi toteuttaa kahdella merkillä.

Öh.. Miten toimisi, koska 3merkkiä on vähiten minkä voi ajatella että sillä tekee jotain?

Antti Laaksonen [18.12.2013 13:47:38]

#

Itse asiassa yksi merkki riittää. Yhdestä merkistä saa äärettömästi erilaisia ohjelmia (koodin pituus määrittää ohjelman toiminnan).

Deffi [18.12.2013 13:50:54]

#

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.

Oskuz [18.12.2013 15:32:22]

#

Auts..:)

fergusq [18.12.2013 16:01:33]

#

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.

Metabolix [18.12.2013 17:39:47]

#

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.

Antti Laaksonen [18.12.2013 18:31:40]

#

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.

Metabolix [18.12.2013 18:34:15]

#

Toisaalta tuolloin myös kääntäjän koko nousee gigatavuihin eikä ohjelmointikieli ole enää yleiskäyttöinen.

Antti Laaksonen [18.12.2013 18:37:29]

#

Mikä ohjelmointikieli on yleiskäyttöinen jos koodilla on maksimipituus?

fergusq [18.12.2013 18:50:24]

#

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.

Oskuz [18.12.2013 18:51:46]

#

Scripti kieli?

Metabolix [18.12.2013 18:54:26]

#

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.

fergusq [18.12.2013 19:23:52]

#

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.

Metabolix [18.12.2013 19:26:51]

#

fergusq, en ymmärrä, mitä oikeastaan yrität sanoa ja miksi minulle. Ehkä missasit jotain minun ja Antin keskustelusta.

fergusq [18.12.2013 19:31:08]

#

Hups, tosiaan luin vähän nopeasti. Pitää kiinnittää enemmän huomiota.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta