Nyt löytyi kieli, jossa ei ole ollenkaan avainsanoja: Funktionaalinen Mathematica Wolfram. Imperatiivisuus on yhtenä piirteenä funktioiden Do, If, Return jne kautta.
Funktionaaliset kielet tarvitsevat jonkin verran vähemmän avainsanoja kuin imperatiiviset. Erikoismerkit riittäisivät avainsanojen korvikkeeksi paremmin, mutta tätä vaihtoehtoa ei ole juuri hyödynnetty. Jotain niissä avainsanoissa on.
Imperatiivipuolella Smalltalk oli kuitenkin avainsanaton. Se taisi olla yksi asia, jota ohjelmoijat eivät kestäneet Smalltalkissa.
Ovathan erikoismerkitkin tavallaan avainsanoja. Esimerkiksi Haskellissa joitakin merkkiyhdistelmiä ei saa määritellä operaattoreiksi, eli ne ovat "varattuja". Tämä vastaa kirjaimista koostuvia avainsanoja, joita ei voi käyttää funktioiden niminä. Jos avainsanaksi määritellään mikä tahansa identifieriksi kelpaamaton merkkijono, voi välilyöntejäkin väittää avainsanoiksi.
Harva ohjelmointikieli toimii kokonaan ilman avainsanoja tai varattuja merkkejä, mutta periaatteessa tätä ei estä mikään. On esimerkiksi helppoa määritellä konkatenatiivinen kieli, jonka jokainen "komento" on pelkkä funktio, jonka voi uudelleenmääritellä. Mielenkiintoista olisi pohtia myös kieltä, jossa on vain avainsanoja. Tällainen kieli kuitenkin luultavasti kaatuisi siihen, että olisi hankalaa viitata funktioihin ja olioihin ilman nimeä.
Monissa kielissä (kuten Valassa) voi mitä tahansa sanaa käyttää muuttujan nimenä, jos sen eteen laitetaan jokin erikoismerkki (esim. @
). Nämäkin kielet ovat siis ikään kuin avainsanattomia, sillä mikään sana ei ole lopullisesti varattu. Jos laittaisi jokaisen nimen eteen @
-merkin, ei syntaksi eroaisi lopulta paljoa esimerkiksi PHP:stä dollareineen.
ei ainuttakaan avainsanaa. eikä edes ainutta sanaa. näissä pärjää ihan avainmerkeillä, joskin ovat monitahoiset.
Mutta tehdäänkö näillä työtä? Wolframilla tehdään. Hyvä dokumentointi:
http://www.wolfram.com/language/fast-introduction-for-programmers/en/
groovyb kirjoitti:
Whitespace dokumentointi:
Brainfuckei ainuttakaan avainsanaa. eikä edes ainutta sanaa. näissä pärjää ihan avainmerkeillä, joskin ovat monitahoiset.
Lisäys:
fergusq kirjoitti:
Ovathan erikoismerkitkin tavallaan avainsanoja.
Nämähän ne vaihtoehdot lähinnä ovat, erikoismerkkien yhdistelmiäkin kuitenkin käytetään. Tarkoitus ei ollut tutkia äärimmäisyyksiä, vaan sitä että jotakin niissä avainsanoissa on.
Minun kokemukseni wolframia työkseen käyttävistä on jokseenkin sama kuin brainfuckin ja whitespacen. Ei ole tullut ainuttakaan vastaan, koskaan.
Lisäys:
Karrikoiden, työssä vastaantulijat (työkseen koodaavat henkilöt) ovat kuuluneet johonkin näistä joukoista
C#, Java, Python, C++, VB, Ruby -koodarit (desktop, peliengine ja backend -jannut)
Lisp, F#, Haskell -koodarit (algoritmijannut, ja joo haskell on tullut vastaan)
NodeJS, ClojureScript, ReactJS etc. -koodarit (fronttarijannut)
C -ihmiset (sulautettujen systeemien jannut)
vinsentti kirjoitti:
Erikoismerkit riittäisivät avainsanojen korvikkeeksi paremmin, mutta tätä vaihtoehtoa ei ole juuri hyödynnetty. Jotain niissä avainsanoissa on.
Jos pohdit miksi avainsanoja käytetään, niin syy lienee selvä: koodi on selkeämpää. Alla on pseudokoodiesimerkki avainsanoilla ja avainmerkeillä:
unless 2 + 2 = 4 do print "jotain on vialla..." else print "kaikki ok" end ?! 2 + 2 = 4: << "jotain on vialla..." / << "kaikki ok" .
Funktionaalisissa kielissä kuten Haskellissa imperatiivisista kielistä tutut avainsanat kuten "return
" ovat funktioita, koska ne on matemaattisesti kauniimpaa määritellä siten kuin sisäänrakennettuna "taikana".
Taika on muuten mielenkiintoinen käsite: se kuvaa asioita, joita tavalliset säännöt eivät voi selittää. Ohjelmointikielten suunnittelua käsittelevissä keskusteluissa sitä on joskus käytetty vertauskuvallisesti: kieleen sisäänrakennetut säännöt ovat taikaa ja standardikirjasto taas ei ole. Javassa esimerkiksi RuntimeException on taikaa, koska ei ole mitenkään ilmiselvää, miksi sitä ei tarvitse catchata.
Ohjelmointikielien suunnittelussa pyritään usein käyttämään mahdollisimman vähän taikaa: on turhaa tehdä jostakin operaattoria, jos siitä voi tehdä standardikirjaston funktion. Smalltalkissakin käytetyt nimettömät funktiot ovat mahdollistaneet käytännössä kaikkien ohjausrakenteiden toteuttamisen standardikirjastossa. Lisp on hieno esimerkki kielestä, jossa taikaa on vältetty. Ilmeisesti Wolfram-kielessä on käytetty samanlaisia suunnitteluratkaisuja (en ole tosin tutustunut).
Onkin mielenkiintoinen kysymys, miksi kaikista avainsanoista ei sitten ole hankkiuduttu eroon. Silmukoiden kanssa eräs ongelma on juurikin return
-avainsanan toteutus (sekä break
in, continue
n yms.). Imperatiiviseen kieleen tuskin halutaan monadeja, joilla Haskell asian hoitaa. Periaatteessa silmukan vartalon ympärille voisi laittaa ehtolauseen, joka tarkistaa, onko silmukasta "poistuttu", mutta se ei olisi kovin tyylikästä.
groovyb kirjoitti:
Minun kokemukseni wolframia työkseen käyttävistä on jokseenkin sama kuin brainfuckin ja whitespacen. Ei ole tullut ainuttakaan vastaan, koskaan.
En ole myöskään tavannut. Ammattilaiset ohjelmoinevat lisää tavaraa Wolfram-yhtiön tuotteisiin. Tätä tuotteiden piirrettä sanovat "knowledge-based". Kieli on epäilemättä kilpailuetu, jota luettelemasi kielet tuskin ovat kenellekään.
Sivutoimiset ovat matemaatiikkoja ja muita ammattilaisia.
Lisäys:
fergusq kirjoitti:
Jos pohdit miksi avainsanoja käytetään, niin syy on selvä: koodi on selkeämpää.
Epäilinkin, mutta pelkäsin vastalauseita.
Esimerkiksi:
-vakiintuneet erikoismerkit
-hyvin vähän muita erikoismerkkejä
-muuten avainsanat
-ei mitään turhia
Hyvin menee Wolfram toisellakin tavalla.
Ai että luettelemani kielet eivät ole kenellekään kilpailuetu? Nyt jo naurahdin. Hyvää työuraa sinulle, olet aika yksin noiden random -kieliesi kanssa. Tästä on aiemminkin taidettu jauhaa vanhoissa keskusteluissasi. Se, että sinä et osaa jotain tai et ymmärrä, ei tarkoita etteikö muut osaa ja ymmärrä. Ihmisten aivot toimii eri tavoin toki, ja jotkut asiat on toisille loogisia ja toisille ei. Sitä tämä on, luovaa työtä missä ajattelu mallintuu koodiksi. Ja jos aivot kertoo että avainsanat on epäloogisia, tarkoittaa se sitä että pitää valita kieli jossa sellaisia ei ole. Töitä toki ei ole tarjolla, mutta saapahan omaksi iloksi askarrella,samalla ymmärtäen mitä tekee. Ja voi esittää akateemisia väittämiä, joskaan vastakaikua on turha odotella. Mutta hei, sekin on tärkeää. Mikään ei muutu jos kukaan ei kyseenalaista. Tosin itse olet muutaman vuosikymmenen myöhässä, kun ohjelmoinnissa edettiin pääsääntöisesti eri suuntiin. Funktionaalisille kielille toki on tarvetta yhä, mutta siitä ei ole hyötyä, jos avainsanojen tuomista eduista (mm luettavuus) halutaan luopua. Kuten jo aiemmin linkkasin, on kieliä joissa ei avainsanoja ole lainkaan. Miksi siis et siirtyisi niihin suoraan, jos kerran et niille etua näe?
groovyb kirjoitti:
Ai että luettelemani kielet eivät ole kenellekään kilpailuetu?
Nyt tullaan siihen, mikä kilpailuetu on. Esimerkiksi Java on monissa taloissa välttämätön. Mutta sen vain pitää kilpailijan tasalla, ei anna etua. Etu haetaan jostakin muualta.
Wolfram on suljetun lähdekoodin yksityinen kieli, jonka pelkästä suorittamisesta on tehty hyvin vaikeaa. (Ja se JavaScript-tulkki Wolframin nettisivuilla lagaa: ei kannata väittää sitä miksikään kunnolliseksi suorittamiseksi.) Miksi kukaan haluaisi opetella moista marginaalikieltä, kun siitä pitäisi vielä maksaakin?
Lisäys:
Itse en ostaisi Wolframia välttämättä edes, jos johtaisin yritystä jolla olisi varaa. Riippuvuus suljetuista ohjelmistoalustoista on aina pahasta ja vapaita ohjelmointikieliä on maailma täynnä, myös Wolframin tasoisia.
vinsentti kirjoitti:
Nyt löytyi kieli, jossa ei ole ollenkaan avainsanoja: Funktionaalinen Mathematica Wolfram. Imperatiivisuus on yhtenä piirteenä funktioiden Do, If, Return jne kautta.
Funktionaaliset kielet tarvitsevat jonkin verran vähemmän avainsanoja kuin imperatiiviset. Erikoismerkit riittäisivät avainsanojen korvikkeeksi paremmin, mutta tätä vaihtoehtoa ei ole juuri hyödynnetty. Jotain niissä avainsanoissa on.
Itse erottelisin käsitteet avainsana ja varattu sana. Monestihan avainsanat ovat varattuja sanoja, mutta tämäkin on vain parsimisen helpottamiseksi.
Puhtaassa PL/I - ohjelmointikielessähän ei varattuja sanoja ole ollenkaan (avainsanoja toki löytyy hitonmoinen määrä, mutta ne eivät ole varattuja sanoja).
jalski kirjoitti:
Itse erottelisin käsitteet avainsana ja varattu sana. Monestihan avainsanat ovat varattuja sanoja, mutta tämäkin on vain parsimisen helpottamiseksi.
Olet täysin oikeassa. Itse olen käyttänyt termejä sekaisin viesteissäni. Täytyy alkaa kirjoittaa selvemmin.
fergusq kirjoitti:
Itse en ostaisi Wolframia välttämättä edes, jos johtaisin yritystä jolla olisi varaa. Riippuvuus suljetuista ohjelmistoalustoista on aina pahasta ja vapaita ohjelmointikieliä on maailma täynnä, myös Wolframin tasoisia.
Otin Wolframin vain esimerkkinä eräästä teknisestä asiasta.
Yhtiön tuotteille ei ole vaihtoehtoja lukemattomissa niinkuin he sanovat "knowledge-based" bisneksissä. Eivätkä ne itse ole Javan vaihtoehtoja.
Onko knowledge-based == teknologialukko? Ylipäätään, miksi rajata arkkitehtuuria vain yhteen kieleen. Ne arkkitehtuurin osaset pitää tehdä sillä teknologialla joka siihen kulloinkin parhaiten soveltuu. Ei ole mitään järkeä rajata stack vaan tiettyyn teknologiaan. Mikropalveluarkkitehtuurit olisivat melkoisen koomisia, jos kaikki sidokset, kommunikaatioväylät ja palvelut tulisi tehdä aina samalla teknologialla.
Puhuin lähinnä Mathematicaa vastaavista matematiikkaohjelmista väittäessäni, että Wolframille on vaihtoehtoja. En ole perehtynyt tuohon knowledge-basediin, mutta se viitannee Wolfram-yhtiön rakentamiin melko laajoihin tietokantoihin, joihin voi tehdä kyselyitä Wolfram-kielellä. En ole tutustunut tarkemmin siihen, mistä tietokantoja voisi saada, mutta sanoisin silti, että on kestävämpi ratkaisu hankkia jostain tavallisia tietokantoja, joihin voi tehdä kyselyitä tavallisilla kielillä.
fergusq kirjoitti:
En ole perehtynyt tuohon knowledge-basediin, mutta se viitannee Wolfram-yhtiön rakentamiin melko laajoihin tietokantoihin, joihin voi tehdä kyseilyitä Wolfram-kielellä.
Aivan, ilmaus viittaa tietokantoihin, joita yhtiö toimittaa ohjelmakirjastojen tapaan. Eikä kysymys ole esim relaatiotietokannoista eikä SQLnkään kanssa kilpailevasta kielestä.
fergusq kirjoitti:
En ole tutustunut tarkemmin siihen, mistä tietokantoja voisi saada, mutta sanoisin silti, että on kestävämpi ratkaisu hankkia jostain tavallisia tietokantoja, joihin voi tehdä kyselyitä tavallisilla kielillä.
Tässä sanot, että on parempi tehdä itse.
Mutta aiheeseen palatakseni. Avainsanaohjelma on selkeämpää. Rakenteet aloitetaan avainsanalla. Rakenteiden lausekkeet ja imperatiivikielen tapauksessa komennot erotetaan toisistaan avainsanalla. Rakenteet lopetetaan avainsanaan.
vinsentti kirjoitti:
Mutta aiheeseen palatakseni. Avainsanaohjelma on selkeämpää. Rakenteet aloitetaan avainsanalla. Rakenteiden lausekkeet ja imperatiivikielen tapauksessa komennot erotetaan toisistaan avainsanalla. Rakenteet lopetetaan avainsanaan.
Näin asia on. Joitakin erikoismerkkejä toki käytetään usein avainsanojen tilalla, jos ne ovat tarpeeksi intuitiivisia. Esimerkiksi lauseet voi päättää useimmiten pisteeseen, pilkkuun tai puolipisteeseen ja lohkoja voi merkitä suluilla.
Oikeastaan olisi aika outoa päättää lause kirjaimista koostuvaan sanaan erikoismerkin sijasta. Tulee mieleen eräs ketju, jossa joku oli saanut päähänsä korvata puolipisteet makroilla C++:ssa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.