Hogyis van ez Programozásnál?
Arra lennék kiváncsi, hogy hogy hozták létre a programozási nyelvet.
Gondolok én most arra hogy pld van egy előre deklarált fügvényem memmcpy() a .h fájljában ez van :
_CRTIMP void* __cdecl __MINGW_NOTHROW memccpy (void*, const void*, int, size_t);
# define _CRTIMP
__cdecl --------------------------- Not found.
#define __MINGW_NOTHROW __attribute__ ((__nothrow__)).
Mindegyik csak egy makro ként van előre létrehozva,
akkor honnan tugya a program hogy azzal mit is kell csinálni?
vagy pld van a c++ ban struct, enum,class,.... .
Maga a program honnan szedi hogy mit kell vele csinálni tudom hogy be vannak ezek épitve magába a forditóba.
De abba is valahogy létre kellett hozni hogy tugya a PC mire is jo az a valami.Vagy pld a Legelső programozási nyelvet is létre kellett hozni.
Ezeket mind legelőször számitógép nyelvén hozták létre?
Struct ot is legelőször Gépi kód ként hozták létre?
De akkor a késöbiekben létre jöt utasitások azokat honnan tugya hogy mire valók.
Egy másik pld, hogy érthető legyen:
int fd;
.h file
extern ont socket (int __domai,int __type,int __protocol)__THROW;
Maga a PC honnan tugya hogy ezzel egy socketek hozzunk létre és neki ezt pont teljesitenni kell.
Értem én, hogy ott van a Socket de a PC honan tugya hogy neki is egy uj socketet kel létrehozni.
Egy szoval nem látok a belsejében hogy ott mi is történik nem értem.
A példánál maradva: a memccpy konkrétan nincs implementálva a fordító könyvtáraiban, helyette Windows esetében a C:\Windows\System32\msvcrt.dll-ben megírt memccpy-t hívja meg, GNU/Linux esetében is hasonlóan van, csak ott a glibc könyvtárral.
A class, struct és hasonlók meg a fordítóban vannak megoldva, a nyílt forráskódú GCC fordítóban pl meg is lehet keresni.
"pld a Legelső programozási nyelvet is létre kellett hozni.
Ezeket mind legelőször számítógép nyelvén hozták létre? "
igen (legalább is én ezt hallottam)
persze aztán idővel képessé válik a nyelv hogy saját magában írják tovább
Áttekintő nagy vonalakban.
A számítógépek nem egy lépésben fejlődtek azzá, amik most. Van egy történelmük, olvasgass a Turing-gépről, google meg fogja találni.
Ha a programnyelvek alapgondolatát akarod megérteni, jó lenne mechanikai és elektronikai véna is, mert csak a szoftvertechnika kb olyan, mint amikor azon filozol, hogy egy emberi gondolat hogyan tud felemelni egy pohár vizet - csontváz és izomzat nélkül sehogy. És első körben felejtsd el a "programozás" szót is. Inkább "információtechnológia" kifejezés mentén kellene gondolkodni. Bármilyen művelet, amit elvégzel, végső soron csak adatot mozgat szoftveres / elektronikai / mechanikai szinten. Adatmozgatás egy billentyűzeten leütött billentyű beolvasása memóriába, vagy file-ok kiírása memóriából a winchesterre, esetleg kinyomtatásuk pdf dokumentumként valami printerre stb. Ha éppen a memória változókat, vagy a függvényeket nézed, azok a már memóriába került, vagy még memóriában lévő adat irányítását végzik, semmi egyéb misztikus rendeltetésük nincsen. Ha leragadsz annál a részletnél, és nem érzékeled a kép egészét, akkor csak tévelyegni fogsz a sűrűjében. Ha az egész képet akarod megérteni, akkor az egész képet nézd, ne a részletekben akarj elveszni.
És igen, amúgy a programozásnak van egy alapnyelve, assembly-nek is hívják, és konkrétan elektronikai szinten része a processzornak (mikrokód és vagy huzalozott formában), mint ahogy temérdek sok memória kezelési szabály is, amit azért csak úgy lehet elvégezni, ahogy, mert a processzor elektronikailag nem képes máshogyan csinálni, és a szoftver elektronikára van építve. Ha ízelítő kell, mi minden benne volt egy processzorban pld már 30 évvel ezelőtt is, kotord fel a neten az Intel leírását a 80386-os processzorról. Készülhetsz rá, hogy nem kicsike az a doksi.
Remélem, jól megy az angol, mert magyarul szinte semmit sem fogsz tudni megtalálni. Informatikában angol nélkül elvesztél.
Kösz
Valami ilyesmire gondoltam.
Mert ez a része nem megy a fejembe, hogy mit tesz.
Jó pld megirok egy függvényt igen tudom mire való std...
De hogy, hogy végzi el a dolgat pld előre deklarált
típusból létre hozok valamit akkor azt honnan fogja tudni hogy mit is akarok tőle.
Mert ugye létrehozták a 'Nyelvet' .
De utána jött a többi pld az internet Socket.
Na onnan a forditó honnan tudta hogy mit akarnak tőle vagy is az egész gép.
Hogy igen most létre hozok egy Socketet neked meg pont ezt kell használni, ugy gondolom hogy létre hoznak pld 2 változót Socket és sockeT, akkor azt honnan szedte hogy pont a Socket -et kell felhasználni nem a másik változót.
Igen a Turing gépről hallottam már.
Kicsit tényleg átgondolhatnád, mivel akadtál el, mert nem túl érthető.
Egy magas szintű programnyelvben ha leírsz bármilyen elemet, megnézi a fordító, mik tartoznak hozzá, és az egész libet behúzza a projectbe. Példa. Ha megírsz egy programot pld c++-ban, és éppen gcc-vel fordítod le, keresztül fog menni a fordítás egy egész toolchain-en. Első körben szöveg -> szöveg konverzió van. Például lefordul a c++ előbb ansi c-re, utána megy tovább a fordítási folyamat, lefordul az ansi c ideal assembly-re, az pedig tovább az adott processzoron assembly-re, ami végül gépi kódra. Összerakja a fordító magát az exe-t (van header, mindenféle bejegyzésekkel, relokálás stb), amit utána futtathatsz.
A program onnét tudja, hogy te az adott socket-ot akarod használni, hogy leírtad neki. A programnyelv azt fordítja tovább, amit leírsz. A leírt magas szintű utasítások végső soron 1:1 állítják elő az alacsony szintű műveleteket. Amit te leírtál egyetlen sorban, abból végső soron sok10000 sornyi gépikód is előállhat a fordítás során, azzal neked nem kell foglalkoznod egy magas szintű programnyelvben.
Ha éppen a socket a misztérium, maga a socket semmi egyéb, mint memória struktúra, amiről a rendszer tudja, hogy ethernet kommunikációra hozta létre. Vannak kommunikációs protokollok, maguk az elemi műveletek is kvázi tovább fordulnak apró csomagokká, amiket az ethernet kártya kiküld / fogad. Kiküldeni pedig azért tud, mert egy olyan elektronika. Maga a kiküldés semmi egyébből nem áll a rendszer számára, mint adott porton elküldeni a kártya saját memóriájába a csomagot, amikor éppen van hely következő csomagot kiküldeni, és a kártya azt bitenként elektromos jelekké alakítja, ami megy tovább a kábelen. Annak a folyamatnak melyik részét szeretnéd boncolgatni?
Igen tudom elég rosszul fogalmaztam most ,hogy igy visszaolvasom.
Nagyjából ezekkel tisztában is voltam.
Akkor megpróbálom megint elmagyarázni:
pld Linux -nál.
extern int socket (int __domai,int __type,int __protocol) //socket.h ban
Ez egy int tipusu függvény ami 3 db int változó értéket kérbe.
__domai pld AF_INET //ami a socket.h ban net
#define AF_INET 2 //értékell bir TCP
__type pld SOCK_STREAM //ami 1 értékell bir a socket_type.h ban
enum __Socket_type{
SOCK_STREAM =1
#define SOCK_STREAM SOCK_STREAM
...
...
..
}
__protocol legyen 0 automatikus
Na most akkor itt jön a kérdés hogy ha én létrehozom a socketet akkor maga a gép honnan tugya, hogy az, az internet hez van vagy, hogy ne más adat kerüljön bele.
pld az AF_INET helyébe én létrehozok egy változót
pld: int alma = 2
és tehetném be az alma szót vagy adok neki 3 mas értéket .
vagy a SOCK_STREAM nél honnan tugya hogy TCP kapcsolatot akarok amikor csak 1 es értéket kap.
Mert akkor én is létre tudok hozni egy ilyet pld
extern int világbabe(int lakatos,int nemtudom,intnetproto);
és lényegébe akkor ennek is ugyan ugy kellene működnie.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!