Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Lisp тілінің диалектісі
Dialect of Lisp
Scheme – бағдарламалау тілдерінің Lisp тобына жататын диалекті. Scheme 1970-ші жылдары MIT Компьютерлік ғылым және жасанды интеллект зертханасында (MIT AI Lab) құрылды және оның әзірлеушілері Гай Л. Стил мен Джеральд Джей Суссман оны қазір Ламбда еңбектері деп аталатын бірқатар хабарламалар арқылы жариялады. Бұл Лисптің лексикалық кеңістікті таңдаған тұңғыш диалектісі және құйрық шақыруларын оңтайландыруды жүзеге асыруды талап еткен алғашқы тіл болды, бұл функционалдық бағдарламалауды және рекурсивті алгоритмдер сияқты байланысты техникаларды күшейте түсті. Сонымен қатар, бұл бірінші сыныпты жалғастыруларды қолдаған алғашқы бағдарламалау тілдерінің бірі еді. Common Lisp тілін дамытуға жасалған күш-жігерге елеулі әсер етті. Scheme тілі Электр және электроника инженерлері институтының (IEEE) ресми стандартында және Алгоритмдік тіл Scheme туралы қайта қарастырылған есеп (RnRS) деп аталатын де-факто стандартында бекітілген. Көптеген жүйелерде қолданылатын стандарт – R5RS (1998). Scheme тілінің ең соңғы бекітілген стандарты – "R7RS small" (2013). Көлемді әрі модулді R6RS 2007 жылы бекітілді. Екеуі де R5RS-тен бастау алады; төмендегі уақыт жобасы бекітілудің хронологиялық ретін көрсетеді.
Scheme is a dialect of the Lisp family of programming languages. Scheme was created during the 1970s at the MIT Computer Science and Artificial Intelligence Laboratory (MIT AI Lab) and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers. It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support first class continuations. It had a significant influence on the effort that led to the development of Common Lisp. The Scheme language is standardized in the official Institute of Electrical and Electronics Engineers (IEEE) standard and a de facto standard called the Revised Report on the Algorithmic Language Scheme (RnRS). A widely implemented standard is R5RS (1998). The most recently ratified standard of Scheme is "R7RS small" (2013). The more expansive and modular R6RS was ratified in 2007. Both trace their descent from R5RS; the timeline below reflects the chronological order of ratification.
Шығу тегі
Схема 1970-ші жылдары Карл Хьюиттің актерлік моделін түсіну мақсатымен басталды. Осы үшін Стил мен Суссман Maclisp-ті пайдаланып "кішкентай Lisp интерпретаторын" жазды, содан кейін "актерлерді жасау және хабарламалар жіберу механизмдерін" қосты. Scheme бастапқыда "Schemer" деп аталды, Planner немесе Conniver сияқты басқа Lisp-тен туындаған тілдердің дәстүріне сәйкес. Ағымдағы атау авторлардың ITS операциялық жүйесін қолдануынан туындады, ол файл атауларын екі бөлікке дейін, әрқайсысы ең көп дегенде алты таңбадан тұратын етіп шектеді. Қазіргі уақытта "Schemer" сөзі көбінесе Scheme бағдарламашысын білдіреді.
Scheme started in the 1970s as an attempt to understand Carl Hewitt's Actor model, for which purpose Steele and Sussman wrote a "tiny Lisp interpreter" using Maclisp and then "added mechanisms for creating actors and sending messages". Scheme was originally called "Schemer", in the tradition of other Lisp derived languages such as Planner or Conniver. The current name resulted from the authors' use of the ITS operating system, which limited filenames to two components of at most six characters each. Currently, "Schemer" is commonly used to refer to a Scheme programmer.
R6RS
2003 жылы Scheme семинарында жаңа тілдік стандарттау процесі басталды, мақсаты 2006 жылы R6RS стандартын жасау болды. Бұл процесс бұрынғы RnRS тәсілінен, яғни бірауыздан келісімді талап етуден өзгеше болды. R6RS стандартты модульдік жүйеге ие, бұл негізгі тіл мен кітапханаларды бөлуге мүмкіндік береді. R6RS спецификациясының бірнеше нұсқалары жарияланды, соңғысы R5.97RS болды. 2007 жылдың 28 тамызында жарияланған жаңа стандартты бекітуге сәтті дауыс беру нәтижесінде қол жеткізілді, R6RS стандартын қолдаушылар пайда болды. R6RS үшін ұсынылған жасырын кезеңді кітапханалардың портативті анықтамалық іске асырылуы бар, ол psyntax деп аталады және әртүрлі ескі Scheme іске асырылымдарында дұрыс жүктеліп, өзін-өзі қайта құрастыра алады. R6RS-тің ерекшелігі – жазба түрін сипаттаушы (RTD). RTD құрылғанда және қолданылғанда, жазба түрінің өкілдігі жадтың орналасуын көрсетуге мүмкіндік береді. Ол сондай-ақ объектінің өріс бит маскасын және өзгертілетін Scheme объектісінің өріс бит маскаларын есептейді, сондай-ақ RTD-да сақталған барлық өрістер тізімін қарастырмай, қоқыс жинаушыға өрістермен не істеу керектігін білуге көмектеседі. RTD пайдаланушыларға жаңа жазба жүйесін құру үшін негізгі RTD-ны кеңейтуге мүмкіндік береді. R6RS тілге көптеген маңызды өзгерістер енгізеді. Енді бастапқы код Unicode-та көрсетілген, ал Unicode таңбаларының үлкен тобы Scheme символдары мен идентификаторларында пайда болуы мүмкін, сондай-ақ лексикалық ережелерге ұсақ өзгерістер енгізілді. Таңбалық деректер де енді Unicode-та көрсетілген. Көптеген стандартты процедуралар жаңа стандартты кітапханаларға көшірілді, олар стандартты кеңейтеді және бұрын стандартқа кірмеген процедуралар мен синтаксистік формаларды қамтиды. Жаңа модульдік жүйе енгізілді, сондай-ақ қателерді өңдеу жүйелері стандартталды. Макро кеңейту кезінде Scheme-нің барлық мүмкіндіктерін пайдалануға мүмкіндік беретін, көбірек мүмкіндіктерге ие синтаксистік абстракция құралы (syntax case) синтаксис ережелерін алмастырды. Сәйкес іске асырылымдар енді Scheme-нің толық сандық тірегін қолдауға міндетті, ал сандардың семантикасы кеңейтілді, негізінен IEEE 754 стандартын қолдау бағытында, бұл қозғалмалы нүктелік сандық өкілдікке қатысты.
A new language standardization process began at the 2003 Scheme workshop, with the goal of producing an R6RS standard in 2006. This process broke with the earlier RnRS approach of unanimity. R6RS features a standard module system, allowing a split between the core language and libraries. Several drafts of the R6RS specification were released, the final version being R5.97RS. A successful vote resulted in ratifying the new standard, announced on August 28, 2007. support the R6RS standard. There is a portable reference implementation of the proposed implicitly phased libraries for R6RS, called psyntax, which loads and bootstraps itself properly on various older Scheme implementations. A feature of R6RS is the record type descriptor (RTD). When an RTD is created and used, the record type representation can show the memory layout. It also calculated object field bit mask and mutable Scheme object field bit masks, and helped the garbage collector know what to do with the fields without traversing the whole fields list that are saved in the RTD. RTD allows users to expand the basic RTD to create a new record system. R6RS introduces numerous significant changes to the language. The source code is now specified in Unicode, and a large subset of Unicode characters may now appear in Scheme symbols and identifiers, and there are other minor changes to the lexical rules. Character data is also now specified in Unicode. Many standard procedures have been moved to the new standard libraries, which themselves form a large expansion of the standard, containing procedures and syntactic forms that were formerly not part of the standard. A new module system has been introduced, and systems for exception handling are now standardized. Syntax rules has been replaced with a more expressive syntactic abstraction facility (syntax case) which allows the use of all of Scheme at macro expansion time. Compliant implementations are now required to support Scheme's full numeric tower, and the semantics of numbers have been expanded, mainly in the direction of support for the IEEE 754 standard for floating point numerical representation.
R7RS
R6RS стандарты дау тудырды, себебі кейбіреулер оны минималистік философиядан алшақтау деп санайды. 2009 жылдың тамызында стандарттау процесін қадағалайтын Схема басқару комитеті Схеманы екі тілге бөлуді ұсынғанын жариялады: бағдарламашылар үшін үлкен, заманауи бағдарламалау тілі; және кішкентай нұсқасы, үлкен нұсқаның ішкі жиыны, білім берушілер мен кездейсоқ енгізушілер жоғары бағалаған минимализмді сақтайды. Осы екі жаңа Схема нұсқасы бойынша жұмыс істеу үшін екі жұмыс тобы құрылды. Схема есептерін беру сайтында жұмыс топтарының жарғыларына, ашық талқылауларға және мәселелерді қадағалау жүйесіне сілтемелер бар. R7RS (кішкентай тіл) стандартының тоғызыншы нұсқасы 2013 жылдың 15 сәуірінде қолжетімді болды. Бұл нұсқаны бекітуге өткізілген дауыс беру 2013 жылдың 20 мамырында аяқталды, ал соңғы есеп 2013 жылдың 6 тамызынан бері қолжетімді, онда «бұл күш-жігердің 'кішкентай' тілі сипатталған: сондықтан оны R6RS-тің жалғасы ретінде жеке қарастыруға болмайды» делінген. Мұның себебі тілдің синтаксисінің көп бөлігін қарапайым формалардан шығару үшін лямбда-есептеуді пайдаланумен байланысты. Мысалы, R5RS Схема стандартында анықталған 23 s-өрнегіне негізделген синтаксистік құрылымның 14-і туынды немесе кітапханалық формалар ретінде жіктеледі, оларды негізгі формаларды, әсіресе лямбданы қамтитын макростар ретінде жазуға болады. R5RS (§3.1) былай дейді: «Айнымалы байланыстыру құрылымдарының ең негізгісі – лямбда өрнегі, себебі барлық басқа айнымалы байланыстыру құрылымдарын лямбда өрнектері арқылы түсіндіруге болады». Осы жерде олар лексикалық жабылу тұжырымын қабылдады (21-бет), оны 1970 жылы Джоэл Мозес AI Memo-да сипаттаған, ол бұл идеяны Питер Дж. Ландинге жатқызған.
The R6RS standard has caused controversy because some see it as a departure from the minimalist philosophy. In August 2009, the Scheme Steering Committee, which oversees the standardization process, announced its intention to recommend splitting Scheme into two languages: a large modern programming language for programmers; and a small version, a subset of the large version retaining the minimalism praised by educators and casual implementors. Two working groups were created to work on these two new versions of Scheme. The Scheme Reports Process site has links to the working groups' charters, public discussions and issue tracking system. The ninth draft of R7RS (small language) was made available on April 15, 2013. A vote ratifying this draft closed on May 20, 2013, and the final report has been available since August 6, 2013, describing "the 'small' language of that effort: therefore it cannot be considered in isolation as the successor to R6RS". This ease is attributable to the use of lambda calculus to derive much of the syntax of the language from more primitive forms. For instance of the 23 s expression based syntactic constructs defined in the R5RS Scheme standard, 14 are classed as derived or library forms, which can be written as macros involving more fundamental forms, principally lambda. As R5RS (§3.1) says: "The most fundamental of the variable binding constructs is the lambda expression, because all other variable binding constructs can be explained in terms of lambda expressions." where they adopted the concept of the lexical closure (on page 21), which had been described in an AI Memo in 1970 by Joel Moses, who attributed the idea to Peter J. Landin.
Ламбдалық есептеу
Алонзо Черчтің математикалық жазбасы, ламбда есептеуі, Lisp-те процедураны енгізу үшін "ламбда" сөзін түйін сөз ретінде пайдалануға әсер етті, сондай-ақ Lisp-те жоғары деңгейдегі функцияларды қолдануды қамтитын функционалдық бағдарламалау техникаларының дамуына ықпал етті. Бірақ ертедегі Lisp жүйелері еркін айнымалыларды өңдеу тәсіліне байланысты ламбда есептеуінің толыққанды көрінісі болмады. Ламбда есептеуінің мақсаты мыналар: Біріншіден, күшті математикалық логиканың бастапқы нүктесі болу. Екіншіден, бағдарламашылардың орындалу егжей-тегжейлерін қарастыру қажеттілігін азайту, өйткені оны машиналық есептеуді имитациялау үшін қолдануға болады. Соңынан, ламбда есептеуі маңызды метатеорияны құрды. Лексикалық ауқымды енгізу, ламбда жазбасының кейбір түрлері мен олардың жұмыс істейтін бағдарламалау тіліндегі нақты көрінісі арасындағы эквиваленттілік арқылы бұл мәселені шешті. Суссман мен Стил жаңа тілдің ALGOL және Fortran сияқты басқа бағдарламалау тілдерінің императивті және декларативті семантикасын, сондай-ақ басқа Lisp жүйелерінің динамикалық ауқымын, лямбда өрнектерін жай ғана процедуралық инстанция ретінде емес, "бақылау құрылымдары мен ортаны өзгертушілер" ретінде пайдалану арқылы әдемі түрде шығаруға болатынын көрсетті. Олар Ламбда мақалаларының біріншісінде Схеманың алғашқы сипаттамасымен бірге жалғастыру стилін енгізді, ал келесі мақалаларында ламбда есептеуінің осы практикалық қолданысының қуатын көрсетуге кірісті.
Alonzo Church's mathematical notation, the lambda calculus, has inspired Lisp's use of "lambda" as a keyword for introducing a procedure, as well as influencing the development of functional programming techniques involving the use of higher order functions in Lisp. But early Lisps were not suitable expressions of the lambda calculus because of their treatment of free variables. The function of lambda calculation includes: First, serve as a starting point of powerful mathematical logic. Second, it can reduce the requirement of programmers to consider the implementation details, because it can be used to imitate machine evaluation. Finally, the lambda calculation created a substantial meta theory. The introduction of lexical scope resolved the problem by making an equivalence between some forms of lambda notation and their practical expression in a working programming language. Sussman and Steele showed that the new language could be used to elegantly derive all the imperative and declarative semantics of other programming languages including ALGOL and Fortran, and the dynamic scope of other Lisps, by using lambda expressions not as simple procedure instantiations but as "control structures and environment modifiers". They introduced continuation passing style along with their first description of Scheme in the first of the Lambda Papers, and in subsequent papers, they proceeded to demonstrate the raw power of this practical use of lambda calculus.
Қолданылу стандарттары
Бұл тармақ Схемаға ерекше ерекшеліктер берген, бірақ бастапқы жобаның тікелей нәтижесі емес, жылдар бойы қабылданған жобалық шешімдерді сипаттайды.
This subsection documents design decisions that have been taken over the years which have given Scheme a particular character, but are not the direct outcomes of the original design.
Стандартты рәсімдерді қайта анықтау
Схемада процедуралар айнымалылармен байланыстырылады. R5RS тіл стандартында бағдарламалар кіріктірілген процедуралардың айнымалы байланыстарын өзгертуге рұқсат етілгені ресми түрде бекітілді, бұл оларды іс жүзінде қайта анықтауға мүмкіндік берді. (R5RS "Тіл өзгерістері")
In Scheme, procedures are bound to variables. At R5RS the language standard formally mandated that programs may change the variable bindings of built in procedures, effectively redefining them. (R5RS "Language changes")