Кіріспе

Lisp диалектісі

Racket – жалпы мақсаттағы, көп парадигмалы бағдарламалау тілі. Racket тілі – Lisp-тің заманауи диалектісі және Scheme-нің тікелей ұрпағы. Ол бағдарламалау тілінің жобалау және іске асыру платформасы ретінде әзірленген. Racket негізгі тілінен өзге, Racket термині бағдарламалау тілдерінің отбасысын және Racket-те дамуды қолдайтын құралдар жиынтығын да білдіреді. Racket скрипттерді жазу, компьютерлік ғылымды оқыту және ғылыми зерттеулер үшін де қолданылады. Racket платформасы Racket тілін іске асыруды қамтамасыз етеді (оның ішінде орындалу ортасымен бірге), сонымен қатар кең макрожүйесімен танымал, ол кіріктірілген және салалық тілдерді, сыныптар немесе модульдер сияқты тіл құрылымдарын және Racket-тің әртүрлі семантикалық ерекшеліктері бар жеке диалектілерін жасауға мүмкіндік береді. Платформалық дистрибутив Apache 2.0 және MIT лицензиялары бойынша таратылатын тегін және ашық кодты бағдарламалық қамтамасыз ету болып табылады. Қоғамдық кеңейтулер мен пакеттер Racket пакеттерінің каталогына жүктелуі мүмкін.

Даму

Маттиас Феллейзен 1990 жылдардың ортасында PLT Inc. компаниясын құрды, бастапқыда зерттеу тобы ретінде, кейін жаңадан бастаған бағдарламашыларға арналған оқу материалдарын (лекциялар, жаттығулар/жобалар, бағдарламалық жасақтама) дайындау жобасы ретінде. 1995 жылдың қаңтар айында топ Scheme негізінде оқу бағдарламалау ортасын жасауға шешім қабылдады. Мэтью Флатт Racket-тің алғашқы виртуалды машинасы MrEd-ті libscheme, wxWidgets және басқа да бірнеше ақысыз жүйелерден құрастырды. Келесі жылдары Флатт, Робби Финдлер, Шрирам Кришнамурти, Кормак Фланаган және тағы да басқалар DrScheme бағдарламасын жасады, ол жаңадан бастаған Scheme бағдарламашылары үшін және жұмсақ типтеуді зерттеу үшін арналған бағдарламалау ортасы болды. DrScheme қолдаған негізгі даму тілі PLT Scheme деп аталды. Параллельді түрде, топ орта мектеп мұғалімдері үшін семинарлар өткізе бастады, оларды бағдарламаны жобалау және функционалдық бағдарламалау бойынша оқытты. Осы мұғалімдер мен олардың оқушыларымен жүргізілген сынақтар даму бағытын анықтау үшін маңызды ақпарат берді. Келесі жылдары PLT DrScheme-ге оқыту тілдерін, алгебралық қадамдық өңдеу құралын, түсінікті оқу-бағалау-басып шығару циклын, конструкторлық принтерді және көптеген басқа да жаңалықтарды қосты, нәтижесінде сапалы оқу бағдарламасын жасау ортасы пайда болды. 2001 жылы негізгі команда (Феллейзен, Финдлер, Флатт, Кришнамурти) өзінің оқыту философиясына негізделген «Бағдарламаларды қалай жобалау» атты алғашқы оқулығын жазып, жариялады. Racket манифесті. Сыныптар жүйесі осы нұсқаларда жаңа мүмкіндіктерге (мысалы, Java стиліндегі интерфейстер) ие болды, сонымен қатар бірнеше мүмкіндіктерді (мысалы, көптеген мұрагерлік) жоғалтты. Бөлшектерден өзгеше, бұл модульдер бірінші дәрежелі объектілер емес. 300-ші нұсқада Unicode қолдауы, сыртқы кітапхана қолдауы және сыныптар жүйесін жетілдіру енгізілді. 2010 жылдың 7 маусымында PLT Scheme Racket деп қайта аталды. Атаудың өзгеруі 5.0 нұсқасының шығуымен бірге болды. Кейіннен 5.1 нұсқасында графикалық пайдаланушы интерфейсі (GUI) C++-тан Racket-ке барлық платформалардағы жергілікті UI құралдарын пайдалана отырып қайта жазылды. 5.3 нұсқасы опционалды түрде жүктелетін модульдер үшін жаңа субмодульдер мүмкіндігін, жаңа оңтайландыру құралдарын, JSON кітапханасын және басқа да мүмкіндіктерді қамтыды. 5.3.1 нұсқасы DrRacket-ке маңызды жақсартулар әкелді: фондық синтаксис тексеруші әдепкі бойынша қосылды және құжаттаманы алдын ала қарау құралы қосылды. 6.0 нұсқасында Racket екінші буын пакеттерді басқару жүйесін шығарды. Осы дамудың бөлігі ретінде DrRacket және Racket негізгі репозиторийі қайта ұйымдастырылып, шағын пакеттердің үлкен жиынтығына бөлінді, бұл минималды Racket-ті орнатуға және тек қажетті пакеттерді орнатуға мүмкіндік берді. Racket 7 нұсқасы Chez Scheme орындалу уақытын жүйеге көшіруге және бірнеше орындалу уақытын жүйелерді қолдауға дайындық ретінде Racket-те жазылған жаңа макрос кеңейтушімен бірге шығарылды. 2019 жылдың 19 қарашасында Racket 7.5 шығарылды. Racket 7.5 лицензиясы бұрынғыдан гөрі кем шектеулі болды. Олар енді Apache 2.0 лицензиясын немесе MIT лицензиясын пайдаланады. 2021 жылдың 13 ақпанында Racket 8.0 шығарылды. Racket 8.0 - Racket with the Chez Scheme, Racket CS деп белгілі, бастапқы орындалуы болып табылатын алғашқы релиз. Racket CS жылдамырақ, күтуге және дамытуға оңай, ескі Racket бағдарламаларымен үйлесімді және жақсырақ параллель қоқыс жинауға ие.

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

Racket негізгі тіліне макростар, модульдер, лексикалық жабылулар, құйрық шақырулары, шектелген жалғасулар, жасыл және операциялық жүйелік жіптер және тағы да басқалары кіреді. Тіл сондай-ақ ресурстарды басқаруды қамтамасыз ететін және басқа бағдарламаларды жүктеу мен басқару үшін операциялық жүйе сияқты жұмыс істеуге мүмкіндік беретін eventspaces және custodians сияқты бастапқы құралдармен бірге келеді. Racket-тегі көптеген тіл құрылымдары негізгі тілде макростар ретінде жүзеге асырылған. Оларға миксин сыныптар жүйесі кіреді. Racket-тің келісімшарт жүйесі Eiffel үшін жасалған «Келісімшарт бойынша жобалау» еңбегінен шабыттандырылған және оны бірінші сыныптық функциялар, объектілер, сілтеме жасушалары және т.б. сияқты жоғары деңгейлі мәндер үшін қолдануға мүмкіндік береді. Мысалы, келісімшарт арқылы тексерілген объектінің әдістері шақырылған кезде келісімшартты тексерулерді орындауы қамтамасыз етілуі мүмкін. Racket байткодты және JIT (Just-In-Time) компиляторларын қамтиды. Байткодты компилятор Racket виртуалды машинасымен орындалатын ішкі байткод форматын жасайды, ал JIT компиляторы байткодты орындалу кезінде машиналық кодқа аударады. 2004 жылдан бері тіл PLaneT пакеттерімен бірге келеді, ол модульдер жүйесіне біріктірілген пакеттік менеджер болып табылады, бұл үшінші тарап кітапханаларын оңай импорттап пайдалануға мүмкіндік береді. Сонымен қатар, PLaneT тәуелділіктердің қақтығысын болдырмау үшін нұсқаларды басқару саясатын қамтиды. 2014 жылдың соңында Racket кодының көп бөлігі негізгі код базасынан бөлек, жаңа пакеттік жүйеге көшірілді. Бұл жаңа пакеттік жүйе raco деп аталатын клиенттік бағдарлама арқылы қызмет көрсетеді. Жаңа пакеттік жүйе PLaneT-ке қарағанда азырақ мүмкіндіктер ұсынады; Джей Маккартидің Racket блогындағы жазбасы осы өзгерістің себептерін және ескі жүйені қалай қайта құруға болатынын түсіндіреді.

Тілдің кеңейту мүмкіндігі мен макростар

Racket-ті Lisp отбасындағы басқа тілдерден ең анық ажырататын ерекшеліктері – жаңа салалық және жалпы мақсаттағы тілдерді құруға қолдау көрсететін, біріктірілген тілді кеңейту мүмкіндіктері. Racket-тің кеңейту мүмкіндіктері модульдік жүйеге енгізілген, бұл синтаксис үстінен контекстке сезімтал және модульдік деңгейде басқаруға мүмкіндік береді. 84-ші схеманың таза макрос синтаксисі немесе R5RS синтаксис ережелерін кеңейту мүмкіндігі бар. Шындығында, макрожүйе – компилятор кеңейтулері үшін мұқият жасалған қолданбалы бағдарламалау интерфейсі (API) екенін айтуға болады. Бағдарламашылар осы компилятор API-ді пайдаланып, ерекшеліктерді және толық салалық тілдерді тілдің құрылымдық элементтерінен ажырату мүмкін емес болатындай етіп қосуға болады. Racket-тегі макрожүйе тілдің толық диалектілерін құру үшін қолданылған. Бұған Typed Racket кіреді, ол Racket-тің біртіндеп типтелетін диалектісі болып, типтелмеген кодтан типтелген кодқа көшуді жеңілдетеді, Lazy Racket – жақсы бағалаумен жұмыс жасайтын диалект, ал Hackett – Haskell және Racket-тің біріктірілген нұсқасы. Оқу-әдістемелік бағдарламалау тілі Pyret бастапқыда Racket-те іске асырылған. Басқа диалекттерге FrTime (функционалды реактивті бағдарламалау), Scribble (құжаттама тілі), Slideshow (презентация тілі) және білім беруге арналған бірнеше тілдер кіреді. Racket-тің негізгі дистрибуциясы бағдарламалау тілдерін дамытуға көмектесетін кітапханаларды ұсынады. Мұндай тілдің мысалы үшін Racket логикалық бағдарламалауын қараңыз.

Қолданба және практикалық қолдану

Racket бағдарламалау тілі теориясы негізінде жасалғаннан бөлек, ол өндірістік жүйелер үшін көп мақсатты тіл ретінде дамытылды. Сондықтан, Racket таратылымы жүйелік және желілік бағдарламалау, веб-дамыту, жатқызу операциялық жүйеге бірыңғай интерфейс, динамикалық сыртқы функциялар интерфейсі, әртүрлі типтегі реттегіш өрнектер, лексер/парсер генераторларын қамтитын кең кітапханаға ие. Racket студенттерге Bootstrap бағдарламасы аясында ойын дизайны арқылы алгебраны оқыту үшін қолданылады.