Taktentus

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.

  Polski   PL
  English   EN

Taktentus

Podstawowy opis języka i inspirację dla tego projektu można znaleźć na jego domowej stronie pod adresem: http://taktentus.herokuapp.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: http://taktentus.herokuapp.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

Koncept

Concept

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:

  • obsługa UTF-8 w nazwach i danych;
  • zmienne;
  • liczby losowe;
  • komentarze;
  • labelki;
  • wskaźniki;
  • łańcuchy znaków ( null-terminated strings ).
  • UTF-8 support;
  • variables;
  • random numbers;
  • comments;
  • labels;
  • pointers;
  • null-terminated strings.

Download

Wersja:Version:1
Wydana:Contributed:2016.01.10
Licencja:Licence:GPLv3
 
taktentus.js ( 13.9 kB )
taktentus.min.js ( 6.1 kB )
 
Uruchom z NodeJS
Run with NodeJS
nodejs   taktentus.js   taktentus.code.file

Dostępne operacje

Available operators

:=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.

Predefiniowane wartości

Predefined values

_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;
@wyjeśli przypiszemy do tej zmiennej jakąś wartość, to zostanie ona wyświetlona jako liczba;
@WYjeśli przypiszemy do tej zmiennej jakąś wartość, to zostanie ona wyświetlona jako znak UTF-8;
@weprogram będzie oczekiwał podania wartości liczbowej;
@WEprogram będzie oczekiwał podania symbolu;
@keyzwraca 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 );
@stopzwraca liczbę instrukcji w programie;
#OPSto samo co @stop;
#MEMzwraca wielkość używanej pamięci;
#TIMEzwraca aktualny UNIX'owy czas w milisekundach;
#VERzwraca 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;
@wyprints number;
@WYprints UTF-8 symbol;
@wewaits for number from input;
@WEwaits for symbol from input;
@keyreturn last pressed symbol from keyboard;
@{liczba}random numbers from range ( example: @12 returns number in range 0 to 12 included );
@stopreturns program instructions count;
#OPSsame as @stop;
#MEMreturns size of used memory;
#TIMEretuns actual UNIX time in milliseconds;
#VERreturns 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.

Biblioteka programów

Library

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.

Proste i edukacyjne

Simple and educational

Ambitniejsza opcja

More advanced

O projekcie

About the project

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:

  • CTRL + N - nowy program;
  • CTRL + R - uruchomienie programu z aktualnej zakładki;
  • CTRL + P - pauza - wstrzymanie programu na chwilę;
  • CTRL + X - zamknięcie terminalu z aktualnej zakładki;
  • CTRL + S - zapisz aktualną zakładkę;
  • CTRL + Left - przejście na zakładkę po lewej;
  • CTRL + Right - przejście na zakładkę po prawej;
  • CTRL + Z - wysyła znak o wartości zero (często oznacza się w ten sposób koniec łańcucha znaków).

Keyboard shortcut - you can do some things quicker:

  • CTRL + N - new program;
  • CTRL + R - run program in the active tab;
  • CTRL + P - pause program;
  • CTRL + X - closing terminal within the active tab;
  • CTRL + S - save code from the active tab;
  • CTRL + Left - go to the previous tab;
  • CTRL + Right - go to the next tab;
  • CTRL + Z - sends zero char to the program (some programs use it as a sign: end of string).

Projekt powstał jako próba sił w starciu z kilkoma technologiami, technikami i bibliotekami, którego efekty możecie oglądać.

  • Bootstrap - część wizualna;
  • jQuery - mechanika strony;
  • wielowątkowość - nawet najdłuższe programy w Brainfuck'u nie zwieszają strony, gdyż są dzielone i zarządzane w mniejszych częsciach;
  • AJAX - doładowywanie programów z biblioteki;
  • wersje językowe - szybka zmiana bez przeładowywania strony;
  • drag'n'drop - możliwość przeciągania i upuszczania plików z kodem na stronie co owocuje ich otwarciem;
  • download - pobieranie plików źródłowych z poziomu strony (opcja w menu plików);
  • resize - automatycznie rozszerzające się okna z tekstem;
  • Open graph - dodatkowe metatagi opisujące stronę;
  • CSS3 background pattern - ciekawe zastosowanie CSS3;
  • Standalown application - biblioteka może być uruchomiona jako samodzielny program w środowisku NodeJS;
  • uglifyJS - kod JavaScriptu został skrócony i zoptymalizowany.

Utilized libraries, solutions and implemented capabilities:

  • Bootstrap - visual part;
  • jQuery - engine;
  • AJAX - dynamic loading from the library;
  • CSS3 background pattern - light and interesting;
  • drag'n'drop - drag and drop a file with the Brainfuck code over this page to open it;
  • resize - dynamic resizing of windows with code;
  • Standalown application - can be run as NodeJS script;
  • uglifyJS - JavaScript optimisation.

Jeśli uważasz ten projekt za wartościowy - udostępnij informację o nim :-)

If you find this project interesting - Share it! :-)

Inne projekty

Other projects

http://www.chess.doleczek.pl/

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.

http://www.bf.doleczek.pl/

Brainfuck interpreter online, coś dla prawdziwych pasjonatów programowania.

Brainfuck interpreter online, something for people with passion in coding.

Zobacz więcej naszych projektów!

See more of our projects!

http://promyk.doleczek.pl/

Swój udział w projekcie mają:

People involved:

Iwa Idziejczak
Jacek Szewczyk
Jan Doleczek
Jarosław Doleczek
© PROMYK