Toza (dasturlash tili) - Clean (programming language)

Toza
Clean 3.0 (dasturlash tili) logo.svg
Paradigmafunktsional
LoyihalashtirilganDastur texnologiyalari tadqiqot guruhi Radboud universiteti Nijmegen
Birinchi paydo bo'ldi1987; 33 yil oldin (1987)
Barqaror chiqish
3.0 / 2018 yil 19-oktabr; 2 yil oldin (2018-10-19)
Matnni yozishkuchli, statik, dinamik
OSO'zaro faoliyat platforma
LitsenziyaSoddalashtirilgan BSD[1]
Fayl nomi kengaytmalari.icl, .dcl, .abc
Veb-sayttoza.cs.ru.nl
Ta'sirlangan
Yalang'och, Miranda, Xaskell
Ta'sirlangan
Xaskell, Idris[2]

Toza a umumiy maqsad faqat funktsional kompyuter dasturlash tili. Tilning faol rivojlanish tarixining ko'p qismida u shunday nomlangan Bir vaqtning o'zida toza, lekin bu bir muncha vaqt tashlab qo'yilgan. Toza tadqiqotchilar guruhi tomonidan ishlab chiqilmoqda Radboud universiteti 1987 yildan beri Nijmegen shahrida.

Xususiyatlari

Til tili birinchi marta 1987 yilda paydo bo'lgan va hali ham rivojlanib bormoqda.[3] U ko'plab xususiyatlarga ega Xaskell:ma'lumotlarning shaffofligi, ro'yxatni tushunish, soqchilar, axlat yig'ish, yuqori darajadagi funktsiyalar, qichqiriq va dangasa baholash.

An birlashgan rivojlanish muhiti (IDE) uchun Microsoft Windows toza tarqatishga kiritilgan.

O'zgaruvchan holat va A / I orqali toza bitimlar noyoblikni yozish tizimi, Haskell tomonidan ishlatilganidan farqli o'laroq monadalar. Tuzuvchi unikallik tipidagi tizimdan samaraliroq kod ishlab chiqarish uchun foydalanadi, chunki o'ziga xoslik turiga ega bo'lgan narsadan faqat bir marta foydalanish mumkinligini biladi. Shuning uchun noyob qiymat bo'lishi mumkin joyida o'zgartirildi.[4]

Misollar

Salom Dunyo:

Boshlang="Salom Dunyo!"

Faktorial:

yuz::Int->Intyuz0=1yuzn=n*yuz(n-1)Boshlang=yuz10
yuz::Int->Intyuzn=mahsulot[1..n]// 1 dan n gacha bo'lgan sonlarning ko'paytmasiBoshlang=yuz10

Fibonachchi ketma-ketligi:

fib::Int->Intfib0=1fib1=1fibn=fib(n-2)+fib(n-1)Boshlang=fib7
tolalar::IntInt->[Int]tolalarx_2x_1=[x_2:tolalarx_1(x_2+x_1)]fib::Int->Intfibn=(tolalar11)!!nBoshlang=fib7

Infiks operator:

(^)infixr8::IntInt->Int(^)x0=1(^)xn=x*x^(n-1)

Tur deklaratsiyasida funktsiya 8-ustuvorlikka ega bo'lgan to'g'ri assotsiativ infiks operatori ekanligi aytiladi: bu shuni ko'rsatadiki x * x ^ (n-1) ga teng x * (x ^ (n-1)) farqli o'laroq (x * x) ^ (n-1). Ushbu operator oldindan belgilangan StdEnv, toza standart kutubxona.

Qanday toza ishlaydi

Hisoblash asoslanadi grafik qayta yozish va kamaytirish. Raqamlar kabi doimiylar graflar, funktsiyalar grafalarni qayta yozish formulalari. Bu tabiiy kodga kompilyatsiya bilan birgalikda yuqori abstraktsiyadan foydalanadigan Clean dasturlarini nisbatan tez bajarilishini ta'minlaydi Kompyuter tilidagi mezonlari o'yini.[5]

Tuzilmoqda

  1. Manba fayllari (.icl) va ta'rif fayllari (.dcl) Clean-ning Clean-ning asosiy varianti bo'lgan Core Clean-ga tarjima qilingan.
  2. Core clean dasturida amalga oshirilgan Clean platformasidan mustaqil oraliq tiliga (.abc) aylantiriladi C va toza.
  3. Qidiruv ABC kodi yordamida ob'ekt kodiga (.o) aylantiriladi C.
  4. Ob'ekt kodi moduldagi boshqa fayllar va ish vaqti tizimiga bog'langan va tizim yordamida oddiy bajariladigan faylga aylantiriladi bog'lovchi (agar mavjud bo'lsa) yoki Clean on-da yozilgan maxsus bog'lovchi Windows.

Oldingi Clean tizim versiyalari to'liq yozilgan edi C Shunday qilib, yuklash muammolarini oldini olish.

The SAPL tizim Core Clean-dan JavaScript-ga kompilyatsiya qiladi va ABC kodidan foydalanmaydi.

ABC mashinasi

Core Clean, yuqori darajadagi funktsional til va mashina kodi, ABC mashinasidan foydalaniladi.Bu an majburiy mavhum grafik qayta yozish mashina.[6]Abstrakt ABC kodidan beton mashina kodini yaratish nisbatan kichik qadamdir, shuning uchun ABC mashinasi yordamida kod yaratish uchun bir nechta arxitekturani nishonga olish ancha osonlashadi.

ABC mashinasi juda kam uchraydi xotira modeli. Qayta yozilayotgan Toza grafigini saqlash uchun grafika do'koniga ega. A (rgument) -stack grafik do'konidagi tugunlarga tegishli argumentlarni saqlaydi. Shu tarzda tugunning argumentlarini qayta yozish mumkin, bu uchun zarur naqshlarni moslashtirish. B (asic value) -stack asosiy qiymatlarni (tamsayılar, belgilar, reallar va boshqalar) saqlaydi. Juda zarur bo'lmasa ham (bu elementlarning barchasi grafik do'konidagi tugunlar ham bo'lishi mumkin), alohida stekdan foydalanish ancha samaralidir. C (ontrol) -stack oqimni boshqarish uchun qaytish manzillarini ushlab turadi.

The ish vaqti tizimi har bir bajariladigan faylga bog'langan, a ga ega chop etish chiqish kanaliga tugunni bosib chiqaradigan qoida. Dastur bajarilganda Boshlang tugun bosildi. Buning uchun uni odatdagi shaklga yozish kerak, shundan so'ng uning bolalari butun tugun bosilguncha normal shaklga va boshqalarga yoziladi.

Platformalar

Toza uchun foydalanish mumkin Microsoft Windows, Apple Macintosh, Solaris va Linux.

Ba'zi kutubxonalar kabi barcha platformalarda mavjud emas ObjectIO faqat Windows va Mac-da mavjud. Fayllarga dinamikani yozish xususiyati faqat Windows-da mavjud.

Haskell bilan taqqoslash

2008 yildagi ko'rsatkich shuni ko'rsatdiki, Clean native code taxminan bir xil darajada ishlaydi Xaskell (GHC ), mezonga qarab.[7]

Sintaktik farqlar

Clean sintaksisi Haskell bilan juda o'xshash va ba'zi bir farqlar bilan:[4]

XaskellTozaIzohlar
[ x | x <- [1..10] , isOdd x]
[x\\x<-[1..10]|isOddx]
ro'yxatni tushunish
x:xs
[x:xs]
kamchiliklari operator
ma'lumotlar Daraxt a  = Bo'sh  | Tugun (Daraxt a) a (Daraxt a)
::Daraxta=Bo'sh|Tugun(Daraxta)a(Daraxta)
algebraik ma'lumotlar turi
(Tenglama a, Tenglama b) => ...
...|Tenglamaa&Tenglamab
sinf tasdiqlari va kontekstlari
qiziqarli t@(Tugun l x r) = ...
qiziqarlit=:(Tugunlxr)=...
naqshlar
agar x > 10 keyin 10 boshqa x
agar(x>10)10x
agar

Umuman olganda, Haskell ko'proq tanishtirdi sintaktik shakar toza emas.

Hamjamiyat

  • IRC kanali: freenode-dagi #cleanlang

Adabiyotlar

  1. ^ "Tozani yuklab olish". Toza. Olingan 23 iyul 2019.
  2. ^ ""Idris - o'ziga xoslikning turlari"". Olingan 2018-11-20.
  3. ^ "Tez-tez so'raladigan savollar - toza".
  4. ^ a b ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
  5. ^ "Qaysi dasturlash tillari eng tezkor?". Kompyuter tilidagi mezonlari o'yini. Asl nusxasidan arxivlangan 2011 yil 28 iyun.CS1 maint: BOT: original-url holati noma'lum (havola)
  6. ^ Koopman, Pieter (1990 yil 10-dekabr). Amaliy xususiyatlar sifatida funktsional dasturlar (PhD). Katholieke Universiteit Nijmegen. p. 35. ISBN  90-9003689-X.
  7. ^ Yansen, Yan Martin; Kopman, Piter; Plazmeyer, Rinus (2008). "Interpretatsiyadan kompilyatsiyagacha" (PDF). Olingan 2016-05-21. Iqtibos jurnali talab qiladi | jurnal = (Yordam bering)

Tashqi havolalar