Mietiskeltiin tuossa parin opiskelijakaverin kanssa sitä, mistä/kenen keksintöä ovat tietyt lähes kaikissa ohjelmointikielissä olevat yhteiset "standardimerkinnät", kuten esimerkiksi se, että rivin lopussa käytetään puolipistettä? Mikään ei varmaan olisi estänyt aikaan valitsemasta siihen käyttöön vaikkapa pykälä-merkkiä, jos oltaisiin haluttu.
Tai miksi esim. for- ja muiden vastaavien silmukkarakenteiden yhteydessä käytetään juuri aaltosulkuja, miksei vaikkapa hakasulkuja?
Osaisiko joku antaa näille valinnoille jonkin sattumaa paremman perustelun?
Kieltämättä kyseessä on juuri "standardimerkinnät", koska onhan olemassa monia muitakin kieliä, joissa ei käytetä juuri mainitsemiasi "standardeja". Ensimmäisenä tulee tietenkin mieleen Basicit ja Python:
' VB.NET Print "Luvut välillä 0-10" For i = 0 To 10 Print i Next i Print "Valmis"
# Python print("Luvut välillä 0-10") for i in range(0, 11): print(i) print("Valmis")
Vertaa
// C++ #include <iostream> int main() { std::cout << "Luvut välillä 0-10" << std::endl; for (int i = 0; i <= 10; i++) { std::cout << i << std::endl; } std::cout << "Valmis" << std::endl; }
Kuitenkin huomaamillesi yhtäläisyyksille on myös olemassa selitys: nimittäin se, että ohjelmointikielten tekijät lainaavat hyviksi todettuja käytäntöjä toisista kielistä (esimerkiki puolipisteet ja aaltosulut C++:sta Javaan) tai haluavat laajentaa vanhaa kieltä, jolloin on selvästikin hyvä yrittää säilyttää mainitsemasi tyyliseikat (esimerkiksi C ja C++ muistuttavat toisiaan tästä syystä). Tästä syystä voidaankin puhua "ohjelmointikielisuvuista" kuten Basic-kielet tai C-kielet, joiden sisällä kielien välillä on yhtäläisyyksiä, mutta joiden välillä yhtäläisyyksiä onkin enää vähemmän.
Onhan sama myös huomattavissa luonnollisissa kielissä: viro kuulostaa tutulta, mutta sanoista ei vaan saa selvää, sillä sekä suomi että viro kuuluvat suomalais-ugrilaisiin kieliin. Toisaalta taas ruotsi ja norja kuulostavat suomalaisesta hyvinkin etäisiltä ja erilaisilta, vaikka ruotsalaiset ja norjalaiset jopa ymmärtävät toisiaan: ovathan ruotsi ja norja molemmat pohjoisgermaaniseen ryhmään kuuluvia kieliä.
Monien merkkien valinta liittyy luultavasti siihen, että ne ovat yhdysvaltalaisessa näppäimistössä helpossa kohdassa. Toisaalta ASCII-merkistössä ei edes ole kovin monta eri merkkiä.
Osittain piirteitä on vain kopioitu kielestä toiseen, kuten C-kielestä moneen muuhun. Mutta toki niillä on jotkin alkuperäiset syynsä.
Lähtökohtana oli Ascii-merkistö, koska muutakaan ei ollut (sen enempää merkistökoodauksessa kuin näppäimistöissäkään). Kirjaimille ja numeroille oli omat tehtävänsä, jolloin jäljelle jäi aika vähän merkkejä. Kun piste tarvittiin desimaalipisteeksi ja pilkkua oli luonnollista käyttää muun muassa argumenttien erottimena, niin lauseiden erottimeksi (tai lopettimeksi) ei ollut tarjolla juuri muuta kuin puolipiste.
Toki olisi voitu yliladata esimerkiksi piste niin, että sitä käytetään sekä lauseen lopussa että desimaalipisteenä, kuten normaalissa englannissa. Siitä olisi ollut omat ongelmansa esimerkiksi silloin, kun lause loppuu lukuun. Lisäksi jäsennys on helpompi tehdä, jos esimerkiksi pisteellä on aina sama merkitys.
Tavallisia sulkeita käytetään lausekkeiden ryhmittelyyn kuten matematiikassa, ja hakasulkeita usein taulukoiden yhteydessä. Jos sitten halutaan vielä yhdenlaisia sulkeita, esimerkiksi lauseiden ryhmittelyyn, ei ole muutakaan vaihtoehtoa kuin aaltosulkeet.
LCHawk kirjoitti:
Mietiskeltiin tuossa parin opiskelijakaverin kanssa sitä, mistä/kenen keksintöä ovat tietyt lähes kaikissa ohjelmointikielissä olevat yhteiset "standardimerkinnät", kuten esimerkiksi se, että rivin lopussa käytetään puolipistettä?
Puolipisteet ja aaltosulut ovat peräisin jostain 60-luvulta, Wikipediasta voi aloittaa tutkimisen jos kiinnostaa. Ainakin C:n edeltäjä B on syntaksiltaan edelleen hyvin tutun näköinen ja PL/I käytti myös puolipisteitä.
Jotkut kielet käyttävät aaltosulkujen sijaan avainsanoja kuten begin/end ja joissain kielissä puolipisteen tilalla on piste tai rivinvaihto. Mutta nykyään C-sukuiset kielet ovat tosiaan suosiossa.
Yucca kirjoitti:
Lähtökohtana oli Ascii-merkistö, koska muutakaan ei ollut (sen enempää merkistökoodauksessa kuin näppäimistöissäkään).
Milloin ei ollut muutakaan kuin Ascii? Minulla tulee mieleen monia ohjelmointikieliä, jotka eivät pohjaudu Asciihin, ensimmäisenä APL.
fergusq kirjoitti:
Yucca kirjoitti:
Lähtökohtana oli Ascii-merkistö, koska muutakaan ei ollut (sen enempää merkistökoodauksessa kuin näppäimistöissäkään).
Milloin ei ollut muutakaan kuin Ascii?
Silloin kun suunniteltiin ne ohjelmointikielet, joista puheena olevat käytännöt on sittemmin omaksuttu muihin kieliin. Erityisesti C suunniteltiin vuosina 1969–1973, jolloin meidän tuntemamme Ascii oli nuori (vuodelta 1968).
lainaus:
Minulla tulee mieleen monia ohjelmointikieliä, jotka eivät pohjaudu Asciihin, ensimmäisenä APL.
Ja toisena...? APL on ekstravagantti poikkeus, ja sen merkkivalikoima on aina ollut yksi sen suurimmista ongelmista. Toki nykyisin on monessakin kielessä mahdollista käyttää muita kuin Ascii-merkkejä tunnuksissa (ja tietysti merkkijonoliteraaleissa), mutta harvassa ovat kielet, joissa kielen rakenteellisissa perussymboleissa käytettäisiin muita kuin Ascii-merkkejä – edes operaattorisymboleissa, saati sitten sellaisessa käytössä, mistä tässä on puhe, kuten erottimina lauseiden välissä.
Yucca kirjoitti:
Ja toisena...?
ALGOL.
Yucca kirjoitti:
harvassa ovat kielet, joissa kielen rakenteellisissa perussymboleissa käytettäisiin muita kuin Ascii-merkkejä
Totta. :( Nykyään ei käytetä kunnolla hyväksi sellaisia ihan tavallisia merkkejä kuten –, ¿, ‰, £, ¤, « ja ». Puhumattakaan suuresta määrästä matematiikkaan ja muihin tieteisiin liittyviä merkkejä, joita juuri algol ja apl käyttävät: ×, ÷, ≤, ≥, ≠, jne... Nykyaikana näppäimistöt tai fontit eivät ole enään sellainen ongelma kuin ennen: tuskimpa olisi kovin vaikeaa muuttaa näppäimistöasettelua tukemaan tarvitsemiaan merkkejä.
قلب -kieli on aika mukava.
Yucca kirjoitti:
APL on ekstravagantti poikkeus, ja sen merkkivalikoima on aina ollut yksi sen suurimmista ongelmista.
Ongelman suuruudesta kertoo paljon se, että kun kielen alkuperäinen kehittäjä suunnitteli APL:n seuraajaa J:tä, hän päätti pitäytyä ASCII-merkistössä.
Nykyaikaisista kielistä ainakin Haskell tukee Unicode-vastineita joillekin merkinnöille, mutta perinteinen ASCII on silti ylivoimaisesti suositumpi.
fergusq kirjoitti:
Yucca kirjoitti:
Ja toisena...?
ALGOL.
Algolissa oli periaatteessa kourallinen ei-Ascii-merkkejä, mutta käytännön toteutuksissa ne lähes aina korvattiin muilla merkinnöillä, kuten ∨ ja ∧ sanoilla OR ja AND – tai pienessä määrin merkkiyhdistelmillä /\ ja \/, joissa käytetty kenoviiva lisättiin Asciihin juuri siksi, että voitiin käyttää näitä yhdistelmiä (joita sitten käytettiin aika harvoin). Tämäkin osoittaa, miten ongelmallista merkistön laajentaminen oli: yhdelle lisämerkille löytyi paikka, mutta ei nyt sentään kahdelle, saati useammalle.
lainaus:
Yucca kirjoitti:
harvassa ovat kielet, joissa kielen rakenteellisissa perussymboleissa käytettäisiin muita kuin Ascii-merkkejä
Totta. :( Nykyään ei käytetä kunnolla hyväksi sellaisia ihan tavallisia merkkejä kuten –, ¿, ‰, £, ¤, « ja ». Puhumattakaan suuresta määrästä matematiikkaan ja muihin tieteisiin liittyviä merkkejä, joita juuri algol ja apl käyttävät: ×, ÷, ≤, ≥, ≠, jne... Nykyaikana näppäimistöt tai fontit eivät ole enään sellainen ongelma kuin ennen: tuskimpa olisi kovin vaikeaa muuttaa näppäimistöasettelua tukemaan tarvitsemiaan merkkejä.
Voisin kertoa tarinan siitä, miten vaikea näppäimistöasettelujen muuttaminen todellisuudessa on. Vuonna 2006 määriteltiin ja vuonna 2008 standardoitiin suomalainen monikielinen näppäimistöasettelu, joka sopii erittäin hyvin kaikkien Euroopassa käytettyjen latinalaisten kirjainten kirjoittamiseen. Määrittelytyö oli jokseenkin vaikeaa, tekninen toteutus on alle tunnin juttu, mutta yrittäkääpä saada tulokset käyttöön. Tätä asettelua, joka on ainoa Suomessa voimassa oleva kansallinen näppäimistöstandardi, ei edelleenkään tule esimerkiksi Windowsin mukana edes valinnaisena, saati oletusarvona. Yksittäinen käyttäjä voi tietysti hankkia ja asentaa sen, mutta tämä on ihan eri asia kuin sen saaminen yleiseen käyttöön.
Olisi täysin mahdollista suunnitella näppäimistöasettelu, jolla voi kirjoittaa melko luonnollisella tavalla suurenkin määrän erikoismerkkejä. Ei kuitenkaan helppoa. Ja vielä paljon vaativampaa olisi saada sellainen (valinnaisena) yleiseen käyttöön maailmassa (jossa on paljon erilaisia fyysisiä näppäimistöjä).
Ja tuskinpa olisi helppoa saada ohjelmoijia kirjoittamaan a × b – c ≤ d, etenkin kun se vaatisi uuden opettelua ja kun niin moni kysyisi, miksi niin pitäisi tehdä, kun a * b - c <= d toimii ihan hyvin.
Yucca kirjoitti:
Olisi täysin mahdollista suunnitella näppäimistöasettelu, jolla voi kirjoittaa melko luonnollisella tavalla suurenkin määrän erikoismerkkejä. Ei kuitenkaan helppoa. Ja vielä paljon vaativampaa olisi saada sellainen (valinnaisena) yleiseen käyttöön maailmassa (jossa on paljon erilaisia fyysisiä näppäimistöjä).
Ja tuskinpa olisi helppoa saada ohjelmoijia kirjoittamaan a × b – c ≤ d, etenkin kun se vaatisi uuden opettelua ja kun niin moni kysyisi, miksi niin pitäisi tehdä, kun a * b - c <= d toimii ihan hyvin.
Minun näppäimistössäni saa ×-merkin, kun painaa AltGr+X ja –-merkin, kun painaa AltGr+-
oletuksena. En tiedä tarkkaan mikä ohjelma näistä huolehtii, mutta luultavasti jostain asetustiedostosta voi säätää helposti näppäinyhdistelmiä. Jos olisi tarvetta (mitä ei harmi kyllä ole, kiitos mainitsemiesi seikkojen), vaihtaisin heti muutamia näppäimiä. Esimerkiksi AltGr+C tai AltGr+V eivät tee mitään. Jos näihin "tyhjiin" paikkoihin laittaisi merkit ÷, ≤, ≥ ja ≠ voisi kirjoittaa jo melko täydellisiä yhtälöitä.
Olet kyllä oikeassa että kaikkiin koneisiin samoja yhdistelmiä ei saa. Tämä on välillä todella ärsyttävää, kun vaikka haluaisi tehdä ŋ-merkin, jonka kotona saa AltGr-N:llä, mutta koulussa se pitää etsiä jollakin Windowsin "lisää merkki" -toiminnolla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.