Програмски језик ДаркПрограмски језик Дарк ( енгл. Dark ) је езотерични програмски језик[1] креиран од стране Дејвида Ката (David Catt)[2] који га је направио да буде зао. ИнструкцијеУводДарк је језик заснован на манипулацији читавим световима и димензијама како би се постигли циљеви и изградила највећа мука стварности. Сваки програм се чита као серија команди за предмете са циљем да се сваки свет што је више могуће изврне. Због своје лоше дизајниране документације, вероватно је да су чак и описи језика зли. Основе језикаНапомена: У свим примерима кодова где год се употребљавају заграде {} дате су информације о делу наредбе, на пример ({име објекта}${функција} означава линију која садржи име објекта праћено колоном и именом функције; пример такве линије може бити нешто$акција). Језик се искључиво заснива на објектима. На почетку сваког програма, објекат типа HELL мора бити декларисан (синтакса: +{име објекта} hell). Овај објекат дозвољава креирање и контролу других објеката и представља основ за програм. Објекат се користи навођењем имена објекта и функције која се покреће на том објекту (синтакса: {име објекта}${функција}{параметри}) Све линије програма са изузетком у првој линији треба да буду у овом формату, осим ако је линија празна линија или коментар. Коментиране линије морају се започети са симболима цеви (|) и завршити са другим симболом цеви. Сва имена објеката су осетљива на величину слова. Кад год се појави синтаксна грешка, програмски разум се смањи за 1. Разуман програм почиње са 100, ако разумљивост програма достигне 0 програм није разумљив. Када год се јави општа грешка, тумач одштампа линију "Murphy's Law is working correctly."[3] . Када се програм заврши, сви активни објекти ће се решавати и одговарајуће поруке о грешци ће се појавити на конзоли са детаљима процеса чишћења. Као такав препоручује се уништавање свих објеката пре него што се програм заврши. Променљиве се такође третирају слично. СпецифичноСви објекти се чувају у меморијском простору познатом као CONTROL_SPACE, одвојено од свих променљивих. Променљиве су локалне за сваки манипулатор и налазе се у мемориској локацији познатој по називу WORLD_BLOCK. Постоји глобални ред стрингова познат као VOICELIST, који чува вредности знакова. Референтни интерпретаторРеферентни интерпретатор је у потпуности усклађен са Дарк програмским језиком. Прихвата више изворних датотека као аргументе командне линије. Свака улазна датотека се интерпретира засебно и секвенцијално. Опције се такође могу подесити помоћу командне линије. Аргументи командне линије утичу само на изворне датотеке након аргумента. Могући аргументи су:
Референтни интерпретатор такође одговара недокументованим деловима Дарк стандарда.
Типови објекатаHellHell је основни објекат програма, декларисан у првом реду кода. Може постојати само један hell објекат по програму. Овај објекат прихвата следеће наредбе:
ManipulatorManipulator је објекат који омогућава управљање променљивама. Он може садржати највише 1024 променљиве. Када се променљива ослободи, за собом оставља распад. Овај распад се мора обрисати уз помоћ функције VOID, како би се ослободило место за нове променљиве. Постоји неколико механизама променљивих. Могуће је дефинисати променљиве са истим именом као нека друга променљива у другом манипулатору, иако када их користимо могу изазвати проблеме. Манипулатор може манипулисати само својим променљивама, стога операције са променљивама у манипулаторима морају да користе објекат SIGN као привремено складиште. Све променљиве су неозначени природни бројеви који могу бити дужине 8, 16 ,32 или 64 бита. Када се променљиве не користе у преко 65536 циклуса, оне почињу да акумулирају(прикупљају) корупцију. Корупција обрће један бит у променљивој када се појави у њој. Свака променљива мора имати диспозицију. Ако се у функцији користе променљиве које се разликују за више од једне диспозиције, оне се сукобљавају и променљиве се убијају. Променљиве такође морају бити дефинисане као или SERVANT или MASTER. Servant мора изабрати master променљиву. Када master умре, све променљиве везане за њега такође умиру. Ово је корисно за груписање и масовно убијање променљивих. Објекат manipulator прихвата следеће функције:
EntropyОбјекат entropy омогућава контролу тока програма. Лабеле могу бити уграђене, и неће се редефинисати унутар других лабела осим ако нису недефинисане. Функција choice може бити уграђена, али свака од њих мора бити из другог entropy објекта. Прихватљиве функције су:
StalkerStalker објекат контролише све базичне излазно/улазне функције. Stalker не почиње сам од себе, већ мора да се покрене једном stalk функцијом. Ако stalker није покренут онда ће се сви покушаји да се изврше И/У функције резултовати депресивним порукама о грешци које ће бити написане у конзоли. Stalker има само два мода DISTANT (удаљен,уобичајен) и PERSONAL (лични). У удаљеном моду, сваки излаз је написан на једном раздвајачу и мора да се избаци на конзолу преко paracusia функције. Мењање модова ће натерати раздвајача да се испразни, док је stalker на личном моду, сваки излаз се одмах пише на конзоли.
SignSign објекти су контејнери за стрингове. Sign је репрезентација реда карактера кодова. Sign објекти прихватају следеће функције:
Неки програмиCAT програмCat програм је програм који копира свој стандардни улаз на свој стандардни излаз. +deadcat hell deadcat$twist stalker killer deadcat$twist manipulator person deadcat$twist entropy fate killer$stalk killer$personal person$manufacture weapon 0 8 master fate$corpse violence killer$control weapon killer$action weapon fate$stumble violence fate$illusion violence person$kill weapon deadcat$consume person deadcat$consume killer deadcat$consume fate deadcat$apocalypse Hello world!Hello world! програм је тривијалан програм који на стандардни излаз исписује ниску текста.Овај програм је често први написан на новом езотеричком програмском језику, како би се приказао излаз. +hello hell hello$twist sign hws hello$twist stalker io io$stalk io$personal hws$scrawl " Hello world! hws$read io$echo hello$empty hello$apocalypse Фибоначијев низФибоначијев низ [4]је низ бројева, где је сваки број збир два претходна броја у низу. Једини изузетак су прва два броја која су 0 и 1. +fib hell fib$twist stalker creep fib$twist entropy cruelty fib$twist manipulator darkone creep$stalk creep$personal darkone$manufacture new 0 64 master darkone$manufacture this 0 64 servant new darkone$manufacture last 0 64 servant new darkone$manufacture ltr 0 8 master darkone$set this 1 cruelty$corpse fate darkone$add new last this darkone$set last this darkone$set this new creep$action # this cruelty$choice this <= 9223372036854775807 darkone$set ltr 44 creep$action ltr darkone$set ltr 32 creep$action ltr cruelty$stumble fate cruelty$reprogram darkone$omnicide darkone$void fib$empty fib$apocalypse Главни језик/Тест интерпретатора+test hell |Initialize objects| test$twist manipulator overseer test$twist manipulator leader test$twist entropy fate test$twist entropy path test$twist stalker spy test$twist sign bbs test$twist sign keep_out |Define a few variables| overseer$manufacture politician 0 64 master overseer$manufacture person1 0 32 servant politician overseer$manufacture person2 0 16 servant politician overseer$manufacture person3 0 8 servant none leader$manufacture person1 0 16 master leader$manufacture test1 0 32 servant politician leader$manufacture test2 0 32 servant test3 leader$manufacture test3 0 32 servant test2 leader$manufacture hater 5 8 master leader$manufacture hated 9 8 master |Check that stalker is not initialized| |Should give depressing errors| spy$action politician spy$control politician |Initialize stalker| spy$stalk |Test io modes with fibonacci series| |Should print Press any key to continue..., then will display the fibonacci series| spy$distant overseer$set person1 10 leader$set test1 0 leader$set test2 1 bbs$scrawl " , fate$corpse fibonacci_1 leader$add test3 test1 test2 leader$set test1 test2 leader$set test2 test3 spy$action # test1 bbs$read ~ spy$echo fate$choice test1 < 1000000 fate$stumble fibonacci_1 fate$reprogram fate$illusion fibonacci_1 bbs$tear * bbs$scrawl " Press any key to continue... bbs$read spy$personal spy$echo spy$action person1 spy$distant spy$control test1 spy$action person1 spy$paracusia |Test that choices work and nested choices are allowed| |Should display True,True,False,True,True,True,False| spy$personal bbs$scrawl " True bbs$scrawl person1 keep_out$scrawl " False keep_out$scrawl person1 fate$choice 0 = 0 bbs$read ~ spy$echo fate$reprogram fate$choice 0 = 0 bbs$read ~ spy$echo fate$balance keep_out$read ~ spy$echo fate$reprogram fate$choice 0 <> 0 bbs$read ~ spy$echo fate$balance keep_out$read ~ spy$echo fate$reprogram fate$choice person2 = person3 path$choice person2 = 0 bbs$read ~ bbs$read ~ spy$echo spy$echo path$balance bbs$read ~ keep_out$read ~ spy$echo spy$echo path$reprogram fate$balance path$choice person2 = 0 keep_out$read ~ bbs$read ~ spy$echo spy$echo path$balance keep_out$read ~ keep_out$read ~ spy$echo spy$echo path$reprogram fate$reprogram fate$choice person2 = person3 path$choice person2 = 1 bbs$read ~ bbs$read ~ spy$echo spy$echo path$balance bbs$read ~ keep_out$read ~ spy$echo spy$echo path$reprogram fate$balance path$choice person2 = 1 keep_out$read ~ bbs$read ~ spy$echo spy$echo path$balance keep_out$read ~ keep_out$read ~ spy$echo spy$echo path$reprogram fate$reprogram bbs$tear * keep_out$tear * |Test Randomization| overseer$chaos person2 spy$action # person2 spy$action person1 |Test getting rid of master variable| overseer$suicide politician |Test garbage collect| overseer$void |Test sign functionality| |Shoud output ello, world!,world!,w,orld!,orld!,| leader$set person1 10 bbs$tear * bbs$scrawl " Hello, world! bbs$scrawl person1 bbs$tear bbs$read ~ spy$echo bbs$tear 6 bbs$read ~ spy$echo bbs$observe test1 spy$action test1 spy$action person1 bbs$steal test1 bbs$read ~ spy$echo bbs$read spy$echo bbs$read spy$echo |Test disposition conflict| leader$set hater hated |Test murphy's law| spy$action /THIS/IS/NOT/A/VALID/VARIABLE/NAME |Cleanup| test$twist manipulator final final$manufacture temporary 0 8 master final$empty test$consume final test$consume spy test$consume fate test$consume keep_out leader$suicide test3 |Should show overseer melting person3, overseer dying, leader melting person1 test1 test2, leader dying, path, bbs| Референце
Спољашњи извори |
Portal di Ensiklopedia Dunia