Ще поясня, лекциите се занимават с различни конкретни проблемни области от компютърните науки, като динамични езици, функционално програмиране, рекурсивни алгоритми, вложени езици, pattern matching, логическо програмиране, и писане на интерпретатори за такива езици. Това всичкото в 10 лекции(всяка от по 2 части). В предишна лекция бяха описали целия мета циркулярен интерпретатор на лисп, написан на лисп, т.е. лисп е самосъдържащ се език, който е дефиниран чрез себе си, и се самоинтерпретира, или нещо такова. Но в една от следващите лекции, направиха нещо интересно. Описаха абстрактен модел на компютър, такъв с регистри, стек, контролер и т.н. Освен абстрактния модел на компютър, дефинираха и вложен в lisp синтаксис, с който да описвах процесите в този псевдо компютър(псевдо асемблер, с лисп синтаксис). Идеята беше да премахнат магията.
Този мета циркулярен интерпретатор за лисп, написан на лисп, има много магия в него. На какво е написан лисп, че да може да се самоинтерпретира, с този прост интерпретатор(събра се на 5 дъски!)? След това започнаха да описвах процесите в тази машина, давайки пример с итеративен и рекурсивен алгоритъм. И двата са дефинирани по рекурсивно със lisp синтаксис, но интересното е какво става в интерпретатора, начинът по който единия и другия алгоритъм пълни и празни стека, показва доста ясно каква е разликата между рекурсия и итерация, дори и ако изглеждат синтактично еднакви, защото са дефинирани рекурсивно, процесите които описват са различни.
След като обясниха процесът, който става в регистрите и стека, магията изчезна. Това някак си промени мирогледа ми за С, проблемът ми е че се опитах да пиша python на С, това освен че е глупаво, е и невъзможно, без да напиша python интерпретатор, преди това. С е език от ниско ниво, един вид абстрактен асемблер. Сега с нов поглед върху проблема, се надявам най накрая да разбера тоя шибан език, и тая шибана Фон Нойманова архитектура.
Няма коментари:
Публикуване на коментар