Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
Intercall
Intercal - matyt pirmoji programavimo kalba, kurią ne iš durnumo, o jau visai sąmoningai kokie tai du programeriai (Don Woods ir James Lyon) sukūrė taip, kad bet kas, kas tik pabandys šita kalba programuoti, užsipistų ir prasikeiktų. Ir paskui šitie programeriai dar rimtais veidais šitą kalbą visiems stūmė ir aiškino, kad ji labai gera, universali ir efektyvi, nes turi žodinę sąsają su vartotoju.
Išties gi Intercall buvo sukurta 1972 metais, kaip absoliutinis to meto baisiausių programuotojiškų košmarų įgyvendinimas - padaryta taip, kad atrodytų panašiai, kaip asemblerio transliacijos išklotinės, kuriose rodomi visokie adresų registrų pokyčiai ir panašūs niekam neįdomus briedai, tik vat šituos briedus patiems programuotojams reikia rašyt.
Išties tai buvo pirmas toksai kalbinis prankas, išdūrimas, skirtas visiems apdurninti. Po kelių dešimtmečių, kai išplito galingi asmeniniai kompiuteriai, panašių prankų atsirado ir daugiau, pvz., kaip Brainfuck kalba. Bet tie vėlyvesni prankai jau nebebuvo tokie keisti ir talentingai visus išduriantys.
Intercall kalbos savybės
Kalboje duomenų tipai naudojami, žymimi "." (16 bitų integer), ":" (32 bitų integer), "," (16 bitų integer masyvas) ir ";" (32 bitų integer masyvas). Naudojant kintamuosius, pavadinimai nenaudojami, o naudojami kintamųjų numeriai, pvz., ".14523". Kiekvienas kintamasis pagal nutylėjimą operacijoms gauna nuosavą steką, kas suteikia kai kurias įdomias programavimo galimybes, pvz., galimybę saugoti ištisas kintamųjų ir veiksmų sekas.
Komandų yra nedaug, jos atrodo ganėtinai briedovos, tačiau ganėtinai logiškos ir netgi visai patogios, kai pažiūri į Intercall kaip į tipišką RISC architektūrą, kurioje reiktų išties rūpintis ne programuotojo, o kompiliatoriaus efektyvumu. Tik tiek, kad niekaip su RISC architektūra čia nesiderina tie visur kaišiojami stekai.
Kiek labiau trikdo gal tiktai kai kurie nesąmoningai sukaišioti nedokumentuoti privalumai, kaip kad reikalavimas nei per dažnai nei per retai vartoti operatorių PLEASE, kurio prasmė tėra nedokumentuotai užlaužti kompiliavimą, jeigu jis bus vartojamas per retai arba per dažnai. SSRS naudotame Intercall kompiliatoriuje šio operatoriaus nebuvo.
Tarybinis Intercall
Įdomu tas, kad nesusigaudydami Intercall šposuose, SSRS inžinieriai atrado, jog kai kuriomis komandomis, o ir kalbos realizuojama architektūra Intercall gerokai primena sovietinę BESM mašiną, tad paskui bandė rimtai implementuoti ir kiek modifikavę, naudoti šią programavimo kalbą kaip pagerintą BESM asemblerį. Sako, kai kuriuos amerikonus ištikdavo priepolis, kai jie sužinodavo, kad Intercall išties (realiai, o ne juokais) palengvindavo BESM mašinų programavimą.
Intercall kompiliatorius buvo sukurtas BESM-6, o paskui, kadangi galingiausias sovietinis superkompiuteris Elbrus kaip savo komponentą turėjo modernizuotą (puslaidininkį) BESM variantą - tai ir Elbrus kompiuteriams. Taip pat dėl suderinamumo buvo sukurtas ir Intercall kompiliatorius, skirtas ES EVM sistemoms (IBM System/360 ir IBM System/370 klonai), kad ant jų būtų galima vykdyti BESM skirtas programas.
Dar vienas įdomumas, kad originalioje amerikoniškoje versijoje Intercall skaičius reikalaudavo įvesti žodžiais (kaip pvz., 123 būtų "ONE TWO THREE"), o išvesdavo romėniškai (pvz., "MCXXVIII"). SSRS tai buvo laikoma neapgalvotu, iki galo neatidirbtu, tačiau perspektyviu sprendimu, nes tai esą artimiau žmogiškam bendravimui, todėl kalba buvo laikoma pritaikyta interaktyvioms dialoginėms programavimo sistemoms. Šitą nesąmonę sovietai pataisė ir padarė išvedimą, priklausomai nuo poreikio - skaičiais arba žodžiais, užrašytais kvadratinėmis raidėmis.
Taip pat sovietinėje Intercall versijoje buvo panaikintas ir tas užknisantis bugas, kur reikdavo rašyti "PLEASE": jis ėmė reikšti paaukštintą operacijos vykdymo prioritetą, tačiau paliktas nenaudojamu, nes operacijų vykdymo prioritetizavimo tiesiog nebuvo.
Trumpai tariant, tai kas Vakarų šalyse buvo absurdas, humoras ir kliedesiai, Sovietų Sąjungoje tapdavo realybe.
Hello World su Intercall
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