вторник, 14 февраля 2012 г.

   Не отпускает меня всё таки идея про создание собственного интерпретатора.
   Ну вот опять в голове созрела, а точнее выкристаллизовалась определённая мысль!
   Раньше я немного пробовал писать на эту тему, но получилось довольно коряво и скучно.
   Попробую забыть всё и построить заново.
   Итак!
   Цель: создать ядро интерпретатора языка "Basic" (простите, пока пусть будет он, может быть в будущем сделаю реализации, чего-нибудь более интересного) на языке C. Почему только ядро и почему на C? Ответ достаточно просто: чтобы его можно было использовать во встраиваемых системах (Embedded systems).
   Думаю дальнейшее повествование этого процесса буду вести в форме рассказа, ну просто мне так хочется, это же не научная статья. 
   На сегодняшний день написано достаточно много книг по компиляторам и интерпретаторам, перечислять их пока не буду. Наверно среди них достаточно достойных и таких, которые в руки вообще брать не стоит. На первом этапе этого творческого пути я буду опираться на "Основные концепции компиляторов" Робина Хантера. Непривычно тонкая книга (зато удобно таскать), но коротко и по делу излагает материал.
   По сути компилятор состоит из двух больших частей. Первая реализует функцию анализа, вторая - синтеза. Для наших целей синтез в принципе не нужен. Это конечно очень интересная тема, но, я думаю буду касаться её довольно редко. Разве что, если будут появляться интересные идеи, и информация, которой захочется поделиться.   
   Как понятно из названия на этапе анализа производится анализ исходного кода программы, а на этапе синтеза - генерация машинного кода целевой системы. Давайте пока поговорим о более общей теме - компиляции.
   Эх эта тяга ко всеобщей унификации и упрощению! У меня кстати тоже присутствует, но только чисто из практических соображений. А в принципе очень хочется всегда сделать, что-нибудь своё, уникальное и неповторимое. НО! в унификации и упрощении (смотря с какой конечно стороны смотреть) есть свои плюсы. Плюсы будем рассматривать чисто со своих эгоистичных позиций. Первый плюс:с точки зрения исследователя задача создания универсальной системы очень интересная. Она заставляет подниматься на более высокий уровень и охватывать проблему целиком. Второй плюс: люди тебе скажут спасибо, если они без лишних телодвижений смогут работать с твоим творением. Третий плюс: в будущем тебе будет проще поддерживать существующие наработки и создавать новое.
  В компиляции по видимому унификация и упрощение - вопросы волнующие не одну светлую голову. Ну так вот, среди мне наиболее интересными кажутся идеи:
1. Универсального промежуточного языка. Суть в том, что мы все известные языки транслируем в один универсальный, а дальше уже его перерабатываем в код целевого процессора. Так, если у нас есть p языков и q платформ, нам нужно "всего лишь" реализовать p*q программных систем.
2. Компилятор компиляторов. Эта идея сильно перекликается с предыдущей. Суть в том, что есть программа, на вход ей подаём описание языка и целевой платформы (напр. x86, ARM и т.п.), а на выходе получаем компилятор с данного языка в нужный машинный код. КРАСОТИЩА!
   Ну пока на сегодня хватит, закругляюсь))) 

Комментариев нет:

Отправить комментарий