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
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.