Page 1 of 4

CoolBasic Classic: Esittely

Posted: Sat Oct 31, 2009 9:41 pm
by Zero
CoolBasic Classic
Attention:

PÄIVITYS 28.1.2010:
DevTeamin on kasassa ja kehitys on meneillään!

Ensinäkin, tämä oli puhtaasti harkittu ja strateginen päätös. Alkuperäinen idea on vellonut mielessäni pitkän aikaa, ja viime Assemblyjen aikoihin päätin toteuttaa suunnitelmani. Ja hyvin se onkin pysynyt salassa tähän asti. Tämä uutinen ilahduttanee CoolBasic:n nykyistä käyttäjäkuntaa:

CoolBasic Classic on kehitteillä. Se on proseduraalinen kieli nykyisen CoolBasic:n tapaan ja se tulee ilmestyessään korvaamaan sen. CoolBasic Classic julkaistaan lisäksi ennen CoolBasic V3:sta.

Huhuja nykyisen CoolBasic:n jatkokehityksestä on liikkunut niin kauan kuin sitä on minulta pyydettykin. Erityisenä huolenaiheena on ollut nykyisen CoolBasic:n katoaminen CoolBasic V3:n tieltä. Joitakin käyttäjiä ajatus oliopohjaisuudesta pelottaa. Eikä ihme, sillä onhan siirtyminen proseduraalisesta kielestä olioihin valtava. Samalla alkuperäisen CoolBasic:n perusajatus, eli ”helppo ohjelmointikieli pelintekoon”, vaarantuu. Oppimiskäyrä oliokielissä on huomattavasti jyrkempi, joten olen päättänyt että tästä eteenpäin tarjolla on sekä proseduraalinen (CoolBasic Classic) että oliopohjainen vaihtoehto (CoolBasic V3). Kumpaakin ylläpidetään ja kehitetään säännöllisesti. Näin ollen ei ole väliä pitääkö enemmän tästä klassisesta ohjelmoinnista vai oliokielien herkuista. Olio-ohjelmoijat eivät ole sen parempia kuin proseduraalisten kielien ohjelmoijat – eivät välttämättä edes taitavampia. Ohjelmointitaitoa ei kasvata se, että osaa kirjoittaa ”Class”. En voi pakottaa ketään muuttamaan ohjelmointitottumuksiaan tappamalla edellisen työkalun uuden tieltä, joten nyt käyttäjillä on valinta. Tämän päätöksen takana on paljon muitakin syitä, mutta ne varmaankin valkenevat lopulta itse kullekin.

Nykyinen CoolBasic (Beta 10.x) kokee siis täydellisen uudelleentoteutuksen. Koodieditori menee uusiksi. Kääntäjä menee uusiksi. Virtuaalikone menee uusiksi. Manuaali menee uusiksi. Lisäksi coolbasic.com:sta tehdään oikea portaali ja foorumi kokee rakenteellisia uudistuksia. Tästä eteenpäin kaikki sisältö joka paikassa on saatavilla sekä englanniksi että suomeksi (esimerkiksi kansainvälinen foorumi tulee olemaan erillään suomenkielisestä yhteisöstä). Kaikkeen tähän menee kuitenkin niin tajuttomasti työtä, että minulla ei millään riitä siihen rahkeet yksinään. Senpä vuoksi kokoan DevTeamin, jonka jäsenille jaetaan omat tehtävät ja vastuualueet. Alempana on kerrottu tarkemmin eri uudistuksista.

Kieli ja syntaksi
Pähkinänkuoressa CoolBasic Classic pysyy kielellisestä lähes ennallaan. Joitakin ominaisuuksia poistetaan käytöstä, toisia viritellään ja parannetaan. Käyttäjien pitäisi kuitenkin pystyä uudelleenkirjoittamaan vanhalla versiolla tehdyt pelit melko vähällä vaivalla. Uudelleensuunnittelu vaikuttaa kuitenkin jonkin verran syntaksiin ja komentoihin. Tämä on kuitenkin välttämätöntä, jotta suunnitellut uudet ominaisuudet ja komennot saataisiin mukaan mahdollisimman järkevästi ja yhtenäisellä tavalla. Juuri tällaisten muutosten suunnitteluun tarvitsen muidenkin mielipiteitä, ja siksi haluan DevTeamiin suunnittelijoita. Yhden miehen mielipide ei välttämättä ole se loppujen lopuksi paras päätös.

Sisäänrakennetut tietotyypit pysyvät aika lailla samoina, mutta liukuluvut ovat nyt 64-bittisiä. Suunnittelussa on lisäksi otettu huomioon myös 64-bittisten kokonaislukujen mahdollinen lisääminen myöhemmin. Lisäksi tyypitys on nyt hieman vahvempi, ja on mahdollista esitellä omantyyppisiä taulukoita ja funktioita. Funktiot voivat ottaa tyypitettyjä parametreja ja taulukoita. Käytännössä rajoitukset tyyppien käytön suhteen katoavat. Nyt on myös mahdollista ylikuormittaa funktioita. Jatkossa kieleen voidaan lisätä helposti uusia rakenteita, esimerkiksi numeraatiot ja ylikuormitetut operaattorit.

Kääntäjä
Uusi kääntäjä on jo reippaasti yli puolen välin valmis. Se myös lainaa teknologiaa V3-kääntäjästä, ja nyt onkin jännittävää seurata miten V3-kääntäjään lupaamani muutokset toimivat käytännössä. Classic toimii loistavasti testimielessä kun kokonaisuus ei ole ihan yhtä monimutkainen kuin V3. Koska CoolBasic Classic on proseduraalinen kieli, käännösprosessi on huomattavasti yksinkertaisempi ja siten nopeampi. Uusi Classic-kääntäjä on satoja kertoja nopeampi nykyiseen verrattuna! Muutama kymmenen tuhatta koodiriviä kääntyy niin sukkelasti, ettei sitä ehdi huomaamaan.

Uusi kääntäjä on yksinkertaisesti parempi kaikilla osa-alueilla. Siinä on mm. paljon kehittyneempi jäsennysmekaniikka, joten oudot jäsennysvirheet (joista ei välttämättä tule edes virheilmoitusta) tietynlaisilla lausekerakenteilla ovat historiaa. Esimerkiksi nyt on mahdollista määritellä Dim-, Global- ja Const-lausekkeille useita uusia tunnisteita, ja ne voidaan jopa alustaa samassa lausekkeessa. Muutkin rajoitukset ovat poistuneet, niistä luultavasti kuuluisampana legendaarinen funktioraja (nyt ei tarvitse enää haxxata *köh*). V3-kääntäjän tapaan Unicode-merkitsöt on nyt täysin tuettu, ja kääntäjän arkkitehtuuri tukee periaatteessa 64-bittistä alustaa. CoolBasic V3:n tavoin tämä uusi Classic-kääntäjä on konsolisovellus, ja sitä on helppo kutsua muualtakin kuin CoolBasic:n omasta editorista.

Virtuaalinen ajoympäristö
CoolBasic pysyy tulkattuna kielenä, joskin uusi virtuaalikone on monta kertaa nopeampi. Uutta virtuaaliympäristöä kutsutaan termillä CoolVES (Cool Virtual Execution System). Se on valmis pelimoottori, joka tarjoaa mm. grafiikka-, ääni-, syöte-, ja nettipalvelut. Näiden lisäksi se tarjoaa valmiit palvelut kehittyneemmille pelimekaniikkaominaisuuksille (kuten fysiikkakirjasto, ehkä). CoolVES on täysin Windows Vista/7-yhteensopiva eikä se aiheuta enää AeroGlass:n alustusta. Grafiikkamoottori pohjautuu DirectX 9:ään, mutta tulee todennäköisesti olemaan vaihdettavissa OpenGL:ään. Lisäksi nyt päästään eroon FMOD-äänikirjastosta ja sen lisenssisotkuista. Sovellusten koko todennäköisesti pienenee ja niiden kuvakkeita voi vaihtaa ilman UPX-kikkailua siinä välissä.

Ajoympäristön tulkkaaman tavukoodin rakenne dokumentoidaan julkisesti (tämäkin voi sitten muuttua tulevaisuudessa). Periaatteessa kuka tahansa voi silloin kirjoittaa sille oman kääntäjän. Olisi hienoa jos joskus nähtäisiin CoolC#, CoolJavaScript, CoolPython tai vaikkapa CoolPHP. Kielestä riippumatta ne voivat kaikki hyödyntää CoolVES:n tarjoamat pelimoottorin palvelut.

Manuaali
Uudessa käyttöoppaassa on panostettu ulkonäköön, luettavuuteen, selaamisen helppouteen ja tiedon etsinnän tehokkuuteen. Siinä tulee lisäksi olemaan enemmän sisältöä (ja tähänkin tarvitsen DevTeamin apua). Nykyisen manuaalin ulkonäkö on liian ”ysäriä”, sen kaikki tieto on käsin html-koodiin väännetty eikä siinä muutenkaan ole ylläpidettävyyden häivääkään. Uusi manuaali pohjautuu tietokantaan, jolle olen jo suunnitellut rakenteen. Lisäksi siihen voi liittää vuorovaikutteista sisältöä. Rakenne ei ole sama mitä CoolBasic V3:n manuaalissa (niille, jotka ovat blogiani seuranneet), mutta manuaalin täydellinen uudelleenjärjestäminen on väistämättä edessä. Toivon saavani DevTeamilta näkemyksiä manuaalin suunnitteluun ja kehittämiseen.

Koodieditori
Tavoitteena on luoda yhtenäinen kehitysympäristö kaikille CoolVES:iä tukeville kielille ja CoolBasiciin liittyville kehitystyökaluille (mukaan lukien V3). Käyttäjä luo uuden projektin valitsemalla halutun kielen tai työkalun. Kaikki pelit perustuvat projektitiedostoihin, joihin kuuluu lähdekoodin lisäksi mm. pelin lataamat mediatiedostot (kuvat, äänet jne.) Toki CoolBasic Classicin tapauksessa tiedostot pitää sisällyttää IncludeFile-komennolla, mutta projektilähtöisyydessä on paljon etuja kokonaisuuden hallintaan liittyen. Tässä vaiheessa en ota projektinhallintaan sen enempää kantaa, koska tarvitsen tähänkin asiaan DevTeamilaisten mielipiteitä.

Periaate on se, että kaikki työkalut ja asennetut ohjelmointikielet toimivat kehitysympäristössä moduuleina, joita voidaan asentaa, poistaa ja päivittää yksitellen ja täysin automaattisesti. Kuvitelkaa esimerkiksi pelivelho-työkalu, joka joko generoi pelin lähdekoodin halutulla kielellä valmiiksi tai rakentaa lopullisen pelin perustuen käyttäjän valintoihin ilman että tarvitsee kirjoittaa riviäkään koodia.

Koodin editointikomponentti vaihdetaan myös hieman modernimpaan. Nykyiseen verrattuna kaivatuimpia ominaisuuksia ovat esimerkiksi parempi koodinvärjäys, refaktorointi ja Intellisense. Mitä miellyttävämpää koodin kirjoittaminen on, sen tuottavampi on itse koodaaja.

DevTeam
Kokonaisuus on niin laaja, etten selviä siitä yksin (ainakaan käytettävissä olevan ajan puolesta). Niinpä vielä tämän vuoden aikana laitetaan pystyyn CoolBasic-organisaatio, jolla on selkeä hierarkia ja jonka jäsenillä on selkeät tehtävät ja vastuualueet. Etsin vapaahehtoisia, jotka ovat valmiita kantamaan vastuuta. Paikkoja on auki mm. suunnittelijoille, kehittäjille ja web-ohjelmoijille. DevTeam pääsee käsiksi luottamukselliseen materiaaliin, esimerkiksi lähdekoodeihin, kantadumppeihin ja teknisiin dokumentaatioihin. Kaikkien oletetaan kantavansa vastuuta tekemisistään ja hoitavansa heille annetut tehtävät. Heillä tulee olla kiinnostusta CoolBasiciin ja tuoteperheen kehittämiseen. DevTeamilaisen ei tarvitse olla mestarikoodaaja - tarvetta on yhtälailla myös suunnittelijoille ja sisällöntuottajille. Jos haluat tähdätä korkealle (sarjassa The Game Creators, GameMaker, jne) niin silloin olet hakemamme henkilö. DevTeamista, sen tehtävistä ja siihen hakemisesta tulee erikseen lisätietoa myöhemmin tälle foorumille.

Dokumenttihallinta
Viime viikot olen kehittänyt nettipohjaista dokumentinhallintajärjestelmää. Vieraat pääsevät käsiksi julkiseksi luokiteltuihin dokumentteihin, mutta DevTeamilainen voi logata sisään, ja päästä käsiksi luottamukselliseen materiaaliin: lähdekoodeihin, tietokantoihin, työkaluihin ja tiettyihin dokumentteihin. Sivuston toteutus on jo lähes valmis.

TLDR: Nykyinen CoolBasic tehdään uudestaan - kokonaan. Se ilmestyy ennen V3:sta. Lisätietoa DevTeamista tulee myöhemmin.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 1:03 am
by Dibalo
Onnea projektiin! On hienoa kuulla, että vielä riittää intoa. :)

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 9:27 am
by 11v
Jihaaa....... Vihdoin aloitettiin helpomman coolbasicin tekeminen verratuna V3, toivottavasti se valmistuu ennen joulua.

Edit. Muokkasin lausetta.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 9:38 am
by Awaclus
11v wrote:Jihaaa....... Vihdoin aloitettiin helpomman coolbasicin tekeminen, toivottavasti se valmistuu ennen joulua.
Missä sanottiin, että tuo on helpompi? Ei minusta missään.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 9:44 am
by 11v
Chaosworm wrote:
11v wrote:Jihaaa....... Vihdoin aloitettiin helpomman coolbasicin tekeminen, toivottavasti se valmistuu ennen joulua.
Missä sanottiin, että tuo on helpompi? Ei minusta missään.
Se ainakin kuulostaa helpommalta, kuin V3. (2d vai 3d)

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 9:48 am
by Awaclus
11v wrote:
Chaosworm wrote:
11v wrote:Jihaaa....... Vihdoin aloitettiin helpomman coolbasicin tekeminen, toivottavasti se valmistuu ennen joulua.
Missä sanottiin, että tuo on helpompi? Ei minusta missään.
Se ainakin kuulostaa helpommalta, kuin V3. (2d vai 3d)
No olisit sanonut, että et puhukaan beta kympistä :D

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 10:01 am
by Jurri3
Hienolta kuulostaa ja onnea kehitykseen!

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 11:47 am
by kaneli2000
Hienolta kuulostaa juu. En nyt jaksanut plärätä koko novelliviestiä läpi, mutta kai uusi CB on nopeampikin kuin nykyinen? Olettaisin että on, jos koko roksa laitetaan uusiksi.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 12:27 pm
by Koodiapina
Minun mielestäni nykyisen CoolBasicin suurin valttikortti ei ole helppous, vaan yksinkertaisuus (kyllä, ne ovat eri asioita). Mahdollisuus saada hienoa jälkeä aikaan vain muutamilla kymmenillä riveillä on ominaisuus josta kannattaa pitää kiinni.
kaneli2000 wrote:Hienolta kuulostaa juu. En nyt jaksanut plärätä koko novelliviestiä läpi, mutta kai uusi CB on nopeampikin kuin nykyinen? Olettaisin että on, jos koko roksa laitetaan uusiksi.
Jukka 'Zero' Lavonen wrote:CoolBasic pysyy tulkattuna kielenä, joskin uusi virtuaalikone on monta kertaa nopeampi.
Jos haluaa pitkistä viesteistä löytää jotain tiettyä, kannattaa kokeilla CTRL + F:llä. Tuo lause löytyi avainsanalla "nopeampi".

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 12:52 pm
by Pettis
Kaikkea sitä tänne foorumeille ilmestyykin kun sitä vähiten odottaa. Kuulostaa hienolta, Zero. Toivottavasti into jatkaa säilyy ja aikaakin löytyy.
kaneli2000 wrote:Hienolta kuulostaa juu. En nyt jaksanut plärätä koko novelliviestiä läpi, mutta kai uusi CB on nopeampikin kuin nykyinen? Olettaisin että on, jos koko roksa laitetaan uusiksi.
Et jaksanut lukea viestiä ja silti esität kysymyksiä aiheesta? Jos olisit lukenut sen, ei sinun olisi tarvinnut kysellä, sillä vastaus on tuolla.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 1:12 pm
by JATothrim
Ahh.. :D Pysyhän maanpinnalla Zero... Muuten mahtava uutinen! (luin kokohoidon ensin englanniksi ja sitten suomeksi kun huomasin linkin :3)
Ja jotain pitää teknistä mainita nyt... saadaanko CoolVES:iin Inline Assembly mahdollisuus? :P Siis tavukoodin kylkeen voisi iskeä 100% asseblykoodia, esim super nopean-custoom filleri funkarin? Keksin nimittäin kuinka tämä voidaan toteuttaa. Asm käännetään erikseen ja ympätään .exe:en esim. tavukoodin jälkeen (tai minne lystätäänkin) Kieleen tulisi sitten komennot:
AsmBegin, AsmLoadVar, AsmSaveVar ja AsmEnd. AsmBegin (tästä eteenpäin asm juttua) lataa rekisterit niin, että tulkki ei häiriinny sen jälkeen olevasta koodista ja suorittaa hypyn AsmBegin jälkeen tulevaan koodiin. Nyt ohjelma ei enää käytä tulkkia.
AsmBegin voi välittää dataa koodille esim. pinon kautta tai varaamalla lohkon heapista annetuille muuttujille. AsmLoadVar muuttuja, [rekisteri] lataa datan tulkin hallintaan. Tätä komentoa ei tulkata, koska eihän tulkki ole edes käynnissä vielä. ;) Samalla tavalla AsmSaveVar pujottelee tulkin muuttujien ja puhtaiden rekisterin välillä. AsmEnd palaa koodista taas tulkiin ja suoritus jatkuu. Perättäiset AsmSaveVar ja AsmLoadVar käännetään pötköön niin, että dataa siirretään raa'alla voimalla tulkiin/tulkista.
pseudo-koodia:

Code: Select all

img = loadimage("kuva.png")
lighten% = 15
ptr = ImageDataPtr(img)
size% = imagewidth(img) * imageheight(img)
AsmBegin lighten, size, ptr
    pop eax
    pop ecx
    pop ebx
    light_pixels: 
            mov edx,[eax]
            add edx, ebx
            mov edx, [eax]
            add eax, 4
    loop light_pixels
AsmEnd 

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 3:12 pm
by Dibalo
JATothrim wrote:... saadaanko CoolVES:iin Inline Assembly mahdollisuus? :P ...
Menee kyllä sellaiseksi virittelyksi, että helpompi vaan tehdä C/C++:lla dll-kirjasto ja iskeä tuo ASM-koodi sinne. Sitten kutsua DLL:n funktiota suoraan koodista. Uskoisin kuitenkin uudessa CB:ssä olevan paljon aikaisempaa parempi dll-tuki.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 7:52 pm
by 11v
JATothrim wrote:...idea...
Toihan on hyvä idea\ajatus.

Re: CoolBasic Classic

Posted: Sun Nov 01, 2009 8:06 pm
by esa94
Loistavaa! Harmi, että tämä tuskin valmistuu jouluksi :P

Re: CoolBasic Classic

Posted: Mon Nov 02, 2009 1:32 pm
by axu
Zero @ Coolbasic V3 wrote:Luottavaisin mielin 2009 :)
Jos CBV3:sen aikaraja pitää vieläkin kutinsa, niin tämänhän pitäisi tulla kanssa 2009 :P

Tuli muuten tosta manuaalin etsimistoiminnosta mieleen, että se voisi hakea tietoa myös foorumeilta(kun melko harva "osaa" käyttää sitä :D ). Näin vältyttäisiin useilta kysymysketjuilta, joihin on vastattu jo monia kertoja :)
EDIT:

@kaneli2000: Totta, mutta olisi kai Zero muuttanut tätä tietoa, jos julkaisu olisi siirtynyt huomattavasti myöhempään(varsinkin viestin nimen muuttamisen yhteydessä)?
No, en mene enempää pohtimaan noita julkaisuajankohtia, tärkeinhän on että tälläistä nannaa on tulossa :P


Re: CoolBasic Classic

Posted: Mon Nov 02, 2009 4:43 pm
by kaneli2000
axu wrote:
Zero @ Coolbasic V3 wrote:Luottavaisin mielin 2009 :)
Jos CBV3:sen aikaraja pitää vieläkin kutinsa, niin tämänhän pitäisi tulla kanssa 2009 :P
Zero @ CoolBasic V3 wrote:Päivitetty 4.5.2009
HUOM! Kaikki tässä ketjussa esitetty tieto voi muttua milloin tahansa.
I rest my case.

Re: CoolBasic Classic

Posted: Mon Nov 02, 2009 6:07 pm
by temu92
Aikas mielenkiintonen juttu :P Toisaalta kiinnostais kyllä DevTeami, ehkä suunnittelu/web-ohjelmointi mutta en tiedä vielä miten se sitten.

Re: CoolBasic Classic

Posted: Mon Nov 02, 2009 6:07 pm
by Ruuttu
Ei kai syntaksi/kieli ylipäänsä muutu paljoa, onhan mahdollista koodata simppeli ohjelma joka muuttaa vanhan CoolBasic -koodin etsi/korvaa -menetelmällä uudeksi CoolBasic Classic -koodiksi tuosta vain? Olisi absolutely awesome jos vanhoihin CoolBasic -koodeihin saisi X -kertaisen nopeuden korotuksen yksinkertaisesti käyttämällä uudempaa kääntäjää.

EDIT: DevTeamista puheenollen, jos Zerolla on kiinnostusta delegoida CoolBasicin kehitystyöstä osasia randomeille niin voisin tarvittaessa osallistua esim. manuaalin kääntämiseen, kummin päin hyvänsä.

Re: CoolBasic Classic

Posted: Mon Nov 02, 2009 7:35 pm
by KilledWhale
Jonkinlaisia olio-ohjelmointiin liittyviä ominaisuuksia (luokat) olisi hyvä olla mukana CoolBasic Classikissakin, jotta aloittelijoilla olisi helpompaa siirtyä syntaksista toiseen. Periytymiset yms. eivät olisi välttämättömiä mutta perus luokkaominaisuuksilla siirtyminen coolbasic classicista CBV3 olisi paljon jouhevampaa.

Re: CoolBasic Classic

Posted: Mon Nov 02, 2009 7:42 pm
by MaGetzUb
Tuleehan CB v3 tukemaan Laitteistokiihdytettyä 2D Grafiikkaa? Jos se luki ekassa viestissä niin rokottakaa vaan, luin ekan viestin viimmeeksi lauantaina.
EDIT:

Muokkasin viestiäni asiallisemmaksi. :)