Kezdőoldal » Számítástechnika » Programozás » Mi is valójában a forráskód?

Mi is valójában a forráskód?

Figyelt kérdés

Próbáltam keresgetni rá, de ugye minden szaknyelven van, amiből sokat nem értettem.

De néha ugye hallani, hogy pl ennek vagy annak a játéknak kikerült a forráskódja, vagy épp, hogy egy program esetében ami nyílt forráskódú azt bárki tudja ellenőrizni, hogy mit tartalmaz pontosan stb.


De most mi is ez a forráskód tulajdonképp? Ha nem kerül ki vagy nem ynílt akkor miért olyan nehéz, vagy lehetetlen hozzáférni, illetve mit csinál pontosan egy játékban-programban?



2021. ápr. 17. 22:40
1 2
 1/16 anonim ***** válasza:
98%

A forráskód az, amit a programozók megírnak. Ez egy ember számára olvasható szöveges fájl. Ezt egy program lefordítja gépi kódra, hogy a számítógép képes legyen értelmezni és futtatni. De ezt te már nem olyan könnyen olvasod, nyiss csak meg egy exe fájlt jegyzettömbbel.

A legtöbb cég nem nagyon szeretné, ha az emberek hozzáférnének a forráskódhoz, mivel így lehetőség lenne például kijátszani az aktiválósdit, vagy kiderülnének bizonyos dolgok, amit nem biztos hogy a cég szeretné ha tudnánk. (köh köh... microsoft)

Ha megvan a forráskód, onnantólkezdve gyakorlatilag azt csinálsz a programmal, amit akarsz. Csak ugye vannak ezek a licencek meg miegymás.

2021. ápr. 17. 23:38
Hasznos számodra ez a válasz?
 2/16 2*Sü ***** válasza:
92%

A számítógép processzorának van egy szűk utasításkészlete. A lefordított program bájtokat tartalmaz, bájtok jelentik az egyes utasításokat, és azok paramétereit, bájtok jelentik a különböző adatokat is. De ma egy programozó nem így programozik, hanem valamilyen fejlettebb, magasabb szintű – vagy szükség esetén kevésbé fejlett, a gépi kódhoz közelebb álló, alacsonyabb szintű – nyelven, amit egy fordító vagy értelmező fordít le gépi kódra. A programozó beírja pl. azt, hogy y=sin(x) – azaz az x nevű változó értéke legyen egyenlő az a változó értékének szinuszával –, a fordító meg legenerálja azt az utasítássorozatot, amit a processzor ért, memória olvasásokra, írásokra, alapműveletekre stb… Lehet egy egysoros programkódnak lesz egy ciklusokkal és elágazásokkal teletűzdelt, több száz soros gépi kódú utasítás sora.


Egy kisebb, gépi kódra lefordított programocska elemzése is elég kihívást jelent. Kicsit olyan, mint egy kész ételből reprodukálni a receptet, ami alapján készült. Egy játékprogramnak valószínű a forráskódja is több tíz- vagy százezer programsor, a gépi kódú fordítása még több gépi kódú utasítást tartalmaz. Illetve míg a forráskódban pl. névvel jelölt változók vannak, amiknek az elnevezése a legtöbbször beszédes, addig a gépi kódban nincsenek megnevezések, csak memóriacellákra való hivatkozások. Az sokkal nehezebben értelmezhető, hogy „olvasd be az 57. memóriacellában lévő értéket, olvasd be a 68. memóriacellában lévő értéket, add össze a kettőt, írd be az eredményt a 168. memóriacellába”, mint az, ami ennek a forráskódja, pl. „egyenleg=bevetel+kiadas”. Az eredeti forráskód sokkal könnyebben értelmezhető, megleshető, hogy mit pontosan hogyan is csinál az adott program, így pl. lehetőség van a program módosítására, a programban használt megoldások lemásolására, hibák, kiskapuk megtalálására, így azok kihasználására. Egy játék esetén ez a másolásvédelem megtörésére, csalások kitalálására, ártalmas kód futtattatására is alkalmas lehet.


Máshol meg pont ez a cél, hogy a hibák derüljenek ki, a programot más is kiegészíthesse ilyen-olyan funkciókkal, ezért nyílt, elérhető az program forráskódja. Ez két különböző szemlélet. X étterem szívesen megosztja veled, hogy hogyan is készítik nálunk a kedvenc fogásodat, Y étterem meg ezt hétpecsétes titokként őrzi.

2021. ápr. 18. 00:10
Hasznos számodra ez a válasz?
 3/16 A kérdező kommentje:
Köszi a válaszokat, így azt hiszem értem :)
2021. ápr. 18. 00:14
 4/16 anonim ***** válasza:
91%

"Egy játékprogramnak valószínű a forráskódja is több tíz- vagy százezer programsor"


Csak érdekességképpen: a vanilla magento 2 több, mint 4 millió sor. Ebben benne vannak a konfigok és template-ek, szóval a valós programkód valamivel kevesebb sor... Pontosabbat nem tudok mondani, mert a cloc nem tudta megenni a projektet, túl sok fájlból áll neki :D Szóval a tíz és százezerrel nagyon alálőtted. 4 millió sor, pedig ez "csak" webshop :D

2021. ápr. 18. 01:07
Hasznos számodra ez a válasz?
 5/16 anonim ***** válasza:
35%

"Szóval a tíz és százezerrel nagyon alálőtted. 4 millió sor, pedig ez "csak" webshop :D"


Hahh..

Ez nem így van.

Az, hogy egy játékprogramnak hány soros a forrása, sok mindentől függ, de abszolút _nem jellemző_, hogy millió sorokból állna.

Vannak kisebb, logikai játékok, azok igénylik a legkevesebb kódsort, legalábbis átlagban. Egy 2D platform játék is kihozható mélyen százezer sor alatt. Egy mario-szerűség nálam belefért 2400 sorba.

A kalandjátékok mögött sincs vállalhatatlanul sok kóder munka.

Gondolj bele, egy konzol, ami beépített játékokat tartalmaz, 4 MB vagy még kisebb méretű ROM-ban tárol sok tíz játékot. Igaz, hogy ezek fölött már eljárt az idő, de a game-ek jobbára ma is csak pocakra híznak. Azaz, a játékprogramokban nem a core logika sok, az elfér adott esetben 2-10 MByteban is, hanem a rengeteg erőforrás, a grafikai elemek, a zenék, hangeffektek, stb.

2021. ápr. 18. 09:26
Hasznos számodra ez a válasz?
 6/16 2*Sü ***** válasza:
96%

Igen, adott nézőpontból egy program forráskódja akár lehet több millió sor is.


Huhh… Bár ez részletkérdésnek tűnik a kérdező kérdésének szempontjából, viszont erről parttalan diskurzust lehetne folytatni…


~ ~ ~ ~ ~ ~ ~


Vannak triviálisabban feloldható kérdések. Pl. az üres sorok, megjegyzések részei a forráskódnak? Könnyű azt mondani, hogy érdemben nem.


~ ~ ~ ~ ~ ~ ~


A kódolási konvenciókból fakadó extra sorok sorai-e a forráskódnak? Pl.:


if (feltétel) utasítás else másikutasítás;


vs.


if (feltétel)

{

utasítás;

}

else

{

másikutasítás;

}


Itt is könnyebb azt mondani, hogy a logikai utasítások számítanak, van egy if, meg két utasítás, tehát logikai szempontból három sorról van szó, akármilyen nyelvben van is megvalósítva, akárhogy is van tördelve.


~ ~ ~ ~ ~ ~ ~


Kérdés, hogy pl. a konstansok, változók deklarációi vagy pl. a nyelvvel járó extrák sorai-e a forráskódnak. Oké, mivel ezek nélkül a program nem fordítható, legyenek ezek is sorai a forráskódnak. És itt pl. nagyon nem mindegy, hogy milyen nyelven íródott az adott program, egészen máshogy fest egy Java nyelven írt program, meg ugyanaz Pythonban megírva. (Mondjuk ez abból a szempontból sem mindegy, hogy milyen beépített függvényeket, utasításokat nyújt a nyelv. Pl. az egyik nyelvben van egy beépített függvény arra, hogy megmondja, hogy adott koordinátán az adott napon mikor kel fel a Nap, a másikban meg nincs, így neked kell megírnod, vagy egy függvénykönyvtárat behúznod, vagy egy ilyenből kiollóznod.)


~ ~ ~ ~ ~ ~ ~


Oké, a képeket, zenéket, videókat aligha lehet a forráskód kód részének tekinteni, hiszen ezek adatok, jellemzően külön fájlokban. De kérdés, hogy az alapvetően adatnak számító, de kódként működő programrészek mennyire részei a forráskód kód részének. Pl.:

http_status_messages = {

200: 'OK',

201: 'Created',

202: 'Accepted',

300: 'Multiple Choices',

301: 'Moved Permanently',

403: 'Forbidden',

404: 'Not Found',

}

Ez emberi nézőpontból nézve adat, de programozási szempontból a kód része.


Hasonló kérdés, hogy ha a játék megjelenít egy szöveget, mondjuk súgót és hasonlókat, amik viszont HTML-ben, CSS-ben, esetleg kisebb Javascript kódokban van megvalósítva, azok érdemi részei-e a forráskód *kód* részének, vagy ezek a html, css, js fájlok adatoknak tekinthetők-e.


~ ~ ~ ~ ~ ~ ~


És itt jönnek a nehezebb, nem éppen triviális kérdések…


Pl. mennyire a program forráskódjának a része egy mások, vagy a magad által fejlesztett függvénykönyvtár, amit esetleg egy másik programból emeltél át, vagy úgy tervezted, hogy egy másik programban is felhasználsz majd? Pl. egy játékmotor része-e a programnak, ha azt a játékmotort egy másik játékban is felhasználod (akár egy az egyben, akár kisebb módosításokkal)? Nem tekinthető-e ilyen esetben a játékmotor egy külön projektnek, amit csak felhasználsz a saját játékodban?


~ ~ ~ ~ ~ ~ ~


Mennyire tekinthetők a program forráskódjának a program működése során soha le nem futó kódrészek, alprogramok, amik viszont a játék létrehozásához mégiscsak szükségesek? Pl. lehet, hogy a játék egy térképet egy adatfájlból olvas be, viszont a térképet egy külön programocskával generálom le. Hasonlóan kérdés, hogy mennyire a program részei a teszteléshez tartozó kódok – ami adott esetben jelentős része is lehet a kódbázisnak –, a migrációs scriptek, a product verzióba bele nem kerülő, de a fejlesztés során használt debug kódok stb…


~ ~ ~ ~ ~ ~ ~


Mennyire tekinthető a program forráskódjának pl. egy online multiplatform játék esetén a honlap, ahol regisztrálni lehet, jelszót módosítani és hasonlók? Erre külön projektként, körítésként tekintünk, vagy részei a játéknak?


~ ~ ~ ~ ~ ~ ~


Szóval az, hogy mi számít forráskódban sornak, mi van az adott projekten belül és mi az, ami külső, az nem is annyira triviális kérdés, jó válasz nincs ezekre, csak egyformán elfogadható alternatív döntések, hogy mit tekint valaki annak. Ez annál azért kicsivel komplikáltabb kérdéskör, mintsem ráeresztek a kódot tartalmazó mappára egy cloc-ot. De igen, adott szemléletmódot választva egy nagyobb szoftver kódja akár tekinthető több millió sorosnak is. És lehet, hogy bájtról bájtra ugyanaz a kód más szemléletmód alapján meg nincs százezer sor.

2021. ápr. 18. 11:58
Hasznos számodra ez a válasz?
 7/16 anonim ***** válasza:
0%

Ha egy rakat bittérképes grafikát átkonvertálok hex adattömbökbe és be include-olom a forrásba, attól az még nem lesz forráskód.

Ugyanígy van ez a hanggal, egyéb erőforrással.

Ha a hang egy .pcm file, csak éppen integrálva van a kódba, az sem válik kóddá. Az a kód, ha én generálom ki ugyanazt a hangot saját algoritmussal.


Az számít kódnak, ami kód is /tehát nem adat/.

A segédprogramok sem számítanak bele egy-egy applikáció forrásába, hiszen ezek sokszor csak adatkonverterek, vagy más programokhoz is használatos, általános v. spec. célú segédletek.

Ezzel az erővel a fordító forrását is hozzá számolhatnánk.


Maga a lefordított, futtatandó file is tartalmaz egy adat szegmenst és egy kódszegmenst.

Ha egy játéknak van ezer pályája, akkor is, ugyanazok az algoritmusok fogják a pályát megrajzolni, az inputot lekezelni, stb., amik a legelső három pályán dolgoztak. Értelemszerű, hogy a forráskód sem fog nőni még hatszáz pálya hozzáadásával. Akkor sem, ha a pályák bele lesznek fordítva a futtatható állományba.

2021. ápr. 18. 12:21
Hasznos számodra ez a válasz?
 8/16 anonim ***** válasza:
0%

Megnéztem, a COD 750 ezer sor, az unreal engine 4 pedig két millió.


Ennyit a sok millió soros játékokról.

2021. ápr. 18. 12:31
Hasznos számodra ez a válasz?
 9/16 anonim ***** válasza:
89%
Te most vettél unreal engine subscriptiont csak ezért? A CoD kódja merre is van?
2021. ápr. 18. 12:39
Hasznos számodra ez a válasz?
 10/16 2*Sü ***** válasza:
96%

> Ha egy rakat bittérképes grafikát átkonvertálok hex adattömbökbe és be include-olom a forrásba, attól az még nem lesz forráskód.


Hát vagy igen… Vagy nem… Vagy mégis… Vagy mégsem…


Van, amikor ez nem annyira triviális kérdés, hogy mi kód és mi adat. A felhozott PCM példáddal a legtöbben ugyan egyetértenek, de mi a helyzet ezzel:


string intToRoman(int num) {

 string m[] = {"", "M", "MM", "MMM"};

 string c[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};

 string x[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};

 string i[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};

 string thousands = m[num/1000];

 string hundereds = c[(num%1000)/100];

 string tens = x[(num%100)/10];

 string ones = i[num%10];

 string res = thousands + hundereds + tens + ones;

 return res;

}


Itt az első négy sor az most kódsor, vagy a forráskódon kívülre számítandó adat, ami – most leszámítva azt, hogy ennek mennyi értelme lenne – akár tárolható lenne egy külső adatfájlban is? Itt azért már többen mondanák azt, hogy ez még ha adat is, alapvetően mégiscsak a kód része. Elég széles a skála az egyetlen változó értékének inicializálása és egy PCM fájl hexa tömbje között, és elég nehéz meghúzni a határt, hogy milyen mennyiségű és struktúrájú adatot tekintünk vagy nem tekintünk a kód részének.


~ ~ ~


> A segédprogramok sem számítanak bele egy-egy applikáció forrásába, hiszen…


Igen, ez az *egyik* vélemény, amit teljesen el lehet fogadni. A másik meg a forráskód részének tekinti, hiszen ezek szükségesek a program előállításához, nélkülük nem lenne a program az, ami. És ezt a véleményt is pontosan ugyanolyan jogosan lehet elfogadni.


> Ezzel az erővel a fordító forrását is hozzá számolhatnánk.


Azért a fordítóról mégiscsak a legtöbben azt gondolják, hogy az valami külső dolog, pl. a forrása nincs benne a program forráskód mappájában, viszont a programtól függetlenül létező, értelmezhető valami. Viszont a segédprogramokat – pl. egy verzióváltáshoz szükséges adatbázis migrációs scriptet, vagy a telepítő konfigurációs fájlját – a programozó írta, önmagukban nem értelmezhetőek, kimondottan a program valamilyen részének az előállítása a céljuk és nélkülük a program nem az, ami.


És itt sem fekete-fehér a dolog, hanem egy szürke skála, ahol önkényes behúzni bármilyen határvonalat, így az szabadon elfogadható vagy elutasítható.

2021. ápr. 18. 13:54
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!