Кіріспе
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 стегіне қояды. Содан кейін оны басып шығарып, қажет болған жағдайда есептейді.
The A(rgument) stack holds arguments that refer to nodes in the graph store. The B(asic value) stack holds basic values (integers, characters, reals, etc.). Although these values could be nodes in the graph store, a separate stack is used for efficiency. The C(ontrol) stack holds return addresses for flow control. The runtime system, which is linked into every executable, builds a Start node in the graph store and pushes it on the A stack. It then begins printing it, evaluating it as needed.
Браузерде тазалауды орындау
Clean көбінесе жергілікті атқарылатын файлдарды жасау үшін қолданылса да, бірнеше жоба веб-браузерлерде қосымшаларды іске қосуға мүмкіндік берді. Қазір тоқтатылған SAPL жобасы Core Clean-ді JavaScript-ке компиляциялады және ABC кодын пайдаланбады. 2019 жылдан бері, оның орнына WebAssembly-де жазылған ABC кодының интерпретаторы қолданылуда.