Page 11 of 15

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Fri Jan 07, 2011 5:32 pm
by naputtelija
Millä kielellä cbc taas tehtiinkään?

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Fri Jan 07, 2011 5:45 pm
by Frozen
naputtelija wrote:Millä kielellä cbc taas tehtiinkään?
C# , ja olisit kyl itekki voinu selata muutaman sivun taaksepäi tätä topikkia

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Fri Jan 07, 2011 9:30 pm
by SPuntte
Frozen wrote:
naputtelija wrote:Millä kielellä cbc taas tehtiinkään?
C# , ja olisit kyl itekki voinu selata muutaman sivun taaksepäi tätä topikkia
Itseasiassa vain Cool VES -välikielen kääntäjän kirjoittaa Zerppa C#:lla. Pelimoottoritoiminnallisuuden tarjoava Cool VES taasen tehdään C++:lla - suuren osan siitä me techit.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Jan 10, 2011 9:01 am
by Zero
Frozen wrote:
naputtelija wrote:Millä kielellä cbc taas tehtiinkään?
C# , ja olisit kyl itekki voinu selata muutaman sivun taaksepäi tätä topikkia
Niin kuin Spuntte sanoikin, käytössä on sekä C# että C++:
- Runtime ja pelimoottori: C++, cross-platform
- Koodieditori: C# 4.0, .NET Framework 4.0, Windows Presentation Foundation 4.0 (Linux-vastine toteutetaan todnäk)
- CoolBasic Classic kääntäjä: C# 4.0, .NET Framework 3.5, konsolisovellus (toimii Monossa, ts. Linux/MacOS-tuki)

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Jan 10, 2011 5:47 pm
by MaGetzUb
Kun kirjoitat nykyisessä CB:ä on esim tällaisen koodin:

Code: Select all

If Muuttuja_AutoCheckPoint > 1 And Muuttuja_AutoCheckPoint < 20 And Muuttuja_AutoCheckPoint <> 12 Then 
Niin tuon muuttujanimen on aina rasittava kirjoittaa seuraavan operaattorin jälkeen uudestaan jos se on vähänkin pidempi. Nii olisi helpompaa kun oisi sellainen komento joka katsoo ja ehtolausekkeessa viimmeksi käydyn muuttujan nimen.

Toiminta tapa olisi tällainen:

Code: Select all

If Muuttuja_AutoCheckPoint > 1 And PrevVar < 20 And PrevVar <> 12 Then 
Ja koska koodiahan luetaan aina pelkästään eteenpäin niin tässä toinen esimerkki:

Code: Select all

If Muuttuja_AutoCheckPoint > 1 And PrevVar < 20 And PrevVar <> 12 And Jalankulkija_X = 20 Or PevVar = 100 Or PrevVar = 10 Then 
:)

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Jan 10, 2011 5:59 pm
by esa94
MaGetzUb wrote:Kun kirjoitat nykyisessä CB:ä on esim tällaisen koodin:

Code: Select all

If Muuttuja_AutoCheckPoint > 1 And Muuttuja_AutoCheckPoint < 20 And Muuttuja_AutoCheckPoint <> 12 Then 
Niin tuon muuttujanimen on aina rasittava kirjoittaa seuraavan operaattorin jälkeen uudestaan jos se on vähänkin pidempi. Nii olisi helpompaa kun oisi sellainen komento joka katsoo ja ehtolausekkeessa viimmeksi käydyn muuttujan nimen.
Toisaalta voinet myös käyttää väliaikaista muuttujaa kuten vaikkapa "n"

Code: Select all

Dim n As Integer
If n > 1 And n < 20 And n <>12 Then
...
Yhtäkkiä koodisi lyhenee.

(Eikä siinä kirjoittamisessa nyt niin kauaa mene.)

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Jan 10, 2011 6:59 pm
by MaGetzUb
No ehkäpä tuokin on ihan hyvä keino. Mutta ns. integroidulla komennolla/muuttujalla olisi paljon selvempää muille koodareille jos jakaa koodin netis. :D

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Jan 10, 2011 7:36 pm
by esa94
MaGetzUb wrote:No ehkäpä tuokin on ihan hyvä keino. Mutta ns. integroidulla komennolla/muuttujalla olisi paljon selvempää muille koodareille jos jakaa koodin netis. :D
En ole kyllä nähnyt kellään tällaista ongelmaa käytännön tilanteissa, joten tuskinpa se on niin vakava ongelma että vaatii yhden mahdollisen muuttujanimen vähemmän.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Jan 10, 2011 7:56 pm
by koodaaja
Editoriin oli muistaakseni lupailtu tabitäydennystä, joka ajaa saman asian paremmin.

Mutta muistakaamme, että tämä topic on yksinomaan kehitysuutisten kommenteille, ehdotuksia voi ladella CoolBasic Classicin esittelyketjuun.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 11:41 am
by axu
Tuosta uusimmasta blogipostista: Paljonko tuo "short-circuit"-toiminta mahtaa nopeuttaa ohjelman toimintaa? Tietenkinhän se riippuu siitä, minkälainen tuo jälkiosa tuosta if-lauseesta on, mutta esim seuraavanlaisella pätkällä:

Code: Select all

If a = 0 and b = 0 Then
Pitääpä sitten ruveta optimoimaan koodia laittamalla kevyet funktiot if-lauseiden alkuun :P

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 12:33 pm
by Zero
axu wrote:Pitääpä sitten ruveta optimoimaan koodia laittamalla kevyet funktiot if-lauseiden alkuun :P
Juuri tämä.

Esimerkiksi lauseke:

Code: Select all

If raskasFunktio = 1 And kevytFunktio = 2 Then
...voidaan optimoida vaihtamalla niiden paikkaa:

Code: Select all

If kevytFunktio = 2 And raskasFunktio = 1 Then

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 7:04 pm
by DJ-Filbe
Zero wrote:
axu wrote:Pitääpä sitten ruveta optimoimaan koodia laittamalla kevyet funktiot if-lauseiden alkuun :P
Juuri tämä.

Esimerkiksi lauseke:

Code: Select all

If raskasFunktio = 1 And kevytFunktio = 2 Then
...voidaan optimoida vaihtamalla niiden paikkaa:

Code: Select all

If kevytFunktio = 2 And raskasFunktio = 1 Then
Ahaa-elämys: käsiteltävien bittien määrän pienentyessä suoritusnopeus kasvaa(?)
Jos, niin eikö sitten ole sama, jos kirjoittaisi:

Code: Select all

If r = 2 And k = 3 Then
kuin

Code: Select all

If k = 3 And r = 2 Then
? Tuleeko noista yhtä nopeita?

Perustelut:
2[dec] = 10[bin]
3[dec] = 11[bin]
(sama määrä vertailtavia bittejä, toisin kuin zeron esimerkissä {1 ja 10})

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 7:27 pm
by TheFish
DJ-Filbe wrote:Ahaa-elämys: käsiteltävien bittien määrän pienentyessä suoritusnopeus kasvaa(?)
Jos, niin eikö sitten ole sama, jos kirjoittaisi:

Code: Select all

If r = 2 And k = 3 Then
kuin

Code: Select all

If k = 3 And r = 2 Then
? Tuleeko noista yhtä nopeita?

Perustelut:
2[dec] = 10[bin]
3[dec] = 11[bin]
(sama määrä vertailtavia bittejä, toisin kuin zeron esimerkissä {1 ja 10})
Et ihan ymmärtänyt pointtia. Noilla bittien määrillä ei ole tässä mitään merkitystä (oikeastaan koko luvuilla ei ollut merkitystä zeron esimerkissä (ja ota huomioon, että integer on 32-bittinen vaikka siitä ei käytettäisi kuin kahta bittiä)).
Zeron esimerkki ilman numeroita (eli funktiot palauttavat booleanin):

Code: Select all

If raskasFunktio And kevytFunktio Then
->

Code: Select all

If kevytFunktio And raskasFunktio Then
Pointti oli siis vain laittaa raskaampi funktio (jonka suoritus on siis hitaampaa) vasta and:in jälkeen. Silloin se suoritetaan vain jos kevyempi funktio palautti toden.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 10:03 pm
by Awaclus
Eli toisin sanoen esimerkiksi ObjectsOverlap kannattaa laittaa vasta muuttuja = 1:n jälkeen, vai ymmärsinkö väärin?

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 10:17 pm
by legend
Chaosworm wrote:Eli toisin sanoen esimerkiksi ObjectsOverlap kannattaa laittaa vasta muuttuja = 1:n jälkeen, vai ymmärsinkö väärin?
Ymmärsit oikein...
Minä olin luullut, että se menee nytkin tollein :o ilmoitus tuli suurena pettymyksenä :?

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 10:55 pm
by Wingman
eikös nyky cb.llä voi tehdä tuon näin:

Code: Select all

if muuttuja=1 then
    if raskasfunktio then
endif

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 11:10 pm
by esa94
DJ-Filbe wrote:Ahaa-elämys: käsiteltävien bittien määrän pienentyessä suoritusnopeus kasvaa(?)
Muistaakseni hidastuu; AFAIK sana eli natiivi kokonaisluku (16 tai 32 tai 64 bittiä) on nopein käsiteltävä.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Thu Feb 03, 2011 11:12 pm
by Jare
Wingman wrote:eikös nyky cb.llä voi tehdä tuon näin:

Code: Select all

if muuttuja=1 then
    if raskasfunktio then
endif
Voi, ja And-operaattorin kanssa lieneekin makuasia, kumpaa toteutustapaa käyttää.

Or tuo taas asiaan oman lisänsä:

Code: Select all

If funktio1() Or funktio2() then
    ...
EndIf
funktio2():ta ei suoriteta, jos funktio1() palauttaa True. Nyky-cb:lle tämä ei käänny niin helposti kuin And.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Sun Feb 06, 2011 9:11 pm
by JATothrim
Tulipa mieleen, että meidän ohjelmoinnin opettaja ei ole maininut asiasta mitään.. Vaikka hän selitti nuo (loogiset) And ja Or operaattorit bitti tasolta lähtien. :roll:
Ottakaa huomioon myös tämä: (sama asia minkä zerppa kertoi jo blogissaan)

Code: Select all

Global glb_laskuri As integer
Dim laskuri As integer
Dim result As integer

Function wtfbar(x As integer)
	glb_laskuri = glb_laskuri + 1
	Return glb_laskuri < Rand(x)
EndFunction

 
Function wtffoo(x As integer, laskuri As integer)
	Return laskuri < Rand(x)
EndFunction

// Seuraava toimii short-circuit logiikalla "epävarmasti"
If wtfbar(5) And/Or wtfbar(3)
	Print "Tämä ei toimi aina niin kuin ON ajateltu (ÄLÄ KÄYTÄ)"
EndIf

// Ohjelmoija on varmaankin hakenut tätä menettely tapaa:
laskuri = laskuri + 1
result = wtffoo(3, laskuri)
laskuri = laskuri + 1
If wtffoo(5, laskuri) And/Or result
	Print "Tämä toimi niin kuin ON ajateltu (OK KÄYTTÄÄ)"
EndIf
Eli jos funktio muokkaa ulkopuolelta jotain globaalia dataa on PAKKO käyttää alempaa tapaa, jos haluaa että funktiota voidaan käyttää huoletta short-circuit And/Or operaattoreiden seassa. Koodi-esimerkkissä wtffoo-funktio ei käytä globaaleita, ja on näin ns. "aito" matemaattinen funktio.

Re: CoolBasic Classic: Kehitysuutisten kommentit

Posted: Mon Feb 07, 2011 8:32 am
by Zero
Xor:lle ei ole oikosuljettua versiota koska kummatkin operandit täytyy aina tutkia.