haralang

Podělte se o své zkušenosti s jinými jazyky.
harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

haralang

Příspěvek od harakiwi » červen 13, 2014, 6:08 pm

Ahoj ve spolek.
Letošní maturanti už mají své odpracováno a nám, mazákům (mimochodem, je to všeobecně rozšířený výraz, nebo mazáci jsou jen na naší škole?), se brzy začnou odpočítávat poslední měsíce na střední.
Součástí naší maturity je i prezentace seminární práce. Já, jakožto student informatického semináře, se rozhodl, že se naučím jazyk Piet. Ale co čert nechtěl, práce se zásobníkem mi až přespříliš připomínala jazyk symbolických jazyk a ten se mi opravdu zatím začínat nechtělo. Rozhodl jsem se tedy svůj plán změnit a své C# znalosti využít při tvorbě vlastního, intepretovaného jazyka.
Dámy a pánové, představuji Vám haralang!
Obrázek
Banner vám o jazyku poví téměř vše. Běh programu se řídí "šipkami", příkazy jsou většinou jednopísmenné, přičemž písmeno je prvním písmenem anglického výrazu, který se provede daným příkazem (jednoduše: W jako Write, C jako Condition, A jako Arithmetic, ...)

Proměnné jsou zde v podobě slotů (slots). Sloty jsi očíslované 0 - maximální hodnota integeru (hm, píši si do 1. update: nahradit int za uint...).

Krásou jazyka je, že se nemusí psát jen zleva doprava, nýbrž i shora dolů a též opačně k předchozím.
Ovšem psát pozpátku v poznámkovém bloku by asi nebylo zcela pohodlné, proto vzniklo IDE harapad. Doporučuji vyzkoušet, jak vlastně funguje NumKeys to arrows a AlphaNumKeys overriding (prostě napsat něco se zapnutými a pak s vypnutými tlačítky). PS. při zapnutém NumKeys to arrows mačkejte na numerické klávesnici čísla 2, 4, 6 a 8...

Budu rád, když jazyk vyzkoušíte a napíšete, co si o něm myslíte (vím, že C++ to není ;)), zda a jaké další příkazy byste uvítali a tak dále. Jelikož se jedná o seminárku, pokud by byl zájem, můžu později interpret i IDE zveřejnit pod open source licencí :)

NAPSAL JSI ZAJÍMAVÝ PROGRAM?
Neváhej a poděl se ;)

Snažil jsem se vše podstatné obsáhnout do helpu, ale stále není zcela kompletní, proto, pokud nebude něco jasné, neváhejte se zeptat!

A ještě poslední žádost před linkem ke stažení: Však to znáte, vymyslíte si nějakou novinku do hry či programu, upravíte pár řádků no a úplně zapomenete upravit i tu druhou polovinu řádků, které to potřebují. Jó, i to je můj případ. Proto, prosím, bugy hlašte, sám jsem jen během psaní nápovědy našel asi 3.

STAŽENÍ: (Doporučuji přečíst help, je tam i Hello World)
Nejnovější verze včetně následujících changelogů (v helpu) od teď ke stažení vždy na adrese:
http://harakiwi.over.cz/haralang/

Changelog:
Spoiler: ukázat
1.0.0.5 (25/06/2014)
haralang:
Functions added. Check List of Commands.
Many bug fixes

harapad:
Added checking for update (plus a new website http://harakiwi.over.cz/haralang/)
Fixed bug, which prevented you to run a program, whose filepath includes spaces

other:
Help updated
harapad Help almost completed


1.0.0.4 (18/06/2014)
haralang:
Fixed arithmetic functions not working. Now you can use both, slots and pointers
Fixed condition bug, which required you to write a directional char at first in the false line

harapad:
- - -

other:
- - -

1.0.0.3 (17/06/2014)
haralang:
BREAKING CHANGE with dealing with slots and pointer - it is necessary to rewrite your code.
Sorry about it, but this change will make dealing with slots and pointers fun. Please excuse if some example won't work correctly, it's not possible for me to check all examples, so please just write me and I'll fix it.

harapad:
Added text mirroring + shortcut
Added context menu for edit box (Right Mouse Button) - Copy/Cut/Paste/Mirror

other:
- - -

1.0.0.2 (16/06/2014)
haralang:
Added pointers (see List of Commands for more info)
Added command for random numbers /r/ (returns double precise number between 0 and 1) and /rX/ (returns integer between 0 (including) and X (excluding))
Fixed error in conditions causing Interpreter being killed by Windows OS, when comparing text with operators like >, <, ...

harapad:
- - -

other:
Help updated

1.0.0.1 (15/06/2014)
haralang:
Added not equal expression for condition (!=)
Added powers and roots in arithmetic ("a^" for power and "av" for root)
Escaping "/", "\" and ")" chars using "\"

harapad:
New caret in text box
Switch Writing Direction using Control + Arrows (plus added info about the current direction in statusbar)

other:
Help updated
Fixed Help typos
Přílohy
harapad.PNG
harapad se spuštěným interpretem, jenž právě zpracoval kód z harapadu
Naposledy upravil(a) harakiwi dne červen 25, 2014, 5:21 pm, celkem upraveno 8 x.
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 13, 2014, 10:09 pm

Je to nádherný! Hraju si s tím celý večer.
Jen jsem neporozuměl tomu, kdo je mazák? Ten kdo má maturitu za sebou, nebo na ní teprv čeká? :D
S obhajobou práce přeju hodně štěstí, je to fajn věcička. Co mi tam ale trochu chybí jsou arraye, nebo aspoň pointery. Bez nich se moc neudělá. Určitě bych uvítal přikaz i(...) pro inkrementaci a d(...) pro dekrementaci. Signed int bych nerušil, jen bych povolil pod/přetečení. Ten error je u generování náhodých čísel (kód níže) fakt otravnej.
Naučit se psát v haralangu není až tak složitý. Co je ale problém, je textový editor. Notepad hrůza a harapad je sice lepší záležitost, ale vadí při psaní čísel. Nešlo by kreslení šipek dát na Ctrl+šipky ? Taky by bylo dobrý mít možnost vypnout insert mód a možná zobrazovat kurzor jako plný blok (jako ve starých terminálech). Mohla by se přidat i klávesová zkratka/menu položka pro zrcadlení vybraného textu. Logika psaní mi příjde celkem rozumná, co už je trochu kostrbatější, je příkaz c(...). Vysledoval jsem, že u true větve si to nejdřív hledá šipky dole a potom až nahoře, je to tak? Taky škoda, že za každým příkazem musí být šipka - nemohl bych prostě pořád číst příkazy nasekaný za sebou bez mezer v tom stejném směru? Dále, jak můžu pomocí w(...) vypsat znak "/" ?
Když jsem psal první půlhodinku, nevěděl jsem že závorky psané zprava doleva jsou vlastně prohozené, ale díky tomu čitelnější. To, myslím v nápovědě nemáš, dej to tam.
V souhrnu je to moc zajímavá věc, ke které se někdy ještě určitě vrátím :3

A tady je můj prográmek vypisující prvočísla:

Kód: Vybrat vše

-s0(1)v
v(2)1s<-----(/0s/,2,/0s/)+a<
>c(/s1/</s0/)-w(/s0/)------^
|      >a%(/s0/,/s1/,/s2/)v|
^(/1s/,1,/1s/)+a-(0=/2s/)c<|
                   >-------^
A primitivní hra o hádání čísel (mám tam mizerný generátor...)

Kód: Vybrat vše

-w(Pick a seed for a random sequence:)-r(s0)v
  v(/0s/,76102,/0s/)%a-(/0s/,1927694,/0s/)*a<
  >a+(/s0/,471,/s0/)-a%(/s0/,100,/s0/)v     |
           v(/0s/,1-,/0s/)*a-(0>/0s/)c<     |
           >-------------------v            |
       v(0)1s-(rebmun a sseuG)w<            |
 >----->----r(s2)-a+(/s1/,1,/s1/)v          |
 |     ^(hgih ooT)w-(/0s/=</2s/)c<          |
 ^(wol ooT)w-(/0s/=/2s/)c<                  |
                  >w(It took you /s1/ tries)^

Uživatelský avatar
Ap0
Redaktor
Příspěvky: 368
Registrován: srpen 5, 2011, 11:24 pm
Facebook: http://facebook.com/
Bydliště: zamiešany v malte
Kontaktovat uživatele:

Re: haralang

Příspěvek od Ap0 » červen 14, 2014, 2:19 am

Dobrá práca :D Zajtra s tým niečo skúsim vymyslieť a postnem nejaký pokus lebo sú dve hodiny ráno :) Mohol by si ale pridať funkciu ako mocnina/odmocnina/abs a možnosť písať do textu znaky ako zátvorka, alebo lomítko (ako písal D-Sheep), to by som urobil napríklad takto: w(text /(ahoj/)); potom by som pridal možnosť vložiť text cez pravé tlačítko myši (nechce sa mi stále naťahovať za ctrl+v) :D; v helpe máš drobnú chybu - a:(X, Y, Z)).

Inak je to fajn nápad, niečo čo som ešte nikde nevidel...

D-Sheep - dovoľ mi trochu doupraviť tvoj program, na začiatku to nevypisuje správne hodnoty :D

Kód: Vybrat vše

-w(2)-s0(3)v
v(2)1s<----<(/0s/,2,/0s/)+a<
>c(/s1/</s0/)-w(/s0/)------^
|      >a%(/s0/,/s1/,/s2/)v|
^(/1s/,1,/1s/)+a-(0=/2s/)c<|
                   >-------^
edit:
- Pridal by som ešte možnosť revertnúť označený text
- Možnosť keď stlačím End/Home, aby ma to presunulo na poslednú/prvú pozíciu textu kde nie sú medzeri
- Ak mám zapnuté AlphaNumKeys overring, a stlačím shift (že chcem napísať zátvorku) vyhodí mi kurzor na koniec riadku
- Potom ak píšem zprava doľava, musím stále posúvať kurzor doľava (mohlo by to robiť automaticky ak mám zapnuté prepisovanie znakov)
- Zapnúť komentáre ( aby ignorovalo text od znaku /* po znak */ v riadku aj stĺpcoch )
- Condition <> alebo !=
- Tú mocninu by som možno uvítal ako a^(#, n, #), kde n je n-tá mocnina, podobne odmocninu ako av(#, n, #), kde n je n-tá odmocnina...

Ak ma ešte niečo napadne, napíšem :D
Ak budeš niekedy dávať opensource, môžeš ho hodiť na gitko, možno by sa našli spoľahlivý ľudia, ktorí by kód upravovali a pridávali rôzne ďalšie funkcie :D

edit>D-Sheep>edit>Ap0>edit :D
Operaci != můžeš nahradit opačnou podmínkou pro =.
To viem, ale niekedy sa mi nehodí aby bolo false zprava, a true zdola z dôvodu ušetrenia miesta :)

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 14, 2014, 8:32 am

No jo, sakra já jsem trouba. Nedošlo mi, že 2 vlastně je prvočíslo. Co jsem to dělal?
Ohledně psaní speciálních znaků, radši bych použil \ pro escapování, / nejspíš má velkou funkci při substituci. Ať to neděláme moc složitý pro překlad, že jo.

EDIT: reakce na Ap0-ův edit :D
Při psaní zprava doleva to kurzor dává na správný místo, jen musíš mít nastaven správný směr psaní (který by mimochodem mohlo jít měnit i jinak než stisknutím příslušného čísla na numpadu, protože to tam napíše znak, který se mi třeba zrovna nehodí a musím ho mazat - mohlo by tam být něco jako překlikávací šipky v ikoně Move v GM?)
Komentáře můžeš psát kdekoliv okolo mimo hlavní linii kódu.
Operaci != můžeš nahradit opačnou podmínkou pro =.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 14, 2014, 2:15 pm

Á, díky moc za odpovědi, jsem moc rád, že se vám má práce líbí :)

@D-Sheep: Tak mazáci jsou asi jen u nás na škole... Každý rok maturanti pasují nižší ročník (budoucí maturanty) na mazáky, sejde se celá škola a akce je spojena s -pro mazáky- obvykle nepříjemným ceremoniálem :D Mazáky tedy maturita teprve čeká

S arrays máš pravdu, ty bude třeba přidat, díky. Pointry, hm, když jsem začínal v C, tak jsem je jakž takž zvládal, ale teď si nedokáži představit, jak by se dali v haralangu využít (třeba je to jen tím, že jsem před chvílí vstal a obědval :D). Mohl bys mi, prosím, nějak nastínit, jak by to mělo fungovat? :oops:

In-/dekrementace se zatím řeší a+, resp. a-(/s0/,1,/s0/), ale opět máš pravdu, je to poněkud zdlouhavé, proto je příkazy přidám :) Jen bude třeba asi vymyslet nějaký jiný způsob zapisování příkazů, protože např. "d" už je obsazeno "debug" výpisem.

Insert mód a čísla na šipky se vypnout dají, jedná se o ty dvě fíčury AlphaNumKeys overriding, resp. NumKeys to arrows. Přepínat se dají buď kliknutím na to zelené kolečko (popř. i doprovodný text) ve status baru a nebo klávesovými zkratkami. Dlouho jsem se rozmýšlel, jakou klávesu zvolit a po několika potížích a změnách jsem se nakonec rozhodl pro klávesu Pause/Break pro přepínání numerických kláves na šipky a Shift + Pause/Break pro přepínání insert módu.

Kurzor jako plný blok je taky určitě užitečný nápad, zkusím popřemýšlet, jak by se to nechalo vyřešit.
Zrcadlení textu by neměl být problém, nějakou položku v menu + kl. zkratku na to pořeším. Jen to bude fungovat pouze pro horizontálně psaný text, protože vertikálně nelze text označit...

Pomlčky za příkazy následovat nemusí, můžeš je sekat rovnou do jedné lajny za sebe v daném směru :) Viz př.:

Kód: Vybrat vše

-w(name?)r(s0)w(your name is /s0/)e  
Jsou tam de facto pro přehlednost a případně pro "prodloužení", "odsazení" (nebo jak to napsat..) textu.

Escapování znaků... :oops: Jo, to... :oops: Mi nedošlo :D Napravím to v dalším update.

A ano, když píšeš zprava doleva, závorky jsou vlastně prohozené, připadá mi to tak lepší a vlastně mě ani nenapadlo, že by někdo chtěl psát

Kód: Vybrat vše

)hello world(w
Přidám to do nápovědy ;)

Jinak klobouk dolů před tvými tím generátorem a hrou, páni, vůbec by mě nenapadlo, že se dá vůbec něco takového napsat! :D Byl bych moc rád, když bys mi svolil použít tvé kódy pro případnou dokumentaci toho, co lze v haralangu napsat - samozřejmě bys byl uveden jako autor!

@Ap0: Ano, ano trochu víc matematických operací se určitě bude hodit, díky! O escapování už jsem psal výše, to je zkrátka nezbytnost, na kterou jsem jaksi pozapomněl...

Já osobně text obvykle kopíruji klávesovými zkratkami, každopádně vidím, že ne všichni to tak tak dělají, takže ano, kontextová nabídka snad taky přibude :)

Díky za upozornění na typo v heplu :)

Huh, nějak jsem se ztratil v editech a reakcích na ně :D
Takže pro pořádek:
komentář je všechno, co není součástí "linie programu" :D Zkrátka co nepřipojíte ke kódu, k tomu se interpret nedostane.
Ano, podmínku "!=" můžete nahradit "=" a porovnávat obracený výraz, nicméně proč znaménko "!=" nepřidat? Nebude to zas takový problém.
Myslím, že jsem někde zapomněl odpovědět na něco ohledně podmínky "c" - ano, v případě horizontálně psaného textu to hledá nejprve dole, pak nahoře, u vertikálního nejprve vpravo, pak vlevo. Když nenajde, hodí error.
Ano, změna směru psaní bude třeba vyřešit ještě i jiným způsobem, než na NumKeys, protože když je NumKeys to arrows vypnuto, směr nelze změnit. Budu nad tím přemýšlet, nebo když něco napadne vás... Asi bude třeba změna v GUI v harapadu
Jo, Git je dobrý nápad, ale naneštěstí ještě s ním nemám zkušenosti (jakože vůbec žádné), tak vás snad požádám o pomoc, až nastane vhodná chvíle :)

Ještě jednou díky za váš zájem, moc si ho vážím. Na další verzi začnu pracovat hned, jak bude čas (v podělí), teď musím odjet k prarodičům a udělat nějaký kus fyzické práce :)
Už musím letět, díky a zatím!
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 14, 2014, 2:40 pm

Pointery bych si představoval takto:
/s0/ je pro zjištění hodnoty ve slotu č. 0
:s0: je pro zjištění hodnoty ve slotu s číslem, jaká je hodnota /s0/
Je to v podstatě nepřímá adresace hodnot a s tím se možnosti tvého jazyka mnohonásobně zvětší!
Následující kód by vypsal hodnoty /s1/ až /s4/ pomocí cyklu a indexování přes /s0/

Kód: Vybrat vše

-s0(1)s1(1)s2(20)s3(50)s4(100)v
          e-(5</0s/)c--(:0s:)w<
              >a+(/s0/,1,/s0/)^
Output: 1 20 50 100
A čeho jsem si ještě všiml: neošetřená Exceptiona při neslouladu typů string/číslo při operacích. Nemohl by se interpreter akorát slušně ukončit? Vybleje na výstup stack volání a operační systém vyhodí okénko...

Uživatelský avatar
Loric
Příspěvky: 208
Registrován: srpen 6, 2011, 9:01 am

Re: haralang

Příspěvek od Loric » červen 14, 2014, 11:06 pm

Takový složitější Brainfuck :D

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 15, 2014, 8:13 pm

Našel jsem o víkendu pár chvil volna a udělal pár aktualizací. Seznam změn i aktualizovaný odkaz ke stažení je v první příspěvku :)

@D-Sheep: Á, jasan. Kouknu na ty pointry hned, jak se mi zase naskytne chvíle! A taky koukám do zdrojáku haralang a máš pravdu, při porovnávání, resp. při parsování stringu na číslo jsem neošetřil výjimky. No program už mám zkompilovaný a uploadovaný, tak bude třeba počkat na další update ;)

@Loric: No, heh, jak se to vezme :D Při brouzdání světem ezoterických jazyků jsem narazil i na Brainfuck, nicméně jediná podoba je asi v tom řízení běhu programu pomocí šipek (navíc u Brainfucku to není nezbytné, nebo ano? V haralang to bez šipek zkrátka nešlape) a svým zjevem mi Brainfuck připadá mnohem složitější :D Spíš že haralang poskytuje víc funkcí pro programátora, než jen práci se zásobníkem (jenž je v haralangu nahrazen mým úžasným systémem slotů :mrgreen: )
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 15, 2014, 8:27 pm

Brainfuck jsem se kdysi taky chtěl naučit. Je ovšem docela jiný.

Haralang (HL) i Brainfuck (BF) mají oba k dispozici pro ukládání dat vlastně jen jedno pole. HL však poskytuje kompletně náhodný přístup k libovolnému indexu, kdežto BF má něco jako C++ STL-kový iterator. Můžeš se posouvat jen o pozici vpřed a vzad.
HL je úplně nezávislý na směru psaní, zatímco BF čte striktně po řádcích zleva doprava. HL nabízí celkem velkou škálu operací jako je dokonce modulo. BF má jen + a -.

Uživatelský avatar
Ap0
Redaktor
Příspěvky: 368
Registrován: srpen 5, 2011, 11:24 pm
Facebook: http://facebook.com/
Bydliště: zamiešany v malte
Kontaktovat uživatele:

Re: haralang

Příspěvek od Ap0 » červen 15, 2014, 10:16 pm

Nová verzia mi občas sekne (funguje / reaguje na klávesy, ale okno sa mi sekne a nevidím čo robím, stáva sa mi to asi raz za 2 minúty...) :/
Ale vďaka za odmocninu, konečne som mohol dokončiť program ktorý vypočíta kvadratickú rovnicu (aj v množine komplexných čísiel) :D

Kód: Vybrat vše

-w(ax^2 + bx + c)>w(Enter a: )-r(s0)-c(/s0/=0)-s16(0)--------------v
                 |                         >----------------------v|
>----------------^(!niaga yrT .citardauq ton ,raenil si noitauqE)w<|
|v-------(/3s/, /1s/ ,/1s/)*a-(2s)r-( :c retnE)w-(1s)r-( :b retnE)w<
|>a*(/s0/, /s2/, /s4/)-a*(/s4/, 4, /s5/)-a-(/s3/, /s5/, /s6/)------v
|v-------------------(/8s/, 1-, /1s/)*a-(/7s/ ,2 ,/6s/)va<(0</6s/)c<
|>a+(/s8/, /s7/, /s9/)-a-(/s8/, /s7/, /s10/)v   >s16(1)--^  >------v
|v---(0=/6s/)c-(1=/61s/)c-(/11s/ ,2 ,/0s/)*a<   ^(/6s/, 1- ,/6s/)*a<
||     |         >a/(/s8/, /s11/, /s12/)-a/(/s7/, /s11/, /s13/)----v
||     >a/(/s8/, /s11/, /s12/)-w(Root: x = /s12/)-v                |
|>a/(/s9/, /s11/, /s14/)-a/(/s10/, /s11/, /s15/)--+v               |
|q<-(Y=/71s/)c-(71s)r-()\N/\Y(\ ?niaga yrt annaW)w<|               |
^-----<      >------------------------------------^|               |
             ^-(/51s/ :2x)w-(/41s/ :1x)w-(:stooR)w-<               |
             ^(i/31s/ - /21s/ :2x)w-(i/31s/ + /21s/ :1x)w-(:stooR)w<

Uživatelský avatar
Cpt.Luke
Příspěvky: 600
Registrován: srpen 10, 2011, 7:34 pm
Facebook: https://www.facebook.com/cptluke
Bydliště: Martin
Kontaktovat uživatele:

Re: haralang

Příspěvek od Cpt.Luke » červen 15, 2014, 11:24 pm

Vypadá to zložito ale je to až primitívne jednoduché! :3
Doteraz som o takýchto jazykoch ani nepočul :D ale vypadá zaujímavo :)
Má to ale nejaké praktickejšie využitie? o.O dá sa v tom nakódiť niečo "väčšie"??
ps. program padá dosť často... :(
Môj web!

VCH BIATCH
old name - Luko8525

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 16, 2014, 12:13 am

Cpt.Luke píše:dá sa v tom nakódiť niečo "väčšie"??
Počkej, až nám do toho harakiwi přidá pointery, to se budou dít zázraky!

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 16, 2014, 4:27 pm

@Ap0: No, jedním slovem "wow" :D Dvěmi slovy "kloubouk dolů" a třemi "no more comment" :D
V životě by mně nenapadlo, že se něco takového dá napsat v haralangu! Díky moc všem za váš zájem, za podporu a za sdílení vašich kódů!
Komplexní čísla mě čekají ve škole příští rok, tak se tvůj kalkulátor ještě bude hodit ;)

Bohužel se mi nepodařilo program u sebe zaseknout (myslíš harapad, že?), nechával jsem ho několikrát běžet cca. 10 minut, sem tam něco napsal, ale ani to ho nezaskočilo. Ani mě nenapadá, co by mohlo být příčinou (snad jedině využití user32.dll kvůli tomu novému caretu). Nevypozoroval jsi, při jaké akci k seknutí dojde?

@Cpt.Luke Ták, ták, vypadá to chaoticky, ale když se na to podíváš zblízka, vše má svůj řád a logiku (nebo alespoň v tomto duchu jsem to dělal).

Nová verze (opět v aktualizovaném 1. příspěvku), která je sic trochu narychlo uplácaná bez řádné dokumentace, obsahuje mimo jiné... tramtadadá - pointry! :D Přesně tak, jak si to D-Sheep nalinkoval ;)
Ať se líbí! Pokud vás napadne ještě něco, co bylo se mohlo hodit (arrays jsem si vědom ;) ), neváhejte napsat.
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 16, 2014, 4:51 pm

Woohoo! Až se dostanu domů, hned se na to vrhnu. Jestliže už ale máme pointery, není potřeba přidávat arrays, protože je kompletně jedno a to samé. Jestli jsi někdy dělal v ryzím Cčku, tak to určitě chápeš.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 16, 2014, 5:29 pm

Á, to rád slyším :)
Ano, ano, když jsem přemýšlel nad významy pointerů, jedna z využitelností byla právě při projíždění "jakoby arraye". No, poslední dobou jsem trochu ve spěchu a na mém myšlení je to znát :D Okay, jdu zatím relaxovat :)
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 17, 2014, 10:35 am

Dobré ráno,
funguje to bezvadně, bohužel jen ale jedním směrem - pro čtení. Když chci uložit výsledek a(...) na místo, kam ukazuje pointer, vypíše se chyba. Ono čtení je jen půl práce.
Můžu ti navrhnout pár esteticko-technologických úprav?
Je trochu nesoulad mezi inicializací slotu a odkazováním na jeho hodnotu. Jednou tam lomítka nejsou, po druhé ano. Zápis a čtení se přece dá odlišit kontextem. Tak tedy, např. incializace:
/0/(20)
Tohle by nastavilo hodnotu slotu č. 0 na 20. Já bych ten znak "s" nahradil lomítkama. Parsování by, myslím, nebylo moc jiné. Místo "s" přečteš lomítko, pak je tam taky hned číslo, přeskočíš další lomítko a závorku a přečteš hodnotu. Podobné by to bylo v příkazu a(...), kde by se ale smysl zápisu lišil kontextem. Dejme tomu, že jsem napsal
a+(/0/,/1/,/5/)
To by zjistilo hodnoty slotů č. 0 a 1 a výsledek by uložilo do slotu č. 5. V podstatě je to ale to samé, jako je implementováno teď a možná je to i čitelnější. Bez toho "s"-ka je to dokonce stejné čtené v obou směrech!
No a úplně na chlup stejně bych si to představoval s pointery. Dejme tomu, že ve slotu č. 0 je hodnota 20. Zápis
:0:(50)
by nejdříve zjistil hodnotu slotu č. 0 - což je 20 a pak uložil hodnotu 50 do slotu č. 20. Podobně by to bylo i s aritmetikou.
a+(/0/,/1/,:5:)
Součet slotů č. 0 a 1 by to uložilo tam, kam ukazuje slot č. 5.
Nakonec různé příkazy s pointery:
c(:0:<:1:) - porovná odkazované hodnoty
a+(:0:,5,:0:) - zvýší odkazovanou hodnotu o 5
:0:(/0/) - nastaví odkazovanou hodnotu na svojí adresu (zbytečné)
w(/0/ -> :0:) - vypíše, kam pointer ukazuje a na co ukazuje
/1/(:0:) - hodnota odkazovaná slotem č. 0 se uloží do č. 1
r(:0:) - přečtenou hodnotu uloží tam, kam ukazuje slot č. 0

EDIT:
A myslíš, že bys mohl udělat něco jako skok na určitou pozici? Nevím, jak dobře na tom s programováním jsi, ale daly by se pomocí toho dělat funkce :-o (jestli si toho jsi vědom)
Šlo by o to, že by sis příkazem, dejme tomu "s" jako "set" uložil pozici, kde by se momentálně program nacházel, odjel někam po šipkách, udělal pár výpočtů a příkazem "j" jako "jump" by ses vrátil na tu zapamatovanou pozici.
Po vrácení by se pokračovalo svisle, pokud jsi si pozici uložil při čtení vodorovně a naopak. Hledání cest by mohlo být převzaté z c(...).
Takže by sis vždy po přečtení příkazu set uložil x, y pozici a směr čtení.
Samozřejmě, že by se mohlo cestou narazit na víc setů. V tom případě by se pozice ukládaly na stack (česky zásobník) (Wikipedia) a každý jump by tě přenesl na další položku ve stacku. Pokud by byl stack prázdný, program by se ukončil.
Nevím, jestli to na tebe není moc - taky samozřejmě nejsem tvůj šéf, kterej ti říká co musíš udělat, ale omg, tohle by bylo boží! Hodně i celkem low-levelových jazyků (jako je třeba assembler) tohle podporuje.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 17, 2014, 10:44 pm

Dobrý večer :)

áh, ano... je vidět, že spolu s blížícími prázdninami mi hlava vynechává víc a víc. Pointery už fungují (nebo by alespoň měly) oběma směry - čtení i zápis.
Přemýšlel jsem, zda na tvé rady dát či ne, nakonec jsem se rozhodl takto:
Ze zápisu deklarace slotu zmizelo "s". Ve spolupráci s pointery je to tak lepší

Kód: Vybrat vše

/0/(1)-:0:(...)
je podle mého soudu vhodný zápis a jiný by jen mátl a práci ztěžoval. Navíc u delších programů se dosahuje úspory znaků :)
Ale když jsem na tom pracoval, rval jsem si vlasy z hlavy!! Proboha, ne že bych smazal jedno hloupé písmenko, ale překopávat jsem musel i spoustu dalších metod - a to neříkám proto, že bych si chtěl vylít srdíčko (ostatně tohle k programování už tak nějak patří, že?!), nýbrž proto, že si nejsem zcela jistý, zda jsem upravil vše, co bylo třeba. Proto to, prosím, ozkoušejte, a když zjistíte, že nějaký příkaz nebere sloty nebo pointery, hned mi to nahlašte :) Děkuji.

A zadruhé, funkce. O těch jsem přemýšlel už dávno a ještě na začátku psaní této odpovědi jsem byl proti, protože má idea haralangu byla postavená na striktním pohybu interpreta po dané "lomené čáře", což funkce v mém původním pojetí porušovaly. Ale když nad tím teď přemýšlím

Kód: Vybrat vše

---f(v)-w(perform after function 1)-f(v)-w(perform after function 2)-e
     |                                |
     v--------------------------------<
     >w(function)-w(some more)v
     v------------------------<
     >w(things)-r
není proti mé myšlence. Volil bych příkazy "f" jako function s argumentem pro směr k funkci a "r" jako return
A protože se mi to začíná líbit víc a víc, jednoho krásného dne tato možnost přibude :) Jen to asi nebude hned, ale za nedlouho.

S programováním jsem na tom - ač to tak možná na první podle nevypadá - poměrně slušně, či spíš si to o sobě vzhledem ke svému okolí myslím :D (asi jsem tě ohledně sebe zmátl těmi pointery - ne že bych nevěděl, co to je (v objektovém programování je de facto využívám dnes a denně v podobě referencí na instance objektů), jen zkrátka... no.. už je to dávno :D). Na assembler jsem "nahlížel" a příkaz "JMP" je jeden z mála, který si pamatuji :D

Neboj, tohle na mě není moc ;) A samozřejmě nejsi můj šéf :D Jen jsem vás požádal o sdílení vašich nápadů a to ty děláš, za což jsem ti velmi vděčný a máš za to můj velký DÍK! Jsem rád, že se o mou práci někdo zajímá a že čas strávený nad tímto projektem se nepřesune do šuplíku "hodiny zbytečně strávené nad nedokončenými projekty", který už stejně přetéká (jo, tak teď jsem si srdíčko krapet vylil :D)
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 17, 2014, 10:59 pm

Za pointery díky moc. A vůbec, za všechen ten čas a práci, co do to toho vkládáš jen proto, že my si něco vymyslíme.
Začnu pracovat na něčem zajímavém, když už to teď (snad) funguje :3
Tvůj způsob realizace fukncí je v mnohém podobný - uložím si pozici, dojedu ke kódu (=volání funkce - geniální) a potom se vrátím. Ovšem asi by to chtělo (jestli se do toho opravdu pustíš) jiný příkaz než "r" - ten je pro čtení!

Moje bujná představivost se mezitím pustila do navrhování tvaru programu, ve kterém by bylo volání funkcí co nejkratší - program by tvořil kruh/čtverec okolo linek pro volání, které by směřovaly do zóny funkcí, které by potom skončily v samotném středu kódu jediným, společným příkazem return/jump. To je jak z hvězdných válek, co? :D
haralang-functions.png
----------------
Já jsem rok před maturitou ani nevěděl, co je to OOP nebo i ten pitomý pointer...
Obrovský RESPEKT!

EDIT:
Ještě trochu zvěrstva... Mohl bych jménem všech nadšenců a bláznů poprosit o pointery na pointery? Neskočil bych jen jednou, ale několikrát. Slot 0 má v sobě 5. Slot 5 má v sobě 10. Zápis ::0:: získá hodnotu slotu 10. Je to prostě o jeden skok navíc kvůli dvojitým zavorkám. Trojité závorky skočí třikrát atd... Jestli už si fakt moc vymýšlím, tak to nech být. Ono to jde udělat i postupným ukládáním.

EDIT2:
Aritmetika, zdá se, ještě bere starý zápis s "s"-kem. A její chybová hláška je taky divná:
"ERROR: The third argument in condition must be a slot (yours is /10/)"
S pointerama si to taky moc neumí poradit.. Upravoval jsi i parsování třetího argumentu?

EDIT3:
Za false větví porovnávání musí být určení směru, jinak to vypíše chybu. Zkus si spustit

Kód: Vybrat vše

-dc(3<2)w(N)v
     >w(Y)--e

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 18, 2014, 5:32 pm

Dnešní rychlá aktualizace zahrnuje opravy těch dvou bugů, nic víc a snad nic míň :)

Vůbec nemáte za co děkovat, to já! Bez vás (tedy především tebe, D-Sheep :)) bych skončil u první release. Jazyk mi připadal v rámci svých možností funkční a jako seminárka dostačující, ale díky vám mě stále baví na něm pracovat a rozvíjet ho a jednou se třeba i odhodlám ho prezentovat i jinde (např. devbook.cz, programujte.com, či jiném podobném serveru) a třeba si najde další příznivce, čímž se z něj stane víc než jen moje seminárka - no, už teď je to pro mě víc než jen seminárka.

Děkuji za pochvalu :oops: :) Já se o IT zajímám hodně a rád, ale bohužel jako student všeobecného gymnázia mě škola v tomto oboru moc nenaučila (spíše já učím ji...). Ty jsi možná před maturou o pointerech neměl ponětí, ale podívej, kam až jsi se vyšvihnul teď ;) Tvůj návrh pro umístě funkcí je fascinující! Je to opravdu zajímavé a jsem rád, že nad tím takhle přemýšlíš :) Jsem zvědavý, jak by to vypadalo (/bude vypadat (?)) v praxi!

V co nejbližší době chci začít pracovat na těch funkcích (děkuji za upozornění na "r"... :oops: samým nadšením z těch funkcí jsem to dočista vypustil.) Což takhle "b" jako back? Ono to jump mně svádí přemýšlet o skoku "někam", ale myslím, že by mělo být zřejmé, že jde o skok zpět.

O těch vícenásobných pointerech popřemýšlím, ale aktuálně jsou prioritou funkce :)

Přeji pěkný den!
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 18, 2014, 7:00 pm

Rychlé odpovědi jsou fajn, ale s něčím se holt nesmí spěchat. Ta aritmetika furt zlobí...
-d/0/(5)a+(1,2,:0:)e by mělo uložit trojku do slotu 5, ale místo toho to uloží do slotu 0 :cry:

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host