avva: (Default)
[personal profile] avva

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

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

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

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

Page 1 of 5 << [1] [2] [3] [4] [5] >>

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

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:03 pm (UTC)
From: [identity profile] avva.livejournal.com
Да я бы с радостью, но как-то вряд ли я тут найду желающих на семинар, боюсь :(

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

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] avva.livejournal.com
We fuck up your brain - now optimised at 3x the speed! :)

Я изучал вирусы в 92-94 гг., в то же время, в какое увлекался ассемблером и demo scene (хотя ничего серьезного в этой последней не сделал). Помню, как изучал вирусы в дебаггере, продирался сквозь саморасшифровку и stealth-маскировку нескольких относительно продвинутых, и написал свой, который перехватывал кучу функций int21, int13, клавиатуру, заражал... кажется, только COM-файлы, я не дописал EXE-обработку ;) и естественно не выпустил его никуда.

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

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

Date: 2006-10-02 07:17 pm (UTC)
From: [identity profile] eterevsky.livejournal.com
Ну, например, там «сворачиваются» многие циклы нижнего уровня (то есть превращаются в фиксированное количество арифметических команд). Для многих программ просчитывается, сколько памяти им нужно и массив под переменные выделяется ровно один раз правильного размера. В иных случаях лента динамически перевыделяется (достаточно редко, так чтобы это не влияло на производительность). Некоторые циклы конвертируются в if ().

Date: 2006-10-02 07:18 pm (UTC)
From: [identity profile] eterevsky.livejournal.com
Да, я занимался этим примерно тогда же, может разве что немного позже, годах в 94-95. Учился тогда в школе. И до разбора EXE-файла тоже не дошёл. :)

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

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

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

Date: 2006-10-02 07:27 pm (UTC)
From: [identity profile] eterevsky.livejournal.com
На счёт библиотеки оконного интерфейса — это новое веяние, ему всего лет 20. :) Я вот никогда в жизни никакую графику не программировал. (Ну, если не считать глубоко детских штудий на лого, турбо паскале и спектрумовском бейсике.)

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

Date: 2006-10-02 07:35 pm (UTC)
From: [identity profile] motya.livejournal.com
Я когда-то писал библиотеку работы с мышью ну и всякую другую интерфейсную околооконную фигню на Прологе :)

А насчет компилятора - нет, не считаю - программисты - они всякие бывают. Я вот не писал компилятора и не стремлюсь. А еще я никогда не работал с базами данных, не писал клиент-сервер, мултисрединг и пр. И ничего :)

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:44 pm (UTC)
From: [identity profile] avnik.livejournal.com
Полноценных -- не писал, а вот всяких недокомпиляторов DSL и утилит которые парсят исходник, и нерерируют всякий glue code -- писал, пишу и видимо буду писать неоднократно.

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

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

Date: 2006-10-02 07:50 pm (UTC)
From: [identity profile] oblomov-jerusal.livejournal.com
Я в 92-93 дизассемблировал вирусы деньги, для антивируса. Поэтому считаю себя от обязанности написать вирус освобожденным, т.к. это было бы нарушением профессиональной этики.

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

Date: 2006-10-02 07:51 pm (UTC)
From: [identity profile] levg.livejournal.com
Хм. Язык - C всего-навсего. A вот с окошками могу посоревноваться - PL/M:)

Date: 2006-10-02 07:52 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
А!
Посыл понят :)
Page 1 of 5 << [1] [2] [3] [4] [5] >>

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. 30th, 2025 12:21 am
Powered by Dreamwidth Studios