Interpreter języka zbudowanego z samych instrukcji przypisania
wymyślony przez Jacka Szewczyka i jego syna.
Interpreter of language that contains only assignment instructions
created by Jacek Szewczyk and his son.
Podstawowy opis języka i inspirację dla tego projektu można znaleźć na jego domowej stronie pod adresem: https://taktentus.onrender.com/. Kilka słów można także znaleźć na Esolangs.
Basic language description and inspiration for this project can be found at its homepage: https://taktentus.onrender.com/. Some additional informations can be found at Esolangs.
Udostępnioną tu bibliotekę bez przeszkód można kopiować i modyfikować, jak i wykorzystywać we własnych aplikacjach. Pomimo niewielkiego rozmiaru biblioteka może funkcjonować jako samodzielna aplikacja w środowisku NodeJS.
Provided hier library can be copied, modified and used as a part for other applications. Although it's really small it can be run as stand alone application in NodeJS environment.
nodejs taktentus.js taktentus.code.file
Taktentus jako język swoją strukturą przypomina nieco assemblera: jedna linia - jedna instrukcja. Z tą różnicą że operacja jest zapisana pomiędzy dwoma argumentami, i jeśli to możliwe to wynik oparacji jest zapisywany w pierwszym argumencie.
Taktentus is a bit like assembler: one line - one instruction. And if it's possible result is assigned to first argument.
arg1 op [ arg2 ]
Instrukcje są przechowywane osobno od danych. Pamięć danych jest numerowana od 0 wzwyż, a każda komórka pamięci przechowuje liczbę całkowitą. Co prawda sam język nie ogranicza wielkości liczb, jednak w tej implementacji zakres jest identyczny jak dla JavaScriptu (na ogół 2^53-1). Wartość nie zainicjowanej komórki pamięci danych jest równa 0.
Instructions and data are kept separately in the memory. Data memory is build from cells that contains only integers. In this implementation the highest value is similar as in JavaScript ( 2^53-1 ). Any reinitialized memory cell has value 0.
Dadatkowe zalety tego języka a w szczególności tej implementacji:
Additional adventages of this language and implementation:
:= | przypisanie bezpośrednie ( pojedynczy znak "=" będzie zinterpretowany tak samo ); |
+= | dodawanie ( a += 7 spowoduje zwiększenie wartości w zmiennej a o 7 ); |
-= | odejmowanie; |
*= | mnożenie; |
/= | dzielenie całkowitoliczbowe; |
%= | dzielenie modulo; |
^= | potęgowanie ( a ^= 3 podniesie zawartość zmiennej a do trzeciej potęgi ); |
++ | ignoruje drugi argument, zwiększa wartość pierwszego o 1; |
-- | ignoruje drugi argument, zmniejsza wartość pierwszego o 1; |
>= | większe równe ( a >= 3 jeśli a większe równe 3 to zapisze wartość 1 do a ); |
<= | mniejsze równe; |
== | równe; |
!= | negacja ( zamienia 0 na 1, a każdą liczbę różną od 0 na 0 ); |
~= | negacja bitowa; |
&= | bitowy AND; |
|= | bitowy OR; |
>> | SHR ( przesunięcie bitowe w prawo ); |
<< | SHL ( przesunięcie bitowe w lewo ); |
_= | przepisanie ( skopiowanie łańcucha ); |
#= | konkatenacja ( dopisanie łańcucha na końcu ); |
$= | zamiana liczby w łańcuch znaków ( w systemie dzisiętnym ). |
:= | direct assignment ( single symbol "=" also works ); |
+= | add ( a += 7 will affect with adding 7 to a ); |
-= | subtract; |
*= | multiple; |
/= | division; |
%= | modulo; |
^= | power; |
++ | ignors second argument and increase first one; |
-- | ignors second argument and decrease first one; |
>= | bigger or equal ( a >= 3 if a is bigger or equal 3 then a will store 1, otherwise 0 ); |
<= | lower or equal; |
== | equal; |
!= | negation ( turns 0 into 1, and any other number into 0 ); |
~= | bitwise negation; |
&= | bitwise AND; |
|= | bitwise OR; |
>> | SHR ( shift right ); |
<< | SHL ( shift left ); |
_= | asignment of string; |
#= | concatenation; |
$= | converts intiger into string ( decimal notation ). |
Operacje na łańcuchach dają możliwość szybkiego kopiowania bloków, długość bloku to ilość kolejnych niezerowych komórek w pamięci począwszy od wskazanej ( np. tego miejsca w pamięci na które wskazuj zmienna ).
Strings operations gives an option for quick and easy data blocks copy.
_ | wskaźnik aktualnie wykonywanej instrukcji ( po wykonaniu istrukcji jest automatycznie inkrementowany ); |
: | wskaźnik następnej instrukcji po ostatnio wykonanym skoku ( przydatne przy powrocie z funkcji); |
# | przechowuje rezultat poprzedniej operacji; |
@ | jeśli ma wartość 0 to aktualna instrukcja jest pomijana, a wartość @ zmienia się na 1; |
@wy | jeśli przypiszemy do tej zmiennej jakąś wartość, to zostanie ona wyświetlona jako liczba; |
@WY | jeśli przypiszemy do tej zmiennej jakąś wartość, to zostanie ona wyświetlona jako znak UTF-8; |
@we | program będzie oczekiwał podania wartości liczbowej; |
@WE | program będzie oczekiwał podania symbolu; |
@key | zwraca wartość ostatnio wciśnietego symbolu; |
@{liczba} | liczba losowa z określonego przedziału ( np. @12 zwraca losową wartość z przedziału 0 - 12 włącznie ); |
@stop | zwraca liczbę instrukcji w programie; |
#OPS | to samo co @stop; |
#MEM | zwraca wielkość używanej pamięci; |
#TIME | zwraca aktualny UNIX'owy czas w milisekundach; |
#VER | zwraca numer wersji Taktentusa; |
_ | Instruction Pointer ( after execution of istraction it's increased); |
: | contains Instruction Pointer before last jump + 1 ( useful for returning from functions ); |
# | keeps result of last operation; |
@ | if is equal to 0 then current instruction is bypassed, and @ is set to 1; |
@wy | prints number; |
@WY | prints UTF-8 symbol; |
@we | waits for number from input; |
@WE | waits for symbol from input; |
@key | return last pressed symbol from keyboard; |
@{liczba} | random numbers from range ( example: @12 returns number in range 0 to 12 included ); |
@stop | returns program instructions count; |
#OPS | same as @stop; |
#MEM | returns size of used memory; |
#TIME | retuns actual UNIX time in milliseconds; |
#VER | returns Taktentus version; |
Nazwy zaczynające się od znaku "_" są traktowane jako wskaźniki i zwracają adres zmiennej bez prefiksu "_"
( np. jeśli mamy zadeklarowaną zmienną żółw, to _żółw jest automatycznie adresem w pamięci
pod którym jest przechowywana wartość zmiennej żółw ). Miejsce na które wskazuje zmienna może być przestawione
( _żółw := _mójZwierzak
- teraz obie nazwy będą się odwoływały do tego samego miejsca w pamięci,
i jeśli przypiszę żółw := 12
, to teraz zmienna mójZwierzak również będzie równa 12 ).
All names starting with "_" are treated as pointers and returns addresses of variables
with the same names but without leading "_" symbols ( example: if we have variable żółw,
then _żółw is pointer refereeing to żółw ). Address in memory where variable points
can be changed ( _żółw := _mójZwierzak
- now żółw and mójZwierzak
points to the same place in memory s).
Nazwy zaczynające się od znaku ":" są traktowane jako labelki i zwracają adres instrukcji którą poprzedzają. W przeciwieństwie do zmiennych, labelek nie można przestawiać.
Names with leading ":" are treated as labels and points into instructions before they were put to. But in oposition to variables, labels can not be changed by code.
Struktura pojedynczej linii to [ :labelka ] arg1 op [ arg2 ] [ %% komenatrz ]
. Linia może składać się także z samej labelki
lub samego komentarza.
Single line structure [ :labelka ] arg1 op [ arg2 ] [ %% komenatrz ]
. Valid line can also contain only comment,
only label or be empty.
%% Przykład
@WY _= "Siedmiu krasnali:\n\n"
n := 7
numerKrasnala := 1
_ := :loop %% preskocz do :loop
:pokażKrasnala
@WY _= " Krasnal #"
@wy := numerKrasnala
@WY := "\n"
_ := :
:loop
_ := :pokażKrasnala %% wywołanie funkcji
numerKrasnala += 1
n --
@ := n %% jeśli n > 0 skocz do :loop
_ := :loop
@WY# _= "\nI to już koniec bajki :-)"
%% Example
@WY _= "Seven dwarves:\n\n"
n := 7
dwarfNo := 1
_ := :loop %% jump to :loop
:showDwarf
@WY _= " Dwarf #"
@wy := dwarfNo
@WY := "\n"
_ := :
:loop
_ := :showDwarf %% function call
dwarfNo += 1
n --
@ := n %% if n > 0 jump to :loop
_ := :loop
@WY# _= "\nAnd that's the end of the story :-)"
Jeśli chcesz się dowiedzieć więcej o Taktentusi, zajrzyj do kursu.
If you would like to learn more about Taktentus start with course.
W bibliotece można znaleźć nasze programy, a także te które uznaliśmy za ciekawsze. Jeśli znalazłeś lub napisałeś aplikację w Taktentusie twoim zdaniem wartą uwagi, podeślij ją nam na e-mail promyk@doleczek.pl. Kto wie jak wielu osobom jeszcze się spodoba.
In the library you can find our programs as well as those which we found interesting. If you have created or found some code written in Taktentus which you think is worth seeing, send it to us at promyk@doleczek.pl. Who knows how many others will like it to.
Taktentus jest doskonałym narzędziem do rozpoczęcia przygody z programowaniem, ale nie dajcie się zwieść bo pomimo prostej składni ma całkiem spore możliwości. Więcej można znaleźć na stronie domowej projektu http://taktentus.herokuapp.com/ i na Esolangs.
Taktentus is great tool for starting your journey with coding, but although it's easy, it has quite huge possibilities. More can be found at project homepage http://taktentus.herokuapp.com/ and at Esolangs.
Skróty klawiszowe - pozwalające na wykonywanie pewnych czynności szybciej:
Keyboard shortcut - you can do some things quicker:
Projekt powstał jako próba sił w starciu z kilkoma technologiami, technikami i bibliotekami, którego efekty możecie oglądać.
Utilized libraries, solutions and implemented capabilities:
Jeśli uważasz ten projekt za wartościowy - udostępnij informację o nim :-)
If you find this project interesting - Share it! :-)
Ciekawy wariant szachów pozwlający na przechodzenie w widok 3D w trakcie gry. Realizacja w oparciu o CSS3.
Next chess app with some interesting features that makes playing chess more fun.
Brainfuck interpreter online, coś dla prawdziwych pasjonatów programowania.
Brainfuck interpreter online, something for people with passion in coding.