Tuli tässä mieleen, että miksi ei olla kehitetty ohjelmointikieltä joka kääntää ohjelman välikielelle ja ohjeilmointi ja testaus vaiheessa vielä välikielestä täysin tietylle koneelle optimoiduksi. Sitten, kun ohjelmaa haluttaisiin levittää tehtäisiin asennuspaketti, joka sisältäisi kääntäjän joka osaisi kääntää välikielen natiiviksi konekieleksi laitteistolle optimoituna. Tällöin lopputuloksena olisi täysin koneelle optimoitu ohjelma. Tietenkään tätä asennusohjelman tekemää ohjelmaa ei voisi jakaa kunnolla, koska se ei välttämättä toimisi erilaisella alustalla, mutta aika harva ainakaan kaupallinen ohjelma haluaisi tulla levitetyksi ympäriinsä. Jos tälläisen ohjelmatiedoston haluaisi levittää, siis vain pelkästään ohjelmatiedoston (exen), niin sen voisi laittaa pieneksi "asennustiedostoksi" joka vain kääntäisi sen alustalle sopivaksi.
Tässä mielestäni yhdistyisi JIT-kääntämisen etu eli tehokas laitteistooptimointi, sekä perinteisen valmiiksi käännetyn etu eli JIT-kääntämisen tarpeettomuus.
Tälläinen idea tuli mieleen. Onko tässä suunnitelmassa pahojakin virheitä?
Että tämä viesti ei menisi kokonaan offtopikiksi, niin vähän kommentoin KW:n kirjoitusta.
Kieltämättä oikeilla työkaluilla ja pienellä asian tuntemuksella C/C++:san käyttö ei loppujen lopuksi ole niin vaikeata. Ja vaikka Windowsia käytänkin, niin täytyy peesata KW:ta tuossa linuksin eduissa ohjelmoinnissa. Sillä ei kaiketi ainakaan KW:n hehkutuksen mukaan tarvitse huolehtia kaiken maailman poluista kirjastoille ja headereille, mikä on kyllä selvästi Windows + C/C++ yhdistelmän heikkous.
Ja olen kyllä myös samoilla linjoilla KW:n kanssa myös roskien keräyksen suhteen. Ei se ole niin vaikeata laittaa yhtä riviä koodia johonkin destruktoriin tai funktioon, jolla se yksi varattu muistin pätkä saadaan poistettua. On vastuutonta jättää tavaraa ympäriinsä ja olettaa, että muut keräävät (mikä kyllä tietysti on ideana roskien keräyksessä). On paljon helpompaa heittää se itse roskiin. Tämä pätee myöskin oikeassa elämässä eikä vain koodaamisessa.
Olen huomannut tälläisen jutun, mikä tuntuu pätevän ainakin ohjelmointikieliin: Jos jokin on suunniteltu helpoksi, niin sillä on helppo tehdä helpot asiat. Mutta kun helpoksi suunnitellulla koitettaan tehdä jotain monimutkaista ja haastavaa, niin asia muuttuukin todelliseksi kikailuksi ja asiasta tulee hankalempaa kuin pitäisi. Vaikeammilla ja yleispätevimmillä asioilla taas on yhtä tasaisen helppo tai vaikeata tehdä asiat oli se itse asia hankala ja monimutkainen tai sitten helppo.
C/C++:n oleminen varsin matalantasonkieli suhteessa nyt esimerkiksi Javaan on sekä sen etu että haitta. C/C++:ssa on monia ominaisuuksia joita Javassa ei ole, mutta Javassa taas monet asiat on tehty helpommiksi kuin C/C++:ssa, osaksi tosin syynä on C/C++:n vanhuus. C/C++:ssa on mahdollista sorkkia asioita (sekä hyvässä että pahassa) joihin Javalla ei ole mahdollista päästä. C/C++:n yksi suurimmista vahvuuksista on tietysti se että se on muodostunut jonkinlaiseksi standardiksi. On hyvin vähän asioita, mihin ei löytyisi kirjastoa C/C++:n puolelta, mutta jostain muusta ohjelmointikielestä löytyisi.
Huhuh... Tulipas pitkä viesti. Olenkohan koskaan kirjoitanut tänne näin pitkää viestiä. Toivottavasti tähän mahtui jotain asiaakin.