Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Avainsanat

Sivun loppuun

vinsentti [14.02.2017 11:14:15]

#

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.

fergusq [14.02.2017 16:01:15]

#

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.

groovyb [14.02.2017 17:46:38]

#

Whitespace
Brainfuck

ei ainuttakaan avainsanaa. eikä edes ainutta sanaa. näissä pärjää ihan avainmerkeillä, joskin ovat monitahoiset.

vinsentti [14.02.2017 18:33:43]

#

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:
Brainfuck

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

groovyb [14.02.2017 18:55:45]

#

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)

fergusq [14.02.2017 19:15:20]

#

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ä breakin, continuen 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ä.

vinsentti [14.02.2017 19:39:10]

#

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.

groovyb [14.02.2017 20:07:54]

#

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?

vinsentti [14.02.2017 20:20:17]

#

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.

fergusq [14.02.2017 20:20:46]

#

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.

jalski [14.02.2017 20:22:39]

#

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

fergusq [14.02.2017 20:29:14]

#

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.

vinsentti [14.02.2017 20:36:51]

#

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.

groovyb [14.02.2017 21:16:11]

#

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.

fergusq [14.02.2017 21:40:31]

#

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

vinsentti [15.02.2017 08:16:03]

#

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.

fergusq [15.02.2017 09:52:08]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta