[go: nahoru, domu]

Пређи на садржај

Rockstar (програмски језик)

С Википедије, слободне енциклопедије
Рокстар
Оригинални називенгл. Rockstar
Изговара серокстар
МоделПроцедурално програмирање, динамички типизиран, езотерични
Појавио се1980-их
Аутор(и)Дајлан Бети
Систем типоваMysterious, Number, String, Boolean, Object, Null
Документација[1]

Rockstar је динамички типизиран, Тјуринг-потпун, програмски језик,припада групи езотеричних програмских језика.[1]
Рокстар је дизајниран за креирање компјутерских програма који су налик текстовима песама, и на његов развој је велики утицај имало друштво текстописаца рок музике 1980-их. Језик је забаван, ко би одолео да покрене програм који је базиран на тексту који је Митлоф написао, зар не?
Иако је Рокстар потпуно дефинисан програмски језик, пре свега је направљен из забаве. Програмски језик Рокстар креирао је Дајлан Бети(енгл. Dylan Beattie), подстакнут твитом Пол Стовела, који је рекао: "Да би стварно збунили послодавце требало би направити програмски језик под називом Рокстар"[2].

Спецификација програмског језика Рокстар

[уреди | уреди извор]

Замишљено је да се програмеру да велика слобода при писању и структурирању програма написаних у овом језику, зарад исказивања њихове поетичности.
Рокстар програми користе UTF-8 енкодирање и имају екстензију .rock.

Коментари

[уреди | уреди извор]

Програмски језик је изрично против употребе коментара са образложењем да корисник треба сам да нађе смисао програма, без сугестија о томе шта је написано. Ако се баш инсистира на употреби коментара, потребно их је ставити у оквиру заграда (). То значи да не можете користити заграде у писању сложених аритметичких израза већ их је потребно разложити на више једноставнијих.

Променљиве

[уреди | уреди извор]

Постоје два начина за декларисање променљивих у програмском језику Рокстар.
Уобичајене променљиве се декларишу употребом кључних речи (a, an, the, my или your) за којима следи име променљиве које мора да садржи мале ASCII карактере a-z. Кључна реч је притом део променљиве, дакле a boy је променљива различита од променљиве the boy.
Исправна променљива је било која властита именица која није резервисана као кључна реч и не почиње великим словом. Променљиве могу укључити у себе произвољан број бланко карактера докле год реч иза бланко карактера почиње великим словом. Иако многи програмери користе ово својство за именовање променљивих попут Сustomer ID, Tax Rate or Distance In KM, препоручује се давање имена променљивама на следећи начин: Tommy, Gina, Doctor Feelgood, Mister Crowley, Kayleigh, Tom Sawyer, Billie Jean and Janie.
Попут Рубија(енгл. Ruby) и Пајтона(енгл. Python) променљиве су динамички-типизиране и није их потребно декларисати пре употребе.
Ако је променљива дефинисана ван функције она има глобалан опсег видљивости. Глобалне променљиве су видљиве у читавом програму од места иницијализације. Ако је прменљива декларисана у функцији онда је локална. Локалне променљиве су доступне од своје иницијализације до краја функције у којој су инцијализоване.
Кључне речи it, he, she, him, her, they, them, ze, hir, zie, zir, xe, xem, ve, и ver се односе на последњу иницијализовану променљиву.

Рокстар има јако сличне типове променљивих као и ECMAScript, осим што undefined није у духу rock'n'roll-а, па се користи кључна реч mysterious уместо ње.

  • Mysterious - вредност која је на снази док корисник не додели вредност променљивој
  • Null - има нумеричку вредност 0 и логичку false
  • Boolean - логички тип променљиве, може имати две вредности true и false
    • right, yes и ok представљају логичку вредност true
    • wrong, no и lies представљају логичку вредност false
  • Number - бројеви се у Рокстару су складиштени коришћењем DEC64 система
  • String - је низ 16-битних неозначених целих бројева који се представљају UTF-16 енкодирањем
  • Object - је колекција именованих поља као у ЕCMAScript-у

Истинитост

[уреди | уреди извор]

Резултати поређења одређују се на основу појма који се зове „истинитост”. Ако је резултат поређења вредност која је истинита, она ће се имплицитно претворити у true. Уколико добијена вредност није истинита, имплицитно ће се претворити у false.

  • Mysterious - false
  • Null - false
  • Boolean - true ако је вредност истинита, иначе false
  • Number - false ако је вредност једнака 0, иначе true
  • String - true
  • Object - true

Константе и кључне речи

[уреди | уреди извор]

Речи које се користе за конструкцију литерала одређеног типа називају се константе.
Речи које се користе за писање различитих синтаксних конструкција називају се кључне речи.

Константе: mysterious, null, nothing, nowhere, nobody, empty, gone, true, right, yes, ok, false, wrong, no, lies, maybe, definitely maybe.

Литерали и додељивање

[уреди | уреди извор]

За писање ниских у програмском језику Рокстар користе се двоструки наводници " ".

* "Hello San Francisco"

Нумерички литерали у се записују као децимални бројеви.

* 123
* 3.141592654

Додела се означава комбинацијом кључних речи put/into.

* Put 123 into X - додељује се вредност 123 у променљиву X
* Put "Hello San Francisco" into the message - додељује вредност "Hello San Francisco" у променљиву the message

Једноструки наводници

[уреди | уреди извор]

Већина програмских језика користи једноструке наводнике, да опише стринговне литерале попут : 'like this'. Међутим када се пише текст на енглеском језику ASCII кодираним карактерина "'" се користи да назначи речи попут: you're, she's, he's, shouldn't, rock'n'roll. Rock'n'roll константно користи апострофе: sweet child o' mine, ain't talkin' 'bout love, guns n' roses.
Имајући то у виду, Rockstar долази до следећег решења:

  • Реч 's\W+ - једностуки наводник, који прати мало 's' и једна или више белина - биће замењени са " is "(белина, is, белина )
  • Ово омогућује да "Janie's got a gun" (иницијализује Janie са вредношћу 313) и Union's been on strike (иницијализује Union са вредношћу 426) да буду исправне декларације променљивих.
  • Сви остали једноструки наводници се потом игноришу, ain't је исто што и aint, wakin' има 5 карактера а ’’’’’ је еквивалентно са празним стрингом. Ово значи да надаље межете да користите једноструке наводнике без бриге да они могу да утичу да дође до грешке приликом превођења програма.


Ариметика

[уреди | уреди извор]

Основне аритметичке операције изводе се помоћу кључних речи plus, minus, times и over.
Аритметички изрази:

  • {a} plus {b} - сабирање
  • {a} minus {b} - одузимање
  • {a} times {b} - множење
  • {a} over {b} - дељење

Примери:

  • Put the whole of your heart into my hands - множи променљиву the whole са променљивом your heart и смешта резултат у променљиву my hands
  • My world is nothing without your love - вредност променљиве My world је резултат одузимања променљиве your love од 0
  • If the tears of a child is nothing - проверава да ли је резултат множења променљивих the tears и a child једнак 0
  • My heart over the moon - резултат је дељење променљивих My heart и the moon

Логички оператори

[уреди | уреди извор]

Програмски језик Рокстар има четири различита логичка оператора.
Логички изрази:

У израчунавању вредности логичких израза користи се лењо израчунавање. Основна одлика оваквог израчунавања јесте израчунавање само онога што је неопходно, о значи да ако се израчунавањем првог аргумента може одредити резултат, други аргумент није потребно рачунати.


Бинарно поређење

[уреди | уреди извор]

Оператори за поређење (is, ain't, is not) су дозвољени, ако се ради о поређењу истих типова података. Објекти се пореде по једнакости референце, док се сви остали типови пореде по једнакости вредности.

Компаратори за сортирање (is higher than, is lower than, is as high as, and is as low as) су дозвољени једнино ако су оба операнда бројеви или стрингови, или су конвертовани у један од ових типова следећи правила испод. Бројеви се пореде као што је очекивано, док се стрингови пореде лексикографски.

  • <Mysterious> <op> Mysterious => Equal.
  • <Non-Mysterious> <op> Mysterious => Non equal.
  • String <op> Number => Преводи стринг у број користећи систем са основом 10, игноришући водеће нуле.
  • String <op> Boolean => Преводи стринг у boolean користећи све дефинисане алиасе.
  • String <op> Null => Non equal.
  • Number <op> Boolean => Пребацује број у boolean по истинитости.
  • Number <op> Null => Преводи null у 0.
  • Boolean <op> Null => Преводи null у falsе.

Примери

  • "1" is 1 је true зато што се "1" преводи у број 1
  • "2" ain't Mysterious је true зато што ниједан тип није еквивалентан са mysterious осим њега самог.
  • "02" < "10" је true јер лексикографско поређење између 0 и 1 показије да је први карактер мањи од другог.

Приоритет оператора

[уреди | уреди извор]

У програмском језику Рокстар редослед оператора према приоритету исти је као и у математици.

  1. Функцијски позив
  2. Логички оператор NOT (десна асоцијативност)
  3. Множење и дељење (лева асоцијативност)
  4. Сабирање и одузимање (лева асоцијативност)
  5. Оператори поређења (лева асоцијативност)
  6. and, or и nor (лева асоцијативност)

Пример:

  • A taking B times C plus not D times E and F - представља израз ((A(B) * C) + (!D * E)) && F


Инкрементирање и декрементирање

[уреди | уреди извор]

У Рокстар програмском језику за инкрементирање се користи конструкција Build {променљива} up, а за декрементирање Knock {променљива} down. Уколико се више пута употреби up или down, инкрементирање и декрементирање ће се извршити онолико пута колико је пута употребљена реч up односно down. Зарез се може налазити између сваког up или down.

  • Build my world up - вредност прменљиве my world се повећава за 1
  • Knock the walls down -вредност прменљиве the walls се умањује за 1
  • Knock the walls down, down - вредност променљиве the walls се умањује за 2

Улаз/излаз

[уреди | уреди извор]

Кључна реч Listen се користи за читање једне линије са STDIN. Listen to се користи за именоване променљиве.

  • Listen to your heart - чита једну линију са улаза и смешта у променљиву your heart

Кљцчна реч Say се користи за исписивање вредности променљиве на STDOUT.

  • Say Tommy - исписује на STDOUT вредност која је сачувана у променљивој Tommy

Уместо кључне речи Say могу се користити Shout, Whisper и Scream.

Условни изрази почињу са кључном речи If а затим се наводи израз. Уколико израз има истинитосну вредност true, онда се извршава следећи блок кода. Уколико је истинитосна вредност израза false, извршава се део кода који се налази након наредбе Else.


У програмском језику Рокстар петља се означава кључном речи While или Until. Петље омгућавају извршавање кодног блока док је израз задовољен.

 Tommy was a dancer
 While Tommy ain't nothing,
 Knock Tommy down

Вредност променљиве Tommy се иницијализује на 16, врши се декрементираље променљиве све док вредност променљиве Tommy не буде једнака 0. Наредбе break и continue функционишу као и у већини програмских језика. Рокстар дефинише израз Break it down који се ккористи уместо break, као и израз Take it to the top уместо continue.

Блок у Рокстару почиње са If, Else, While или Until, а завршава се празном линијом или завршетком датотеке.
EOF завршава све отворене блокове кода.

 Tommy was a dancer
 While Tommy ain't nothing
 Shout it
 Knock it down


Функције

[уреди | уреди извор]

Функције се декларишу коришћењем име променљиве коју прати кључна реч takes, и затим низ параметара одвојених кључном речи and.
Пример функција:

 Multiply takes X and Y
 Search takes Needle and Haystack

Тело функције је низ наредби које нису раздвојене бланко карактерима. Бланко карактери означавају крај тела функције. Функције у програмском језику Рокстар увек имају наредбу return, чију функцију врши кључна реч Give back.

Функције се позивају коришћењем кључне речи taking и морају да имају бар један аргумент. Аргументи се раздвајају коришћењем кључне речи 'and' или ','. Аргументи могу бити само променљиве и литерали. Изрази који имају више оператора нису дозвољени.Функције су похлепне, ако нађу више симбола које могу укључити у аргумент, укључиће их.

  Multiply taking 3, 5 је израз који враћа 15
  Search taking "hands", "lay your hands on me"
  Put Multiply taking 3, 5 and 9 into Large поставиће large на 3 * 5 * 9 NOT (3 * 5) && 9.

Примери програма

[уреди | уреди извор]

Ево примера FizzBuzz програма написаног у Rockstar језику, са блоком наредби који служе разјашњењу[3]:

 Modulus takes Number and Divisor
  While Number is as high as Divisor
  Put Number minus Divisor into Number
      (blank line ending While block)
  Give back Number
      (blank line ending function declaration)
  Limit is 100
  Counter is 0
  Fizz is 3
  Buzz is 5
  Until Counter is Limit
  Build Counter up
  If Modulus taking Counter, Fizz is 0 and Modulus taking Counter, Buzz is 0
     Say "FizzBuzz!"
  Continue
      (blank line ending 'If' Block)
  If Modulus taking Counter and Fizz is 0
  Say "Fizz!"
  Continue
      (blank line ending 'If' Block)	
  If Modulus taking Counter and Buzz is 0
  Say "Buzz!"
  Continue
      (blank line ending 'If' Block)
  Say Counter
      (EOL ending Until block)

И ево исте ствари у идиоматском Rockstar-у, написаног поетичним изражавањем

  Midnight takes your heart and your soul
  While your heart is as high as your soul
  Put your heart without your soul into your heart
  
  Give back your heart
                                                                                                  
  Desire is a lovestruck ladykiller
  My world is nothing 
  Fire is ice
  Hate is water
  Until my world is Desire,
  Build my world up
  If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
  Shout "FizzBuzz!"
  Take it to the top
                                                                                            
  If Midnight taking my world, Fire is nothing
  Shout "Fizz!"
  Take it to the top
                                                                                                     
  If Midnight taking my world, Hate is nothing
  Say "Buzz!"
  Take it to the top
  Whisper my world

Референце

[уреди | уреди извор]
  1. ^ „Рокстар”. GitHub. GitHub. Приступљено 28. 10. 2018. 
  2. ^ „Подстицај за креирањем”. esolang.org. esolang. Приступљено 26. 10. 2018. 
  3. ^ „Примери”. boingboing.net. boingboing. Приступљено 25. 10. 2018. 

Спољашње везе

[уреди | уреди извор]