avva: (Default)
[personal profile] avva

Вот любопытная штука: образец написания компилятора для начинающих, на примере простого компилятора значительной части Scheme (сам компилятор написан тоже на Схеме). Подход интересен тем, что компилятор строится снизу вверх, начиная с тривиального подмножества языка, расширяя каждый раз небольшими кусочками и делая рефакторинг существующего кода. При этом на каждой стадии у вас есть полностью работающий компилятор (для все более растущего подмножества языка), что очень помогает с точки зрения мотивации и понимания, ясное дело.

Ссылка выше ведет на объясняющую статью [11 стр.], а не сам tutorial[50 стр.]; есть также файлы с тестами.

Программисты - давайте обсудим следующее высказывание: каждый программист должен уметь написать компилятор и в своей жизни сделать это хотя бы раз (пусть для ненастоящего, но не совершенно тривиального языка). Я с этим утверждением согласен, а вы?

Да, и еще: сегодня 2 октября, как раз хороший день для заданий себе на следующий месяц, так что даю публичное обещание себе к концу месяца знать Лисп на сносном (для читателя, а не чукчи) уровне. А то я уже много лет собираюсь, один раз даже добрался до середины неплохого учебника, но бросил как раз когда нетривиальные вещи начинались, черт бы меня побрал. Вот год назад все очень эту новую книгу хвалили, с нее и начну, пожалуй.

Page 1 of 2 << [1] [2] >>

Date: 2006-10-02 06:55 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Насчет языка - а вы устройте у себя там семинар - как у нас бывают "Паттерн Группы" - вот и стимул будет.

Date: 2006-10-02 07:03 pm (UTC)
From: [identity profile] avva.livejournal.com
Да я бы с радостью, но как-то вряд ли я тут найду желающих на семинар, боюсь :(

(no subject)

From: [identity profile] ivan-gandhi.livejournal.com - Date: 2006-10-02 09:46 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:47 pm (UTC) - Expand

wow

From: (Anonymous) - Date: 2006-10-03 05:08 am (UTC) - Expand

Date: 2006-10-02 06:58 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
Ага. А каждый охотник должен знать где сидит фазан.

Date: 2006-10-02 07:01 pm (UTC)
From: [identity profile] eterevsky.livejournal.com
Я сам давно дошёл (пусть наполовину в шутку) до мысли, что как человек должен за свою жизнь посадить дерево, построить дом и вырастить сына, так программист должен написать компилятор, компьютерный вирус и программу Hello World. Для себя я эту проблему решил, написав компилятор языка Brainfuck (http://en.wikipedia.org/wiki/Brainfuck). Тривиальность языка я компенсировал продвинутой оптимизацией, отсутствующей во всех других известных мне реализациях. :)

Date: 2006-10-02 07:06 pm (UTC)
From: [identity profile] http://users.livejournal.com/d_m_/
Какой ещё "продвинутой оптимизацией"? ;)

(no subject)

From: [identity profile] eterevsky.livejournal.com - Date: 2006-10-02 07:17 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 07:08 pm (UTC) - Expand

(no subject)

From: [identity profile] eterevsky.livejournal.com - Date: 2006-10-02 07:18 pm (UTC) - Expand

(no subject)

From: [identity profile] oblomov-jerusal.livejournal.com - Date: 2006-10-02 07:50 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 07:53 pm (UTC) - Expand

(no subject)

From: [identity profile] oblomov-jerusal.livejournal.com - Date: 2006-10-02 07:53 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 07:53 pm (UTC) - Expand

(no subject)

From: [identity profile] oblomov-jerusal.livejournal.com - Date: 2006-10-02 08:10 pm (UTC) - Expand

Date: 2006-10-02 07:07 pm (UTC)
From: [identity profile] kingoleg.livejournal.com
Согласен

Date: 2006-10-02 07:08 pm (UTC)
From: [identity profile] http://users.livejournal.com/d_m_/
Согласен с тезисом.
Ради его утверждения написал четыре реализации Forth.

Date: 2006-10-02 09:40 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Фигасе. Мы должны бы быть знакомы, а?

(no subject)

From: [identity profile] http://users.livejournal.com/d_m_/ - Date: 2006-10-02 09:58 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:14 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2006-10-02 10:23 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/d_m_/ - Date: 2006-10-02 11:49 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2006-10-03 01:50 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/d_m_/ - Date: 2006-10-03 02:18 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2006-10-03 03:05 pm (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2006-10-03 08:02 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/d_m_/ - Date: 2006-10-03 09:39 am (UTC) - Expand

Date: 2006-10-02 07:14 pm (UTC)
From: [identity profile] levg.livejournal.com
Написать обработку дерева, библиотеку оконного интерфейса и компилятор:)
Интерпретаторы считаются?:))

Date: 2006-10-02 07:23 pm (UTC)
From: [identity profile] avva.livejournal.com
Ну... если язык динамический с сильной встроенной рефлексией...

А вот библиотеку оконного интерфейса я написал на Прологе! И убежден, что это один из примеров такой извращенности, какую нелегко переплюнуть :)

(no subject)

From: [identity profile] motya.livejournal.com - Date: 2006-10-02 07:35 pm (UTC) - Expand

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2006-10-02 08:55 pm (UTC) - Expand

(no subject)

From: [identity profile] levg.livejournal.com - Date: 2006-10-02 07:51 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 07:54 pm (UTC) - Expand

(no subject)

From: [personal profile] stas - Date: 2006-10-03 03:15 am (UTC) - Expand

(no subject)

From: [identity profile] eterevsky.livejournal.com - Date: 2006-10-02 07:27 pm (UTC) - Expand

Date: 2006-10-02 07:25 pm (UTC)
From: [identity profile] ex-ex-annut.livejournal.com
Программист - очень размытое понятие
Одно дело "системный инженер", другое дело человек по заказу моментально производящий формочки для эккаунтинг приложений, и третье дело человек "программирующий" SAS и кроме статистики ничего по большому счету не знаюший
Все одинаково важно
Хотя конечно системщик должен знать как работает компилятор и хотя бы раз в жизни собрать его обязательно

Date: 2006-10-02 07:49 pm (UTC)
From: [identity profile] avva.livejournal.com
Я имею в виду программиста - это человек, который умеет писать программы, а не обезьянка для производства формочек или SAS-херни. Системным инженером он при этом вовсе быть не обязан, хотя почти все программисты что-то знают о том, как вещи работают на системном уровне.

Есть еще такое понятие - программист.

(no subject)

From: [identity profile] ex-ex-annut.livejournal.com - Date: 2006-10-02 07:57 pm (UTC) - Expand

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2006-10-02 08:05 pm (UTC) - Expand

(no subject)

From: [identity profile] nice-beaver.livejournal.com - Date: 2006-10-03 05:46 pm (UTC) - Expand

(no subject)

From: [identity profile] j-e-t-s-n-y.livejournal.com - Date: 2006-10-02 10:12 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:22 pm (UTC) - Expand

Date: 2006-10-02 07:30 pm (UTC)
From: [identity profile] yucca.livejournal.com
Только хотела написать, что никогда не буду программистом, как вспомнила, что лет эдак пятнадцать назад я таки написала компилятор (тот еще, конечно) на PL/1 для некоего лиспообразного языка, который придумал мой начальник. И мы даже написали по этому поводу статью в какой-то дурацкий сборник. Но вот зачем этот язык был нужен, убейте, не вспомню.

Date: 2006-10-02 07:38 pm (UTC)
From: [identity profile] angerona.livejournal.com
А интерпретер для того же Scheme на Scheme сойдет? Хотя я и не программист.
From: [identity profile] arno1251.livejournal.com
+++ каждый программист должен уметь написать компилятор и в своей жизни сделать это хотя бы раз +++
Тема моей дипломной работы: "Разработка специализированного компилятора языка Фортран-77" :)

Date: 2006-10-02 07:44 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
А если серьёзно, Вы, как уже отметили, сильно недогружаете термин "программист". Для достаточно широкого и приняторо понимания этого термина даже такое утверждение не будет верным:

"каждый программист должен уметь написать программу и в своей жизни сделать это хотя бы раз"

Date: 2006-10-02 07:50 pm (UTC)
From: [identity profile] avva.livejournal.com
Наоборот, я наделяю этот термин нетривиальным смыслом!

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2006-10-02 07:52 pm (UTC) - Expand

Date: 2006-10-02 07:44 pm (UTC)
From: [identity profile] avnik.livejournal.com
Полноценных -- не писал, а вот всяких недокомпиляторов DSL и утилит которые парсят исходник, и нерерируют всякий glue code -- писал, пишу и видимо буду писать неоднократно.

Date: 2006-10-02 07:54 pm (UTC)
From: [identity profile] moon-aka-sun.livejournal.com
Мало кто может написать компилятор. Это, всё-же, довольно узкая область. Программисты решают гораздо более разнообразные задачи и могут понятия не иметь, как там что у компиляторов.
(deleted comment)

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2006-10-02 08:19 pm (UTC) - Expand

(no subject)

From: [identity profile] dinozavrik.livejournal.com - Date: 2006-10-03 11:18 am (UTC) - Expand

Date: 2006-10-02 08:27 pm (UTC)
From: [identity profile] cema.livejournal.com
Я как бы согласен, но с оговоркой, что это может быть часть учебного процесса, а не обязательно промышленный экземпляр.

Date: 2006-10-02 08:31 pm (UTC)
From: [identity profile] avva.livejournal.com
Да. Но не совершенно тривиальный, как я указал.

Date: 2006-10-02 08:36 pm (UTC)
From: [identity profile] iratus.livejournal.com
Нет не согласен.
я 16 лет работаю разработчиком низкого уровня и мне ни разу (подчеркиваю - ни разу) не потребовались знания необходимые для написания компилятора. Правда я занимался разработкой и портингом виртуальных джава машин, но это совсем другая область. Написание компиляторов на любительском уровне вообще не имеет, ИМХО, никакого смысла. А для того чтобы этим заниматься профессионально, требуются глубокие и специфические знания, а также погружение в тему в течении нескольких лет. Я уже не говорю про разработку новых языков...

Date: 2006-10-02 08:39 pm (UTC)
From: [identity profile] michk.livejournal.com
каждый программист должен уметь написать компилятор и в своей жизни сделать это хотя бы раз
Ведь это же определение, не так ли?

(no subject)

From: [identity profile] michk.livejournal.com - Date: 2006-10-02 08:48 pm (UTC) - Expand

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2006-10-02 08:49 pm (UTC) - Expand

(no subject)

From: [identity profile] michk.livejournal.com - Date: 2006-10-02 08:57 pm (UTC) - Expand

(no subject)

From: [identity profile] amigofriend.livejournal.com - Date: 2006-10-02 08:58 pm (UTC) - Expand

Date: 2006-10-02 08:59 pm (UTC)
From: [identity profile] mkay422.livejournal.com
Я бы даже сказал - каждый (настоящий) программист должен хоть раз задуматься с клавиатурой в руках над созданием AI и/или анализом человеческих языков.

Date: 2006-10-02 09:02 pm (UTC)
From: [identity profile] gmz.livejournal.com
Хотя бы в общих словах- что такое "совершенно тривиальный язык"?

Date: 2006-10-02 09:04 pm (UTC)
From: [identity profile] avva.livejournal.com
Ну не знаю, что-нибудь (если говорить о процедуральных языках, скажем) без структур данных и вызовов подпрограмм. Т.е. когда компилятор становится парсером выражений и максимум циклов с массивами.

(no subject)

From: [identity profile] oblomov-jerusal.livejournal.com - Date: 2006-10-02 09:13 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2006-10-02 10:08 pm (UTC) - Expand

(no subject)

From: [identity profile] sobaker.livejournal.com - Date: 2006-10-02 11:58 pm (UTC) - Expand

(no subject)

From: [identity profile] oblomov-jerusal.livejournal.com - Date: 2006-10-03 12:16 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:11 pm (UTC) - Expand

(no subject)

From: [identity profile] ivan-gandhi.livejournal.com - Date: 2006-10-02 09:44 pm (UTC) - Expand

Date: 2006-10-02 09:06 pm (UTC)
From: [identity profile] grur.livejournal.com
Каждый хороший программист должен уметь написать вообще все что угодно :)

Date: 2006-10-02 09:12 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
каждый виртуальный кот должен уметь написать под кресло и в своей жизни сделать это хотя бы раз!

(no subject)

From: [identity profile] grur.livejournal.com - Date: 2006-10-02 10:24 pm (UTC) - Expand

(no subject)

From: [identity profile] j-e-t-s-n-y.livejournal.com - Date: 2006-10-02 10:08 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:24 pm (UTC) - Expand

(no subject)

From: [identity profile] grur.livejournal.com - Date: 2006-10-02 10:31 pm (UTC) - Expand

Флешмобка

Date: 2006-10-02 09:17 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
Каждый, кто хочет написать со мной компилятор, но стесняется об этом сказать, может сделать это в комментах.
Комменты скринятся интерпретируются.

Date: 2006-10-02 09:19 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
О боже!
В комментариях к этому посту я, наверное, поставил уже с дюжину лишних запятых...

Вот до чего Вы меня довели, Анатолий.

Date: 2006-10-02 09:24 pm (UTC)
From: [identity profile] oblomov-jerusal.livejournal.com
Т.е. вы до сих пор не знали LISP? Означает ли это, что вы благополучно избежали такой глупости, как изучения мадей махшев в университете?

Date: 2006-10-02 09:51 pm (UTC)
From: [identity profile] reut.livejournal.com
дважды сделав такую глупость, как изучение мадей амахшев - обе степени, при этом с LISP не сталкивалась.
а вот компилятор писала, это да. все думала, нафига они курс по компиляторам сделали обязательным? видимо, составители этих требований считают также, как и [livejournal.com profile] avva...

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:20 pm (UTC) - Expand

(no subject)

From: [identity profile] reut.livejournal.com - Date: 2006-10-02 10:24 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-03 03:22 pm (UTC) - Expand

(no subject)

From: [identity profile] reut.livejournal.com - Date: 2006-10-03 08:43 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-03 08:48 pm (UTC) - Expand

(no subject)

From: [identity profile] reut.livejournal.com - Date: 2006-10-03 08:54 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-03 09:02 pm (UTC) - Expand

(no subject)

From: [identity profile] reut.livejournal.com - Date: 2006-10-03 09:04 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-03 09:09 pm (UTC) - Expand

(no subject)

From: [identity profile] reut.livejournal.com - Date: 2006-10-03 09:14 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-03 10:01 pm (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2006-10-02 10:14 pm (UTC) - Expand

Date: 2006-10-02 09:25 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Согласен с утверждением. Сам еще ни одного компилятора не написал, поэтому программист я пока ненастоящий.

Date: 2006-10-02 10:23 pm (UTC)
From: [identity profile] avva.livejournal.com
Все еще впереди!

Date: 2006-10-02 10:05 pm (UTC)
From: [identity profile] j-e-t-s-n-y.livejournal.com
конечно,программист понятие растяжимое, но если человек решил заниматься этим профессионально, то вы правы.

К сожалению, если вы работаете в каком-нибудь серьёзном финансовом учреждении, тто времени для такой задачи у вас просто нет, а иногда так хочется ....

Date: 2006-10-02 10:39 pm (UTC)
From: [identity profile] ltwood.livejournal.com
если вы работаете в каком-нибудь серьёзном финансовом учреждении, то начинаете за деньги конторы писать свой собственный интерпретатор очередного DSL ;)

Date: 2006-10-02 10:25 pm (UTC)
From: [identity profile] iliat.livejournal.com
Согласен. Написанный в 93 интерпретатор Пролога (считается?) - одно из самых любимых созданий.
С Лиспом подожду, вот тут бы книжку про Хаскелл дочитать наконец :-(
Page 1 of 2 << [1] [2] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 10:49 pm
Powered by Dreamwidth Studios