Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. (квітень 2017) |
Конкатенативні мови програмування — це мови, в яких конкатенація двох фрагментів коду описує їх композицію. Ці мови використовують стек для зберігання аргументів і значень операцій.
Більшість конкатенативних мов є стековими, проте пропонуються й інші моделі.
Найпоширеніша конкатенативна мова — це мова опису сторінок PostScript, обмежена підмножина якого використовується в PDF. Однак, PostScript код зазвичай генерується програмами, написаними на інших мовах. Інша, досить широко відома конкатенативна мова — це Forth.
Також слід зазначити мову мікрокалькуляторів Hewlett-Packard HP-28 і HP-48 — RPL. Це операційна система портативного калькулятора та мова програмування прикладних програм, що використовується в наукових графічних калькуляторах RPN від Hewlett-Packard серії HP 28, 48, 49 і 50. Споріднену йому мову радянських ПМК Б3-21, Б3-34, МК-54, МК-61, МК-52 хоча і відносять до стекових мов, через її крайню примітивність (по суті це машинний код) складно віднести до конкатенативної.
Серед інших конкатенативних мов можна відзначити Joy, Cat, Factor і FALSE.
Конкатенативні мови можна розглядати як сімейство мов, на зразок Лісп-мов. Так між усіма діалектами Ліспа (включаючи Scheme), є сильна так звана «сімейна схожість». Однак є велика різниця в дизайні, реалізації та призначенні цих мов. Мови мікрокалькуляторів та багато які з версій Форта призначені для вбудовування в невеликі мікропроцесорні системи; PostScript також є вбудовуваною мовою, тільки мікропроцесорні системи, що інтерпретують його, називаються принтерами. Однак інші конкатенативні мови, такі як Joy або Cat розроблені як мови програмування загального призначення або в дослідницьких цілях.
Історія та визначення
Forth була першою мовою даного плану, але тільки стала тією мовою, яка отримала назву конкатенативної. Творець мови Joy, , багато писав про конкатенативну теорію.
Строго кажучи, мову програмування можна назвати конкатенативною коли:
- Елементарний правильно-побудований вираз мови це унарна функція з одним аргументом та одним значенням, що повертається.
- Якщо X та Y — правильно-побудовані вирази, конкатенація X та Y — також правильно побудована.
- Якщо Z — конкатенація X та Y — значення Z це композиція функцій X та Y.
У цьому визначенні стек не згадується; але всі конкатенативні мови використовують цю структуру даних як найпростіший спосіб передавати від однієї операції до іншої. Термін «конкатенативний» не загальноприйнятий, багато користувачів таких мов воліють називати їх «стековими (stack-based)».
Оператори або функції цих мов зазвичай називають словами, ця стаття також слід цієї традиції.
Постфіксна нотація
Програми на конкатенативного мовах мають подібність з постфіксною нотацією або польським інверсійним записом (RPN) арифметичних виразів. Аргументи, або програмний код, чиїм результатом є аргументи передують слову, котрі використовують дані аргументи. Літерали, такі як числа, поміщають значення на стек; інші слова можуть брати зі стека одні значення та поміщати на нього інші.
Наприклад:
2 3 + .
У мовах Forth та Factor це — коректна програма:2
и 3
— слова літерали, що поміщають на стек подаються ними значення.+
— це математичний оператор; він знімає зі стека два верхніх значення та поміщає на нього їх суму. Нарешті, оператор.
(точка) знімає вершину стека та друкує її значення на дисплеї. Так ця програма виведе число 5.
Управління послідовністю дій
В рамках повноти по Тьюрингу, мова повинна мати деякі засоби управління послідовністю дій — можливість робити переходи або здійснювати той чи інший вибір на підставі значення виразу. Конкатенативної мови реалізують управління послідовністю дій різними способами. Порівняємо два приклади з мов Forth та Factor:
= IF 23 ELSE 17 THEN
= [ 23 ] [ 17 ] if
Обидва приклади роблять одне і те ж: порівнюють два верхні елементи стека і, якщо вони рівні, залишають на стеку значення 23; в іншому випадку — значення 17. В Форті слово IF
— спеціальне; воно призводить до того, що програмний код попередній слову ELSE
буде виконаний якщо умова істинна, якщо ж воно хибна, виконується код після ELSE
. У мові Factor, у словаif
інша функція; воно приймає умова і дві цитати (quotations) — програмних фрагмента взяті в лапки; слово if виконує першу або другу «цитату», в залежності від того, чи є вираз істинним. Приблизно так само працює оператор ifelse
мови PostScript.
Формалізація цитування коду, засоби, повністю успадковані з Лиспа, відрізняє пізні конкатенативні мови, такі як Factor або PostScript, від ранніх, таких як Forth. Слова, які оперують цитатами, іноді називають комбінаторами.
Визначення та лексичний аналіз
Конкатенативні мови можуть значно відрізнятися в плані синтаксису, використовуваного для визначення нових слів. Наступні фрагменти коду на мовах Cat, Forth або Factor, та Joy роблять одне й те ж саме: визначають нове слово з ім'ям add100
, яке додає 100 до значення на вершині стека.
define add100 { 100 + }
: add100 100 + ;
DEFINE add100 == 100 + .
У всіх фрагментах тіло визначення однаково — це слова 100 +. Різниця полягає в словах парсеру (parsing words), використовуваних, щоб вказати транслятору мови, що має місце визначення нового слова. Слова парсеру — це свого роду аналог ключових слів C або спеціальних операторів в Ліспі: замість того, щоб виконувати операції на стеку, вони управляють тим, як парсер буде обробляти наступні слова.
Це і дозволяє визначення нових слів. Слова парсеру дають конкатенативним мовам аналог Ліспівські макроси: програміст може визначати новий синтаксис.
Стековий ефект
Конкатенативні мови програмування використовують нотацію стекового ефекту слова. Стековий ефект слова — це опис того, які значення слово бере зі стека, а які залишає на ньому як результат свого виконання. Як правило, слова мають стійкий (consistent) стековий ефект: кількість аргументів та результатів слова — постійні величини.
Див. також
- Неявне програмування
Примітки
- . Nsl.com. Архів оригіналу за 11 листопада 2020. Процитовано 1 липня 2013.
- . Enchiladacode.nl. Архів оригіналу за 9 листопада 2020. Процитовано 1 липня 2013.
- . Om-language.org. Архів оригіналу за 19 листопада 2020. Процитовано 1 липня 2013.
Посилання
- Concatenative Languages Wiki (англ.)
- What is a concatenative language [ 11 серпня 2011 у Wayback Machine.], Christopher Diggins, , 31 грудня 2008 (англ.)
- (англ.)
- Yahoo Discussion Group on Concatenative Languages [ 22 червня 2013 у Wayback Machine.] (англ.)
Ця стаття містить , але походження тверджень у ній через практично повну відсутність . (травень 2017) |
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових для поліпшення її . (липень 2017) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya mistit pravopisni leksichni gramatichni stilistichni abo inshi movni pomilki yaki treba vipraviti Vi mozhete dopomogti vdoskonaliti cyu stattyu pogodivshi yiyi iz chinnimi movnimi standartami kviten 2017 Konkatenativni movi programuvannya ce movi v yakih konkatenaciya dvoh fragmentiv kodu opisuye yih kompoziciyu Ci movi vikoristovuyut stek dlya zberigannya argumentiv i znachen operacij Bilshist konkatenativnih mov ye stekovimi prote proponuyutsya j inshi modeli Najposhirenisha konkatenativna mova ce mova opisu storinok PostScript obmezhena pidmnozhina yakogo vikoristovuyetsya v PDF Odnak PostScript kod zazvichaj generuyetsya programami napisanimi na inshih movah Insha dosit shiroko vidoma konkatenativna mova ce Forth Takozh slid zaznachiti movu mikrokalkulyatoriv Hewlett Packard HP 28 i HP 48 RPL Ce operacijna sistema portativnogo kalkulyatora ta mova programuvannya prikladnih program sho vikoristovuyetsya v naukovih grafichnih kalkulyatorah RPN vid Hewlett Packard seriyi HP 28 48 49 i 50 Sporidnenu jomu movu radyanskih PMK B3 21 B3 34 MK 54 MK 61 MK 52 hocha i vidnosyat do stekovih mov cherez yiyi krajnyu primitivnist po suti ce mashinnij kod skladno vidnesti do konkatenativnoyi Sered inshih konkatenativnih mov mozhna vidznachiti Joy Cat Factor i FALSE Konkatenativni movi mozhna rozglyadati yak simejstvo mov na zrazok Lisp mov Tak mizh usima dialektami Lispa vklyuchayuchi Scheme ye silna tak zvana simejna shozhist Odnak ye velika riznicya v dizajni realizaciyi ta priznachenni cih mov Movi mikrokalkulyatoriv ta bagato yaki z versij Forta priznacheni dlya vbudovuvannya v neveliki mikroprocesorni sistemi PostScript takozh ye vbudovuvanoyu movoyu tilki mikroprocesorni sistemi sho interpretuyut jogo nazivayutsya printerami Odnak inshi konkatenativni movi taki yak Joy abo Cat rozrobleni yak movi programuvannya zagalnogo priznachennya abo v doslidnickih cilyah Istoriya ta viznachennyaForth bula pershoyu movoyu danogo planu ale tilki stala tiyeyu movoyu yaka otrimala nazvu konkatenativnoyi Tvorec movi Joy bagato pisav pro konkatenativnu teoriyu Strogo kazhuchi movu programuvannya mozhna nazvati konkatenativnoyu koli Elementarnij pravilno pobudovanij viraz movi ce unarna funkciya z odnim argumentom ta odnim znachennyam sho povertayetsya Yaksho X ta Y pravilno pobudovani virazi konkatenaciya X ta Y takozh pravilno pobudovana Yaksho Z konkatenaciya X ta Y znachennya Z ce kompoziciya funkcij X ta Y U comu viznachenni stek ne zgaduyetsya ale vsi konkatenativni movi vikoristovuyut cyu strukturu danih yak najprostishij sposib peredavati vid odniyeyi operaciyi do inshoyi Termin konkatenativnij ne zagalnoprijnyatij bagato koristuvachiv takih mov voliyut nazivati yih stekovimi stack based Operatori abo funkciyi cih mov zazvichaj nazivayut slovami cya stattya takozh slid ciyeyi tradiciyi Postfiksna notaciyaProgrami na konkatenativnogo movah mayut podibnist z postfiksnoyu notaciyeyu abo polskim inversijnim zapisom RPN arifmetichnih viraziv Argumenti abo programnij kod chiyim rezultatom ye argumenti pereduyut slovu kotri vikoristovuyut dani argumenti Literali taki yak chisla pomishayut znachennya na stek inshi slova mozhut brati zi steka odni znachennya ta pomishati na nogo inshi Napriklad 2 3 U movah Forth ta Factor ce korektna programa 2 i 3 slova literali sho pomishayut na stek podayutsya nimi znachennya ce matematichnij operator vin znimaye zi steka dva verhnih znachennya ta pomishaye na nogo yih sumu Nareshti operator tochka znimaye vershinu steka ta drukuye yiyi znachennya na displeyi Tak cya programa vivede chislo 5 Upravlinnya poslidovnistyu dijV ramkah povnoti po Tyuringu mova povinna mati deyaki zasobi upravlinnya poslidovnistyu dij mozhlivist robiti perehodi abo zdijsnyuvati toj chi inshij vibir na pidstavi znachennya virazu Konkatenativnoyi movi realizuyut upravlinnya poslidovnistyu dij riznimi sposobami Porivnyayemo dva prikladi z mov Forth ta Factor IF 23 ELSE 17 THEN 23 17 if Obidva prikladi roblyat odne i te zh porivnyuyut dva verhni elementi steka i yaksho voni rivni zalishayut na steku znachennya 23 v inshomu vipadku znachennya 17 V Forti slovo IF specialne vono prizvodit do togo sho programnij kod poperednij slovu ELSE bude vikonanij yaksho umova istinna yaksho zh vono hibna vikonuyetsya kod pislya ELSE U movi Factor u slovaif insha funkciya vono prijmaye umova i dvi citati quotations programnih fragmenta vzyati v lapki slovo if vikonuye pershu abo drugu citatu v zalezhnosti vid togo chi ye viraz istinnim Priblizno tak samo pracyuye operator ifelse movi PostScript Formalizaciya cituvannya kodu zasobi povnistyu uspadkovani z Lispa vidriznyaye pizni konkatenativni movi taki yak Factor abo PostScript vid rannih takih yak Forth Slova yaki operuyut citatami inodi nazivayut kombinatorami Viznachennya ta leksichnij analizKonkatenativni movi mozhut znachno vidriznyatisya v plani sintaksisu vikoristovuvanogo dlya viznachennya novih sliv Nastupni fragmenti kodu na movah Cat Forth abo Factor ta Joy roblyat odne j te zh same viznachayut nove slovo z im yam add100 yake dodaye 100 do znachennya na vershini steka define add100 100 add100 100 DEFINE add100 100 U vsih fragmentah tilo viznachennya odnakovo ce slova 100 Riznicya polyagaye v slovah parseru parsing words vikoristovuvanih shob vkazati translyatoru movi sho maye misce viznachennya novogo slova Slova parseru ce svogo rodu analog klyuchovih sliv C abo specialnih operatoriv v Lispi zamist togo shob vikonuvati operaciyi na steku voni upravlyayut tim yak parser bude obroblyati nastupni slova Ce i dozvolyaye viznachennya novih sliv Slova parseru dayut konkatenativnim movam analog Lispivski makrosi programist mozhe viznachati novij sintaksis Stekovij efektKonkatenativni movi programuvannya vikoristovuyut notaciyu stekovogo efektu slova Stekovij efekt slova ce opis togo yaki znachennya slovo bere zi steka a yaki zalishaye na nomu yak rezultat svogo vikonannya Yak pravilo slova mayut stijkij consistent stekovij efekt kilkist argumentiv ta rezultativ slova postijni velichini Div takozhNeyavne programuvannyaPrimitki Nsl com Arhiv originalu za 11 listopada 2020 Procitovano 1 lipnya 2013 Enchiladacode nl Arhiv originalu za 9 listopada 2020 Procitovano 1 lipnya 2013 Om language org Arhiv originalu za 19 listopada 2020 Procitovano 1 lipnya 2013 PosilannyaConcatenative Languages Wiki angl What is a concatenative language 11 serpnya 2011 u Wayback Machine Christopher Diggins 31 grudnya 2008 angl angl Yahoo Discussion Group on Concatenative Languages 22 chervnya 2013 u Wayback Machine angl Cya stattya mistit perelik posilan ale pohodzhennya tverdzhen u nij zalishayetsya nezrozumilim cherez praktichno povnu vidsutnist vnutrishnotekstovih dzherel vinosok Bud laska dopomozhit polipshiti cyu stattyu peretvorivshi dzherela z pereliku posilan na dzherela vinoski u samomu teksti statti traven 2017 Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno lipen 2017