Здравствуйте, Kh_Oleg, Вы писали:
K_O>Что-то ты склонен все сильно упрощать. Я не говорю, что при конструкции end; невозможно показать все ошибки, я имел ввиду то, что при конструкции end ProcName; компилятор можно сделать проще при тех же возможностях по обнаружению ошибок.
Еще раз повторю, что если делать компиляторы с помощью генераторов компиляторов, то подобные возможности получаются автоматом вне зависимости от наличия имени метода в энде.
K_O>Кстати, и мне как программисту удобнее было бы видеть окончание процедуры как end ProcName; потому как тогда проще обнаружить лишний или недостающий end;
Скажем так, я согласен, что данное требование упростило бы чтение плохо отформатированного кода и кода с объемными конструкциями (написанного в плохом стиле).
Однако современные среды решают этот вопрос очень хорошо. В той же Студии есть автоматическое выравнивание, возможность отслеживания скобок (для С-подобных языков) и средства рефакторинга. В результате потребность в подобных вещах в общем-то отпадает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Ищи Яндексом, он учитывает морфологию русского языка, чего Google делать не умеет.
Да гугль вроде тоже учитвывает. Да и в Яндексе 53 ссылки. Явно не общепринятая терминология. По крайней мере в тех книжках по компиляторах что читал я такой терминалогии не встречалось.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, TheBeard, Вы писали:
TB>Вы неправы. Просто большая часть доступной литературы — по-английски. TB>Поищите словосочетание "operator precedence grammar" (именно в кавычках, TB>чтобы отсечь "правила предшествования операторов"). Мне попадался TB>русский перевод "грамматика с операторным предшествованием".
Возможно. В общем, это не важно.
TB>Такие TB>грамматики "проще", чем LL(k) и упоминаются в любом серьёзном курсе TB>конструирования компиляторов.
Я поглядел ту ссылку. Данный подход не пригоден для парсинга паскаля. Он, как я понял, рассчитан на парсинг выражений. Отсуюда и слово "оператор" в названии.
Ну, а учитывая что LL(1) регко реализуется рекурсивыным спуском и то что проблем в более сложных парсерах на сегодны нет, то вопрос об обработке ошибок в ЯП выглядит просто смешно.
ЗЫ
Кстати, эта реализация оберона выдает более чем одно сообщение об ошибке. Так что о чем речь не очень то ясно. Просто она своеобразно отображает ошибки (прямо в коде). Видимо это и сбивает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
VD>Я поглядел ту ссылку. Данный подход не пригоден для парсинга паскаля. Он, как я понял, рассчитан на парсинг выражений. Отсуюда и слово "оператор" в названии.
Пригоден. Я знаю, так как сам писал "учебно-тренировочный" парсер Паскаля (то ли лаба, то ли курсовик по формальным языкам — уже не помню).
Перекуём баги на фичи!
Re[9]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
K_O>>Кстати, и мне как программисту удобнее было бы видеть окончание процедуры как end ProcName; потому как тогда проще обнаружить лишний или недостающий end;
VD>Скажем так, я согласен, что данное требование упростило бы чтение плохо отформатированного кода и кода с объемными конструкциями (написанного в плохом стиле).
VD>Однако современные среды решают этот вопрос очень хорошо. В той же Студии есть автоматическое выравнивание, возможность отслеживания скобок (для С-подобных языков) и средства рефакторинга. В результате потребность в подобных вещах в общем-то отпадает.
То, что мы имеем умные среды — это очень хорошо и никто не спорит с тем, что эти фичи полезны и нужны. Но возлагать решение проблем языка на плечи среды — это не самый умный шаг. Язык следует проектировать так, чтобы программа на нем была читабельна в любом редакторе (я вот очень люблю в Far'e смотреть исходники) и никак не зависела от IDE.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Kh_Oleg, Вы писали:
K_O>То, что мы имеем умные среды — это очень хорошо и никто не спорит с тем, что эти фичи полезны и нужны. Но возлагать решение проблем языка на плечи среды — это не самый умный шаг. Язык следует проектировать так, чтобы программа на нем была читабельна в любом редакторе (я вот очень люблю в Far'e смотреть исходники) и никак не зависела от IDE.
Читабельность голого текста — это конечно, здорово. Но раскраска синтаксиса — существенно улучшает восприятие.
Поэтому эту фичу в виде плагинов добавляют в разные редакторы.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Здравствуйте, VladD2, Вы писали:
VD>>>А можно услышать твое определение компонента и компонентного подхода в производистве ПО?
СГ>>Зачем мое?
VD>Понятно. Значит дать не можешь.
Как это не могу дать? Я же дал. Просто оно не лично мое, а общепринятое.
VD>Что до КОП == ООП — это большое заблуждение. На С++ можно легко писать в ОО-стиле, но очень трудно писать в компонентном стиле.
КОП представляет собой ряд ограничений наложенных на ООП при его слиянии с модульностью, т.е КОП — это подмножество ООП + модульность. Поскольку С++ не является модульным, то он и не может поддерживать КОП.
Re[8]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
VD>Ну, хорошо хоть так. Вы бы в своем дистрибютиве заменили что ли. А то совсем нелогично. А этой среде логики и так нехватает.
Да не мой это дистрибутив. Я уважаемого info21 знаю не сильно больше чем Вы. Один раз, правда, я присутствовал на его докладе по теоретической физике в институте физических проблем, когда еще сам физиком-теоретиком в РАН работал. Кстати, доклад был посвящен тому как он с помощью BlackBox-а написал мега-крутую программу для вычисления Фейнмановских интегралов в теории возмущений квантовой теории поля. На сколько я помню, аналогичная программа написанная на Mathematica работала в миллион раз медленнее. Ключевым моментом было именно наличие в Component Pascal сборщика мусора (так как требовалось очень интенсивно работать с динамическими структурами данных), а также того что компиляция идет в родной машинный код, а не в код виртуальной машины (в то время никаких C# еще не было).
------------------------
Кстати, заменять букву "K" на "C" — небезопасно, поскольку "C" может оказаться уже занятой. Ведь комбинация Ctrl+C / Ctrl+V обычно используется для Copy/Paste.
СГ>Здравствуйте, serg_mo, Вы писали:
_>>Было бы неплохо ее получить. Ты бы хоть название ее сказал, можно было бы поискать.
СГ>Только что накопал микрософтовскую персональную страницу Шиперского: СГ>http://www.research.microsoft.com/users/cszypers/ СГ>Там в разделе публикаций есть ссылка на ту статью, о которой я говорил: СГ>
Component-oriented Programming: A refined variation on object-oriented programming. Clemens Szyperski. Oberon Tribune, 2:1, Oberon microsystems, Zurich, Switzerland. January 1996.
СГ>Прикол в том, что там дана таже самая битая ссылка!
Порылся у себя дома, нашел только бумажную распечатку статьи, электронной версии нет. Обратил внимание на дату: The Oberon Tribune, Vol 1, No 2, December 1995. А на сайте Шиперского дата January 1996. Странно, однако...
Re[9]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
VD>Однако современные среды решают этот вопрос очень хорошо. В той же Студии есть автоматическое выравнивание, возможность отслеживания скобок (для С-подобных языков) и средства рефакторинга. В результате потребность в подобных вещах в общем-то отпадает.
Ага. То-то нас постоянно просят в РеШарпере добавлять после "}" фиктивный комментарий с указанием к чему эта скобка относится.....
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, xvost, Вы писали:
X>Ага. То-то нас постоянно просят в РеШарпере добавлять после "}" фиктивный комментарий с указанием к чему эта скобка относится.....
На rsdn вот никто подобного не просил. Может потому что любителей создавать многоэкранные методы со сложной структурой здесь нет?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Как это не могу дать? Я же дал. Просто оно не лично мое, а общепринятое.
Ты свое дай. Своими словами и по русски. Ну, как ты его понимаешь сам.
VD>>Что до КОП == ООП — это большое заблуждение. На С++ можно легко писать в ОО-стиле, но очень трудно писать в компонентном стиле.
СГ>КОП представляет собой ряд ограничений наложенных на ООП при его слиянии с модульностью, т.е КОП — это подмножество ООП + модульность.
1. Часть никогда не может быть равна целому.
2. И в том, что КОП является ограниченным ООП ты тоже заблуждашся. Опять же в качесве примера приеду С++.
СГ> Поскольку С++ не является модульным, то он и не может поддерживать КОП.
1. СОМ создан на С++.
2. С++ не будучи модульным прекрасно поддерживает ООП. А по твоим словам КОП — это ограниченный ООП. Попробуй "ограничить" С++ и получить КОП. КОП — это другой подход.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>написанная на Mathematica работала в миллион раз медленнее.
За-то написать на ней это было в миллиарды раз проще. А то что медленнее оно и понятно. Компилятор вс. специализированный мнтерпретатор. А Мусорщик тут вообще не причем. На голых плюсах можно организовать очень эффектиные алгоритмы заема/освобождения памяти. Мусорщик не дает выигрыша в скорости. Он снимает отвественность за контроль памяти.
СГ>------------------------
СГ>Кстати, заменять букву "K" на "C" — небезопасно, поскольку "C" может оказаться уже занятой. Ведь комбинация Ctrl+C / Ctrl+V обычно используется для Copy/Paste.
А почему было не сделать кау у всех нормальных людей — F5/F9? Я еще не видел ни одной IDE которая бы не запустила проект под отладку при нажатии одной из этих клавиш.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Kh_Oleg, Вы писали:
K_O>То, что мы имеем умные среды — это очень хорошо и никто не спорит с тем, что эти фичи полезны и нужны.
Гы. Еще как спорят.
K_O> Но возлагать решение проблем языка на плечи среды — это не самый умный шаг.
Это не проблемы языка. Это проблемы криворуких программистов. Русский язык тоже в общем-то не причем в том, что не все пишут калиграфически красиво.
K_O> Язык следует проектировать так, чтобы программа на нем была читабельна в любом редакторе (я вот очень люблю в Far'e смотреть исходники) и никак не зависела от IDE.
А я не люблю фар, но дело не в этом. Хорошо написанная прграмма даже на Перле, даже в ноотпэде будет выглядеть нормально и читаться боее менее сносно. А хреново написанная и на обероне (вренее даже на нем в первую очередь) будет просто никакая. Ну, и код с подсветкой синтаксиса опять же читается лучше чем без оного при любом языке. Ты вон тоже в фаре код смотришь. Нибусь из-за колоррера.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, xvost, Вы писали:
X>Ага. То-то нас постоянно просят в РеШарпере добавлять после "}" фиктивный комментарий с указанием к чему эта скобка относится.....
Ну, есть люди которые пишут двадцати-оконные запутанные процедуры и для того чтобы найти концы хвостов им это просто необходимо. Зачем нужен рефакторинг им тоже не известно. Так что вам в РеШарпер нужно не фиктивные коментарии добавлять, а туториал интерактивный чтобы научить применять всю его мощь.
Кстати, не поделитесь как вы вторглись в студийный комплит-ворд? А то я вот тоже хочу для R# ма сделать такой мета-коплит, а там нужно неделю (а то и месяц) прокапаться пока поймешь что к чему.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, AndrewVK, Вы писали:
AVK>На rsdn вот никто подобного не просил. Может потому что любителей создавать многоэкранные методы со сложной структурой здесь нет?
Да есть, к сожалению.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Кодт, Вы писали:
К>Пригоден. Я знаю, так как сам писал "учебно-тренировочный" парсер Паскаля (то ли лаба, то ли курсовик по формальным языкам — уже не помню).
Интересно как? Там ведь явно написано безируется на приоретете операторов.
Плюс не вижу никакого выигрыша по срвнению с рекурсивным спуском.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
VD>Кстати, не поделитесь как вы вторглись в студийный комплит-ворд? А то я вот тоже хочу для R# ма сделать такой мета-коплит, а там нужно неделю (а то и месяц) прокапаться пока поймешь что к чему.
Пошли в аську — 20520141. Либо по е-мейлу.
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Здравствуйте, VladD2, Вы писали:
VD>Своими словами и по русски
ООП и Модульность — ортогональные понятия. Попытка соединить ООП и Модульность в одном флаконе, с неизбежностью приводят к появлению, того же самого COM или его аналогов. ООП может существовать само по себе, Модульность — тоже может существовать сама по себе, но чтобы они были вместе и одновременно — нужен COM или его аналоги, которые называются КОМПОНЕНТАМИ, а программирование в стиле ООП+Модульность называется Компонентно Ориентированным программированием — КОП. В тоже самое время в связке ООП+Модульность, само ООП не может остаться прежним, оно нуждается в некоторой модификации, а именно ОГРАНИЧЕНИИ. Вспомни что такое COM интерфейсы в терминологии С++ — это классы без членов-данных, а все члены-функции ВИРТУАЛЬНЫ. Другими словами, ограничение наложенное на ООП состоит в том, что МЕЖМОДУЛЬНОЕ наследование возможно только от АБСТРАКТНЫХ классов. С COM — все так в точности и обстоит, из DLL-лек мы можем импортировать именно только ИНТЕРФЕЙСЫ, а не сами классы — это ОГРАНИЧЕНИЕ НАЛОЖЕННОЕ НА ООП при его слиянии с МОДУЛЬНОСТЬЮ.
Если бы из DLL можно было бы импортировать не интерфейсы, а сами классы и от них наследоваться, то таким образом построенные системы не были бы МОДУЛЬНЫМИ — ведь в этом случае динамическая загрузка одного модуля (с определением какого-то класса) в память всегда должна была бы сопровождаться динамической загрузкой в память всех-всех-всех остальных модулей в которых находятся классы-предки того класса (загрузка в память класса обозначает загрузку в память всех-всех-всех классов предков). А в модульных системах такого безобразия быть не должно — там модуль загружается только тогда, когда вызывается какая-либо подпрограмма из этого модуля (т.е. простая декларация IMPORT StdLog; — еще не повод загрузить в память модуль StdLog, вот когда выполнение программы дойдет до точки StdLog.String("Здравствуй Мир!"); — вот тогда модуль StdLog будет загружен в память).
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
VD> На голых плюсах
А что не на ассемблере? Component Pascal для этого подходит лучше поскольку писать на нем можно гораздо быстрее и делать гораздо-перегораздо-переперегораздо меньшее количество ошибок, а самое главное — языку Component Pascal можно обучиться за неделю, а С++-су нужно обучаться несколько лет (Вы ведь не собираетесь предложить info21 — ведущему физику-теоретику, специалисту по квантовой теории поля приостановить свою науную деятельность на пару лет только для того чтобы освоить программирование на С++). На кой ляд использовать Си++? ПОВЫШЕНИЯ скорости исполнения на этой задаче он НЕ ДАЕТ — это специально проверялось специальными недоверчивыми программистами-студентами-аспирантами.