Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Byl by někdo ochotný napsat pár článků o Assembleru? Nemyslím základy, ty umím, jde mi spíš o pokročilejší věci(např. okna ve Windows).

Odpovědět 13.12.2013 17:23
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
Zdeněk Pavlátka:

Nevidím tu zrovna velký zájem :D

Nahoru Odpovědět 13.12.2013 18:38
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
Inoue Yūki:

Nevím jestli by to bylo výhodné. Assembler se liší podle typu procesoru. Dál není moc velký zájem o 2G jazyky. Samozřejmě je možné, že se někdo objeví, ale nepočítej s tím, že hned začne vycházet seriál. Taky by jsi to mohl napsat sám. Lidi by se přidali.

Editováno 13.12.2013 18:49
Nahoru Odpovědět  +1 13.12.2013 18:49
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Inoue Yūki
Zdeněk Pavlátka:

Hodlám si vytvořit svůj programovací jazyk a překládat ho do ASM, ale zvládl bych leda konzolové aplikace. Jeden pěkný tutoriál jsem na webu našel, ale byl anglicky ale hlavně byl závislý na určitých knihovnách k používanému kompileru.

Nahoru Odpovědět 13.12.2013 19:06
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

Ahoj,

pokud si chceš přečíst něco o tom, jak v Assembleru programovat běžné aplikace, tak si zkus sehnat knihu Mistrovství v Assembleru. Řeší se tam sice i starší systémy jako Windows 9x (co si matně pamatuju), ale tobě jde, jestli to dobře chápu, o aplikační programování, tam tak vleký rozdíl není.

Moc nerozumím tomu, proč jsi schopen překládat do Assembleru pouze konzolové aplikace. Ledaže by měl tvůj jazyk nějaké hodně specifické konstrukty. Jinak je totiž programování s okny jen o volání správných API funkcí ve správném pořadí a o znalosti toho, jak funguje zasílání zpráv. Nemyslím, že by zhlediska překladu nějakého vyššího jazyka do Assembleru v tom měl být zásadní rozdíl.

Nahoru Odpovědět 16.12.2013 10:24
2 + 2 = 5 for extremely large values of 2
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Na tvojom mieste by som ten jazyk radšej prekladal do niečoho iného ako ASM. Skus llvm IR, gcc RTL, c-- pripadne do CLI... Získaš tak skoro zadarmo veľa optimalizácii a výsledný kód bude oveľa rýchlejší.

 
Nahoru Odpovědět  +2 16.12.2013 11:31
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Zdeněk Pavlátka:

Jen konzolové aplikace bych zvládal kvůli tomu, že v asm zatím nic jinného nesvedu. 8| Nezvládám práci s okny ve windows.

Nahoru Odpovědět 16.12.2013 15:56
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Do asm chci překládat díky snadnému převodu do strojového kódu.

Nahoru Odpovědět  -1 16.12.2013 15:57
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

Jen konzolové aplikace bych zvládal kvůli tomu, že v asm zatím nic jinného
nesvedu. 8| Nezvládám práci s okny ve windows.

Pokud tv;j jazyk není nějaká velká exotika a má v sobě zabudované konstrukty odpovídající (plus mínus) některému ze standardních jazyků, jako C, C# či Java, něl bys jeho "překladač" navrhovat tak, aby tyto konstrukty příslušným způsobem překládal, nikoliv aby řešil to, zda výsledná aplikace je konzolová či nikoliv (mimochodem, i aplikace disponující okny může mít konzoli, viz funkce AllocConsole).

Do asm chci překládat díky snadnému převodu do strojového kódu.

Po přečtení tvého prvního příspěvku jsem předpokládal, že na překlad Assembleru do strojového kódu použiješ některý z dostupných překladačů. V takovém případě argument, že se ti bude lépe vytvářet strojový kód, není moc validní, protože to samé můžeš zařídit (a jak psáno výše, se všemi optimalizacemi) "překladem" do Cčka a využitím GCC či jiného nástroje na vytvoření strojového kódu.

Pokud budeš strojový kód tvořit sám, tak pro výukové učely je to určitě fajn cvičení, protože narazíš na věci jako souborový formát PE a dynamické linkování.


Když tak nad tím přemýšlím, tak pokud pod pojmem "konzolové aplikace" myslíš aplikace 16bitové, tak máš pravdu. Tam budeš muset generovat jiný kód, než pro aplikace 32bitové či 64bitové (pokud zůstaneme u architektur IA32 a x64 a na IA64 zapomeneme, neb generovat tam ASM bude asi pěkné "maso").

Nahoru Odpovědět 16.12.2013 16:53
2 + 2 = 5 for extremely large values of 2
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Zdeněk Pavlátka:

Díky za rady, ale jsme stále na stejném místě. Svůj kompiler chci vytvořit tak, aby kód nejprve převedl do ASM a pak pomocí nějakého dalšího programu do strojového kód. A k těm Windowsům: Zvládnu textový výstup do konzole a čtení konzole, práci se soubory atd., ale neumím vytvořit okno a něco mu nastavit, natož s ním pak něco dělat.

Nahoru Odpovědět 16.12.2013 17:29
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
Martin Dráb:

Aha, tady, co se týče oken, zřejmě nerážíme na to, že moje představa o tvém unikátním programovacím jazyku, je úplně vadná. Mohl bys ukázat třeba nějaký příklad? Docela by mě to zajímalo... nebo ten tvůj jazyk nějak více rozvést...

Nahoru Odpovědět 16.12.2013 18:57
2 + 2 = 5 for extremely large values of 2
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Zdeněk Pavlátka:

Jde o možnost používání věcí jako Windows forms.

Nahoru Odpovědět 16.12.2013 19:00
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Zdeněk Pavlátka:

Jazyk má být objektový, nakombinovaný z výhod mnoha různých jazyků a šetřící místem. Už mám vymyšlený základ syntaxe(chybí pár drobností).

Nahoru Odpovědět 16.12.2013 19:03
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

Jde o možnost používání věcí jako Windows forms

Pokud vím, tohle u běžných jazyků bývá řešeno pomocí rozhraní ke knihovně (knihovnám), než že by se to zabudovávalo přímo do jazyka. Tam jen musí být prostředky, jak propojení mezi programem a knihovnami navázat.

Nahoru Odpovědět 16.12.2013 19:25
2 + 2 = 5 for extremely large values of 2
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Zdeněk Pavlátka:

S tim si taky poradit neumím...

Nahoru Odpovědět 16.12.2013 19:27
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Mohol by si sem dat syntax tvojho jazyka, dake priklady, idealne aj s gramatikou syntaxe?

 
Nahoru Odpovědět 16.12.2013 22:12
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

EBL - Event Based Language
Faktoriál čísla:

&platform Windows;
&load console_io;
<start>
        int x;
        ~získání x~
        do{
                std_io(x, "Zadejte přirozené číslo\n");
        }while(x < 1);
        int vysledek 1;
        int i 2;
        ~cyklus~
        while(i <= x)
        {
                vysledek *= i;
        }
        std_out("Výsledek je: @vysledek@");
        &end;

Jazyk obsahuje spoustu usnadnění. Například:
unární operátory:

i++, i--
i** ---> i*=i
i// ---> i=sqrt(i)

cykly:

repeat(pocet_iteraci){}
do while, while, for

oop(jen malá ukázka):

class A from B{
variables: ~automaticky soukromé~
        real x;
        int y;
        text data;
s_variables: ~statické proměnné~
        int instance_count;
functions: ~automaticky veřejné~
        .Init(){x = 0; y = 0; data = "";} ~konstruktor~
        void SetVariables(real _x, int _y, text _data){x = _x; y = _y; data = _data;}
        real GetX(){return x;}
        int GetY(){return y;}
        text GetData(){return _data;}
        instList GetVariables(){return instList(x, y, _data);}
}

Z ukázek popíšu detailněji jen poslední metodu třídy A:
instList GetVariables(){re­turn instList(x, y, _data);}
instList -> seznam odkazů (inst je něco jako Object v C#)
instList(x, y, _data) -> vytvoří instList a uloží do něj reference na proměnné v závorce(volání konstruktoru)
Popsat syntaxi by mi trvalo dost dlouho.

Nahoru Odpovědět 17.12.2013 17:06
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Nevyzera to zle, len by ma zaujimalo co tvoj jazyk ponuka oproti ostatnym jazykom a ako daleko si s implementaciou. Planujes mat automaticku(GC...) alebo manualnu spravu pamete (pripadne daky mix)? Co ta vidlo k pouzitiu takychto komentarov: ~ ... ~ ?
Preco konstruktor zacina na '.' (, sa vecsinou znaci ze chces pristupovat k symbolu v globalnom namespace)?
Chces podporovat aj genericke programovanie?
Co ta viedlo v deklaracii premennej k vynechaniu '='?
V com implementujes kompilator?

 
Nahoru Odpovědět 17.12.2013 18:10
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Tečka před konstruktorem je překlep. Vynechání znaku = u deklarace proměnné je jen malé zjednodušení. Kompiler jsem sotva začal dělat, je dělaný v C#. Správu paměti jsem ještě nedomyslel, ale přikláním se spíš k automatické.Ge­nerické programování tam bude určitě. A komentář se mi takový prostě líbí. (málo používaný znak např. proti /) Už podle názvu obsahuje jazyk "události", které usnadňují tvorbu hlavní smyčky programu atd. (Události jsou např. start, step, end...)

Nahoru Odpovědět 17.12.2013 18:50
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Aký plánuješ použiť parser? Budeš si ho písať sám alebo použieš už existujúci?

 
Nahoru Odpovědět 18.12.2013 7:35
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Mám rozpracovaný vlastní.

Nahoru Odpovědět 18.12.2013 14:06
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Těm definicím nějak nerozumím. Můj Parser rozdělí kód na tokeny, které pak rozdělí do jednotlivých příkazů. Příkazy ještě spojuje do větších celků.

Nahoru Odpovědět 18.12.2013 14:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Tokeny sú generované väčšinou lexerom/scane­rom/tokenizerom.
Parser je to čo z tokenov vytvara Abstraktný syntaktický strom(Derivační strom).

 
Nahoru Odpovědět 18.12.2013 14:47
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Tak těmhle názvům vůbec nerozumím.

Nahoru Odpovědět 18.12.2013 14:56
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:

Co si predstavujes pod pojmom 'prikaz' a akym sposobom bude prebiehat to rozdelovanie tokenov do prikazov a vecsich celkov?

 
Nahoru Odpovědět 18.12.2013 20:03
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:

Větší celky jsou např těla funkcí, příkazy v těle cyklu... Aktuální verze projíždí kód znak po znaku a rozděluje ho na dílky(tokeny). P
Jako příkaz se bere cokoli, co končí středníkem + if, else, cykly...

Nahoru Odpovědět 18.12.2013 20:07
Kolik jazyků umíš, tolikrát jsi programátor.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 27 zpráv z 27.