CDR кодтау – Lisp тізімдерін ықшамдау әдісі. MIT жасаған, жадты үнемдеп, жылдамдықты арттырады. Деректерді біріктіріп, жадты тиімді пайдалануға көмектеседі.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Компьютерлік ғылымда CDR кодтамасы – Lisp тізімдері үшін қысылған деректерді ұсыну тәсілі. Ол MIT Жасанды интеллект зертханасында әзірленді және патенттелді, сондай-ақ MIT CADR-ден туындаған бірнеше Lisp машиналарында компьютерлік аппараттық құралдарда іске асырылды. CDR кодтау, шын мәнінде, өте жалпы идея; егер деректер объектісі A басқа деректер құрылымы B-ға сілтемемен аяқталса, онда біз B құрылымын өзімен бірге, A-ның соңына дейін қосып, одан асырып орналастыра аламыз. Осылайша сілтемеге қажетті орын босатылады, егер мұны көп рет жасасақ, ол жинақталуы мүмкін, сонымен қатар деректерге қолжетімділікті жақсартамыз, бұл заманауи машиналардың өнімділігін арттырады. Бұл трансформация, әсіресе, оны жасау үшін арналған cons-негізделген тізімдер үшін тиімді; бұл трансформацияны орындайтын әрбір түйін үшін шамамен жартылай орын босатылады. Бұл алмастыруды орындау әрқашан мүмкін емес, себебі A-ның соңынан кейін жеткілікті үлкен бос орын болмауы мүмкін. Сондықтан, кейбір объектілер нақты сілтемемен аяқталады, ал кейбіреулері сілтемеленген объектімен, ал машина соңғы жасушаны оқып, қайсысы екенін анықтауы керек. Бұл бағдарламалық жасақтамада белгілі бір тиімсіздікпен, таңбаланған сілтемелерді пайдалану арқылы жүзеге асырылуы мүмкін, олар соңғы позициядағы сілтемені осылай тануға мүмкіндік береді, бірақ аппараттық құралдарда жақсырақ орындалады. Өзгертілетін объектілер болған жағдайда CDR кодтамасы күрделене түседі. Егер сілтеме басқа объектке жаңартылса, бірақ қазіргі уақытта сол өрісте сақталған объект болса, онда объект оны басқа да сілтемелермен бірге жылжытылуы керек. Мұндай жылжытулар әдетте қымбатқа түседі немесе мүмкін емес, сонымен қатар уақыт өте келе деректер сақталымының фрагментациясына әкеледі. Бұл мәселені әдетте CDR кодтамасын тек өзгертілмейтін деректер құрылымдарында қолдану арқылы болдырмайды.
In computer science CDR coding is a compressed data representation for Lisp linked lists. It was developed and patented by the MIT Artificial Intelligence Laboratory, and implemented in computer hardware in a number of Lisp machines derived from the MIT CADR. CDR coding is in fact a fairly general idea; whenever a data object A ends in a reference to another data structure B, we can instead place the structure B itself there, overlapping and running off the end of A. By doing this we free the space required by the reference, which can add up if done many times, and also improve locality of reference, enhancing performance on modern machines. The transformation is especially effective for the cons based lists it was created for; we free about half of the space for each node we perform this transformation on. It is not always possible to perform this substitution, because there might not be a large enough chunk of free space beyond the end of A. Thus, some objects will end in a real reference, and some with the referenced object, and the machine must be able to tell by reading the final cell which one it is. This can be accomplished with some inefficiency in software by the use of tagged pointers, which allow a pointer in a final position to be specifically tagged as such, but is best done in hardware. In the presence of mutable objects, CDR coding becomes more complex. If a reference is updated to point to another object, but currently has an object stored in that field, the object must be relocated, along with any other pointers to it. Not only are such moves typically expensive or impossible, but over time they cause fragmentation of the store. This problem is typically avoided by using CDR coding only on immutable data structures.