LINUX.ORG.RU

Курс по компиляторам

 , ,


15

10

В 14-м году на курсере был классный курс, который я упустил. А сейчас понял что очень хочется его пройти. После гуглежа оказалось, что курс доступен бесплатно без смс прямо на сайте стенфорда.

Вот, выкладываю ссылку (может будет полезно кому-нибудь) https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/

Если есть ещё слоупоки кроме меня, то давайте вместе проходить!


Ответ на: комментарий от utf8nowhere

Можешь считать этот тред живительным пинком. Давай, собирайся!

dsxl
() автор топика

Еще есть суперклевый курс по C++ на степике от питерцев https://stepik.org/course/3206

Это вторая часть, продвинутая для тех кто уже в теме. Узнаешь много полезного.

anonymous
()

Спасибо

Deleted
()

По содержанию довольно стандартный, я бы даже сказал ужатый. Например вот тоже из стенфорда курс, скорей всего в основе лежавший. Кстати, у него тоже есть видео лекции, есть на рутрекере. Очень советую.

Удачи в изучении!

alexanius ★★
()
Ответ на: комментарий от alexanius

http://web.stanford.edu/class/cs143/

тоже находил эту ссылку. По содержанию примерно тоже самое, только без файлов для заданий и без видеолекций. Даже профессор тот же самый. Видимо, рассчитан на личное присутвие и подключение к серверу стенфорда, в то время в ОП всё есть для дистанционного обучения и абсолютно легально.

Кстати, у него тоже есть видео лекции, есть на рутрекере.

то есть только на трекерах? Ну, имеет смысл сравнить после прохождения легального курса, я думаю

dsxl
() автор топика
Ответ на: комментарий от dsxl

то есть только на трекерах? Ну, имеет смысл сравнить после прохождения легального курса, я думаю

Он раньше на курсере был, до того как её почистили. Это один из хороших курсов, который только на трекере остался.

Если мне память не изменяет, файлы с лабами тоже были.

alexanius ★★
()
Ответ на: комментарий от alexanius

Разве на курсере был не ровно тот же, что и в ОП? Даже год тот же самый и картинка с четырьмя кусочками паззла такая же.

Это один из хороших курсов, который только на трекере остался.

Ну, хорошо, убедил. Пойду поищу.

dsxl
() автор топика
Ответ на: комментарий от dsxl

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

alexanius ★★
()
Ответ на: комментарий от alexanius

Нашёл на рутрекере ровно две раздачи. Выглядят точно как то, что в ОП. Если ты видел там что-то другое, да ещё и с файлами для заданий, то плз хоть напиши точное название раздачи.

dsxl
() автор топика

Меня, как программиста троечника вполне курс развлекает. Тем более можно писать на чем угодно, все куски компилятора просто возвращают результат в stdout и и соединяются через pipe.

Deleted
()

курс доступен бесплатно без смс

Ну и где ссылка скачать?
Там ещё и региться надо?

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Региться надо, да, но это бесплатно и без смс. Можно даже видео скачивать с сайта (мне, правда, это не нужно - онлайн удобнее)

dsxl
() автор топика

Курс отличный, проходил на курсере и временами даже охота пройти повторно. Если что, лекции (вроде все) давно лежат на ютубе.

anonymous
()

Ладно, попытка номер два. :)

urxvt ★★★★★
()
Ответ на: комментарий от rumgot

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

anonymous
()

В общем, буду отписываться о прогрессе и подводных камнях.

Две недели лекций посмотрел дня за четыре, пришла пора делать лексер.

Работать в виртуалке мне не понравилось, а на современном GNU+Linux С++ версия не линкуется (оно и не удивительно: у них там настроено, чтобы из флекса вылетали С-простыни, которые потом запихиваются в g++). Решил не тратить время на крестопроблемы и попробовать Java-версию. В общем, дело пошло, но и тут без подводных камней не обошлось.

Во-первых, в джава версии мейкфайл производит выхлоп с относительными путями в CLASSPATH, от чего из pa1_grading скрипта он не работает. Это легко исправить заменив пути на абсолютные или добавив $(realpath).

Во-вторых, JLex не поддерживает lookahead/lookbehind. Ну, ничего страшного, задача решается и без них.

В-третьих, . хоть и матчит «любые» символы, не матчит перевод строки и некоторые другие, поэтому пришлось использовать вместо него уродливый макрос.

В целом, непосредственно на лексер ушло 4 часа + примерно столько же на чтение документации.

utf8nowhere linux-org-ru michey Bad_ptr urxvt icefreeze, а у вас как дела?

dsxl
() автор топика
Ответ на: комментарий от dsxl

я обычно видео смотрю, но ничего не пишу

в этот раз ещё пока и видео не смотрел

icefreeze
()
Ответ на: комментарий от dsxl

Подобрался к концу первой недели только. :)

urxvt ★★★★★
()
Ответ на: комментарий от dsxl

https://github.com/michey/kcool
Если тебе внезапно будет интересно как это могло бы выглядеть на Kotlin + JFlex.
1 - Проще взять maven.
3 - И не должен вроде.
Код лабал часов шесть, спеку читал невнимательно, поэтому долго разбирался с assignment.

Deleted
()
Ответ на: комментарий от Deleted

Ничем не отличается от моего решения на JLex, за тем исключением, что у меня больше дефайнов, а правила короткие.

Что собираешься использовать вместо CUP?

dsxl
() автор топика
Ответ на: комментарий от dsxl

Ну я особо и не претендовал на оригинальность. Чай не хаскель или еще какая-нибудь маргинальщина.
Что самое смешное, скорее всего буду именно CUP и использовать. В lexer`е мне привязка к нему не очень понравилась, а вот в parser`е чего бы и не использовать.

Deleted
()
Ответ на: комментарий от alexanius

Названия видео такие же, как и в ОП. Ну, понятно, что по твоей ссылке там рип с курсеры и что-то может немного отличаться, но судя по всему там примерно то же самое.

dsxl
() автор топика
Ответ на: комментарий от dsxl

Третью неделю лекций удалось пройти за три вечера, хотя и за два вполне возможно - материала там не так много. А вот до задания добрался только вчера. Часов шесть ушло на реализацию парсера без error recovery и ещё часа два на доделывание - ибо угадывать где расставить error-ы чтобы получилось как в grading скрипте дело неблагодарное. Без подводных камней

dsxl
() автор топика
Ответ на: комментарий от dsxl

Третью неделю лекций посмотрел за три вечера - в принципе можно и за два успеть, материала не так много. На задание нашлось время только вчера.

С крестами решил сразу не связываться, а мейкфайл для джавы имел недостатки как в и предыдущем задании + создатели курса забыли положить скрипт bin/java_cup. На исправление мейкфала, разбор имеющегося кода и написание правил парсинга хороших программ ушло часов 6. Error recovery это ещё часа 2 - угадать где расставить error-ы чтобы получилось как в grading-скрипте совсем не легко, отчего я некоторое время «негодовал». В целом, это очередное задание на умение пользоваться чужими программами, непосредственно к программированию или математике из лекций отношения не имеет. Надеюсь, остальные этапы нужно будет кодить самостоятельно.

PS. для нерабочего мейкфайла из первого задания нашлось лекарство:

dsxl
() автор топика

Курс по теории канпеляторов?

Годнота, если так. Когда-то пытался, но так и не осилил.

Deleted
()
Ответ на: комментарий от Deleted

В лекциях - теория, в задниях - практика. Из того, что я успел пройти, задания хоть и как-то связаны с лекциями, но не напрямую. Например, в лекции рассказывают про алгоритмы парсеров, а на практике пишешь правила для существующего генератора парсеров, вместо того, чтобы писать непосредственно парсер.

В принципе, это и понятно: это университетсский курс, рассчитанный на один семестр. По сути, это введение в теорию «канпеляторов», а для углубленного изучения есть толстые книги: readings. Хотя по программе предполагается, что мы сделаем компилятор для язычка с ООП и сборкой мусора. Не то что бы мне нравились эти концепции, но я бы никогда не подумал, что это делается относительно легко, а именно такой вывод и напрашивается.

Когда-то пытался, но так и не осилил.

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

dsxl
() автор топика
Ответ на: комментарий от dsxl

Хз, нужно подумать.

Пока со временем так себе, неспешно подыскиваю местечко, куда можно тихо улизнуть, и пара проектов требуют внимания.

Вообще, профессионально занимаюсь штуками, которые так или иначе требуют аппаратно-программной оптимизации, поэтому умение построить компилятор не будет лишним.

Мне, как человеку иррациональному, тема интересна. С другой стороны вкуривать знания, которые не принесут ни денег, ни славы как-то по нынешним меркам не совсем правильно. Во мне и так бултыхается куча всего, аж шея не держит и гнётся во все стороны =)

За славой придётся топать в ИСП РАН =)
Но я пока не созрел. Хотя в принципе направления мозговых усилий достаточно перспективны.

А за деньгами - я не знаю, к кому =) Но это так, небольшое лирическое отступление.

Короче, нужно подумать.

Deleted
()
Последнее исправление: rht (всего исправлений: 1)
Ответ на: комментарий от dsxl

Кстати, вот достойный мануал:

Compilers: Principles, Techniques, and Tools (CPTT, aka «The Dragon Book»)

Даже вертел его в руках. Правда, на русском. Писали, что перевод там так себе. Но покупать не стал по другой причине.

Deleted
()
Ответ на: комментарий от Deleted

А за деньгами - я не знаю, к кому =)

За деньгами лучше устраиваться в банк, C++/Java или JS там часто нужны (сбертех, дойче, тиньков, альфа), но этот тред совсем не про зарабатывание денег. В твоей ситуации я бы не стал тратить время на посторонние вещи. Возвращайся как улизнёшь.

The Dragon Book

Да, в курсе его нахваливают, но, учитывая её толщину, я точно знаю, что если я и буду читать, то только избранные разделы.

dsxl
() автор топика
Ответ на: комментарий от menangen

Вот бы такой же бы курс, но для современных языков
Swift + LLVM

Изюминка темы в том, что для любого языка компилятор делается из одних и тех же частей. Для этой связки все принципы, о которых рассказывают в курсе, остаются в силе. По сути тебе нужно сделать парсер с помощью одного из генераторов (может быть даже найдётся и готовая грамматика для какого-нибудь ANTLR!) Потом выполнить семантический анализ и нагенерить кода, но не ассемблерного, а для LLVM. Как это всё работает рассказывают в курсе, за исключением LLVM, конечно, увы.

dsxl
() автор топика
Ответ на: комментарий от dsxl

этот тред совсем не про зарабатывание денег

Я понял. Это была ирония. Деньги в моём случае далеко не основное.

В твоей ситуации я бы не стал тратить время на посторонние вещи.

Я тоже так думаю.

Deleted
()
Ответ на: комментарий от dsxl

А вот вопрос личного плана: как ты к теме пришёл, с чего начался интерес?

Я вообще программированием заниматься не планировал, но так вышло, и, кроме того, вся моя осмысленная профессиональная деятельность связана с системщиной, в том или ином виде. Логично, что теория и практика компиляторов в определённый момент должна стать недостающим звеном.

Где-то после февраля я маякну.

Deleted
()
Последнее исправление: rht (всего исправлений: 1)
Ответ на: комментарий от Deleted

А вот вопрос личного плана: как ты к теме пришёл, с чего начался интерес

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

Особенно мне нравится один сайт: codingame.com, - там есть социальная составляющая: соревнования, лидерборды, ачивки, чат, форумы; приятный дизайн и задачи составлены с умом, не нужно гадать с форматом ввода-вывода. На выбор дают много языков, но есть класс задач (NP с ограничением по времени), в которых С и С++ явно лидируют. Писать на С мне нравится, но хочется более сильной системы типов. В принципе на том сайте С++ пользуется большей популярностью и он мог бы частично удовлетворить мои хотелки. Если окажется, что мой язык мечты требует слишком много сил на разработку, то придётся заняться крестами, ну а пока я не теряю надежды. Разработка компилятора это тоже своего рода задача.

dsxl
() автор топика
Ответ на: комментарий от menangen

Вот бы такой же бы курс, но для современных языков

Может тебе еще и глобус какой-нибудь другой, современной страны? Типичный яблокодер, блин.

anonymous
()
Ответ на: комментарий от dsxl

ну а пока я не теряю надежды

И это правильно! Ибо,

Надежда, - мой компас земной...

Моё «путь узбека» был немного другой. Описывать его я не стану, это займёт много времени. Потому как роз и фанфар было не много, а как раз наоборот.
И нужно ещё немножечко поработать. Пятница жеж! =)
Самое время для начинаний.

У меня сформировался стойкий интерес к различным узкоспециализированным системным штукам. Компилятор я не умею, приходится довольствоваться имеющимися средствами. Но они выручают не всегда.
Хобби, да. Я по работе, бывает, использую навыки, полученные «методом Левши». Хотя вполне мог бы и не делать этого, прямо никто не требует.
Но «горбатого могила исправит» - это как раз про меня.

Deleted
()
Ответ на: комментарий от Deleted

Есть мнение, что драгонбук безнадежно устарел.

Помню я проходил курс по компайлерам в универе...
1. лекция: узнайте что такое (f)lex
2. лекция: узнайте что такое yacc (bison)
3. лекция: вот вам спеки, пишите короче дерево, лучше на c++, ибо c геморно будет
4. вот вам месяц времени, пишите компилятор :)

Deleted
()
Ответ на: комментарий от Deleted

Помню я проходил курс по компайлерам в универе...

Я много чего проходил. По базам данных, помню, по 3Д моделированию. Договаривался с профессурой, чтобы иметь возможность приходить на их лекции. Им нравилось, что какой-то посторонний шкет хочет их слушать, а «свои» стремятся свалить.

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

Не знаю, может сейчас что-то поменялось.

Меня интересовала именно теория.

3Д моделированием так и не занимался, хотя идеи некоторые были. Даже в направлении ИБ и ИПВ.

Deleted
()
Ответ на: комментарий от menangen

При чем тут линь? Ты не врубаешься что курс по компиляторам - в том виде как сабж, без углубления - не связан ни с входным языком, ни с выходным, ни с языком реализации.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.