Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 15.05.11 03:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А> каждый программист должен уметь как минимум маленькие DSL-и писать

Не знаю, для меня этот навык не очевиден — за все время работы я ни разу не столкнулся с реальными внешними DSL (для которых требуется и парсинг и компиляция), а для внутренних это как-то ни к чему.
Re[4]: Цели и применение курсов "Компиляторы" и "ОС"
От: Аноним  
Дата: 15.05.11 09:23
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

А>> каждый программист должен уметь как минимум маленькие DSL-и писать

РМ>Не знаю, для меня этот навык не очевиден — за все время работы я ни разу не столкнулся с реальными внешними DSL (для которых требуется и парсинг и компиляция), а для внутренних это как-то ни к чему.

Ну как это "ни к чему"? Даже такой простейший внутренний DSL, как регвыры, и то парсить надо. Правда, парсинг — далеко не самое важное и интересное в компиляторах.

А уж компилировать надо любой внутренний DSL. Не интерпретировать же их?!? Тем более, что нет ничего проще чем кодогенерация, все другие варианты реализации DSL намного сложнее и ненадежнее.
Re[5]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 15.05.11 10:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну как это "ни к чему"? Даже такой простейший внутренний DSL, как регвыры, и то парсить надо.

А можете описать ситуацию, когда вам потребовались регулярные выражения и вы не смогли обойтись готовыми инструментами?
Мне с таким сталкиваться не доводилось. И даже более того, я стараюсь отучать студентов от постоянного изобретения велосипедов (изобретать последние они, похоже, умеют уже с рождения).

А>А уж компилировать надо любой внутренний DSL. Не интерпретировать же их?!?

А зачем компилировать internal (embedded) DSL? На то он и внутренний, что использует только возможности языка в который встроен. Т.е. его компиляцией занимается уже готовый компилятор.
Или вы понимаете под компиляцией что-то иное? Объясните, пожалуйста.
Re[4]: Цели и применение курсов "Компиляторы" и "ОС"
От: alpha21264 СССР  
Дата: 15.05.11 11:17
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

РМ>Здравствуйте, Аноним, Вы писали:


А>> каждый программист должен уметь как минимум маленькие DSL-и писать

РМ>Не знаю, для меня этот навык не очевиден — за все время работы я ни разу не столкнулся с реальными внешними DSL (для которых требуется и парсинг и компиляция), а для внутренних это как-то ни к чему.

Кха... Ну вот например САПР. Исходные данные приходят на неком языке (в виде текстового файла). И будь добер парсить.
https://sunveter.ru/uploads/posts/2016-06/1465378699_47.gif
Течёт вода Кубань-реки куда велят большевики.
Re[2]: Цели и применение курсов "Компиляторы" и "ОС"
От: Sorc17 Россия  
Дата: 15.05.11 11:45
Оценка: :))
Здравствуйте, LaptevVV, Вы писали:

LVV>Начинаю с классификации ПО. Потом виртуальные машины и интерпретаторы. Потом ассемблеры, загрузчики, линкеры, мейкеры, библиотекари. Отладчики и профайлеры. И только потом компиляторы. В ассемблерах они уже с конечными автоматами и грамматиками знакомятся — интерпретатор выражений же надо писать. И лабы — соответствующие. Виртуальная машина и ее интерпретатор, ассемблер, отладчик для нее же. А потом уже и компилятор в коды виртуальной машины. Все это — на С++ с использованием ООП, шаблонов и паттернов — на полную катушку. Очень хорошая практика для освоения нетривиальных вещей в программировании.


Если и делать дабы, то делать их надо на нормально языке, например на Java. Кстати весь код в последней версии Книга Дракона полностью переписан на Java. Нужно чтобы студент занимался языками программирования, а не боролся с ущербностью С++ в своих лабораторных.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
От: LaptevVV Россия  
Дата: 15.05.11 12:03
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Здравствуйте, LaptevVV, Вы писали:


LVV>>Начинаю с классификации ПО. Потом виртуальные машины и интерпретаторы. Потом ассемблеры, загрузчики, линкеры, мейкеры, библиотекари. Отладчики и профайлеры. И только потом компиляторы. В ассемблерах они уже с конечными автоматами и грамматиками знакомятся — интерпретатор выражений же надо писать. И лабы — соответствующие. Виртуальная машина и ее интерпретатор, ассемблер, отладчик для нее же. А потом уже и компилятор в коды виртуальной машины. Все это — на С++ с использованием ООП, шаблонов и паттернов — на полную катушку. Очень хорошая практика для освоения нетривиальных вещей в программировании.


S>Если и делать дабы, то делать их надо на нормально языке, например на Java. Кстати весь код в последней версии Книга Дракона полностью переписан на Java. Нужно чтобы студент занимался языками программирования, а не боролся с ущербностью С++ в своих лабораторных.

Насчет НОРМАЛЬНОГО языка можно много спорить. Почему тогда не на С#? Почему не на Компонентном паскале?
Они в этих лабах тренируются довольно сложные проги писать в ОО-стиле. Это в качестве продолжения курса ООП на С++.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Цели и применение курсов "Компиляторы" и "ОС"
От: Sorc17 Россия  
Дата: 15.05.11 12:30
Оценка:
Здравствуйте, LaptevVV, Вы писали:

S>>Если и делать дабы, то делать их надо на нормально языке, например на Java. Кстати весь код в последней версии Книга Дракона полностью переписан на Java. Нужно чтобы студент занимался языками программирования, а не боролся с ущербностью С++ в своих лабораторных.

LVV>Насчет НОРМАЛЬНОГО языка можно много спорить. Почему тогда не на С#? Почему не на Компонентном паскале?
LVV>Они в этих лабах тренируются довольно сложные проги писать в ОО-стиле. Это в качестве продолжения курса ООП на С++.

Можно и на C#, как и Java, он один из языков на которые уже давно перешли (переходят) даже провинциальные ВУЗы. Про компонентный паскаль не знаю. А именно Java, ещё и потому что, как я уже написал, самый главный учебник по языкам программирования и методам трансляции господина Ахо и господина Ульмана содержит Java код.

А по курсу ОС только Си. Потому что на нем написан код в самом главном учебнике Таненбаума и по совместительству ядро учебной операционной системы Minix.

С++ вообще нет места в этих отраслях. На нам писали бизнес софт за "не имением" Java и C# лет 10 назад, а на ООП хорошо ложатся только Контрагенты, Заказы и примеры про Лампочки и Машины из учебников. В случае ЯП нам нужен популярный инструмент (который знают/могут асилить студенты сходу) на котором мы можем быстро написать транслятор не заморачиваясь сборками мусора, указателями и вырвиглазным не интуитивным синтаксисом. В случае ядра ОС нам нужен родной язык на котором пишут ядра реальных ОС Linux, FreeBDS, Minix (внезапно ни одного ядра на С++).

Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[5]: Цели и применение курсов "Компиляторы" и "ОС"
От: Michael7 Россия  
Дата: 15.05.11 16:19
Оценка:
Здравствуйте, Sorc17, Вы писали:


S> В случае ядра ОС нам нужен родной язык на котором пишут ядра реальных ОС Linux, FreeBDS, Minix (внезапно ни одного ядра на С++).


Внезапно, ядро BeOS (и её клонов) написано на C++. Эта ОС так и не стала популярной, но совсем не по причине языка на котором написано ядро.
Re[5]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 16.05.11 08:49
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Кха... Ну вот например САПР. Исходные данные приходят на неком языке (в виде текстового файла). И будь добер парсить.

Я не работал с САПР-системами.
Если вам не сложно, то можно рассказать чуть подробнее? Какой-то пример в двух-трех приедложениях: что такое может прийти, как выглядит такой язык и почему нет для него готовых решений.
Буду очень признателен!
Re[3]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 16.05.11 09:21
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Если и делать дабы, то делать их надо на нормально языке, например на Java. Кстати весь код в последней версии Книга Дракона полностью переписан на Java. Нужно чтобы студент занимался языками программирования, а не боролся с ущербностью С++ в своих лабораторных.


Кстати очень хороший пример — язык, также как пример системы, также как состав задач полностью определяется целями курса!
Например, в качестве "наглядного пособия" для изучения конкретных механизмов ОС можно использовать Linux, Minix, WRK, Singularity, ... — и еще с десяток интересных вариантов. И для каждого из них я найду кучу доводов "за" и столько же "против". А ведь все опять-таки определяется целью.
Re[6]: Цели и применение курсов "Компиляторы" и "ОС"
От: alpha21264 СССР  
Дата: 16.05.11 09:43
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

РМ>Здравствуйте, alpha21264, Вы писали:


A>>Кха... Ну вот например САПР. Исходные данные приходят на неком языке (в виде текстового файла). И будь добер парсить.

РМ>Я не работал с САПР-системами.
РМ>Если вам не сложно, то можно рассказать чуть подробнее? Какой-то пример в двух-трех приедложениях: что такое может прийти, как выглядит такой язык и почему нет для него готовых решений.
РМ>Буду очень признателен!

Я занимался САПР-ами в области проектирования электроники (микросхем).
Обычно весь маршрут проектирования не покрывается одним продуктом.
Как минимум, логическое и физическое проектирование делается в разных программах (разных производителей).
Может найтись продукт, который хорошо умеет делать ровно ОДНУ операцию — например рассчет цепей питания.
И его нужно будет как-то присоединить к общему процессу.
Эти программы должны друг с другом как-то разговаривать (передавать друг другу данные).
Передаются они через текстовые файлы, формат которых описан и общедоступен (иногда за деньги).
Ну как html примерно. Такой способ связки программ называется UNUX-way.

Языки, на которых САПРы разговаривают друг с другом:
http://en.wikipedia.org/wiki/Category:EDA_file_formats

Тут они только упоминаются, но можно поискать в гугле подробное описание форматов.

Я, например, вот это парсил (описание в PDF приложено):
http://en.wikipedia.org/wiki/Standard_Delay_Format

Даже если маршрут проектирования покрывается одним производителем программ (например Cadence),
внутри он всё равно состоит из модулей, которые друг с другом разговаривают текстом.
https://sunveter.ru/uploads/posts/2016-06/1465378699_47.gif
Течёт вода Кубань-реки куда велят большевики.
Re[7]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 16.05.11 10:28
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Даже если маршрут проектирования покрывается одним производителем программ (например Cadence),

A>внутри он всё равно состоит из модулей, которые друг с другом разговаривают текстом.
И готового API для представления этого текста в виде некоей объектной модели или AST нету. Так?
Интересно.

Спасибо за информацию. Наметился некоторый простор для размышлений.
Re[6]: Цели и применение курсов "Компиляторы" и "ОС"
От: Аноним  
Дата: 16.05.11 10:53
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

А>>Ну как это "ни к чему"? Даже такой простейший внутренний DSL, как регвыры, и то парсить надо.

РМ>А можете описать ситуацию, когда вам потребовались регулярные выражения и вы не смогли обойтись готовыми инструментами?

Мне много раз приходилось реализовывать языки, аналогичные регулярным выражениям, но в чем-то отличные. Например, регулярные выражения над графами — тут проще велосипед изобрести (это достаточно тривиально) чем искать готовое решение.

А>>А уж компилировать надо любой внутренний DSL. Не интерпретировать же их?!?

РМ>А зачем компилировать internal (embedded) DSL? На то он и внутренний, что использует только возможности языка в который встроен.

Именно. Внутренний DSL транслируется в свой host-язык. Это и есть компиляция. Например, Пролог, встроенный в Лисп, это DSL, который транслируется сначала в другой DSL, более низкого уровня (аналогичный WAM), а затем этот WAM транслируется в Лисп.

PM> Т.е. его компиляцией занимается уже готовый компилятор.


Так там много уровней компиляции должно быть. Сначала — из DSL в сумму нескольких DSL уровнем пониже. Потом — еще в другие DSL. Потом — в язык-носитель. А там уж и его существующий компилятор докомпилит дальше, что осталось. Чем больше этих уровней трансляции, и чем проще и тупее каждый из уровней, тем легче такие DSL реализуются, и тем надежнее.

Посмотрите, например, сколько уровней трансляции в Boost::Spirit.

РМ>Или вы понимаете под компиляцией что-то иное? Объясните, пожалуйста.


Компиляция — это перевод из одного языка в другой. По определению.
Re[7]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 16.05.11 11:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Мне много раз приходилось реализовывать языки, аналогичные регулярным выражениям, но в чем-то отличные. Например, регулярные выражения над графами — тут проще велосипед изобрести (это достаточно тривиально) чем искать готовое решение.


А можно конкретный пример?

А> Компиляция — это перевод из одного языка в другой. По определению.

Обычно все-таки используется немного отличная терминология. В общем случае перевод с языка на язык — это трансляция. А компиляция — перевод с языка программирвоания в машинные коды.
Re[8]: Цели и применение курсов "Компиляторы" и "ОС"
От: Аноним  
Дата: 16.05.11 11:03
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

РМ>А можно конкретный пример?


Чего пример? DSL над графами?

А>> Компиляция — это перевод из одного языка в другой. По определению.

РМ>Обычно все-таки используется немного отличная терминология.

Обычно используется кем? В computer science этот термин используется именно в таком значении, всегда.

РМ> В общем случае перевод с языка на язык — это трансляция. А компиляция — перевод с языка программирвоания в машинные коды.


А машинные коды это типа как бы не язык уже?
Re: Цели и применение курсов "Компиляторы" и "ОС"
От: Tesh США  
Дата: 16.05.11 11:30
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

Можно посмотреть с другой стороны: если вы заинтересуете часть студентов предметом, то они сами найдут недостающую информацию. И возможно даже в будущем будут заниматься именно этим.
Те же, кому это не интересно — получат более широкое понимание как оно на самом деле работает.
Re[2]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 16.05.11 11:40
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Можно посмотреть с другой стороны: если вы заинтересуете часть студентов предметом, то они сами найдут недостающую информацию. И возможно даже в будущем будут заниматься именно этим.

T>Те же, кому это не интересно — получат более широкое понимание как оно на самом деле работает.

Это несомненно.
Однако, мне бы очень хотелось чтобы знания "как работает" были подкреплены хотябы примерами реального применения.
Здесь в ветке мне уже привели несколько интересных примеров как на практике применяются знания из области парсинга/трансляции (не связанные с разработкой только компиляции). В принципе от этих реальных задач тоже вполне можно отталкиваться пытаясь синтезировать общую цель предмета.
Re[9]: Цели и применение курсов "Компиляторы" и "ОС"
От: Романов Михаил Удмуртия https://mihailromanov.wordpress.com/
Дата: 16.05.11 17:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Чего пример? DSL над графами?

Да, хочется понять задачу и какое и почему использовалось решение.
Re: Цели и применение курсов "Компиляторы" и "ОС"
От: BulatZiganshin  
Дата: 16.05.11 17:59
Оценка:
Здравствуйте, Романов Михаил, Вы писали:

РМ>Коллеги, очень хотелось бы услышать ваши мнения по двум вопросам:


я не препод, но моё мнение такое:

1. эти курсы остались с тез прекрасных времён когда каждый второй программист писал свою собственную ос и компилятор. а в ссср — и каждые трое из двух
2. эти курсы полезны как пример, знакомящий с построением сложных систем (ОС) и сложными алгоритмами трансформации информации (компиляторы)

соответственно их можно заменить другими, дающими аналогичные знания, но более близкими к современным реалиям. например, HFT
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: Цели и применение курсов "Компиляторы" и "ОС"
От: Michael7 Россия  
Дата: 16.05.11 21:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Обычно используется кем? В computer science этот термин используется именно в таком значении, всегда.


Исторически, всё-таки, первой компиляцией было именно подстановка вместо слов кодов машинного языка. Компиляция. Хотя сейчас да, за рубежом в Computer Science компиляция — это фактически тоже самое, что и трансляция. У нас эти термины различались.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.