Кіріспе

Компьютерлік бағдарламалаушы. "Мелдің тарихы" – компьютерлік бағдарламалау фольклорының архетиптік үлгісі. Оның тақырыбы Мелвин Кей, бастапқыда прозада жазылған болса да, Натердің әңгімесі біреуге "еркін өлең" түріне айналдырылып, кеңінен таралды. Мел Кей туралы көп мәлімет жоқ, бірақ ол 1959 жылғы ACT 1 компиляторында Royal McBee LGP 30 компьютері үшін "бағдарламалаудың басым бөлігін" жасағаны белгілі. Натердің әңгімесінде Кей аппараттық ерекшеліктерді пайдаланып код жасауға бейім, мысалы, LGP 30 барабандық жадының айналуын пайдаланып, кодқа кідіріс циклдарын енгізбеуге тырысады. Натер жазғандай, оқиға Кейдің LGP 30-дан жаңа Royal McBee жүйесі RPC 4000-қа блэкджек бағдарламасын қайта жазу жұмысына қатысты. Компанияның сату бөлімінің өкілдері бағдарламаны өзгертуді сұрады, осылайша олар алдыңғы панельдегі қосқышты аудару арқылы бағдарламаның жеңіліп қалуын (ал пайдаланушы жеңіп қалуын) қамтамасыз етеді. Кей бұл сұранысқа мәжбүр болды, бірақ өзінің қуанышына орай, тестті қате орындады, нәтижесінде қосқыш бағдарламаның әрқашан жеңіске жетуіне (ал пайдаланушының жеңіліске) себеп болды. Кей кеткеннен кейін Натерден бұл қатені түзету сұралады. Кодты қарап шыққанда, ол ішінде шексіз цикл бар екенін байқады, бірақ бақылау цикл ішінде қалып қоймады. Соңында ол Кейдің массив элементтерін өңдеу үшін өзін-өзі өзгертетін кодты қолданғанын және циклды бүтін сан ағынынан пайдалану үшін кодтағанын түсінді. x мекенжайына сілтеме жасайтын нұсқаудың мекенжайлық өрісіне 1 қосылғанда әдетте мекенжай x+1-ге өтеді. Бірақ x ең жоғары мүмкін мекенжай болғанда, мекенжай 0-ге ғана емес, сонымен қатар opcode оқылатын биттерге 1 қосылды – бұл жағдайда opcode "0-ға секіру" деп өзгертілді, сондықтан толық нұсқау "0 мекенжайына секіру" болып шықты. Бұл Натерге қатты әсер етті, сондықтан ол құрметпен тапсырмадан бас тартып, қатені таба алмағанын хабарлады. IAS машинасының алғашқы компьютерлерінде индекс тіркегі болған жоқ. Массивтік операцияларды орындау үшін өзін-өзі өзгертетін кодты пайдалану қажет болды. LGP 30 нұсқаулығы "жадтың 2000 орнындағы сөздің мекенжай бөлігінің мазмұнын аккумулятордағы сөздің мекенжай бөлігінің мазмұнымен алмастыру" арқылы өзін-өзі өзгертетін кодты жазуды жеңілдетті.

Тарих

Бұл эссе алғаш рет 1983 жылдың 21 мамырында "net. followup" Usenet жаңалықтар тобында utastro!nather (сол кезде Эд Натердің UUCP электрондық пошта мекенжайы) арқылы жарияланды.