Autor | Zpráva | ||
---|---|---|---|
RastyAmateur Profil |
#1 · Zasláno: 28. 2. 2016, 13:53:45
Krásné odpoledne,
zrovna jsem četl pár článků o všelijakých programovacích jazycích a napadlo mě pár otázek, které jistě většina z vás dokáže zodpovědět... Jak programovací jazyky vznikají? Je mi jasné, že každý programovací jazyk byl (pravděpodobně) napsán v nějakém jiném programovacím jazyku. Často jsem četl, že spousta programovacích jazyků vznikla na základě Cčka. Jak tedy vzniklo Cčko? Jak je možné, že programovací jazyk vytvořený v jiném jazyce je rychlejší než původní jazyk sám? Nebo se v tom snad pletu? Jak je asi vidět - mám v tom neskutečný guláš. Tyto teoretické základy mi očividně chybí. Pokud někdo zná nějakou "učebnici", nebo článek zabývající se těmito či podobnými tématy, budu rád, když mi ho sem hodí (angličtina by neměla vadit). Děkuji, RA |
||
Martin2 Profil * |
#2 · Zasláno: 28. 2. 2016, 16:29:47
RastyAmateur:
„Jak programovací jazyky vznikají?“ Přirozenou lidskou leností. Když se lidem přestalo chtít psát programy jako dírky do papírové pásky, vznikl assembler. Pak se jim zdál assembler nepřehledný a špatně přenositelný, vymysleli céčko. Když céčko přestalo stačit potřebám velkých programů a velkých týmů, doplnily se do něj objekty a vzniklo C++. A tak dál. „Jak je možné, že programovací jazyk vytvořený v jiném jazyce je rychlejší než původní jazyk sám? Nebo se v tom snad pletu?“ V tom se spíš pleteš. Vyšší jazyky jsou jednodušší pro práci, ale nebývají rychlejší. |
||
RastyAmateur Profil |
#3 · Zasláno: 28. 2. 2016, 16:36:37
Martin2:
V první řadě děkuji za reakci! Takže když napíšu program v tom assembleru tak bude velice rychlý (oproti stejnému programu např. v Pythonu)? |
||
Martin2 Profil * |
#4 · Zasláno: 28. 2. 2016, 16:43:06
RastyAmateur:
„Takže když napíšu program v tom assembleru tak bude velice rychlý“ Teoreticky. Překladače třeba z céčka bych nepodceňoval. Jsou už hodně kvalitní, umí optimalizace, které by člověka ani nemusely napadnout. |
||
Joker Profil |
#5 · Zasláno: 28. 2. 2016, 17:37:25
RastyAmateur:
„Takže když napíšu program v tom assembleru tak bude velice rychlý (oproti stejnému programu např. v Pythonu)?“ To závisí na tom, jak ten program bude napsaný. I v PHP, nebo jiném jazyku, lze napsat dva kódy, které řeší stejný problém a v rychlosti se budou lišit klidně o několik řádů. Na jedné straně je pravda, že optimálně napsaný program v assembleru bude rychlejší, přinejhorším stejně rychlý, jako optimálně napsaný program v nějakém vyšším programovacím jazyku. Ale na druhé straně ve vyšším programovacím jazyku je snazší se tomu optimu přiblížit. Naprogramovat určité zadání v assembleru bude typicky mnohem náročnější a s vyšším rizikem chyb, než naprogramovat totéž zadání ve vyšším programovacím jazyku. Pro srovnání, kód, který vypíše čísla od 1 do 9 v PHP: for ($i = 1; $i <= 9; $i++) echo $i; A totéž v assembleru (převzato odsud): section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov ecx,10 mov eax, '1' l1: mov [num], eax mov eax, 4 mov ebx, 1 push ecx mov ecx, num mov edx, 1 int 0x80 mov eax, [num] sub eax, '0' inc eax add eax, '0' pop ecx loop l1 mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .bss num resb 1 |
||
Alphard Profil |
#6 · Zasláno: 28. 2. 2016, 18:20:17
RastyAmateur:
„Jak je možné, že programovací jazyk vytvořený v jiném jazyce je rychlejší než původní jazyk sám? Nebo se v tom snad pletu?“ Podle mě tady chybí jedna důležitá věc. Programovací jazyky lze rozdělit na kompilované a interpretované. Zatímco při vytváření sekvence interpretovaný jazyk napsaný v interpretovaném jazyce (atd.) bychom postupně nutně ztráceli rychlost, u kompilovaných jazyků to neplatí. Ať je program kompilovaný v libovolně pomalém prostředí, jeho výsledná rychlost závisí jen na kvalitě kompilátoru. V PHP je možné napsat kompilátor vlastního jazyka a program vytvořený v tomto prostředí by mohl být mnohem rychlejší než PHP samotné. |
||
RastyAmateur Profil |
Martin2, Joker, Alphard:
Znovu děkuji za reakce. Všem těmto odpovědím rozumím, ale stále si je nejsem schopen srovnat a zařadit. Jak to tedy aktuálně chápu: Napíšu aplikaci např. v Cčku. Ten kód se převede do assembleru. Assemblerský kód se převede do strojového kódu, který se předá hardwaru [smal](typuji procesoru, ale v hardwaru se vůbec nevyznám, takže to je vážně jen typ)[/small] a ten vykoná daný script. Chápu to alespoň částečně správně? Ještě jedna doplňující otázka: Binární kód je strojový kód typu 00101011 00101100? |
||
Joker Profil |
#8 · Zasláno: 29. 2. 2016, 08:13:01
RastyAmateur:
„Napíšu aplikaci např. v Cčku. Ten kód se převede do assembleru. Assemblerský kód se převede do strojového kódu“ Bez toho assembleru, řekl bych. Assembler je lidsky čitelný zápis strojového kódu (ale termíny assembler a strojový kód se někdy zaměňují), takže pro kompilátor by to byl zbytečný mezikrok. Ale jinak ano, strojový kód už zpracovává počítač. Binární kód v tomhle kontextu bude spíš synonymum pro strojový kód. Jinak jak vypadá strojový kód se dá podívat, stačí si otevřít nějaký .exe soubor třeba v Notepadu a část toho obsahu je strojový kód. |
||
RastyAmateur Profil |
#9 · Zasláno: 29. 2. 2016, 11:31:29
Joker:
Děkuji.. :) |
||
Davex Profil |
#10 · Zasláno: 29. 2. 2016, 18:37:43
Joker:
„Bez toho assembleru, řekl bych.“ Není překladač jako překladač. Třeba v GCC proběhne proces překladu celkem čtyřmi kroky: preprocesor, kompilátor, assembler a linker. |
||
RastyAmateur Profil |
#11 · Zasláno: 29. 2. 2016, 21:08:20
Ještě dotaz. Jak je to konkrétně u PHP? Pokud vím, tak je napsaný v Cčku. To se kód přeloží do Cčka a ten se následně přeloží do strojového kódu?
|
||
Davex Profil |
#12 · Zasláno: 29. 2. 2016, 22:02:41
RastyAmateur:
„To se kód přeloží do Cčka a ten se následně přeloží do strojového kódu?“ Pokud tím kódem myslíš PHP skripty, tak ne. Většinou jsou dvě možnosti: 1) PHP do verze 5.6 přeloží skript do bytecode, který při běhu interpretuje 2) PHP od verze 7 nebo třeba jiná implementace PHP v HHVM přeloží skript do bytecode a následně před spuštěním do strojového kódu (AOT/JIT), který se přímo vykonává v procesoru |
||
RastyAmateur Profil |
#13 · Zasláno: 1. 3. 2016, 07:05:02
Davex:
Děkuji :) |
||
Časová prodleva: 9 let
|
0