Кіріспе
Lisp диалектісі
Racket is a general purpose, multi paradigm programming language. The Racket language is a modern dialect of Lisp and a descendant of Scheme. It is designed as a platform for programming language design and implementation. In addition to the core Racket language, Racket is also used to refer to the family of programming languages and set of tools supporting development on and with Racket. Racket is also used for scripting, computer science education, and research. The Racket platform provides an implementation of the Racket language (including a runtime system,
The core Racket language is known for its extensive macro system which enables creating embedded and domain specific languages, language constructs such as classes or modules, and separate dialects of Racket with different semantics. The platform distribution is free and open source software distributed under the Apache 2.0 and MIT licenses. Extensions and packages written by the community may be uploaded to Racket's package catalog.
Racket – жалпы мақсаттағы, көп парадигмалы бағдарламалау тілі. Racket тілі – Lisp-тің заманауи диалектісі және Scheme-нің тікелей ұрпағы. Ол бағдарламалау тілінің жобалау және іске асыру платформасы ретінде әзірленген. Racket негізгі тілінен өзге, Racket термині бағдарламалау тілдерінің отбасысын және Racket-те дамуды қолдайтын құралдар жиынтығын да білдіреді. Racket скрипттерді жазу, компьютерлік ғылымды оқыту және ғылыми зерттеулер үшін де қолданылады. Racket платформасы Racket тілін іске асыруды қамтамасыз етеді (оның ішінде орындалу ортасымен бірге), сонымен қатар кең макрожүйесімен танымал, ол кіріктірілген және салалық тілдерді, сыныптар немесе модульдер сияқты тіл құрылымдарын және Racket-тің әртүрлі семантикалық ерекшеліктері бар жеке диалектілерін жасауға мүмкіндік береді. Платформалық дистрибутив Apache 2.0 және MIT лицензиялары бойынша таратылатын тегін және ашық кодты бағдарламалық қамтамасыз ету болып табылады. Қоғамдық кеңейтулер мен пакеттер Racket пакеттерінің каталогына жүктелуі мүмкін.
Racket is a general purpose, multi paradigm programming language. The Racket language is a modern dialect of Lisp and a descendant of Scheme. It is designed as a platform for programming language design and implementation. In addition to the core Racket language, Racket is also used to refer to the family of programming languages and set of tools supporting development on and with Racket. Racket is also used for scripting, computer science education, and research. The Racket platform provides an implementation of the Racket language (including a runtime system,
The core Racket language is known for its extensive macro system which enables creating embedded and domain specific languages, language constructs such as classes or modules, and separate dialects of Racket with different semantics. The platform distribution is free and open source software distributed under the Apache 2.0 and MIT licenses. Extensions and packages written by the community may be uploaded to Racket's package catalog.
Даму
Маттиас Феллейзен 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's contract system is inspired by the Design by Contract work for Eiffel and extends it to work for higher order values such as first class functions, objects, reference cells, and so on. For example, an object that is checked by a contract can be ensured to make contract checks when its methods are eventually invoked. Racket includes both bytecode and JIT (JIT) compilers. The bytecode compiler produces an internal bytecode format run by the Racket virtual machine, and the JIT compiler translates bytecode to machine code at runtime. Since 2004, the language has also shipped with PLaneT, a package manager that is integrated into the module system so that third party libraries can be transparently imported and used. Also, PLaneT has a built in versioning policy to prevent dependency hell. At the end of 2014, much of Racket's code was moved into a new packaging system separate from the main code base. This new packaging system is serviced by a client program named raco. The new package system provides fewer features than PLaneT; a blog post by Jay McCarthy on the Racket blog explains the rationale for the change and how to duplicate the older system.
Тілдің кеңейту мүмкіндігі мен макростар
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 бағдарламасы аясында ойын дизайны арқылы алгебраны оқыту үшін қолданылады.
Racket is used to teach students algebra through game design in the Bootstrap program.