Кіріспе

Clean - жалпы мақсаттағы, толығымен функционалдық бағдарламалау тілі. Алғашқыда Concurrent Clean System немесе Clean System деп аталған, бұл тіл 1987 жылдан бері Ниймеген қаласындағы Радбоуд университетінің зерттеушілер тобы тарапынан әзірленді. Тілдің даму қарқыны төмендегенімен, кейбір зерттеушілер әлі де осы тілде жұмыс істеп жатыр. 2018 жылы Clean-ді пайдаланатын жеке компания құрылды.

Ерекшеліктері

Clean-нің көптеген қасиеттері мен синтаксисі жас бауырлас тілі Haskell-мен ортақ: референциялық ашықтық, тізімді түсіну, сақшылар, қоқыс жинау, жоғары деңгейлі функциялар, карринг және жалқау бағалау. Дегенмен, Clean Haskell-дің монодаларды қолдануынан өзгеше, бірегейлік типтер жүйесі арқылы өзгертілетін күймен және кіріс/шығыс (I/O) операцияларымен жұмыс істейді. Компилятор бірегейлік типтер жүйесін тиімдірек код жасау үшін пайдаланады, себебі ол бағдарлама орындалу барысында бірегей типті мәнге тек бір сілтеме болуы мүмкін екенін біледі. Сондықтан, бірегей мәнді өзгертуге болады. Microsoft Windows үшін біріктірілген даму ортасы (IDE) Clean тарату жинағында қоса берілген.

Clean қалай жұмыс істейді

Есептеу графтарды қайта жазу және қысқартуға негізделген. Сандар сияқты тұрақтылар – графтар, ал функциялар – графты қайта жазу формулалары. Бұл, түпкі кодқа компиляциялаумен үйлесіп, жоғары деңгейде абстракция қолданатын Clean бағдарламаларын The Computer Language Benchmarks Game бойынша салыстырмалы түрде жылдам жұмыс істетеді. 2008 жылғы өлшемдеме көрсеткендей, Clean түпкі коды Glasgow Haskell Compiler (GHC) сияқты өнімділік көрсетеді, өлшемдемеге байланысты.

АБС машинасы

Жоғарыда аталған ABC коды — абстрактілі машинаның аралық өрнегі. ABC коды үшін машиналық кодты жасау салыстырмалы түрде оңай болғандықтан, жаңа архитектураларды қолдау да оңай. ABC машинасы — императивті абстрактілі графты қайта жазу машинасы. Ол қайта жазылатын Clean графы мен үш стекіден тұрады: A (аргумент) стегі граф сақтағышындағы түйіндерге сілтеме жасайтын аргументтерді сақтайды. B (негізгі мән) стегі негізгі мәндерді (бүтін сандар, символдар, нақты сандар және т.б.) сақтайды. Бұл мәндер граф сақтағышындағы түйіндер бола алады, бірақ тиімділік үшін жеке стек қолданылады. C (басқару) стегі ағын басқару үшін қайтару адрестерін сақтайды. Кез келген орындалатын файлға қосылған орындалу жүйесі граф сақтағышында Start түйінін жасайды және оны A стегіне қояды. Содан кейін оны басып шығарып, қажет болған жағдайда есептейді.

Браузерде тазалауды орындау

Clean көбінесе жергілікті атқарылатын файлдарды жасау үшін қолданылса да, бірнеше жоба веб-браузерлерде қосымшаларды іске қосуға мүмкіндік берді. Қазір тоқтатылған SAPL жобасы Core Clean-ді JavaScript-ке компиляциялады және ABC кодын пайдаланбады. 2019 жылдан бері, оның орнына WebAssembly-де жазылған ABC кодының интерпретаторы қолданылуда.