INTERCAL — разлика између измена

Садржај обрисан Садржај додат
Нема описа измене
Нема описа измене
Ред 3:
[[Слика:Jimbo Lyon.jpg|мини|Джимбо Лион, један од аутора INTERCAL-а]]
 
"'''Compiler Language With No Pronounceable Acronym'''", скраћено '''INTERCAL''', је [[Езотерични програмски језици|езoтерични програмски језик]] који је настао 1972. као шала од стране [[Дона Вудса]] (енгл. Don Woods) и [[Џејмса М. Лиона]] (енгл. James M. Lyon), два студента на универзитету у Принстону. На сатиричан начин приказује становишта многих програмских језика у то доба,<ref> "[https://www.techworld.com.au/article/251892/-z_programming_languages_intercal?pp=1&fp=2&fpid=-1 The A-Z of Programming Languages: INTERCAL]"-Techworld. 2008-07-04. Приступљено 28.10.2018</ref> као и ширење устаљених језичких конструкција и система записивања шездесетих година 20. века. <br /> <br />
Постоје две тренутно одржаване верзије INTERCAL-а: C-INTERCAL , одржаван од стране [[Ерика С. Рејмонда]] (енгл. Eric S. Raymond)<ref> "[http://www.catb.org/~esr/intercal/ The INTERCAL Resources Page]". Catb.org. Приступљено 29.10.2018</ref>, и CLC-INTERCAL одржаван од стране [[Клаудија Калвелија]] (енгл. Claudio Calvelli). <ref name="clc">"[https://archive.is/20121224003625/http://clc.intercal.org.uk/ Clc-Intercal]". Clc-Intercal. 2010-04-01. Приступљено 29.10.2018</ref>
 
Ред 32:
 
INTERCAL приручник даје необична имена свим знаковима [[ASCII]] кода који нису алфанумеричког типа- знак <code>'</code> и <code>"</code> су редом "искре" и "зечије уши", (изузетак је знак [[Амперсенд|&]], јер како програмски речник ''[[Jargon File]]'' наводи: "Шта би могло бити луцкастије?"). Оператор доделе, који је у многим програмским језицима представљен као знак једнакости, је у INTERCAL-у представљен скупом знакова који представљају стрелицу која показује улево <code><-</code>, а састоји се од знака "мање од" и црте, јасно означавајући да леви операнд "добија" вредност.
 
==Синтакса==
Унос(помоћу инструкције <code>WRITE IN</code>) и излаз (користећи <code>READ OUT</code> инструкцију) не користе уобичајене формате записа- у INTERCAL-72, инструкција ''WRITE IN'' уписује број чије се цифре записују као текст на енглеском језику (као ''SIX FIVE FIVE THREE FIVE''), а ''READ OUT'' га избацује као "исецкане" [[Римски бројеви|римске бројеве]].<ref name="manual"></ref>
Линија 40 ⟶ 39:
*TriINTERCAL, који модификује радикс сортирање којим су бројеви представљени и може да користи тринарни бројевни систем као основни(10-тритни уместо 16-битног)<ref name="undocumented"/>.
*CLC-INTERCAL имплементира значајан број сопствених структура података, као што су "classes and lectures", постизајући да основни типови структура података меморишу више информација радије него да уводе нове типове података.<ref name="clc"/> Низови су прорачунавани тако што им се додају вредности ако им је променљива [[Скалар (рачунарство)|скаларног]] типа. Константе се могу употребљавати, и представљане су са <code>#</code> ("мрежа" у INTERCAL-у) и праћене самом константом, записане као децимални број. Константе представљене у интеџерима су подржане само у опсегу од 0 до 65535.
 
 
===Оператори===
Постоје само 5 оператера у [[INTERCAL-72]]. Коришћење ових оператoра је веома флексибилно и зависи од њихових комбинација, тако да је дато више могућности за већину оператора.
Оператери и њихове ознаке су:
*унарни '''AND''' (ознака:&)
*унарни '''OR''' (ознака:V)
*унарни '''XOR''' (ознака:V, backspace, -)
*бинарни '''MINGLE''' (ознака:c, backspace, /)
*бинарни '''SELECT''' (ознака:~)
Међутим оператери <code>XOR</code> и <code>MINGLE</code> имају још неке ознаке, у зависности од екстензије INTERCAL-а.
За разлику од већине других језика, <code>AND</code>,<code>OR</code> и <code>XOR</code> су унарни оператoри. Оператор се поставља између ознаке интерпункције која одређује име променљиве или константу и броја који одређује која је променљива, или само унутар груписаних знакова (тј. Један карактер касније него што би био у програмским језицима као што је C.) <code>SELECT</code> и <code>INTERLEAVE</code> (који је познатији и као <code>MINGLE</code>) су бинарни оператори; SELECT узима бита свог првог операнда који одговарају "1" битовима свог другог операнда и уклања битове који одговарају "0" битовима, померајући се према биту најмање важности (тако 51 (110011 у бинарном) SELECT 21 (10101 у бинарном) је 5 (101 у бинарном)). <code>MINGLE</code> замењује битoве од првог и другог операнда (на тај начин да је бит најмањег значаја свог другог операнда уједно и бит најмањег значаја у резултату). У INTERCAL-у сви оператори су истог приоритета, што значи да ознаке за груписање морају бити коришћене да би се дошло до жељеног решења. Ознаке за груписања су искра ("spark") која се означава са <code>'</code>, и зечије уши ("rabbit-ears") које се означавају са <code>"</code>. Треба бити пажљив приликом уноса ова два оператора, да не се они не би комбиновали или мешали.
===Структуре наредби===
Све наредбе у INTERCAL-у крећу са одређеном наредбом у језику [[INTERCAL-72]], то су <code>DO</code>,<code>PLEASE</code>,или <code>PLEASE DO</code>, које значе исто програму (али превелико коришћење једне од њих доводи до неизвршивости кода,што је карактеристика која се води као "Undocumented" у програмском језику INTERCAL-72, поменута у C-INTERCAL упутсвима за коришћење), или изврнута форма (са <code>NOT</code> или <code>N'T</code> које су додате компајлеру). Пре извршења програма може се дати проценат шансе за извршавање линије у формату <code>%50</code>, који подразумева 100%.
У језику INTERCAL-72, главне контролне структуре су <code>NEXT</code>, <code>RESUME</code> и <code>FORGET</code>. <code>DO (line) NEXT</code> се ограничава на одређену линију, памти следећу линију која би се извршила ако није била на NEXT-у (идентификатори који нису DO могу користити за било коју наредбу, DO је само као пример) ; DO FORGET израз уклања уносе израза са врха прозора позива (ово је корисно за избегавање грешке која се иначе дешава када има више од 80 уноса), а израз DO RESUME уклања уносе израза из прозора позива и скокове до последње сачуване линије. C-INTERCAL такође пружа <code>COME FROM</code> инструкцију, написану DO COME FROM LINE); [[CLC-INTERCAL]] и најновије верзије C-INTERCAL-а такође пружају обрађени COME FROM (DO COME FROM израз) и NEXT FROM, који је као COME FROM, али такође чува повратну адресу на NEXT STACK-у.
 
Алтернативни начини утицаја на проток програма, који су првобитно доступни у INTERCAL-72, су за коришћење <code>IGNORE</code> и <code>REMEMBER</code> инструкција о променљивама (што узрокује уписивање у променљиву која се занемарује и поново ступа на снагу, тако да се упутства могу онемогућити изазивањем њих да нема ефекта), и <code>ABSTAIN</code> и <code>REINSTATE</code> инструкције на линијама или на врстама узрокују да линије немају ефекта или да поново имају ефекат.
 
 
===Hello world===
Традиционални "Hello world" програм показује колико је разликује INTERCAL од стандардних програмских језика. У [[C (programski jezik)|програмском језику C]], то би гласило:
 
<source lang="c">
#include <stdio.h>
int main() {
printf("Hello, world!\n");
}
</source>
Исти програм у [[C-INTERCAL]]-у је дужи и тежи за читање
<source lang="basic">
DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP
</source>
 
==Дијалектика==
 
Оригинални Воодс-Лион INTERCAL је био веома ограничен у својим улазно / излазним могућностима: једини прихватљиви унос су били бројеви са цртаним цифрама, а једини излаз је проширена верзија римских бројева.
 
Ре-имплементација C-INTERCAL, која је доступна на интернету, учинила је језик популарнијим корисницима езотеричних програмских језика. Дијалект C-INTERCAL има неколико разлика од оригиналног INTERCAL-а и уведен је неколико нових функција, као што је COME FROM изјава и средство за извођење текстуалног И / О заснованог на Туринг Тект Моделу.
Аутори C-INTERCAL-а такође су креирали TriINTERCAL варијанту, базирану на генерализацији скупа оператора INTERCAL-а.
Новија варијанта је [[Threaded Intercal]], који проширује функционалност COME FROM да подржава више процеса у исто време.
 
==Занимљивости==
 
У познатом компјутерском часопису, "INTERCAL је описан под насловом "Напусти свако разумевање, ви који уносите овде: INTERCAL". Стратегија за превођење и коментарисање су међу "чудним" описима:
 
[[Kompajler|Компилатор]], на одговарајући начин назван "ICK", наставља пародију. Све што компајлер не може да разуме, који на нормалном језику резултира грешком компајлирања, једноставно се прескочи. Ова "опраштајућа" особина чини проналаску грешке врло тешко; такође уводи јединствени систем за додавање коментара програма. Програматор једноставно убацује текст који није компилибилан било где у програму, пазећи да не случајно угради мало важећег кода у сред свог коментара.
Ако се PLEASE не сусреће довољно често, програм ће бити одбијен; то јест, игнорисао је без објашњења од стране компајлера. Превише често и то би ипак било одбачено, овај пут из разлога јер си превише фин. У комбинацији са другим речима који се ретко користе у другим програмским језицима, али се појављују као наредбе у INTERCAL-у, код изгледа као нека молба да се изврши задатак.
 
 
 
 
==Напомене==
{{reflist}}
 
==Спољашње везе==
*[https://en.wikipedia.org/wiki/INTERCAL INTERCAL] чланак на Википедији
*[http://www.catb.org/~esr/intercal/ Званична C-INTERCAL веб-страница]
*[http://www.muppetlabs.com/~breadbox/intercal/ INTERCAL, "The Performance Art of Programming"]
*[http://www.catb.org/~esr/intercal/paper.html Paper on Abstraction and Modularity in INTERCAL]
*[https://www.techworld.com.au/article/251892/-z_programming_languages_intercal Computerworld интервју са Доном Вудсом о INTERCAL-у]
*[https://sh.wikipedia.org/wiki/Kompajler]
*[https://sh.wikipedia.org/wiki/C_(programski_jezik)]
Преузето из „https://sr.wikipedia.org/wiki/INTERCAL