FALSE — езотерична мова програмування, яку створив 1993 року Ваутер ван Ортмерссен з двома, за його словами, цілями:
- Щоб можна було написати компілятор для неї розміром не більше одного кілобайта.
- Придумати синтаксис, який би виглядав шифровкою, випадковим набором символів.
FALSE | |
---|---|
Дата появи | 1993[1] |
Розробник | d[1] |
FALSE став однією з перших езотеричних мов програмування, зокрема він став джерелом натхнення для автора знаменитої мови Brainfuck. Вважають, що саме з FALSE почалася мода на езотеричні мови програмування.
Разом з тим FALSE — достатньо практична мова програмування. Хоча її й відрізняє непрочитний синтаксис, мова підтримує розумний набір операцій, на відміну від Brainfuck, який є реалізацією варіанту машини Тюрінга, не кажучи вже про такі «жахливі» мови як INTERCAL і Malbolge. Джерелом ідей для FALSE була мова Forth, її синтаксис також нагадує синтаксис відомого калькулятора dc для UNIX (зі зворотною польською нотацією). Одним з основних джерел складності під час програмування на FALSE є використання екзотичних знаків пунктуації (не розділюваних пропусками) замість форт-слів.
Базові операції
Арифметичні операції +
, -
, *
, і /
беруть із вершини стека два верхні елементи і повертають туди, відповідно, суму, різницю, добуток або частку. Знак підкреслення _
— це унарна операція зміни знака числа, яке лежить на вершині стека. Логічні операції у FALSE це бінарні =
, >
, &
, |
і унарна операція логічного заперечення ~
.
Досить екзотичний синтаксис у FALSE мають стекові операції:
$
— дублює вершину стека (у Forth DUP): 0 1 $ → 0 1 1%
— видаляє вершину стека (DROP): 0 1 % → 0\
— міняє місцями два верхні елементи стека (SWAP): 0 1 2 \ → 0 2 1@
— циклічна перестановка трьох верхніх елементів стека (ROT): 0 1 2 3 @ → 0 2 3 1ø
— копіює n-й елемент стека на вершину (PICK): 7 8 9 2ø → 7 8 9 7
Змінні і підпрограми
Змінні у FALSE позначаються однією малою латинською літерою (a-z), всі змінні глобальні.
Для присвоювання змінній значення (взятого з вершини стека) використовується операція двокрапка :
, так 3a:
присвоює змінній a значення 3. Щоб покласти значення змінної на стек використовується символ крапка з комою ;
.
Однак, оскільки FALSE — стекова мова, змінні рідко бувають потрібні для зберігання звичайних числових значень. Найчастіше їх використовують як функції — в них зберігають лямбда-вирази, наприклад:
[1+]i:
Це визначення функції інкремент, і їй дається назва i (все, що міститься між '[' і ']' — це і є лямбда-вираз). Для виконання лямбда-виразу використовується операція !
, якщо ж його збережено в змінній, то виклик набуває форми ;!
.
Керувальні конструкції
У FALSE є дві керувальні конструкції if (позначається ?
) і while — #
. Ось приклади їх використання:
a;1=[3b:]? — якщо a=1, присвоїти b значення 3. [a;1=][2f;!]# — поки a=1, застосовувати функцію f до значення 2.
Ввід/вивід
Рядки у FALSE — це все, що укладено між двома лапками "
. Рядок не можна покласти на стек або зберегти в змінній, однак він може бути частиною лямбда-виразу. Під час виконання рядка він просто виводиться. Наприклад:
a;1=["одиниця"]?
Для виведення цілого числа використовується операція крапка .
, Для виведення символу — кома ,
. Для читання символу — операція ^
. Операція ß
викликає скидання (flush) потоків уведення і виведення (stdin, stdout).
Приклад
Приклад визначення функції факторіал мовою FALSE:
[$1=$[\%1\]?~[$1-f;!*]?]F:
Реалізація
FALSE реалізовано як написаний на асемблері для процесорів 68000 компілятор розміром 1024 байти і переносний інтерпретатор, написаний на Сі (на сайті доступна виконувана версія для DOS). Є також реалізація інтерпретатора і компілятора для 386 DOS на ANSI Forth.
Доступна також реалізація FALSE на JavaScript.
Варіанти FALSE
Є написаний на ML функціональний варіант мови Strictly False [ 9 квітня 2020 у Wayback Machine.]. Ще одне функціональне розширення FALSE — мова F [ 14 березня 2021 у Wayback Machine.] (Functional False), написана на K (і реалізація «чистої» FALSE тією ж мовою).
owl
Розвитком ідей FALSE є мова owl (англ. Obfuscated Weird Language), яку розробив Antonio Maschio між 2005 і 2006. Від FALSE її відрізняє значна практична спрямованість, розширений набір операцій (з іншим символьним позначенням), наявність роботи з рядками тощо.
Зокрема, owl розрізняє цілі змінні і змінні-функції. Перші позначаються великими літерами, другі малими. Для присвоювання значень і тим, і іншим використовується кома ,
а для отримання значення або запуску функції — @
. Крім того, у віртуальній машині owl є 1 масив, довжина якого за замовчуванням дорівнює 32 КіБ, для роботи з яким використовують операції #,
і #@
(а також @,
і @@
для функцій).
Як if і while використовують символи ?
і !
, ці операції розрізняють, міститься на стеку один чи два лямбда-вирази. Так, якщо лямбда-виразів два, ?
працює як if … then … else.
Операції ^
і :
слугують, відповідно, для піднесення до степеня і добування кореня. Для роботи зі стеком використовують такі операції:
Команда | Стекова нотація | Назва у Forth |
$ | (n1 n2 — n2 n1) | swap |
% | (n — n n) | dup |
; | (n —) | drop |
' | (x*n m — y*n) | roll |
` | (x*n m — x*n n) | pick |
Символи дужок використовують для введення-виведення: (
і )
— введення і виведення символу; {
і }
— введення і виведення рядка, <
— введення чисел (операція менше відсутня, замість неї використовується $>
).
owl також дозволяє підключати inc файли _]inc.owl[
, або запускати зовнішні owl програми _[file.owl]
.
У owl (що більш ніж незвично для езотеричних мов) навіть можна вставляти в програму коментарі: рядкові, що починаються з #
, або багаторядкові, що поміщаються між (*
і *)
. Рядкові коментарі, що починаються символом #, дозволяють використовувати owl у шелл-скриптах.
Кросплатформовий інтерпретатор owl написано на Сі. Під Windows не підтримуються можливості налагодження і профілювання, не працює функція _t
для отримання поточного часу.
Тепер розглянемо програму виведення простих чисел на FALSE і її переклад на owl:
- FALSE
999 9 [1-$][\$@$@$@$@\/*=[1-$$[%\1-$@]?0=[\$.' ,\]?]?]#
- owl
999 9[1-%][$%2'%2'%2'%2'$/*=[1-%%[;$1-%2']?0=[$%.32)$]?]?]!
Наступний приклад — програма обчислення факторіала^
%0>~[?!]?"Factorial of "%." is "%1=[;1.][%1-[%1=~][%2'*$1-]!;.]
Див. також
Примітки
- FALSE — 2005.
- . Архів оригіналу за 26 червня 2021. Процитовано 26 червня 2021.
Посилання
- Wouter's Wiki: False Language [ 27 червня 2021 у Wayback Machine.](англ.) — Домашня сторінка мови FALSE
- (англ.)
- Сторінка мови owl [ 15 травня 2021 у Wayback Machine.](англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
FALSE ezoterichna mova programuvannya yaku stvoriv 1993 roku Vauter van Ortmerssen z dvoma za jogo slovami cilyami Shob mozhna bulo napisati kompilyator dlya neyi rozmirom ne bilshe odnogo kilobajta Pridumati sintaksis yakij bi viglyadav shifrovkoyu vipadkovim naborom simvoliv FALSEData poyavi 1993 1 Rozrobnik d 1 FALSE stav odniyeyu z pershih ezoterichnih mov programuvannya zokrema vin stav dzherelom nathnennya dlya avtora znamenitoyi movi Brainfuck Vvazhayut sho same z FALSE pochalasya moda na ezoterichni movi programuvannya Razom z tim FALSE dostatno praktichna mova programuvannya Hocha yiyi j vidriznyaye neprochitnij sintaksis mova pidtrimuye rozumnij nabir operacij na vidminu vid Brainfuck yakij ye realizaciyeyu variantu mashini Tyuringa ne kazhuchi vzhe pro taki zhahlivi movi yak INTERCAL i Malbolge Dzherelom idej dlya FALSE bula mova Forth yiyi sintaksis takozh nagaduye sintaksis vidomogo kalkulyatora dc dlya UNIX zi zvorotnoyu polskoyu notaciyeyu Odnim z osnovnih dzherel skladnosti pid chas programuvannya na FALSE ye vikoristannya ekzotichnih znakiv punktuaciyi ne rozdilyuvanih propuskami zamist fort sliv Bazovi operaciyiArifmetichni operaciyi i berut iz vershini steka dva verhni elementi i povertayut tudi vidpovidno sumu riznicyu dobutok abo chastku Znak pidkreslennya ce unarna operaciya zmini znaka chisla yake lezhit na vershini steka Logichni operaciyi u FALSE ce binarni gt amp i unarna operaciya logichnogo zaperechennya Dosit ekzotichnij sintaksis u FALSE mayut stekovi operaciyi dublyuye vershinu steka u Forth DUP 0 1 0 1 1 vidalyaye vershinu steka DROP 0 1 0 minyaye miscyami dva verhni elementi steka SWAP 0 1 2 0 2 1 ciklichna perestanovka troh verhnih elementiv steka ROT 0 1 2 3 0 2 3 1 o kopiyuye n j element steka na vershinu PICK 7 8 9 2o 7 8 9 7Zminni i pidprogramiZminni u FALSE poznachayutsya odniyeyu maloyu latinskoyu literoyu a z vsi zminni globalni Dlya prisvoyuvannya zminnij znachennya vzyatogo z vershini steka vikoristovuyetsya operaciya dvokrapka tak 3a prisvoyuye zminnij a znachennya 3 Shob poklasti znachennya zminnoyi na stek vikoristovuyetsya simvol krapka z komoyu Odnak oskilki FALSE stekova mova zminni ridko buvayut potribni dlya zberigannya zvichajnih chislovih znachen Najchastishe yih vikoristovuyut yak funkciyi v nih zberigayut lyambda virazi napriklad 1 i Ce viznachennya funkciyi inkrement i yij dayetsya nazva i vse sho mistitsya mizh i ce i ye lyambda viraz Dlya vikonannya lyambda virazu vikoristovuyetsya operaciya yaksho zh jogo zberezheno v zminnij to viklik nabuvaye formi Keruvalni konstrukciyiU FALSE ye dvi keruvalni konstrukciyi if poznachayetsya i while Os prikladi yih vikoristannya a 1 3b yaksho a 1 prisvoyiti b znachennya 3 a 1 2f poki a 1 zastosovuvati funkciyu f do znachennya 2 Vvid vividRyadki u FALSE ce vse sho ukladeno mizh dvoma lapkami Ryadok ne mozhna poklasti na stek abo zberegti v zminnij odnak vin mozhe buti chastinoyu lyambda virazu Pid chas vikonannya ryadka vin prosto vivoditsya Napriklad a 1 odinicya Dlya vivedennya cilogo chisla vikoristovuyetsya operaciya krapka Dlya vivedennya simvolu koma Dlya chitannya simvolu operaciya Operaciya ss viklikaye skidannya flush potokiv uvedennya i vivedennya stdin stdout PrikladPriklad viznachennya funkciyi faktorial movoyu FALSE 1 1 1 f F RealizaciyaFALSE realizovano yak napisanij na asembleri dlya procesoriv 68000 kompilyator rozmirom 1024 bajti i perenosnij interpretator napisanij na Si na sajti dostupna vikonuvana versiya dlya DOS Ye takozh realizaciya interpretatora i kompilyatora dlya 386 DOS na ANSI Forth Dostupna takozh realizaciya FALSE na JavaScript Varianti FALSEYe napisanij na ML funkcionalnij variant movi Strictly False 9 kvitnya 2020 u Wayback Machine She odne funkcionalne rozshirennya FALSE mova F 14 bereznya 2021 u Wayback Machine Functional False napisana na K i realizaciya chistoyi FALSE tiyeyu zh movoyu owl Rozvitkom idej FALSE ye mova owl angl Obfuscated Weird Language yaku rozrobiv Antonio Maschio mizh 2005 i 2006 Vid FALSE yiyi vidriznyaye znachna praktichna spryamovanist rozshirenij nabir operacij z inshim simvolnim poznachennyam nayavnist roboti z ryadkami tosho Zokrema owl rozriznyaye cili zminni i zminni funkciyi Pershi poznachayutsya velikimi literami drugi malimi Dlya prisvoyuvannya znachen i tim i inshim vikoristovuyetsya koma a dlya otrimannya znachennya abo zapusku funkciyi Krim togo u virtualnij mashini owl ye 1 masiv dovzhina yakogo za zamovchuvannyam dorivnyuye 32 KiB dlya roboti z yakim vikoristovuyut operaciyi i a takozh i dlya funkcij Yak if i while vikoristovuyut simvoli i ci operaciyi rozriznyayut mistitsya na steku odin chi dva lyambda virazi Tak yaksho lyambda viraziv dva pracyuye yak if then else Operaciyi i sluguyut vidpovidno dlya pidnesennya do stepenya i dobuvannya korenya Dlya roboti zi stekom vikoristovuyut taki operaciyi Komanda Stekova notaciya Nazva u Forth n1 n2 n2 n1 swap n n n dup n drop x n m y n roll x n m x n n pick Simvoli duzhok vikoristovuyut dlya vvedennya vivedennya i vvedennya i vivedennya simvolu i vvedennya i vivedennya ryadka lt vvedennya chisel operaciya menshe vidsutnya zamist neyi vikoristovuyetsya gt owl takozh dozvolyaye pidklyuchati inc fajli inc owl abo zapuskati zovnishni owl programi file owl U owl sho bilsh nizh nezvichno dlya ezoterichnih mov navit mozhna vstavlyati v programu komentari ryadkovi sho pochinayutsya z abo bagatoryadkovi sho pomishayutsya mizh i Ryadkovi komentari sho pochinayutsya simvolom dozvolyayut vikoristovuvati owl u shell skriptah Krosplatformovij interpretator owl napisano na Si Pid Windows ne pidtrimuyutsya mozhlivosti nalagodzhennya i profilyuvannya ne pracyuye funkciya t dlya otrimannya potochnogo chasu Teper rozglyanemo programu vivedennya prostih chisel na FALSE i yiyi pereklad na owl FALSE 999 9 1 1 1 0 owl 999 9 1 2 2 2 2 1 1 2 0 32 Nastupnij priklad programa obchislennya faktoriala 0 gt Factorial of is 1 1 1 1 2 1 Div takozhEzoterichni movi programuvannya Konkatenativna mova programuvannyaPrimitkiFALSE 2005 d Track Q30312498 Arhiv originalu za 26 chervnya 2021 Procitovano 26 chervnya 2021 PosilannyaWouter s Wiki False Language 27 chervnya 2021 u Wayback Machine angl Domashnya storinka movi FALSE angl Storinka movi owl 15 travnya 2021 u Wayback Machine angl