Modattu CB (funktiorajaa nostettu)

CoolBasiciin yleisesti liittyvä keskustelu.
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

Modattu CB (funktiorajaa nostettu)

Post by Cérebro »

Pienen tutkinnan ja haxoroinnin jälkeen, olen saanut nostettua CoolBasicin kääntäjän funktiorajaa (127 -> 9999).
Lupa julkaisuun on saatu Zerolta.
Modatulla versiolla käännetyistä ja modatun version bugeista ei pidä valittaa Zerolle, vaan minulle (tässä topicissa).
Tämä siis ei ole virallinen julkaisu, vaan harrastelijamodaus.

CBCompiler_modded.zip
CBCompiler_safe.zip (Safe-versio, funktioraja 2000)
Purkakaa CBCompiler_modded.zip ja kopioikaa CBCompiler.exe CoolBasicin IDE-kansioon korvaten alkuperäisen kääntäjän (josta voi/kannattaa tietenkin ottaa varmuuskopio).

EDIT: Funktiorajaa pienennetty bugin takia.
EDIT 2: Lisätty safe-versio (funktioraja 2000).
Last edited by Cérebro on Sun May 17, 2009 3:21 pm, edited 2 times in total.
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Modattu CB (funktiorajaa nostettu)

Post by phons »

Jes. hyvin toimii... Testasin incluudaamalla kaikki SDK:t ja cbNetwork:n päälle. Siinä pitäisi olla yli 127.
Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Modattu CB (funktiorajaa nostettu)

Post by MaGetzUb »

Woah, Mahtavaa!!! :D Kerrankin jotain todella hyödyllistä, kiitos! :)
EDIT:

Olisit nostanut sen niin korkealle, kuin 32bittiset numerot riittävät(2 147 483 647).. :D

Last edited by MaGetzUb on Sat May 09, 2009 12:21 am, edited 2 times in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by Cérebro »

programmer of DSG wrote:Woah, Mahtavaa!!! :D Kerrankin jotain todella hyödyllistä, kiitos! :)
EDIT:

Olisit nostanut sen niin korkealle, kuin 32bittiset numerot riittävät(2 147 483 647).. :D

Se ei ole mahdollista sen takia, että CoolBasicin kääntäjä on tehty Visual Basicilla, joka kaatuu muistin loppumiseen jostain syystä liian isoilla luvuilla. Sen lisäksi niin suuri määrä veisi paljon enemmän muistia ja aiheuttaisi jumittelua. Ja kukaan ei varmaan tarvitsisi niin montaa funktiota.
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by Jani »

programmer of DSG wrote:Woah, Mahtavaa!!! :D Kerrankin jotain todella hyödyllistä, kiitos! :)
EDIT:

Olisit nostanut sen niin korkealle, kuin 32bittiset numerot riittävät(2 147 483 647).. :D

Cérebro kertoi tästä. Ohjelma menee kuulemma aivan liian hitaaksi.

Oli muuten hieno modaus.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Modattu CB (funktiorajaa nostettu)

Post by SPuntte »

Todella mielenkiintoista. Vaikuttaa ainakin todella hienolta. Tein kuitenkin patologista tutkimusta ja löysin älyttömän friikin bugin, joka ilmeisesti on jotain ihan CB:stä itsestään johtuvaa. Kukaan tuskin tarvitsee 16000 funktiota, mutta olipa ihan pakko kokeilla. Kokeilkaapas kääntää ja ajaa tämän koodin generoima lähdekoodi:

Code: Select all

Const FUNC = 16000

filu = OpenToWrite("funktiotesti.cb")

WriteLine filu, Chr(47) + Chr(47) + "This file contains " + FUNC + " functions."
WriteLine filu, ""
For i = 1 To FUNC
    WriteLine filu, "f" + i + "()"
Next i
WriteLine filu, ""
WriteLine filu, "AddText " + Chr(34) + "DONE!" + Chr(34)
WriteLine filu, "Repeat"
WriteLine filu, "    Drawscreen"
WriteLine filu, "Until Escapekey()"
WriteLine filu, ""
For i = 1 To FUNC
    WriteLine filu, "Function f" + i + "()"
    WriteLine filu, "    ClearText"
    WriteLine filu, "    AddText " + Chr(34) + "Function number " + i + " called." + Chr(34)
    WriteLine filu, "    DrawScreen"
    WriteLine filu, "EndFunction"
    WriteLine filu, ""
Next i

CloseFile filu
Ohjelman (siis sen, jonka tämä koodi generoi) on siis tarkoitus olla vain kasa funktioita, joita kutsutaan vuoronperään. Jokainen funktio tulostaa oman järjestyslukunsa, ei muuta. Kuitenkin (ainakin minun koneellani) Tulostus alkaa suoraan 10000:sta, ei luvusta (eli funktiosta) 1. Ja mikä edelleen vain oudompaa, on se, että kun saavutetaan funktio 16000, homma alkaa alusta, muttei taaskaan funktiosta 1, vaan 6000. Tätä kierto ilmeisesti näyttäisi jatkuvan loputtomiin (en jaksanut kuin kaksi ympäripyörähdystä katsoa), vaikka itse generoitua lähdekoodia vilkaisemalla näkee selvästi, että funktiot pitäisi kutsua kerran järjestyksessä 1:stä 16000:een. Pienemmällä funktiomäärällä (kokeilin 512) homma toimii, kuten intuitiivisesti ajatellen pitäisikin.

Että näin :mrgreen:
Kiitoksia joka tapauksessa nykyisen CB:n eliniän pidentämisestä o/
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by Jani »

- Luen taas liian hutaisten... :roll:
Last edited by Jani on Fri May 08, 2009 11:42 pm, edited 1 time in total.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Modattu CB (funktiorajaa nostettu)

Post by Viltzu »

Miten niin niitä ei muka suljeta? Suljetaanhan ne.
Ja näyttäisi ihan toimivalta, tosin CB jummas niin paljon että en jaksanut odottaa kun testasin tuota SPuntten ohjelmaa. :D
EDIT:

Code: Select all

WriteLine filu, "EndFunction"
[/edit]
EDIT:

Niin, sanoin vähän sekavasti: Tarkoitin että ei tule virhettä 127 funktiosta, mutta en jaksanut odottaa, että SPuntten ohjelma kääntysi. :P

Last edited by Viltzu on Sat May 09, 2009 11:15 am, edited 1 time in total.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Modattu CB (funktiorajaa nostettu)

Post by SPuntte »

Viltzu wrote:Ja näyttäisi ihan toimivalta, tosin CB jummas niin paljon että en jaksanut odottaa kun testasin tuota SPuntten ohjelmaa. :D
Se ON toimiva, kääntämisessä vaan menee jokunen minuutti, ehkä parisen kymmentä jopa.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Modattu CB (funktiorajaa nostettu)

Post by Jare »

Kuulostaa erittäin hyvältä!

Mutta ennen kuin lataan sen, olisi hauska kuulla, millainen tuo muutos on käytännössä. Mistä funktioraja ylipäätään johtui?

Enivei. Tekeepä tuo mitätahansa, niin se varmasti auttaa paljon erästä peliprojektiani, joka on kärsinyt funktiorajasta jo lähes kolme vuotta. 8-)
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Modattu CB (funktiorajaa nostettu)

Post by MaGetzUb »

Ehmm..
Aviran Antivirus Scannasi paketin ja näin kävi:
Eli Tr/Dropper.Gen Trojan löytyi.. :shock: Mitenköhän on mahdollista?.. Avira on melko luotettavasta päästä..
Last edited by MaGetzUb on Tue May 19, 2009 1:27 am, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Ris
Active Member
Posts: 142
Joined: Wed Jul 02, 2008 8:27 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by Ris »

programmer of DSG wrote:Ehmm..
Aviran Antivirus Scannasi paketin ja näin kävi:
Eli Tr/Dropper.Gen Trojan löytyi.. :shock: Mitenköhän on mahdollista?.. Avira on melko luotettavasta päästä..
En usko että tuo on mikään haitallinen. Käsittääkseni tuo on exen pakkaukseen(ko?) liittyvä juttu.
Edit: http://www.ohjelmointiputka.net/keskust ... nnus=17960

Mutta juu, hyvä että funktioraja on muokattu korkeammaksi.
Last edited by Ris on Sat May 09, 2009 1:00 am, edited 2 times in total.
Henkru
Advanced Member
Posts: 359
Joined: Sun Aug 26, 2007 2:46 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by Henkru »

Hienoa homma tämä on :)

Työ exe ei kyllä mikään troijalainen ole. Ainut skanneri joka tuosta huusi oli Avira. Avast, F-Secure, Nortton AVG, Kapersky... eivät löytäneet mitään ;)
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Modattu CB (funktiorajaa nostettu)

Post by MaGetzUb »

Kiitos selvennyksestä, meinas olla sydärin paikka ku näki, että Avira huomas jotain kummallista, Norttoni ei tosin minulla sanonut mitään. :)
Nyt saa paljo kivemmasti tehdä kaikkia erikois efektejä funktioilla ja includettaa isompia kirjastoja ilman pelkoa että funktioraja täyttyy, se on tosi hyvä asia. Kiitos! :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
ezbe
Tech Developer
Tech Developer
Posts: 93
Joined: Fri May 08, 2009 6:53 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by ezbe »

Hieno homma tuo funktiorajan nosto, tästä olisi ollut itsellekin hyötyä aikanaan. Nykyään ei CB:hen kyllä tule koskettua, mutta pitihän tätä tietysti kokeilla. Mukava nähdä että CB:tä pidetään vielä hengissä ja parannellaan, vaikka nykyisen version virallinen ylläpito ilmeisesti onkin jo loppunut aikaa sitten, kaikennäköisiä dll-kikkailuitakin on ilmeisesti alkanut valua käyttäjien saataville. Funktiorajan nosto avaa myös mahdollisuuden suurempien apukirjastojen tekemiseen ja käyttämiseen.

Kokeilin itsekkin SPunten koodilla luotua 16000 funktion sorsaa, ja kääntämiseen meni arviolta vajaa 25 minuuttia (Q8200/2.33GHz), tosin virransäästötilassa, jossa kellotaajuus lienee hivenen normaalia matalampi. Funktiosta 10000 tosiaan 16000 funktion systeemi lähtee laskemaan, kokeilin sitä myös 15999 funktiolla, mutta tulos oli sama (ja siinäkin kääntö kesti sen n. 20-25min). 1024:llä funktiolla kääntöaika jäi alle 10 sekunnin ja suoritus alkoi funktiosta 1 kuten pitääkin. 4096:lla funktiolla kääntöaika oli ehkä reilua minuuttia, toiminta taas moitteetonta. Ilmeisesti suuri funktiomäärä hidastaa esikääntämisvaihetta suhteellisen paljon. Viimeisen kokeen tein 8001:llä funktiolla (päätin kokeilla määränä jotain ei-2:n potenssi -arvoa, tosin tuskinpa tuolla mitään vaikutusta on). Tällä kertaa pidin tarkemmin silmällä kääntöön kuluvaa aikaa ja se oli aika tarkalleen 5min 10s. Tässäkin tapauksessa funktio 1:stä kutsuttiin ensimmäisenä, joten ainakin tuohon 8001:een funktioon asti vaikuttaa toimivan kuten pitää, suurempia määriä en enää jaksanut kokeilla, koska kääntämiseen kuluva aika selkeästi nousee hyvinkin nopeasti funktiomäärän kasvaessa. "Toimiva" yläraja lienee kuitenkin vielä tätäkin korkeampi, kokeilkaapa joku vaikkapa 9999, 10000, 10001, jos löydettäisiin joku tarkka raja.

CB-projektien koot lienevät yleensä suhteellisen pieniä, ja tuo 8000 funktiotakin riittää jo aika valtavaan hässäkkään. Luultavasti koodin rakenne ja kaiken muistaminen (ainakin jos tekemässä on vain yksi henkilö) tulee vastaan jo kauan ennen tuota funktiorajaa. Vaikka koodin laajentaminen ja ylläpitö helpottuu jakamalla se sopivan kokoisiin pieniin palasiin, voi tästä tulla suorituskykyongelmia (tai sitten ei, tietenkään en tiedä miten CB sisäisesti nuo kutsut oikeasti hoitaa), jos kutsuja tehdään paljon. Useimmiten kuitenkin syy hitauteen on aivan muualla kuin pelkissä funktiokutsuissa. Alkuperäinen 128 (vai 127) funktion raja oli turhan rajoittava, joten kyllä tästä varmasti on iloa monille.

Mitä tulee tuohon "troijalaiseen", Comodo varoitti myös alkuperäisestä CBCompilerista (siis uusin versio coolbasic.com:sta), muttei modatusta. En kyllä usko että viralliselta sivustolta ladattu versio oikeaa troijalaista sisältäisi.
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

Re: Modattu CB (funktiorajaa nostettu)

Post by Cérebro »

Jare: Funktioraja (127) oli vain asetettu funktiotaulukon kooksi. Piti vain purkaa kääntäjä UPX:n oikealla versiolla, etsiä 127 ja korvata se ja pakata uudestaan UPX:llä.
Jännän bugin olette löytäneet. Testasin luvut 9999 ja 10000, 10000:lla ilmeni tuo bugi, 9999:llä ei. Ensimmäinen viesti ja paketti on päivitetty.
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli
Nasse-setä
Member
Posts: 54
Joined: Fri Apr 03, 2009 8:12 pm
Location: Loviisa

Re: Modattu CB (funktiorajaa nostettu)

Post by Nasse-setä »

Huimaa jo päätä kun minä koitan miettiä mihin tarvitsee yli 127 funktiota :roll: ja sitten te vielä puhutte että 8000 saa suht koht kivan... huhhuh :shock:
Osallistu suuren tilastoon -> viewtopic.php?f=13&t=1756
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Modattu CB (funktiorajaa nostettu)

Post by Ruuttu »

Voisitkohan julkaista tästä vielä sellasen "safe-mode" version missä funktioraja liikkuisi "vain" jossain 2000 paikeilla... Kun skeptikkona tietenkin pohdin että minkähänlainen vaikutus tuolla 8000 korotuksella on muistinkäytön / suorituskyvyn kannalta yms.

Ei pakko, mutta jos sulla on päivässä 24 tuntia liikaa vapaa-aikaa, niin voisit sellaisen ohimennen vääntää.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Modattu CB (funktiorajaa nostettu)

Post by JATothrim »

Ei tuossa tuntunut olevan häikkää. ;) Tein nimittäin seuravan testin:

Code: Select all

'CB Beta 2.43 Compiller Test.
' Testataan kunka "syvä" funktio kutsu voi olla.
' Tämä ohjelma luo koodin joka aloittaa callfunc1
' ja kustuu sitten callfunc2 joka kutsuu callfunc3 jne.
' luotu ohjelma ottaa myös aikaa..
Const KUTSUN_SYVYYS = 9000
test = OpenToWrite("CallStackTest.cb")


For i=1 To KUTSUN_SYVYYS-1
	WriteLine test, "Function callfunc"+i+"()"
	'WriteLine test, "Cls"
	'WriteLine test, "Print "+Chr(34)+"in depths of "+i+Chr(34)
	WriteLine test, "callfunc"+Str(i+1)+"()"
	WriteLine test, "EndFunction"
Next i

WriteLine test, "Function callfunc"+KUTSUN_SYVYYS+"()"
WriteLine test, "Cls"
WriteLine test, "Print "+Chr(34)+"in depths of "+KUTSUN_SYVYYS+Chr(34)
WriteLine test, "Wait 1000"
WriteLine test, "EndFunction"

WriteLine test, "t = timer()"
WriteLine test, "callfunc1()"
WriteLine test, "print "+Chr(34)+"Executed in: "+Chr(34)+"+(timer() - t)+"+Chr(34)+"ms."+Chr(34)
WriteLine test, "waitkey"
CloseFile test
Ohjelma luo CallStackTest.cb tiedoston joka siis pitää koettaa kääntää ja suorittaa. Jos käännös onnistuu, ohjelma kutsuu funktion sisältä toista funktioa 9000 kertaa, ei rekursiivisesti. Kääntämisessä voi mennä tovi. :) Tuloskesta voin sanoa että gosub komenton käyttöä pitäs "herätellä" hieman, se kun on 40% nopeampi.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Modattu CB (funktiorajaa nostettu)

Post by KilledWhale »

Gosubin käyttö on huomattavisti nopeampaa useasta syystä. Ensinnäkin cb tavukoodia katsottaessa gosub vie 2 komentoa siellä itse hyppy ja return. Funktiot taas vievät n. parametrien määrä * 4 + 2 + 7 komentoa mikä cb:n mittapuulla on jo aivan helvetisti ylimääräistä. Jos jollain on mielenkiintoa kikkailla muistipaloilla ja hajoilla koodatessa gosubia voisi hyödyntää muistipalojen + esikäsittelyn avulla tekemällä inline tyyliset funktiot.

Omassa testissäni funktion kutsuminen 500000 kertaa vei 4672 millisekuntia kun gotolla samaan meni vain 344 millisekuntia. Tosin gotoja käyttäessä ei laiteta pystyyn erillistä pinoa ja tauluja muuttujille mutta eniveis.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Post Reply