Hey!
Elikäs, päätän nyt tehdä pitkästä aikaa kysymyksen tai pikemminkin kysymyksiä liittyen c:hen. Aluksi, tarvitsen ehdotusta tarpeeksi hyväksi kääntäjäksi. Mieluiten sellainen joka ei vaadi yhtään säätämistä. Tähän mennessä sellaisten kanssa ei ole koskaan sujunut. Joko eivät ole toimineet lainkaan, tai ovat toimineet ainoastaan koodilla mikä ei ole minulta tai edes minun muuttamaani. Jälkimmäinen on niin pitkällä että edes yhden kirjaimen stringissä muuttaminen (Hello Hulloksi) kieltäytyy kääntämästä. Mitä tulee siihen ainoaan mikä toimii, sorry, no optimizations for you. Hello worldille pari sataa kiloa on ehkä liikaa, puhumattakaan jos sellaisella yrittäisi jotain isompaa.
Jotenka kääntäjä, mieluiten ilmainen joka toimii varmana. Käyttiksenä alla sillä koneella mihin moinen tulisi on XP. Mieluiten kääntäjä ja editori samassa paketissa. Mitä nopeammin saa käyttöön sen parempi. Mitä nopeammin ilman virheilmoituksia sen parempi. Oletan että optimointivipuja sellaisissa on helppo käyttää myös? Tahdon binarini optimaalisessa kunnossa ja vähemmän bloattina. Ah, ja tosiaankin, c-alkuinen, mutta ei #-loppuinen.
Nyt ne muut kysymykset, pääasiassa koskien kirjastoja. Aluksi grafiikka, olen tottunut aikaslailla itse päättämään miten pikseli piirtyy näytölle ja jos rehellisiä ollaan osaan sen vaiheen liiankin hyvin. Ainakin DOSissa, mutta todennäköisesti Windowsissa ja muissa homma ei ehkä toimi kovin suoraan. Sikäli kun piirto näyttömuistiin niin vain ei ole sallittua. Oletan tosin että kiertoteillä onnistuu erittäin paljon vastaava mekanismi? Eli esim. piirtää sallitulle alueella haluamansa bittikartan, joka sitten tavalla tai toisella laitetaan näytettäväksi. Joko siirretään näyttömuistiin tavuttain tai jos on keino tehdään sopivanlainen swappaus. Kovin monia kirjastoja en tosin tahtoisi joutua käyttämään. Mitä vähemmän sen parempi, ja paras on simppeli tapa millä hoituu ilmankin.
Tosin eräissä tapauksissa joutunen käyttämään kirjastoja. Pääosin tiedostomuotojen muunnossa joksikin mikä sopii suoraan käyttööni. Siis muunto, ei käyttöä suoraan. Editorien tekeminen omien tiedostomuotojen käsittelyä varten ei ole vierasta. On jopa kokeiltu tehdä ohjelma joka niputtaa tiedostoja yhdeksi isoksi käyttöön (vertaa wad-tiedostot). Kyllä, se toimi. Tosin hyvin alkeellinen, mutta toimi. Toisin sanoen kirjastoja jotka sopivat omien editorien ja muuntimien tekemiseen voinee ehdottaa. Loppujen lopuksi moisten ollessa työkaluja niillä on vähemmän väliä mitä niihin lykkää. Kunhan toimii ja tuottaa oikeanlaista informaatiota.
Sitten on äänet. Siinä missä pikselit on vahvuus, aallot ovat vähän heikkous. Ei ole täyttä ideaa miten ne toimivat, mutta tässäkin mieluiten mahdollisimman vähäisillä kirjastoilla tahtoisi selvitä. Periaatteessa kaikki mitä tarvittaisiin on keino soittaa äänidataa. Tässäkin tapauksessa aina voidaan ensin muuttaa äänitiedosto joksikin yksinkertaiseen muotoon, siis pelkäksi tavuiksi mitä tungetaan oikeaan paikkaan. Edelleenkin käsittelisin dataa melkoslailla raakana. Helpompi kokeilla kaikenlaisia outoja efektejä ja katsoa miten käy.
Seuraavaksi sekalaisia perusasioita. Näppäimistön lukeminen on aikaslailla kuumana aiheena ajoittain. Oletan tosin että sen lukuun on erittäin yksinkertaisia keinoja? Sellaisia missä ohjelman suoritus ei pysähdy odottamaan painallusta ja joiden kanssa ei ole liiaksi muita ongelmia. Mitään multikeysiä ei tarvita, kunhan hoituu aakkoset, nuolet ja nuo ohjainnäppäimet kuten control ja alt. Mitä siihen? Toinen taasen on tiedostoon kirjoitus ja luku. Olettanen että halutessa voi käsitellä tiedostoa aivan tavuina tai useampina? Esim. yhden tai tuhannen luvun ei pitäisi olla ongelmia? Jos, mitä ehdotetaan? En ole kiinnostunut käsittelemään tietoa minään virtoina tai vastaavina. Sitä jo osaa käsitellä ihan yksinkertaisestikin niitä.
Lisää vielä, mitähän ne olikaan? Ah, niin. Kun miettii oikein perusasioita mitä tarvitaan, tässä on vain muutama. Ohjelman jako pienempiin, hm, aliohjelmiksiko niitä kutsutaan c:ssä? Functiohan palauttaa arvon? Katsotaanpas, if-lausekkeet ja loopit. Matemaattiset perusfunctiot (plus, miinus, jako, kerto), bittioperaatiot (and, xor, or, jne). Taulukot ja oliot, mitä niistä on kerrottavaa? Jotain miten c-ohjelma oikeastaan rakennetaan. Loppujen lopuksi en tarvitse tietoa kuin muutamasta perusasiasta. Oikeastaan parempi laatia lista mitä käytän Qbasicissa ja te saatte kertoa miten kyseinen homma hoituu c-alkuisissa itsessään.
Siis tässä, kertokaa vastineet ja erot. Tai oikeastaan, näyttäkää erot koodeilla (Qbasic ja vastaava C):
-TYPE... END TYPE.
-DIM, DIM SHARED, DIM X AS...
-Silmukat ja loopit.
-INKEY$
-POKE/PEEK.
-INP/OUT.
-OPEN/CLOSE, PUT/GET (File), FREEFILE.
-Perusmatematiikka ja bittioperaatiot.
-IF... ELSEIF... ELSE... END IF.
-DEF SEG, VARSEG, VARPTR.
-CHR$, ASC ja muut merkistöön liittyvät jos tarve.
-SUB, FUNCTION.
Hm, taitaa olla tuossa kaikki. Kyllä, tuossa on kaikki. Ei, PRINTin puuttuminen ei ole virhe. Sitä ei tule käytettyä kun yleensä joutuu tekemään oman tulostamisen. SCREENiä en taasen laittanut. Tavoite on kyllä päästä graafiseen ominaisuuksiin perehtymään C-alkuisella, sekä ikkunoina että koko näyttöinä. Ensimmäistä editorien muodossa, toista joskus valmiissa jutuissa. Jotenka, loppujen lopuksi. En tarvitse paljoa mitään kuin tiettyjä perusasioita ja tiettyjä monimutkaisempia. Vähään tyytyvä, huh?...
-Grey-
Edit: Unohdin kysyä yhden asian! DOSissa olen käyttänyt yleensä tickejä jos on pitänyt säätää ohjelma toimimaan vain tietyllä nopeudella, mutta mitä on käytettävissä DOSin ulkopuolella? Mieluiten tahtoisin jotain vastaavaa, koska tietyt säädöt hoituvat mielestäni paremmin noilla. Ainakin niihin olen ehtinyt tottua...
Noniin, lähtisin siitä että ennen kuin saat jotain järkeviä koodeja tehtyä, niin optimoinnilla ei ole yhtään mitään merkitystä. Eli kääntäjän valinnassa keskittyisin nyt vain ja ainoastaan siihen, että saat omia koodeja kääntymään.
Mikään kääntäjä ei tee eroa sille lukeeko koodissa (lainausmerkkien sisällä eli tekstinä) Hello vai Hullo. Eli siinä muutoksen yhteydessä on tapahtunut jotain muutakin - vaikkapa koodin tallentuminen UTF16 muotoon tms.
Muut kommentoikoot lisää.
Grez kirjoitti:
keskittyisin nyt vain ja ainoastaan siihen, että saat omia koodeja kääntymään.
Duh, joutuu sitä kuitenkin etsimään sen kääntäjän jos tahtoo myöhemmin jotain valmista alkaa optimoimaan. Jos käytössä oleva ei siihen pysty ja ei ole edes jaksanut juuri tuon vuoksi mitään etsiä, joutuu tuhlaamaan aikaa sen etsintään myöhemmin. Turha siis siirtää mitään myöhemmäksi kun sitä joutuu katumaan jossain vaiheessa, viimeistään kuolinvuoteellaan tai miehen puolikkaana jäätyään rekan alle...
Grez kirjoitti:
Mikään kääntäjä ei tee eroa sille lukeeko koodissa (lainausmerkkien sisällä eli tekstinä) Hello vai Hullo. Eli siinä muutoksen yhteydessä on tapahtunut jotain muutakin - vaikkapa koodin tallentuminen UTF16 muotoon tms.
Sama editori, samat säädöt. Jos Hello muuttui Hulloksi, ei käännöstä, mutta kun Hullon muutti Helloksi takaisin... Käänty! Eli C vihaa minua edelleenkin. Henkimaailman juttuja aivan selvästi. Sikäli harmillista kun se olisi hyödyksi. Qbasicilla voi vielä leikkiä ja kehitellä mekanismejä, mutta jos tahtoo jotain käytettävää, C on se näppärin. Minulla on syynsä kyllä perehtyä C:hen, tosin rehellisesti sanoen mieluiten antaisin jonkun muun tehdä hommat ja minä sanon miten, mutta joko kaikki vaativat "fyrkkaa" tai tahtovat tehdä asiat miten sattuu oman päänsä mukaisesti.
Ja muuten moderaattoreille toive. Jos tämä aihe uhkaa mennä väittelyksi tai pelkkien mielipiteiden esittämiseksi, saatte luvan poistella ne kaikki turhiksi katsotut viestit, olkaa hyvät...
On aika huono lähtökohta pyytää nykyaikaista C-kääntäjää, jolla voisi koodata DOS-aikakauden QB-koodia. Jos haluat käyttää C:tä, opettele sitten kunnolla C:tä nykyaikaisessa ympäristössä ja unohda koko QB.
Mihin kielivalintasi perustuu – myytteihinkö? Todellisuus on, että C (tai C++) ei ole ylivertaisen nopea eikä kovin käytännöllinenkään. Tyrmäämäsi C# tai Java olisi monessa asiassa kätevämpi. Minusta juuri sinun kannattaisi kuitenkin ladata FreeBASIC (tai QB64), niin pääsisit helposti QB:stä nykyaikaan: monet vanhat koodisi toimisivat melko vähillä muutoksilla, ja vähitellen voisit opetella uusia asioita kuten uudet grafiikka- ja äänitoiminnot ja kielen uudet ominaisuudet.
Jos edelleen olet vakuuttunut, että C (tai C++) on ainoa mahdollinen ratkaisu, jatka lukemista.
Joitakin kehitysympäristöjä on lueteltu tässä oppaassa. (C++-ympäristö käy lähes aina myös C-ympäristöksi. Toisaalta ei ole montakaan syytä käyttää C:tä, vaan voisit ihan hyvin käyttää C++:aa.) Mikään kokeilemani C-kääntäjä ei ole vaatinut erityisempää säätämistä, vaan kaikki ovat toimineet ihan noin vain. Jos koodi ei toimi, vika on aika varmasti koodissa (ja siten sinussa) eikä kääntäjässä. Erityisen totta tämä on kuvaamassasi tapauksessa, jossa koodi ensin toimii, muutoksen jälkeen ei toimi ja toisen muutoksen jälkeen toimii taas.
Kysymistäsi asioista POKE, PEEK, INP, OUT ja SEG-asiat eivät suoranaisesti kuulu nykyaikaan millään kielellä. Myöskään INKEY ei kuulu C:n standardikirjastoon. Kaikkien näiden sopivat vastineet riippuvat siitä, mitä alkuperäinen koodi ylipäänsä tekee ja mihin ympäristöön sitä siirretään. Tekstitilassa auttaa ncurses- tai PDcurses-kirjasto, ja graafisessa tilassa näppäinten lukeminen ja pikseligrafiikan tuottaminen onnistuvat esimerkiksi Allegro-kirjastolla tai SDL-kirjastolla, joista varmasti on tietoa netistä. Ajan hallintaan kuuluu nykyään, että katsotaan kelloa ja toimitaan sen mukaan (ks. matopeliopas). CHR ja ASC ovat tarpeettomia, koska yksittäinen merkki toimii suoraan myös lukuna. Loput luettelemasi asiat selviävät mistä tahansa kunnollisesta C-oppaasta, joten olisi hölmöä kirjoittaa ne foorumille uudestaan aina, kun uusi henkilö haluaa opetella C:tä.
Alkaa muistumaan miksi en ole ollut putkassa pahemmin...
Metabolix kirjoitti:
On aika huono lähtökohta pyytää nykyaikaista C-kääntäjää, jolla voisi koodata DOS-aikakauden QB-koodia. Jos haluat käyttää C:tä, opettele sitten kunnolla C:tä nykyaikaisessa ympäristössä ja unohda koko QB.
En näe mitään eroja vanhan koodaamisen ja uuden koodamisen välillä, muutakuin sen että laitteistoon ei pääse suoraan käsiksi. Ah, ja se että nykyään kirjastojen käyttöä kutsutaan koodamiseksi, mutta nekin hoitavat asian ihan kuten ennenkin: Kirjoittavat, lukevat ja käsittelevät tavuja halutulta alueelta. Vai tekevätkö ne jotain muutakin? Go ahead, explain to us!
Metabolix kirjoitti:
Mihin kielivalintasi perustuu – myytteihinkö? Todellisuus on, että C (tai C++) ei ole ylivertaisen nopea eikä kovin käytännöllinenkään. Tyrmäämäsi C# tai Java olisi monessa asiassa kätevämpi.
Minkä hyvänsä kääntäjän tekemä binaari on nopeampaa kuin Qbasicin, jotenka C ja C++ tekevät nopeampaa jälkeä, että jos vivut toimivat myös pienempää. Enkä aio koskea C#:n, se käyttää bloateja runtimeja. Olkootkin käyttöjärjestelmän mukana, jonkun 100 kiloisen suorituksessa 100 megainen lisä on silkkaa hulluutta ja mielipuolisuutta. Sitä paitsi jos mennään tekemään vaikka 64 kiloinen demo, ei edes kannata harkita mitään tuollaista. Mitä Javaan tulee, ei käyttöä. Kiinnostava, mutta ei löydy käyttöä. Sitä paitsi sekin tuppaa viemään mielettömästi muistia verraten mihinkään muuhun. Toki jos on pari gigaa, ei useimmat huomaa, mutta järjetöntä silti ja laiskaa myös.
Metabolix kirjoitti:
Minusta juuri sinun kannattaisi kuitenkin ladata FreeBASIC (tai QB64), niin pääsisit helposti QB:stä nykyaikaan: monet vanhat koodisi toimisivat melko vähillä muutoksilla, ja vähitellen voisit opetella uusia asioita kuten uudet grafiikka- ja äänitoiminnot ja kielen uudet ominaisuudet.
Kokeillut, ylitti aikarajan missä piti saada toimimaan. Haluan työkalun olevan toiminta kunnossa siinä ajassa kun se tulee koneelleni, en vasta tuntien ja monien rivien manuaalien lukemisen jälkeen. Sitä paitsi jos oikein muistan tuossa ei ole edes omaa editoria, ainakaan en löytänyt niiden kymmenien binaarien joukosta mitään. Lisäksi tuo tekee asiat joka tapauksessa omalla tavallaan, ja sitä en tahdo. Haluan hallita kutakuinkin melko tarkkaan miten binaari tekee asian, en siten miten kielen tekijä on sen päättänyt. Eikä tuo muutenkaan minua edes hyödyttäisi vaikka toimisi, kun käytännössä katsoen ei ole olemassakaan yhtää vanhaa koodia joka kannattaisi edes pitää Basicina.
Mitä tulee kielen uusiin ominaisuuksiin, ei ole olemassakaan sellaista asiaa kuin uusia ominaisuuksia. Kaikki on muunnosta vanhasta, hyväksyt eli et...
Metabolix kirjoitti:
Jos edelleen olet vakuuttunut, että C (tai C++) on ainoa mahdollinen ratkaisu, jatka lukemista.
Ikävä kyllä, nykyinen tilanne vaikuttaa siltä että niihin on syytä minun perehtyä nyt. Ei tosin hetken päätös, mutta tarkan pohdinnan tulos.
Metabolix kirjoitti:
Joitakin kehitysympäristöjä on lueteltu tässä oppaassa. (C++-ympäristö käy lähes aina myös C-ympäristöksi...
Tahdon käyttäjäkohtaisia kokemuksia kustakin, eritoten noista missä on myös IDE mukana. En aio kahta erillista pakettia yrittää edes ladata. Haluan tosiaankin työkaluni olevan käytössä heti kun paketti on purettu ja asennettu. Viis siitä mille vuosituhannelle se on tehty, kunhan toimii myös uudemmissa, edes yhteensopivuus tilassa. Eikä tarvitse bloateja lisiä.
Metabolix kirjoitti:
... Tekstitilassa auttaa ncurses- tai PDcurses-kirjasto, ja graafisessa tilassa näppäinten lukeminen ja pikseligrafiikan tuottaminen onnistuvat esimerkiksi Allegro-kirjastolla tai SDL-kirjastolla, joista varmasti on tietoa netistä...
Mitä minä sanoin kirjastoista? Varsinkin kahdesta jälkimmäisestä jotka itsestään ovat turhan bloateja. Mitä järkeä jotain kymmeniä megoja yhden pikselin piirtoon tai yhden merkin lukuun on ladata? Ei tarvitse tuollaista määrää, niin ei tarvitse. Maksetaanko teille tuollaisten tyrkyttämisestä? Vai ollaanko sitä liian laiskoja edes yrittämään tehdä jotain monimutkaisempaa kuin pläntätä blit tuonne ja toinen blit tuonne? Toki jos pitää jotain nopeasti saada aikaan, on dead line projektille ja pomo hengittää niskaan. Minulla on vain tarve saada työkalu käyttöön, mutta sen jälkeen voin käyttää tekemiseen miten paljon aikaa tahansa. En välitä siitä. Lisäksi, jos mennään 64 kilon demoihin, enpä usko että kirjastoilla häslääjät pahemmin pärjäävät...
Metabolix kirjoitti:
...että katsotaan kelloa ja toimitaan sen mukaan (ks. matopeliopas)
CHR ja ASC ovat tarpeettomia, koska yksittäinen merkki toimii suoraan myös lukuna.
Hyvä, vihdoinkin järkevä vastaus. Onko sitä pakko jankuttaa jostain kirjastoista ja omista mielipiteistään ennenkuin pääsee asiaan? Jos jokin psykoosi vaivaa niin sitä varten on olemassa terapioita. Kaappimurolaisuuteen tosin auttaa vain gramma ja pari lyijyä suoraan aivoihin injektoituna...
Metabolix kirjoitti:
Loput luettelemasi asiat selviävät mistä tahansa kunnollisesta C-oppaasta, joten olisi hölmöä kirjoittaa ne foorumille uudestaan aina, kun uusi henkilö haluaa opetella C:tä.
Duh, näytä minulle kunnollinen opas, tai parempaa. Näytä minulle noihin tarvittavien käskyjen selostuksen ja syntaksit. Ohjelmoida jo osataan, C-alkuisten toimintatapoja ei, ja ne ovat eri asioita. Ohjelmoija ymmärtää toimintatavat ja sen miten systeemi toimii, se toinen osaa vain kielen tavat ja kirjastoja käyttää, mutta ei ymmärrä lainkaan miten tiedon käsittely oikeastaan toimii.
Mitä sitten lopuksi, jos pätevillä ei ole sanottavaa täällä, pyydän ohjaamaan toiselle foorumille. Putkasta kun ei mitään kehittynyttä kun saa irti ikinä. Jos yrität saada leivänpaahtimeen asennettua laserit ja ilmantorjuntasysteemit, täällä väitetään että se on mahdotonta ja kannattaa vain ostaa joku halpa leivänpaahdin Lidlistä. Siis antakaa osoite foorumille jossa todellakin annetaan apua vaikka miten järjettömään ideaan. Englanti tai suomi, ei väliä.
Eritoten jos foorumilla on asiaa esim. mainituista 64k demoista tai jopa on saatu tietoa omien käyttisten tekoon, kelpaa erittäin hyvin. Joskin tuollaiseen verrattuna omat jutut sijoittuvat aikaslailla väliin, siis melko laimeita. Ylipäätänsä jos on enemmänkin hardcore koodareille tarkoitettuja foorumeita, joissa kirjastoilla koodaus ei paina mitään, erittäin hyvä. Täältä kun ei tosiaankaan saa tietoa erittäin kovalla tasolla, korkeintaan keskitasolla ja siinäkin niin perusongelmia kuin vain voi olla, mutta kertoopa ainakin käyttäjien taidoista jotain ja ennenkaikkea heidän motivaatiostaan opetella paria hassua kirjastoa ja perusasiaa enemmän... Minä tahdon vain työkalun joka toimii ja on C tai C++ tai vaikka apina...
Grey kirjoitti:
Alkaa muistumaan miksi en ole ollut putkassa pahemmin...
Porukalla ei ole täällä riittävän ruskea kieli ja perustelemattomia mielipiteitä kyseenalaistetaan?
Grey kirjoitti:
Ohjelmoija ymmärtää toimintatavat ja sen miten systeemi toimii, se toinen osaa vain kielen tavat ja kirjastoja käyttää, mutta ei ymmärrä lainkaan miten tiedon käsittely oikeastaan toimii.
Hyvä ohjelmoija osaa tehdä asiat niin kirjastoja käyttäen kuin ilman niitäkin ja lisäksi tietää milloin kumpikin lähestymistapa on järkevä. Huono ohjelmoija ei suostu koskaan käyttämään kirjastoja vaan tekee kaiken omalla tavallaan (huonosti) ja valittaa kuinka kirjastoja käyttävät on luusereita.
Grey kirjoitti:
-POKE/PEEK.
-INP/OUT.
-DEF SEG, VARSEG, VARPTR.
Millä vuosituhannella sä oikein koodaat? Nykykäyttikset eivät tule antamaan sun koskea suoraan mihin tahansa muistiin tai IO-portteihin koska se olisi ihan mahdotonta kun on moniajoa ja tietoturvavaatimuksia. Segmentoitu muisti on myös muinaisjäänne 16-bittisestä moodista, jota nykyään ei kukaan käytä.
Jos et halua oppia nykyajan tavoille niin koodaa hamaan ikuisuuteen sillä QBasicillas.
Lataa IDE ja kääntäjä tästä:
http://sourceforge.net/projects/codeblocks/
Katso tarvittaessa ohjeet asennukseen ja hello worldin kääntämiseen tästä:
http://www.youtube.com/watch?v=ec-yYMTUV3c
Vaikka en nyt tajuakkaan että mitä tässä varsinaisesti ajat takaa, käytännössä vaihtoehtoinasi on kaksi kääntäjää, joko GCC tai clang/LLVM. Visual studion C-kääntäjä tukee hyvin pelkästään yli 20 vuotta vanhaa standardia. Kelpuutettavia IDE:jä taas löytää satoja nopealla googlauksella.
Ja jos GCC ei käännä softaa, vika on 99.9999% varmuudella koodissa olevassa virheessä.
Varmasti se oikeasti paras tapa lähestyä asiaa on tsekata jokin C-ohjelmointiopas.
Grey kirjoitti:
Mitä tulee kielen uusiin ominaisuuksiin, ei ole olemassakaan sellaista asiaa kuin uusia ominaisuuksia. Kaikki on muunnosta vanhasta, hyväksyt eli et...
Väärin.
Uudet paradigmat, koodaustavat ja metodit ovat uusia ominaisuuksia. Olivat ne muunnoksia vanhasta tahi ei, ne ovat silti uusia ja erilaisia tapoja; Toiset parempia, toiset huonompia. Monet metodit ovat kuitenkin välttämättömiä sen kompleksisuuden kanssa, joka nykyaikaiseen koodaamiseen liittyy.
Grey kirjoitti:
En aio kahta erillista pakettia yrittää edes ladata. Haluan tosiaankin työkaluni olevan käytössä heti kun paketti on purettu ja asennettu. Viis siitä mille vuosituhannelle se on tehty, kunhan toimii myös uudemmissa, edes yhteensopivuus tilassa. Eikä tarvitse bloateja lisiä.
Qt Creator rules!
Grey kirjoitti:
Mitä minä sanoin kirjastoista? Varsinkin kahdesta jälkimmäisestä jotka itsestään ovat turhan bloateja. Mitä järkeä jotain kymmeniä megoja yhden pikselin piirtoon tai yhden merkin lukuun on ladata?
1. Jotkin kirjastot ja runtime-ympäristöt (kuten osittain C#:n) ovat ladattuina muistiin vain kerran, jolloin kaikki niitä tarvitsevat softat voivat käyttää samaa instanssia. Funktionaalisuutta jota et kirjastosta tarvitse, ei myöskään aina ole välttämätöntä linkata mukaan.
2. Koodisi on ihan yhtä bloattia loppupeleissä jos haluat tukea eri käyttiksiä ja niiden käyttisten eri versioita ja niinpäinpois.
3. Luultavasti ne kirjastot toteuttavat asiat kuitenkin sinua paremmin.
Grey kirjoitti:
Ohjelmoija ymmärtää toimintatavat ja sen miten systeemi toimii, se toinen osaa vain kielen tavat ja kirjastoja käyttää, mutta ei ymmärrä lainkaan miten tiedon käsittely oikeastaan toimii.
Tiedon käsittelyyn liittyy paljon muutakin kuin mov $FF025,x - siihen kuuluvat myös paradigmat, jäsentely ja algoritmiikka. Systeemin syvimmäinen toiminnallisuus on oikeastaan melko irrallinen asia itse koodauksesta, johon nimenomaan eivät suoranaisesti kuulu sellaiset käytännönläheiset asiat kuten miten käyttis lukee ja kirjoittaa muistia, vaikka tietenkin muistinkäsittelyn perusteet voikin olla aika relevantti aihe.
Grey kirjoitti:
Mitä sitten lopuksi, jos pätevillä ei ole sanottavaa täällä, pyydän ohjaamaan toiselle foorumille.
Pätevyydeksi ei siis riitä yli kymmenen vuoden harrastuneisuus, tietojenkäsittelytieteen opinnot ja vuosien työkokemus aiheesta?
Grey kirjoitti:
Eritoten jos foorumilla on asiaa esim. mainituista 64k demoista tai jopa on saatu tietoa omien käyttisten tekoon, kelpaa erittäin hyvin.
Tulet aina tasan tarkkaan käyttämään vähintään käyttiksen omia kutsuja I/O:n ja muistin käsittelyyn tehdessäsi vaikka 64k:ta nykykoneille ja nykykäyttiksille; Siitä ei pääse yli eikä ympäri. Tietyt kirjastot voidaan jopa katsoa standardiksi tietyllä laitteella, jolloin niiden käyttö 64k:ssa ei ole välttämättä ollenkaan epämääräistä touhua.
Grey kirjoitti:
Tahdon käyttäjäkohtaisia kokemuksia kustakin [kehitysympäristöstä]
Kuitenkin sanoit, että et halua tehdä tästä keskustelusta turhaa väittelyä. Saat mistä tahansa kehitysympäristöstä "käyttäjäkohtaisena kokemuksena" sekä väitteen, että toimii täydellisesti joka tilanteessa ja sisältää kaikki hyvät toiminnot, että väitteen, että ei toimi millään tavalla missään tilanteessa eikä sisällä oikein mitään toimintoja. Mainitsemaani oppaaseen ei ole kerätty suurta joukkoa satunnaisia ympäristöjä, vaan siinä on vain muutama suosittu. Mikään niistä ei ole huono (paitsi Dev-C++, josta kyllä erikseen niin sanotaankin), ja jos jokin olisi erityisen hyvä, varmaan muita ei tarvitsisi mainitakaan.
Gray kirjoitti:
Mitä minä sanoin kirjastoista?
Sanoit niistä tyhmyyksiä – kuten monesta muustakin asiasta. Asenteesi kirjastoja ja muutenkin ohjelmointia kohtaan on aika idioottimainen, ja näyttää, että et tiedä kovin paljon tietokoneista, käyttöjärjestelmistä ja ohjelmointikielistä mutta yrität silti kovasti päteä.
Kun piirrät QB:llä pikselin, kirjoitatko aina uuden POKE-käskyn? Kun luet tiedostoa, käskytätkö suoraan levyasemaa OUT-komennolla? Tuskinpa, vaan käytät kirjastoja – QB:n standardikirjastoa, DOSin keskeytysten muodostamaa kirjastoa tai itse tekemiäsi funktioita, jotka niin ikään muodostavat kirjaston, vaikka se onkin ohjelmasi sisällä piilossa.
Missään nykyaikaisessa, tavalliselle käyttäjälle tarkoitetussa käyttöjärjestelmässä et voi kunnolla ohjelmoida ilman kirjastoja. C-kielellä ei voi edes tulostaa yhtä merkkiä Windowissa käyttämättä kirjastoa – C:n standardikirjastoa, joka kutsuu WinAPI:n tiedosto- tai konsolifunktioita, jotka kutsuvat monia muita Windowsin eri osien eli eri kirjastojen funktioita. Windows on siis jo itsessään suuri kirjasto tai kirjastojen joukko.
Alimman tason kirjasto, jolla Windowsissa on mielekästä ohjelmoida, on WinAPI – ehkä huonoin käyttämäni kirjasto ikinä, mikä varmaan selittääkin osaltaan sen, että yleensä käytetään vielä muita kirjastoja sen päällä. Toinen syy kirjastojen käyttöön on, että silloin saman koodin voi kääntää vaikka Windowsille, Linuxille ja Mac OS X:lle ilman yhtäkään muutosta.
Jos et halua käyttää yhtään mitään kirjastoa, tee oma käyttöjärjestelmä tai käytä DOSia tai muuta sellaista, jossa voit sotkea muistin ja laitteiston ilman mitään rajoituksia.
Grey kirjoitti:
Mitä järkeä jotain kymmeniä megoja yhden pikselin piirtoon tai yhden merkin lukuun on ladata?
Liioittelet kirjastojen kokoja. Esimerkiksi SDL.dll on noin 300 kt, pakattuna UPX:llä alle puolet. SDL ei myöskään ole bloatti, vaan blittaus on todellakin hienoin grafiikkafunktio, joka siitä löytyy.
Grey kirjoitti:
Lisäksi, jos mennään 64 kilon demoihin, enpä usko että kirjastoilla häslääjät pahemmin pärjäävät...
Monet demot jopa 4k-sarjassa on tehty esimerkiksi OpenGL-kirjastolla. (Ilmeisesti kirjaston kokoa ei silloin lasketa demoon. En tiedä kilpailujen säännöistä.) Arvelen, että huipulla ei ole nykyään juuri mahdollisuuksia pärjätä ilman mitään kirjastoa.
Grey kirjoitti:
Duh, näytä minulle kunnollinen opas, – – Ohjelmoida jo osataan, C-alkuisten toimintatapoja ei, ja ne ovat eri asioita.
Sitten sinulla ei pitäisi olla mitään vaikeuksia lukea tätä opassarjaa, jossa selitetään melko kattavasti C++-kielen rakenteet (paitsi pari olio-ohjelmoinnin asiaa, mutta niitä et tarvitsekaan). Jos mielestäsi jokin asia on noilla tiedoilla mahdotonta, se todistaa, että ilman mitään kirjastoja ei paljon pysty ohjelmoimaan. Itse asiassa noilla tiedoilla voi kuitenkin jo tehdä käyttöjärjestelmän, paitsi joihinkin osiin (mm. keskeytykset ja portit) tarvitaan konekieltä.
Grey kirjoitti:
Eritoten jos foorumilla – – jopa on saatu tietoa omien käyttisten tekoon
Jos sellainen kiinnostaa, voit lukea vaikka OSDev-sivustoa. Mitään foorumia tai keskustelua asiaan ei tarvita, vaan noilla tiedoilla pääsee oikein hyvin eteenpäin – tiedän tämän, koska olen itsekin kerran tehnyt pientä käyttöjärjestelmää. Kuitenkin jos et osaa käyttää edes yksinkertaista C-kääntäjää, on aika epätodennäköistä, että osaisit asentaa käyttöjärjestelmäohjelmointiin tarvittavan ympäristön ja käyttää sitä.
Sitten epävirallinen osuus:
Grey kirjoitti:
Alkaa muistumaan miksi en ole ollut putkassa pahemmin...
Alkaa muistua, miksi jotkut kävijät joskus kehittivät Ohjelmointiputkaan ignore-toiminnon.
Grey kirjoitti:
Putkasta kun ei mitään kehittynyttä kun saa irti ikinä. Jos yrität – –, täällä väitetään että se on mahdotonta
Jokainen saa täällä vastauksia oman kehitystasonsa mukaan – tai usein liiankin hyvin. Täällä ei myöskään turhaan väitetä, että jokin olisi mahdotonta. (Ole hyvä ja osoita esimerkki.)
Grey kirjoitti:
Jos jokin psykoosi vaivaa niin sitä varten on olemassa terapioita.
Psykoosia ei oikeastaan koskaan hoideta terapialla, enkä huomaa, että kenelläkään olisi tässä ollut absurdeja harhoja – ellei sinulla itselläsi sitten.
Grey kirjoitti:
Kaappimurolaisuuteen tosin auttaa vain gramma ja pari lyijyä suoraan aivoihin injektoituna...
Ehkä sinun kannattaisi kokeilla sitä itsellesi. Koululääketieteessä hoitomuoto on kuitenkin harvoin käytössä.
Hmm...
Itse c:ssä ei ole mitään tapaa tai syntaksia kirjoittaa pikseleitä tai tehdä muuta jännää. Niitä ei tarjota sulle muuallakaan. Sulle joko tarjotaan kirjastoa tai linkkiä winapin dokumentaatioon tai armottoman pitkiin sekaviin koodinpätkiin jos ei kirjastot siihen väliin kelpaa.
Joudut aina nojautumaan vähintään käyttikseen. Muistiin ei pääse käsiksi suoraan. Jos ei dokumentaation kaivelu kiinnosta, eikä kirjastot kelpaa hommaa helpottamaan, sulla ei ole paljoa vaihtoehtoja.
Lisäksi: jos käännät kirjaston mukaan, siitä mahdollisesti kääntyy vaan tarvittu osa. Jos kirjotat vastaavan winapin käsittelyn ite, näet vaan enemmän vaivaa huonomman tuloksen eteen.
Allegroa koitin aikoinaan basic-pohjalta ja sillä sai alle ruudullisella koodia pikseleitä piirtymään tuttuun tyyliin. Suositan sitä.
On yleinen harhakäsitys, että ohjelmointikielet ovat vain eri syntaksia samoille asioille. Tzaerun mainitsevat paradigmanmuutokset ovat aika iso asia.
64k-demoista.
Oikeasti ne ei ole 64k edes optimoituna. Ne menee monta tuntia kestävän pakkauksen läpi. Niiden koko liikkuu siellä aika monessa sadassa kilossa. 4k:tkin on alunperin kymmeniä kiloja. Ja molemmissa sarjoissa käytetään kirjastoja. Ne kirjastot vaan sattuvat olemaan niin vakiintuneita, että löytyvät järjestelmästä valmiiksi, joten niitä ei välttämättä tarvitse laittaa mukaan.
PS. freebasicista:
Sille on olemassa oikein kivoja idejä, ja se on muilta kuin qb:stä perityltä ominaisuuksiltaan kumman lähellä c:tä. Sillä pystyy myös käyttämään samoja kirjastoja kuin c:llä, ja se voisi sitä kautta pehmeämpi lasku jos menee maltti.
Vähän ohi aiheesta, mutta:
Metabolix kirjoitti:
Grey kirjoitti:
Lisäksi, jos mennään 64 kilon demoihin, enpä usko että kirjastoilla häslääjät pahemmin pärjäävät...
Monet demot jopa 4k-sarjassa on tehty esimerkiksi OpenGL-kirjastolla. (Ilmeisesti kirjaston kokoa ei silloin lasketa demoon. En tiedä kilpailujen säännöistä.) Arvelen, että huipulla ei ole nykyään juuri mahdollisuuksia pärjätä ilman mitään kirjastoa.
Yleensä nykykoneilla 4k- tai 64k -introja tehdessä OpenGL ja DirectX sekä Linuxilla SDL lasketaan niin standardiksi, että ne voidaan olettaa kaikilla olevan ja siten niitä saa käyttää; Linuxilla on kyllä mahdollista tehdä pelkästään X:n kutsuilla hyvinkin toimivaa tavaraa.
Tämän lisäksi Windowsissa ja Linuxissa on vakiona mukana joitain pakkaussoftia joita saa käyttää.
atomimalli kirjoitti:
64k-demoista.
Oikeasti ne ei ole 64k edes optimoituna. Ne menee monta tuntia kestävän pakkauksen läpi. Niiden koko liikkuu siellä aika monessa sadassa kilossa. 4k:tkin on alunperin kymmeniä kiloja. Ja molemmissa sarjoissa käytetään kirjastoja. Ne kirjastot vaan sattuvat olemaan niin vakiintuneita, että löytyvät järjestelmästä valmiiksi, joten niitä ei välttämättä tarvitse laittaa mukaan.
Näh, kyllä tuo työn alla oleva OpenGL:ää käyttävä intro kääntyy ja pakkautuu parissa sekunnissa kahteen kilotavuun.
Koko homma siinä menee näin:
http://koti.kapsi.fi/tzaeru/make_it_tiny.txt
Tallessa myös python-skripta joka kokeilee läpi kääntäjäflageja ja siirtelee randomisti koodinpätkiä paikasta toiseen, mutta totesin ettei sillä ole enempää väliä kuin max 10 tavua, eli ei ihan niin paljoa jaksa nysvätä. ;)
64kt ohjelmat taitaa olla .com päätteisiä ohjelmia ja silloin pitäis päästä suoraan hardikseen kiinni eli kirjoittaa oma bootloader. Tuo codeprojektin artikkeli vois auttaa alkuun.
http://www.codeproject.com/Articles/36907/How-to-develop-your-own-Boot-Loader
Valamiita paketteja ei taida löytyä, mutta netbeans ja eclipse -IDET latautuu klikkauksella. Ei tartte enää kuin löytää sopivat kääntäjät & linkkerit ja viritellä ne toimimaan. Ei ole luultavasti alle tunnin homma.
Ja sitte ei muuta kuin opettelemaan PC:n rakennetta. Ennen muinoin musa-kortin löisi yhden osoitteen takaan, samoin kuin näytön, nymykoneista en enään tiedä. Mutta kerroppa sitte kun tiedät.
tepokas kirjoitti:
64kt ohjelmat taitaa olla .com päätteisiä ohjelmia ja silloin pitäis päästä suoraan hardikseen kiinni eli kirjoittaa oma bootloader.
Demoilla ei kyllä tarkoiteta bootloadereita. Video kertonee kaiken:
http://www.youtube.com/watch?v=AWcbj7ksqwE
Tuo on saatavana ihan kotikoneelle yksinäisenä 4k kokoisena .exe:nä ilman mitään mediatiedostoja jne. Olen kokeillut tuota itsekin ja toimii vielä Win7:lla.
Tzaeru kirjoitti:
atomimalli kirjoitti:
64k-demoista.
Oikeasti ne ei ole 64k edes optimoituna. Ne menee monta tuntia kestävän pakkauksen läpi. Niiden koko liikkuu siellä aika monessa sadassa kilossa. 4k:tkin on alunperin kymmeniä kiloja. Ja molemmissa sarjoissa käytetään kirjastoja. Ne kirjastot vaan sattuvat olemaan niin vakiintuneita, että löytyvät järjestelmästä valmiiksi, joten niitä ei välttämättä tarvitse laittaa mukaan.Näh, kyllä tuo työn alla oleva OpenGL:ää käyttävä intro kääntyy ja pakkautuu parissa sekunnissa kahteen kilotavuun.
Ajattelin tuossa crinkleriä tai jotain övereillä asetuksilla kun tavut ei vaan meinaa riittää :P
tepokas kirjoitti:
64kt ohjelmat taitaa olla .com päätteisiä ohjelmia ja silloin pitäis päästä suoraan hardikseen kiinni eli kirjoittaa oma bootloader. Tuo codeprojektin artikkeli vois auttaa alkuun.
http://www.codeproject.com/Articles/36907/How-to-develop-your-own-Boot-Loader
Tuo on eri asia kuin demoissa. Windows lakkasi lopullisesti tukemasta noita yli kymmenen vuotta sitten xp:n julkaisun myötä. Olivat jo silloin toivottomasti vanhentuneita. Eri asia tietty tuo käyttiksen säätö. Silloinkin halutaan äkkiä eroon 16-bittisestä tilasta.
Meinasin aikoinaan ostaa muutaman win98:n että saisi vielä säädettyä vanhoja juttuja, mutta taitaa olla ihan hyvä juttu, ettei tullut ostettua. Dosbox ja virtuaalikonet tukee vielä, jos on ihan pakko.
16-bittisestä ajasta on edetty jo muutama harppaus. 32-bittisiä, mutta 16-bittisyyttä tukevia on tullut kourallinen 90-luvulla. Samaan aikaan julkaistiin nt-sarjaa muutama malli. Se ei tukenut 16-bittisiä juttuja alkuunkaan. Siitä sitten kehittyi windows xp, jonka jälkeen on tullut jo KOLME windowsia, jotka ei ole kuullutkaan 16-bittisyydestä.
Että olisi aika pikkuhiljaa herätä nykyaikaan. Aika on muuttunut. Jutut toimii nykyään erilailla. Moniajon myötä on ollut pakko tehdä jutut erilailla. Ei siitä tulisi mitään jos kaikki käpistelisivät samaa muistia miten sattuu.
Toki on jäljellä kokeellisia hiukan nykyaikaisempia käyttöjärjestelmiä, joissa on matalampi bloattiuden taso ja se on ihan kiva, mutta ne eivät valitettavasti ole kovin käyttökelpoisia.
No joo, mutta vaihtoehtoja.
Jos haluaa ite tehä, niinku ylempänä oli, niin ei taida enään muita vaihtoehtoja olla kuin bootloader ja sitä kautta rautaan kiinni. Käyttiksen läpi ei taida enään päästä tai ei ainakaan ole suositeltavaa yrittää.
Luultavasti tälle ketjun aloittajalle riittää normi windows-exe ja siihen ajonaikana linkatut kirjastot taikka dll:t niinku ne niitä nimittää. Silloin jää exe pieneksi eikä matkassa kulje turhia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.