| Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 12.11.04 14:15 | |
| Оценка: | 79 (12) +4 -1 | |
| В предыдущих дискуссиях постоянно идёт передёргивание — обсуждаем фичи то одного Оберона, то другого, то третьего (BlackBox, BlueBottle, конь в вакууме). Причём переходы с одного на другой рассогласовываются. Только что обсуждали, скажем, что закрывать монопольно открытые файлы нужно — и опаньки, оказывается, это ВЫ про BlackBox говорите, а МЫ-то — про Оберон вообще (в котором нет такого понятия, как монопольно открытый файл). Таких штучек можно насчитать достаточное количество. О чём это говорит? О низкой культуре дискуссии? — И об этом тоже, конечно. Но главное — о том, что нет Стандарта на язык. Понимаете, это всё равно, что выдавать глюки BCB за дефекты С++ вообще. И потом до хрипоты спорить, есть ли вообще этот глюк (потому что комплект багофич дебилдера отличается от комплекта багофич иваси). Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Даже не в реализациях, а в диалектах языка. А то и не в диалектах, а самостоятельных языках. Вот такое у меня сложилось ИМХО. Специалисты по Оберону (Оберонам?), поправьте если это не так. Перекуём баги на фичи! |
| Re: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 12.11.04 15:21 | |
| Оценка: | ![]() | |
| Здравствуйте, Кодт, Вы писали: К>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Даже не в реализациях, а в диалектах языка. А то и не в диалектах, а самостоятельных языках. Верно — в самостоятельных языках объединенных одной идеологией постороения модульных расширяемых систем, ну и одним базовым синтаксисом... Каждый из этих самостоятельных языков описывается очень компактно: синтаксис как правило убирается на одной странице, а семантика на нескольких десятках страницах (20-30). Оригинальная ОС Оберон и оригинальный язык Оберон (1985) являются прародителями всего этого многообразия. Вас смутило то, что разных оберон-языков и разных оберон-систем много; и Вы это многообразие назвали хаосом? Про то как были созданы самая первая ОС Оберон и самый первый язык Оберон: Никлаус Вирт "Проектирование системы с нуля" http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 12.11.04 15:27 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Кодт, Вы писали: К>>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Даже не в реализациях, а в диалектах языка. А то и не в диалектах, а самостоятельных языках. СГ>Верно — в самостоятельных языках объединенных одной идеологией постороения модульных расширяемых систем, ну и одним базовым синтаксисом... Каждый из этих самостоятельных языков описывается очень компактно: синтаксис как правило убирается на одной странице, а семантика на нескольких десятках страницах (20-30). Оригинальная ОС Оберон и оригинальный язык Оберон (1985) являются прародителями всего этого многообразия. Вас смутило то, что разных оберон-языков и разных оберон-систем много; и Вы это многообразие назвали хаосом? Имхо, Кодт хотел сказать, что нет реального стандарта, а есть просто число реализаций по сути схожих, а абсолюта аля ANSI/ISO C++ нету СГ>Про то как были созданы самая первая ОС Оберон и самый первый язык Оберон: СГ>Никлаус Вирт "Проектирование системы с нуля" СГ>http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm Ну а вот это совсем тут не в тему (хоть и Вологда |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 12.11.04 15:51 |
| Здравствуйте, Курилка, Вы писали: К>Имхо, Кодт хотел сказать, что нет реального стандарта, а есть просто число реализаций по сути схожих, а абсолюта аля ANSI/ISO C++ нету Разных оберонов много, на какой именно из них нужен стандарт? Oberon, Oberon-2, Active Oberon, Component Pascal, и т.д. и т.п. — совершенно разные языки. На каждый из них в отдельности можно завести стандарт, но на них все один стандарт — невозможно, они же разные. |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Курилка | http://kirya.narod.ru/ |
| Дата: | 12.11.04 15:55 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Курилка, Вы писали: К>>Имхо, Кодт хотел сказать, что нет реального стандарта, а есть просто число реализаций по сути схожих, а абсолюта аля ANSI/ISO C++ нету СГ>Разных оберонов много, на какой именно из них нужен стандарт? Oberon, Oberon-2, Active Oberon, Component Pascal, и т.д. и т.п. — совершенно разные языки. На каждый из них в отдельности можно завести стандарт, но на них все один стандарт — невозможно, они же разные. Сергей, блин, ты читай, что тебе пишут — проблема в том, что нет стандарта, а есть просто сборище похожих языков, соответственно есть только чихарда и нет печки, от которой плясать можно. |
| Re: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 12.11.04 15:56 | |
| Оценка: | 9 (2) | |
| Здравствуйте, Кодт, Вы писали: К>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. Я тут уже в одной из дискуссий OBERON??????????????????????? тоже так же отвечал, но уважаемые оппоненты совершенно не принимают этот довод. К>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Да, конечно! Абсолютно так и есть! В книге Кенига и Му описание языка С на 15 страницах уместилось. Можно еще значительно короче написать. Но это ж только описание основной семантики языка. А в стандарте ж прописаны масса технических деталей, которые не позволяют разночтений! И это ИМХО абсолютно правильно! Наши программисты — самые программистые программисты в мире! | |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndreyFedotov | |
| Дата: | 12.11.04 16:00 | |
| Оценка: | 6 (1) +2 | |
| Здравствуйте, Сергей Губанов, Вы писали: Вы это многообразие назвали хаосом? Во-первых: Такое же точно многообразие в других языках ты сам называешь хаосом Во-вторых: Для того, что бы изучить Оберон для трёх систем потребуется прочесть книгу по бащовым возможностям оберон (80 страниц), книгу по объектным возможностям оберон (ещё 80 страниц), книгу по базовым библиотекам для данной системы (а это для хоть сколько-нибудь сложной системы — ещё минимум страниц 300), итого: примерно 400-500 страниц. И всё это ДЛЯ КАЖДОЙ системы — так как стандарта нет — то и изучать это придётся заного — в противном случае элементарно наделать ошибок в программе из-за отличия в клонах технологии. Итого для того что бы только-только разобраться с ЯЗЫКОМ — даже на с API Оберона для трёх платформ — потребуется прочесть 1200-1500 страниц. В то время, как для C++ для этого достаточно прочесть только 750 страниц — практически при любом количестве платформ. А если речь идёт о базовых возможностях, без деталей и тонкостей — то и того меньше — страниц 300. Примерно та же динамика для C# — правда он пока только на одной платформе. И как после этого можно говорить о преимуществах оберона или о его краткости? |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 12.11.04 16:20 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Верно — в самостоятельных языках объединенных одной идеологией постороения модульных расширяемых систем, ну и одним базовым синтаксисом... Каждый из этих самостоятельных языков описывается очень компактно: синтаксис как правило убирается на одной странице, а семантика на нескольких десятках страницах (20-30). Оригинальная ОС Оберон и оригинальный язык Оберон (1985) являются прародителями всего этого многообразия. Вас смутило то, что разных оберон-языков и разных оберон-систем много; и Вы это многообразие назвали хаосом? Да, именно это многообразие и есть хаос. Начиная с того, что изучать их становится сложно — общий знаменатель чересчур мал, а специфика каждого ответвления требует отдельных разговоров. Подобное разнообразие можно наблюдать разве что в скриптовых языках, заточенных под конкретную платформу (например, разные бейсики в эпоху PDP-11 и Z80) и специализированных диалектах Си для слабых микроконтроллеров. От платформы к платформе язык меняться не должен! И базовые библиотеки — тоже не должны. Всё, что специфично для данной платформы, идёт как добавка. Иначе не решить вопросы повторного использования кода — и даже повторного использования опыта! Вот, например, язык Форт и Форт-системы. У них настолько простая идеология и настолько компактное ядро, что можно делать уникальные системы, как блины печь. По большому счёту, у Форта даже синтаксиса нет. Но зачем-то ещё в 1979 году рабочая группа FIG (forth interest group) родила стандарт Форт-системы. Или ответвления UNIX, несовместимые между собой — в итоге привели к соглашению о кроссплатформенном API — POSIX. Перекуём баги на фичи! |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | buriy | http://www.buriy.com/ |
| Дата: | 12.11.04 16:26 | |
| Оценка: | +1 ![]() | |
| Здравствуйте, LaptevVV, Вы писали: LVV>Да, конечно! Абсолютно так и есть! В книге Кенига и Му описание языка С на 15 страницах уместилось. Можно еще значительно короче написать. Но это ж только описание основной семантики языка. А вот эту книгу надо бы Вирту показать, чтобы он всякие свои супер-языки не придумывал /bur | |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 12.11.04 16:37 |
| Здравствуйте, AndreyFedotov, Вы писали: AF>Во-вторых: Для того, что бы изучить Оберон для трёх систем А зачем Вам 3 РАЗНЫХ системы? Программы между ними НЕПЕРЕНОСИМЫ, они на РАЗНЫХ языках. Это все равно что в качестве трех систем взять Windows, UNIX, Mac и пытаться их учить все сразу. Берите только какую-нибудь одну систему и изучайте. |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 12.11.04 16:45 |
| Здравствуйте, LaptevVV, Вы писали: LVV>Здравствуйте, Кодт, Вы писали: К>>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. LVV> LVV>Я тут уже в одной из дискуссий OBERON??????????????????????? тоже так же отвечал, но уважаемые оппоненты совершенно не принимают этот довод. Каждый конкретный оберон описывается своим Language Report. "Оберон" в этом смысле есть собирательное обозначение для всех этих РАЗНЫХ языков, для КАЖДОГО из них можно создать свой персональный СТАНДАРТ. А ОДНОГО стандарта НЕЛЬЗЯ — это все равно что на Си/Си++/C#/Java потребовать ОДИН стандарт. Си/Си++/C#/Java — все разные. На каждый из них можно написать свой стандарт. Но на все эти 4 языка одного стандарта быть не может — разные они. Абсолютно точно также: Oberon/Active Oberon/Component Pascal — это тоже РАЗНЫЕ абсолютно непереносимые друг в друга языки. Ну неужели не понятно? Какой еще единый стандарт??? |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 12.11.04 16:52 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, AndreyFedotov, Вы писали: AF>>Во-вторых: Для того, что бы изучить Оберон для трёх систем СГ>А зачем Вам 3 РАЗНЫХ системы? Программы между ними НЕПЕРЕНОСИМЫ, они на РАЗНЫХ языках. Это все равно что в качестве трех систем взять Windows, UNIX, Mac и пытаться их учить все сразу. Берите только какую-нибудь одну систему и изучайте. Берете QT или wxWidgets в руки, изучаете С++ и получаете переносимую систему. ... << RSDN@Home 1.1.4 beta 3 rev. 185>> ... <<Winamp is playing "Silence">> ![]() |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | LaptevVV rsdn | http://vk.com/id59893040 |
| Дата: | 12.11.04 16:55 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Си/Си++/C#/Java — все разные. На каждый из них можно написать свой стандарт. Но на все эти 4 языка одного стандарта быть не может — разные они. Ну так на них и стандартвы разные СГ>Абсолютно точно также: Oberon/Active Oberon/Component Pascal — это тоже РАЗНЫЕ абсолютно непереносимые друг в друга языки. Ну неужели не понятно? Какой еще единый стандарт??? Ну так хоть на один сделайте стандарт, а потом уж спорьте. Получится, уверяю вас, не менее 500 страниц — я это уже говорил. Наши программисты — самые программистые программисты в мире! | |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 12.11.04 16:55 | |
| Оценка: | 19 (2) +6 | |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 12.11.04 17:05 | |
| Оценка: | 8 (4) +7 ![]() | |
| Здравствуйте, Сергей Губанов, Вы писали: AF>>Во-вторых: Для того, что бы изучить Оберон для трёх систем СГ>А зачем Вам 3 РАЗНЫХ системы? Программы между ними НЕПЕРЕНОСИМЫ, они на РАЗНЫХ языках. Это все равно что в качестве трех систем взять Windows, UNIX, Mac и пытаться их учить все сразу. Берите только какую-нибудь одну систему и изучайте. Беру язык С++, какой-нибудь кроссплатформенный компилятор (например, GCC), документацию по POSIX и какому-нибудь кроссплатформенному оконному фреймворку (например, Zinc, мать его за ногу, повбывав бы!). Всё! Я готов программировать хоть под Мак, хоть под Коноплю. Или беру язык Fortran-77, и пишу математическую библиотеку. Которой смогут пользоваться по всему миру на любой платформе — от IBM 360 до IBM PC. Это — потому что стандарт. Перекуём баги на фичи! |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 12.11.04 17:14 |
| Здравствуйте, Mamut, Вы писали: M>Оппонент Оберона: "Покажите мне преимущества в том-то и том-то" M>Защитник Оберона: "Ну вот, в Обероне-2 это можно, вот вам, например, код на Компонент Паскале" M>ОО: "Это не решение, можно ли вот так..?" M>ЗО: "Без проблем, вот еще Оберон делает так..." M>ОО: "А как же вот это...?" M>ЗО: "Вы мне тут не путайте Компонент Паскаль с Обероном. Я вам даже не Про Оберон-2 говорю, а про Актив Оберон" Во-во. Это я про качество дискуссии. И самая засада, что невозможно сконцентрироваться. Это всё равно, что о языках семейства Си говорить. А их, блин, не меньше чем Оберонов! C K&R C для разных микроконтроллеров (как правило, на основе K&R) C90 C99 Objective C (жутковатая помесь Си со Смолтоком) C++ (первая редакция языка, где не было всяких разных фич) C++ (вторая редакция — современная) Java JavaScript Tcl Csh D C# Кого ещё забыл? Перекуём баги на фичи! |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | GlebZ | |
| Дата: | 12.11.04 17:16 |
| Здравствуйте, Кодт, Вы писали: К>Здравствуйте, Сергей Губанов, Вы писали: К>От платформы к платформе язык меняться не должен! И базовые библиотеки — тоже не должны. Всё, что специфично для данной платформы, идёт как добавка. К>Иначе не решить вопросы повторного использования кода — и даже повторного использования опыта! К>Вот, например, язык Форт и Форт-системы. У них настолько простая идеология и настолько компактное ядро, что можно делать уникальные системы, как блины печь. По большому счёту, у Форта даже синтаксиса нет. Но зачем-то ещё в 1979 году рабочая группа FIG (forth interest group) родила стандарт Форт-системы. Опаньки, что то я не поял. А собственно не синтаксис форта и является его идеологией и позволяет построить компактное и эффективное ядро? А спецификация была на мотив Oberon, короткая. Только его идеология, к сожалению, сильно устарела. Ее в основном можно сравнивать только с языками существующими в 79 году. Если глупость срубил, извини. Фанател от форта давным-давно. С уважением, Gleb. |
| Re[5]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Mamut | http://dmitriid.com/ |
| Дата: | 12.11.04 17:23 |
| Re: Мой молоток самый красный - мой ответ на эту демагогию | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | peterbes | |
| Дата: | 12.11.04 17:39 | |
| Оценка: | 62 (4) +1 | |
| Здравствуйте, Кодт, Вы писали: Крышей все поехали. Гнать лабуду уже стало модно, можно даже за умного сойти в этих идиотских дискуссиях. Оставте вы в покое, оберон и васик вкупе с асмом и машинными кодами, люди будут выбирать тот язык который им в настоящий момент удобен. Хотите с Виртами на равных общаться — гоните свою философию. Эпигоны под ваши гениальные теории язык сбацают, десяток энтузиастов язык соорудят, а потом полмиллиона программеров будут головой об стенку колотиться и кричать — "Аццтой", но все же надеюсь что не все. зы вменяемые люди голосуют ногами а не глоткой |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 12.11.04 17:45 |
| Здравствуйте, GlebZ, Вы писали: К>>Вот, например, язык Форт и Форт-системы. У них настолько простая идеология и настолько компактное ядро, что можно делать уникальные системы, как блины печь. По большому счёту, у Форта даже синтаксиса нет. Но зачем-то ещё в 1979 году рабочая группа FIG (forth interest group) родила стандарт Форт-системы. GZ>Опаньки, что то я не поял. А собственно не синтаксис форта и является его идеологией и позволяет построить компактное и эффективное ядро? А спецификация была на мотив Oberon, короткая. Только его идеология, к сожалению, сильно устарела. Ее в основном можно сравнивать только с языками существующими в 79 году. GZ>Если глупость срубил, извини. Фанател от форта давным-давно. Ха! Весь синтаксис форта сводится к тому, что пробел, как правило, является разделителем. Весь лексический анализ сводится к тому, чтобы прочитать входной поток до разделителя. Например,
Ну в общем, да, синтаксис входит в идеологию. Перекуём баги на фичи! |
| Re[2]: Мой молоток самый красный - мой ответ на эту демагоги | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | GlebZ | |
| Дата: | 12.11.04 18:48 |
| Здравствуйте, peterbes, Вы писали: P>Здравствуйте, Кодт, Вы писали: P>Крышей все поехали. Гнать лабуду уже стало модно, можно даже за умного сойти в этих идиотских дискуссиях. P>Оставте вы в покое, оберон и васик вкупе с асмом и машинными кодами, люди будут выбирать тот язык который им в настоящий момент удобен. P>Хотите с Виртами на равных общаться — гоните свою философию. Эпигоны под ваши гениальные теории язык сбацают, десяток энтузиастов язык соорудят, а потом полмиллиона программеров будут головой об стенку колотиться и кричать — "Аццтой", но все же надеюсь что не все. Если бы не было этих десятков энтузиастов, то мы бы так и делали каменные топоры и ходили бы в шкурах. А если бы небыло полмиллиона программеров, которые колотятся о стенку рабочим инструментом и кричат "Аццтой" или наоборот, я бы со скуки сдох. P>зы вменяемые люди голосуют ногами а не глоткой Безусловное право каждого человека. Точно так же как и безусловное право каждого человека читать данные флеймы. С уважением, Gleb. |
| Re[5]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Зверёк Харьковский | |
| Дата: | 12.11.04 20:06 |
| Здравствуйте, Кодт, Вы писали: К>Кого ещё забыл? Перлушку! Родимого! сам слушаю и вам рекомендую: 06 — We Use The Pain FAQ — це мiй ай-кью! | |
| Re: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 12.11.04 21:26 | |
| Оценка: | 4 (2) +1 | |
| Re: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 15.11.04 07:24 | |
| Оценка: | +1 | |
| Здравствуйте, Кодт, Вы писали: К>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. К>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. В приличном обществе подобные утверждения, как правило, аргументируются. Вот, мол, так и так в этом места описание Оберона допускает разночтения, а в C++ смотрите как все четко прописано. (Это о культуре дискуссии, а не по существу, даже в стандарте Ады имеются неоднозначности.) |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 15.11.04 07:55 |
| Здравствуйте, AndreyFedotov, Вы писали: AF>Для того, что бы изучить Оберон для трёх систем потребуется прочесть книгу по бащовым возможностям оберон (80 страниц), книгу по объектным возможностям оберон (ещё 80 страниц), книгу по базовым библиотекам для данной системы (а это для хоть сколько-нибудь сложной системы — ещё минимум страниц 300), итого: примерно 400-500 страниц. И всё это ДЛЯ КАЖДОЙ системы — так как стандарта нет — то и изучать это придётся заного — в противном случае элементарно наделать ошибок в программе из-за отличия в клонах технологии. Итого для того что бы только-только разобраться с ЯЗЫКОМ — даже на с API Оберона для трёх платформ — потребуется прочесть 1200-1500 страниц. В то время, как для C++ для этого достаточно прочесть только 750 страниц — практически при любом количестве платформ. А если речь идёт о базовых возможностях, без деталей и тонкостей — то и того меньше — страниц 300. Для того, что бы разобраться с языком достаточно прочитать "сообщение о языке". Это 18 страниц для Оберона, 25 для Оберона-2, 35 для Component Pascal. |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Privalov | |
| Дата: | 15.11.04 09:12 |
| Здравствуйте, Трурль, Вы писали: Т>Для того, что бы разобраться с языком достаточно прочитать "сообщение о языке". Это 18 страниц для Оберона, 25 для Оберона-2, 35 для Component Pascal. А я почему-то думал, что нужно пару-тройку стандартных алгоритмов попробовать сделать, основываясь, разумеется, на "сообщении". |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndreyFedotov | |
| Дата: | 15.11.04 11:33 |
| Здравствуйте, Трурль, Вы писали: К>>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. К>>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Т>В приличном обществе подобные утверждения, как правило, аргументируются. Вот, мол, так и так в этом места описание Оберона допускает разночтения, а в C++ смотрите как все четко прописано. (Это о культуре дискуссии, а не по существу, даже в стандарте Ады имеются неоднозначности.) Хорошо. Составь описание языка уровня Оберона или Паскаля, на пару страниц — так, что бы оно было полным и не допкскало разночтений. |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | bkat | |
| Дата: | 15.11.04 12:39 | |
| Оценка: | +1 | |
| Здравствуйте, Трурль, Вы писали: Т>Здравствуйте, Кодт, Вы писали: К>>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. К>>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Т>В приличном обществе подобные утверждения, как правило, аргументируются. Вот, мол, так и так в этом места описание Оберона допускает разночтения, а в C++ смотрите как все четко прописано. (Это о культуре дискуссии, а не по существу, даже в стандарте Ады имеются неоднозначности.) Ты слишком много хочешь от форума Подобные дискуссии могут сподвигнуть кого-то на написание такого труда, но тут на форуме этого ожидать не стоит. |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 15.11.04 15:32 |
| Здравствуйте, AndreyFedotov, Вы писали: AF>Здравствуйте, Трурль, Вы писали: К>>>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. К>>>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Т>>В приличном обществе подобные утверждения, как правило, аргументируются. Вот, мол, так и так в этом места описание Оберона допускает разночтения, а в C++ смотрите как все четко прописано. (Это о культуре дискуссии, а не по существу, даже в стандарте Ады имеются неоднозначности.) AF> Хорошо. Составь описание языка уровня Оберона или Паскаля, на пару страниц — так, что бы оно было полным и не допкскало разночтений. Еще раз: Одну-две страницы занимает не описание языка, а описание синтаксиса. Описание языка занимает 20-40 страниц. Ссылки на эти описания многократно приводились: Component Pascal (перевод на русский язык) http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm Oberon-2 (перевод на русский язык) http://www.uni-vologda.ac.ru/oberon/o2rus.htm Language Report's нескольких других оберонов (на английском языке): http://www.oberon.ethz.ch/compiler/index.html#report |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 15.11.04 16:28 | |
| Оценка: | +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Еще раз: Одну-две страницы занимает не описание языка, а описание синтаксиса. Описание языка занимает 20-40 страниц. Ссылки на эти описания многократно приводились: СГ>Component Pascal (перевод на русский язык) http://www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm СГ>Oberon-2 (перевод на русский язык) http://www.uni-vologda.ac.ru/oberon/o2rus.htm СГ>Language Report's нескольких других оберонов (на английском языке): http://www.oberon.ethz.ch/compiler/index.html#report Спасибо. Сергей, а ты можешь взять на себя труд — составить (или дать ссылки на) перечень расхождений между Oberon, Oberon-2, Component Pascal, а также воплощениями — BlackBox, BlueBottle и т.д.? Чтобы, во-первых, народ был в курсе, а во-вторых, можно было говорить в едином смысловом пространстве — а не в множестве языков, породнённых близким синтаксисом. Перекуём баги на фичи! |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 15.11.04 20:29 |
| Re: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Dervish | http://www.dervish.ru |
| Дата: | 16.11.04 00:27 | |
| Оценка: | 1 (1) ![]() | |
| Здравствуйте, Кодт, Вы писали: К>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. К>А описание Оберона, уместившееся на пару страниц, как раз и обеспечивает такой хаос в реализациях. Даже не в реализациях, а в диалектах языка. А то и не в диалектах, а самостоятельных языках. Сорри за офтопик, но мне хотелось бы привести пример ещё одного стандарта. Он существенно отличается и от стандарта С++ и от стандарта Оберона, возможно, кому-то он покажется интересным. Дома в архивах у меня где-то валяется книжка под названием "Пересмотренное сообщение об Алголе-68". Это полупереводная книга, на каждом развороте одна страница приведена в языке оригинала, по английски, а вторая — по русски, переведена. Друзья, читать это просто невозможно! Впрочем, вы можете посмотреть сами, я нашёл эту книгу в интернете. Начинать лучше с оглавления. Могу сразу сказать, что нулевую главу можно не смотреть. Там всё относительно просто. Самое интересное начинается в последующих главах. Например: 3. Clauses 5. Units 7. Modes and nests Самое интересное, каждое слово в отдельности понимаю. А когда начинаю объединять в предложения, смысл теряется. Водка "Табуретовка". Почувствуйте себя Буратиной! В общем, приятного просмотра. ... << RSDN@Home 1.1.4 beta 3 rev. 219>> |
| Re[5]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 16.11.04 08:38 | |
| Оценка: | 21 (2) | |
| Здравствуйте, Кодт, Вы писали: К>Сергей, а ты можешь взять на себя труд — составить (или дать ссылки на) перечень расхождений между Oberon, Oberon-2, Component Pascal, а также воплощениями — BlackBox, BlueBottle и т.д.? К>Чтобы, во-первых, народ был в курсе, а во-вторых, можно было говорить в едином смысловом пространстве — а не в множестве языков, породнённых близким синтаксисом. Несколько ссылок могу дать, а сам написать — тоже могу, но только когда это произойдет, я пока сам не знаю. "Различия между языками Oberon и Oberon-2" Ханспетер Мессенбок, Никлаус Вирт (1995) http://www.uni-vologda.ac.ru/oberon/infoart/differ.htm "От Модулы к Оберону" Никлаус Вирт http://www.uni-vologda.ac.ru/oberon/infoart/fromm2o.htm "Отличия Компонентного Паскаля от Паскаля" Из документации к системе BlackBox, приложение В; http://www.inr.ac.ru/~info21/cpascal/otliqija_cp_ot_pascal.htm |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 16.11.04 10:28 | |
| Оценка: | ![]() | |
| Здравствуйте, Dervish, Вы писали: D>Дома в архивах у меня где-то валяется книжка под названием "Пересмотренное сообщение об Алголе-68". Это полупереводная книга, на каждом развороте одна страница приведена в языке оригинала, по английски, а вторая — по русски, переведена. D>Друзья, читать это просто невозможно! Насколько я помню, вполне ничего себе книжечка. Читается посложнее чем "Основы математического анализа", но полегче чем "Введение в теорию категорий и функторов" |
| Re[6]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 16.11.04 16:05 | |
| Оценка: | 9 (2) +1 | |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>"Различия между языками Oberon и Oberon-2" Ханспетер Мессенбок, Никлаус Вирт (1995) СГ>http://www.uni-vologda.ac.ru/oberon/infoart/differ.htm Подход к реализации методов: 1) они вынесены за пределы объявления типа — избавляемся от концепции класса — спорно, но интересно 2) выглядят как инфиксная нотация — симпатичный синтаксический ход 3) обязательный полиморфизм — ну есть и есть, бог с ним. Однако... Цитата: (касается того, что левый операнд явно именуется, а доступ к его членам квалифицируется). У меня сразу же возникает вопрос: а можно ли определять ассоциированную процедуру в другом модуле? Если да, то появляется очень затейливый скрытый механизм — реализация виртуального вызова. Допустим, у нас есть тип Base и наследник Derived, и ассоциированный с ними перекрытый метод Method. 1) проблема с загрузкой. 2) сложности в реализации и стоимость виртуального вызова 1) Раскидаем работу с ними по разным модулям
Поскольку модуль TestDerivedMethod в явном виде нам нигде не потребовался, то рантайм может просто не догадаться его подцепить, и мы вызовем TestBaseMethod.Method. 2) Вызывая object.Method(...), мы так или иначе должны выполнить поиск наиболее подходящего, на основе динамического типа object. Можно сказать так, что в программе есть функция
В большинстве ООП-языков эту функцию декомпозируют, вводя таблицы виртуальных функций как принадлежности динамического типа (класса или даже отдельных объектов).
Хотя можно и по-другому:
По всей видимости, это больше подходит для Оберона, т.к. в точке определения (Object)Method известно всё необходимое, чтобы создать такой слот. И всё упирается лишь в то, чтобы этот метод попал ещё и в слоты (Parent)Method, (GrandParent)Method и т.д. — то есть то, о чём я написал под номером (1). Теперь посмотрим на накладные расходы. С помощью Vmt — мы получаем таблицу за O(1), поскольку это принадлежность динамического типа данного объекта. Далее получаем конкретный метод за O(1) | O(log N_methods) | O(N_methods) — выполняя поиск в таблице (по индексу либо по имени — например, в скриптовых языках или дисп-интерфейсе). С помощью Slot — за O(1) мы получаем эту таблицу. А дальше — самое интересное... Пронумеровать типы мы не можем (хотя бы потому, что верхняя граница неизвестна), так что поиск по индексу отпадает. Двоичный поиск тоже, похоже, не пройдёт (тут надо подумать, но скорее всего, никак: в дереве наследования проблематично вводить порядок). Остаётся линейный поиск, причём не сравнения, а проверки dynamic_cast: можно ли привести тип объекта к типу, заявленному в очередной записи таблицы. Перекуём баги на фичи! |
| Re[7]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 16.11.04 16:25 |
| Здравствуйте, Кодт, Вы писали: К>У меня сразу же возникает вопрос: а можно ли определять ассоциированную процедуру в другом модуле? Ответ простой — нет нельзя. Определение типа и связанных с этим типом процедур задается внутри одного и того же модуля. |
| Re[8]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 16.11.04 17:11 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Здравствуйте, Кодт, Вы писали: К>>У меня сразу же возникает вопрос: а можно ли определять ассоциированную процедуру в другом модуле? СГ>Ответ простой — нет нельзя. Определение типа и связанных с этим типом процедур задается внутри одного и того же модуля. То есть, фактически, тип = это определение его структуры + определение ассоциированных процедур. И всё определение целиком должно умещаться в один модуль. Прокомментируй, пожалуйста. Кого она ставит в затруднение? Пользователя? Компилятор? По большому счёту, новых проблем это создавать не должно: ведь компилятор должен разруливать перекрёстные связи между несколькими определениями функций, идущих подряд. Здесь задача примерно того же рода. И, например, компиляторы C++, Java, C# с ней справляются. Например, выполняют два прохода — сперва собирают объявления типов и сигнатуры процедур, а затем обслуживают определения процедур. Или же имеется в виду нечто иное? Перекуём баги на фичи! |
| Re[9]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 17.11.04 06:27 |
| Здравствуйте, Кодт, Вы писали: К>У меня сразу же возникает вопрос: а можно ли определять ассоциированную процедуру в другом модуле? У меня тоже возникал такой вопрос. Интересный язык получился бы. К> К>Прокомментируй, пожалуйста. Кого она ставит в затруднение? Пользователя? Компилятор? К>По большому счёту, новых проблем это создавать не должно: ведь компилятор должен разруливать перекрёстные связи между несколькими определениями функций, идущих подряд. Здесь задача примерно того же рода. И, например, компиляторы C++, Java, C# с ней справляются. К>Например, выполняют два прохода — сперва собирают объявления типов и сигнатуры процедур, а затем обслуживают определения процедур. В Обероне, как и в его предшественниках, все имена должны объявляться до использования. Это сделано для того, чтобы можно было написать однопроходный (и быстрый) компилятор. Современные компиляторы в большинстве своем многопроходные, но ограничение осталось. К>Или же имеется в виду нечто иное? Здесь, действительно, нечто иное. Пусть метод класса A вызывает метод класса B, а тот в свою очередь вызывает метод класса A. Тогда класс A должен быть описан до B, а B до A. |
| Re[10]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 17.11.04 11:29 |
| Здравствуйте, Трурль, Вы писали: К>> К>>Прокомментируй, пожалуйста. Кого она ставит в затруднение? Пользователя? Компилятор? К>>По большому счёту, новых проблем это создавать не должно: ведь компилятор должен разруливать перекрёстные связи между несколькими определениями функций, идущих подряд. Здесь задача примерно того же рода. И, например, компиляторы C++, Java, C# с ней справляются. К>>Например, выполняют два прохода — сперва собирают объявления типов и сигнатуры процедур, а затем обслуживают определения процедур. Т>В Обероне, как и в его предшественниках, все имена должны объявляться до использования. Это сделано для того, чтобы можно было написать однопроходный (и быстрый) компилятор. Современные компиляторы в большинстве своем многопроходные, но ограничение осталось. К>>Или же имеется в виду нечто иное? Т>Здесь, действительно, нечто иное. Пусть метод класса A вызывает метод класса B, а тот в свою очередь вызывает метод класса A. Тогда класс A должен быть описан до B, а B до A. Решения: — многопроходный компилятор — разнести объявление и определение методов. Обращу внимание на цитату из "Различия между языками Oberon и Oberon-2" Здесь есть неувязка. Если две процедуры перекрёстно ссылаются друг на друга, то заголовок одной из них должен быть продублирован — в пред-объявлении и в определении. Почему для обычных процедур мы считаем это нормальным, а для методов — нет? Тем более, что если методы разных классов ссылаются друг на друга, то всё равно придётся или писать пред-объявления, либо упорядочивать определения методов этих классов в тексте, так, чтобы минимизировать количество пред-объявлений. Последнее — некорректно по отношению к программисту, так как концептуальный порядок методов (группировка по смыслу) может существенно отличаться от минимизирующего. Поэтому здесь Оберон осложняет жизнь, заставляя пользоваться браузером и не создавая условий для стройного написания кода. Впрочем, какой-нибудь инструмент проектирования, например, Rational Rose или Telelogic UML Suite, всё равно родит болванку кода, выглядящую примерно так:
Перекуём баги на фичи! |
| Re[11]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 17.11.04 13:40 | |
| Оценка: | ![]() | |
| Здравствуйте, Кодт, Вы писали: К>Здесь есть неувязка. Если две процедуры перекрёстно ссылаются друг на друга, то заголовок одной из них должен быть продублирован — в пред-объявлении и в определении. Перекрестные ссылки встречаются редко. |
| Re[10]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 17.11.04 14:53 |
| Здравствуйте, Трурль, Вы писали: Т>Здесь, действительно, нечто иное. Пусть метод класса A вызывает метод класса B, а тот в свою очередь вызывает метод класса A. Тогда класс A должен быть описан до B, а B до A. Достаточно делать пред-объявление класса Кстати, а что будет, если перекрёстное использование не на уровне методов, а на уровне структур данных? Тут без пред-объявления не обойтись. Таким пред-объявлением является объявление типа указателя. Так что можно было и объявления методов запихать в объявление класса. Впрочем, дело вкуса. Мне, понятное дело, больше нравится С++, в котором определение метода можно как внутрь запихать, так и наружу вынести (в отличие от Java|C# — где только внутрь, или от Oberon, где только наружу). Но такие вещи решаются с помощью интеллектуального редактора или препроцессора. Например (благо, синтаксис лёгкий), за один проход перловый скрипт вытаскивает все указательные типы и прототипы процедур и пишет их объявления в начале файла, сразу после импорта. Тогда программист вообще может расслабиться Перекуём баги на фичи! |
| Re[5]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | _wqwa | |
| Дата: | 17.11.04 16:51 |
| Здравствуйте, Кодт, Вы писали: К>C K&R К>C для разных микроконтроллеров (как правило, на основе K&R) К>C90 К>C99 К>Objective C (жутковатая помесь Си со Смолтоком) К>C++ (первая редакция языка, где не было всяких разных фич) К>C++ (вторая редакция — современная) К>Java К>JavaScript К>Tcl К>Csh К>D К>C# Ну, тикль с шелл-скриптом по моему, ты зря упомянул. Далековато они находятся от остальных перечисленных... К>Кого ещё забыл? Sphinx C-- ? ... << RSDN@Home 1.1.3 stable >> Ты попробуй, и узнаешь! | |
| Re[10]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 17.11.04 21:53 |
| Re[11]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 17.11.04 21:53 |
| Здравствуйте, Кодт, Вы писали: К>Здесь есть неувязка. Если две процедуры перекрёстно ссылаются друг на друга, то заголовок одной из них должен быть продублирован — в пред-объявлении и в определении. Почему должен? И почему в Яве, Шарпе и ВБ все работает без предеклараций? К>Почему для обычных процедур мы считаем это нормальным, а для методов — нет? Я не считаю. По мне так любое дублирование вредно и излишне. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[11]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 17.11.04 21:53 |
| Здравствуйте, Кодт, Вы писали: К>Кстати, а что будет, если перекрёстное использование не на уровне методов, а на уровне структур данных? Тут без пред-объявления не обойтись. Почему?
Подсунь этот код Шарпу или Яве и убедись, что пролем не возникнет. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[11]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 18.11.04 06:05 |
| Здравствуйте, VladD2, Вы писали: Т>>В Обероне, как и в его предшественниках, все имена должны объявляться до использования. Это сделано для того, чтобы можно было написать однопроходный (и быстрый) компилятор. Современные компиляторы в большинстве своем многопроходные, но ограничение осталось. VD>Блин, ну, зачем говорить о том, что слабо знаете? Проходы в классике — это считывания исходного файла. Вообще-то обход синтаксического дерева тоже называют проходом. |
| Re[11]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 18.11.04 06:12 |
| Здравствуйте, Кодт, Вы писали: К>Решения: К>- многопроходный компилятор Это по-моему оптимально, но авторам, видимо, хотелось оставить возможность делать однопроходные компиляторы. К>- разнести объявление и определение методов. Тогда бы язык получился несовместимым с Обероном. |
| Re[12]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Сергей Губанов | http://moikrug.ru/users/P628059486/ |
| Дата: | 18.11.04 08:10 |
| Здравствуйте, VladD2, Вы писали: VD>Здравствуйте, Кодт, Вы писали: К>>Кстати, а что будет, если перекрёстное использование не на уровне методов, а на уровне структур данных? Тут без пред-объявления не обойтись. VD>Почему? VD>
VD>Подсунь этот код Шарпу или Яве и убедись, что пролем не возникнет. Аналогичный код:
можно подсунуть Блэкбоксу, там тоже никаких проблем не будет. В данном случае речь идет о процедурах:
Да, конечно, предварительное объявление процедуры
приводит к дублированию кода, которое так напрягает... Но, как я уже писал ранее, перекрестный вызов процедур случается редко. Влом что ли пару раз на всю программу написать предварительное определение? Можете привести реальные примеры когда Вы сами пользовались перекрестными вызовами процедур? |
| Re[11]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 18.11.04 11:00 |
| Здравствуйте, VladD2, Вы писали: К>>>У меня сразу же возникает вопрос: а можно ли определять ассоциированную процедуру в другом модуле? Т>>У меня тоже возникал такой вопрос. Интересный язык получился бы. VD>Незнаю о том ли ты, но в Руби есть так называемые синглтон-методы. Позволяют переопределять методы у конкретных экземпляров. Тут речь не о перегрузке у экземпляров, а о том, что полиморфные методы можно определять независимо от классов. С синтаксической точки зрения, от инфиксной нотации obj.method(args) можно перейти к префиксной method(obj, args). В принципе, эта задача известна — она возникает, например, при создании мультиметодов без помощи двойной диспетчеризации. Тут получается вырожденный случай мультиметода — от одного полиморфного аргумента. Перекуём баги на фичи! |
| Re[12]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 18.11.04 11:02 |
| Здравствуйте, VladD2, Вы писали: К>>Здесь есть неувязка. Если две процедуры перекрёстно ссылаются друг на друга, то заголовок одной из них должен быть продублирован — в пред-объявлении и в определении. VD>Почему должен? И почему в Яве, Шарпе и ВБ все работает без предеклараций? К>>Почему для обычных процедур мы считаем это нормальным, а для методов — нет? VD>Я не считаю. По мне так любое дублирование вредно и излишне. Я имею в виду — в Обероне-2. Перекуём баги на фичи! |
| Re[12]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 18.11.04 11:05 |
| Здравствуйте, Трурль, Вы писали: К>>Решения: К>>- многопроходный компилятор Т>Это по-моему оптимально, но авторам, видимо, хотелось оставить возможность делать однопроходные компиляторы. ... утконос и ехидна — отряд однопроходных К>>- разнести объявление и определение методов. Т>Тогда бы язык получился несовместимым с Обероном. Почему? Если Оберон умеет пред-объявлять обычные процедуры, то чем методы хуже? Писать постфикс "forward" или компонент-паскалевскую птичку "procedure^" — это, в общем, без разницы. Перекуём баги на фичи! |
| Re[13]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 18.11.04 11:12 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Да, конечно, предварительное объявление процедуры СГ>
СГ>приводит к дублированию кода, которое так напрягает... Но, как я уже писал ранее, перекрестный вызов процедур случается редко. Влом что ли пару раз на всю программу написать предварительное определение? Можете привести реальные примеры когда Вы сами пользовались перекрестными вызовами процедур? Я постараюсь всеми силами сохранить удобный мне порядок следования кода, вытекающий из дизайна программы. Если для этого мне потребуется пред-объявление чего бы то ни было — типов, процедур, ??? — что ж, напишу их. Кроме того, лично я (никому не навязываю) считаю удобным, когда все описания выглядят компактно. А, как говорил сам Вирт, программа = структуры + алгоритмы. То есть я хочу видеть структуру объекта рядом с перечнем его методов. Умеет редактор сворачивать текст определения (как, например, VisualStudio.NET) — прекрасно. Не умеет — буду разносить объявление и определение. Мне кажется, дело в первую очередь в этом, а не в наличии циклов в графе зависимостей. Перекуём баги на фичи! |
| Re[12]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 18.11.04 13:59 |
| Трурль, > VD> Проходы в классике — это считывания исходного файла. > Вообще-то обход синтаксического дерева тоже называют проходом. Есть, по меньшей мере, две терминологии. Одна называет проходом считывание входного файла, обработку, и запись выходного файла, называя пероход от одного внутреннего представления к другому (в т.ч. и обход синтаксического дерева) фазами. Другая называет проходом и то, и другое. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[13]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndrewVK модератор | |
| Дата: | 18.11.04 14:18 | |
| Оценка: | +1 | |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Есть, по меньшей мере, две терминологии. Одна называет проходом считывание входного файла, обработку, и запись выходного файла, называя пероход от одного внутреннего представления к другому (в т.ч. и обход синтаксического дерева) фазами. Другая называет проходом и то, и другое. Добавлю что преимущество однопроходных компиляторов имеет место быть для первого варианта. ... << RSDN@Home 1.1.4 beta 3 rev. 232>> AVK Blog | |
| Re[13]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 19.11.04 03:09 |
| Здравствуйте, Кодт, Вы писали: К>Я имею в виду — в Обероне-2. То есть ты о непоследовательности? Или Оберону это простительно? ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[13]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 19.11.04 03:09 |
| Здравствуйте, Сергей Губанов, Вы писали: СГ>Да, конечно, предварительное объявление процедуры СГ>
СГ>приводит к дублированию кода, которое так напрягает... Но, как я уже писал ранее, перекрестный вызов процедур случается редко. Влом что ли пару раз на всю программу написать предварительное определение? Дык, тебе же говорят, что есть языки где вообще нет нужды в предварительном объявлении. И можно сколько угодно раз ссылаться на что угодно. СГ>Можете привести реальные примеры когда Вы сами пользовались перекрестными вызовами процедур? Ущербно само требование предварительной декларации. Это приводит к необходимости распологать код не так как хочется/получается, а следить за его верным расположением. И вообще, не удобно распологать код в каком-то порядке. Согласись, что проще не думать о мелочах. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[12]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 19.11.04 03:09 | |
| Оценка: | +2 | |
| Здравствуйте, Трурль, Вы писали: VD>>Блин, ну, зачем говорить о том, что слабо знаете? Проходы в классике — это считывания исходного файла. Т>Вообще-то обход синтаксического дерева тоже называют проходом. В "классике", при рассуждениях о скорости компиляции, проходом называют именно считывание/запись файла. И это не с проста. Если можно построить в оперативке полное представление компилируемого проекта (например, AST), то количество обходов этого представления практически не влияет на скорость компиляции, так как сам обход несоизмеримо дешев. По этому обход AST называются фазой, а не проходм. Хорошим доказательством того, что количество фаз компиляции мало влияет на скорось компиляции служат компиляторы Явы и Шарпа. Они не уступают по скорости однопроходным компиляторам. Я могу привести скорость объхода АСТ для R# (на самомо большом проекте). При использовании универсального метода обхода (намного менее эффективного чем обхода на базе визитера) объод занимает ~ 0.05 секунды. При этом парсинг уже закэшированных исходников занимает где-то 0.4 сек. При использовании патерна визитер обход вообще превратится в микросекунды. Так что на скорость компиляции влияет в основном: 1. Скоростные характеристики семантических правил. 2. Объем обрабатываемого исходного кода. Например, для С++ оба паказателя крайне велики. И это при том, чтосам язык требует предеклараций. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[14]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 19.11.04 09:00 |
| VladD2, > Ущербно само требование предварительной декларации. Всегда? Требование любых предварительных объявлений? Даже предварительного объявления переменных? Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[14]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 19.11.04 09:33 |
| Здравствуйте, AndrewVK, Вы писали: AVK>Здравствуйте, Павел Кузнецов, Вы писали: ПК>>Есть, по меньшей мере, две терминологии. Одна называет проходом считывание входного файла, обработку, и запись выходного файла, называя пероход от одного внутреннего представления к другому (в т.ч. и обход синтаксического дерева) фазами. Другая называет проходом и то, и другое. AVK>Добавлю что преимущество однопроходных компиляторов имеет место быть для первого варианта. Думаю, лет 20 назад Вы бы не были столь категоричны. |
| Re[14]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 19.11.04 09:42 |
| Здравствуйте, VladD2, Вы писали: К>>Я имею в виду — в Обероне-2. VD>То есть ты о непоследовательности? Или Оберону это простительно? Я ничего здесь не прощаю Фразу "Здесь есть неувязка. Если <> две процедуры перекрёстно ссылаются друг на друга, то заголовок одной из них должен быть продублирован — в пред-объявлении и в определении." нужно читать "... Если <в Обероне-2> две процедуры ..." Про другие языки я не говорил. Поэтому твой ответ пришёлся не к месту. Перекуём баги на фичи! |
| Re[15]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 19.11.04 09:48 | |
| Оценка: | +1 ![]() | |
| Здравствуйте, Павел Кузнецов, Вы писали: >> Ущербно само требование предварительной декларации. ПК>Всегда? Требование любых предварительных объявлений? ПК>Даже предварительного объявления переменных? Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая Перекуём баги на фичи! |
| Re[15]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndrewVK модератор | |
| Дата: | 19.11.04 09:49 |
| Здравствуйте, Трурль, Вы писали: AVK>>Добавлю что преимущество однопроходных компиляторов имеет место быть для первого варианта. Т>Думаю, лет 20 назад Вы бы не были столь категоричны. Даже 10 лет назад не был бы. А что? ... << RSDN@Home 1.1.4 beta 3 rev. 232>> AVK Blog | |
| Re[13]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 19.11.04 10:26 | |
| Оценка: | +1 ![]() | |
| Здравствуйте, VladD2, Вы писали: VD>В "классике", при рассуждениях о скорости компиляции, проходом называют именно считывание/запись файла. Не знаю, что такое "классика", но вполне себе классический 6-проходный компилятор PL/1 считывал исходный файл только один раз. Возражение по процедуре ведения. VD>Блин, ну, зачем говорить о том, что слабо знаете? Почему Кодту позволительно использовать термин "многопроходный компилятор", а Трурля за то же самое обвиняют в некомпетентности? |
| Re[16]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Трурль | http://art.net/~hopkins/Don/lem/Trurl.html |
| Дата: | 19.11.04 10:26 |
| Здравствуйте, AndrewVK, Вы писали: AVK>>>Добавлю что преимущество однопроходных компиляторов имеет место быть для первого варианта. Т>>Думаю, лет 20 назад Вы бы не были столь категоричны. AVK>Даже 10 лет назад не был бы. А что? Разрабатывая Оберон, Вирт учитывал, что ему придется писать компилятор и для какой машины. А вот авторы Component Pascal вполне могли бы снять ограничения, раз уж их язык все равно несовместим с Обероном. |
| Re[17]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AndrewVK модератор | |
| Дата: | 19.11.04 10:52 | |
| Оценка: | ![]() | |
| Здравствуйте, Трурль, Вы писали: Т>Разрабатывая Оберон, Вирт учитывал, что ему придется писать компилятор и для какой машины. А вот авторы Component Pascal вполне могли бы снять ограничения, раз уж их язык все равно несовместим с Обероном. Так о том и речь. ... << RSDN@Home 1.1.4 beta 3 rev. 232>> AVK Blog | |
| Re[15]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 20.11.04 01:25 |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Всегда? Требование любых предварительных объявлений? Методов. ПК>Даже предварительного объявления переменных? Рад что доставил тебе удоволствие подловить меня еще разок на слове. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[14]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | VladD2 rsdn | www.k-press.ru/cs |
| Дата: | 20.11.04 01:25 |
| Здравствуйте, Трурль, Вы писали: Т>Возражение по процедуре ведения. VD>>Блин, ну, зачем говорить о том, что слабо знаете? Т>Почему Кодту позволительно использовать термин "многопроходный компилятор", а Трурля за то же самое обвиняют в некомпетентности? Я не видел где он применял этот термин. Может там разница была не принципиальна. Ты же начал рассуждать о скорости. И тут разница очень велика. Ты ведь заранее оссоциировал многопроходность с тормозами. А в случае "проходов" по AST — это не так. Именно по этому в серьезных книгах для прохода по AST используется отедьный термин. Иначе моно дорассуждаться до того, что С++-компилятор быстрее C#-пного, так как первый однопроходный, а второй многопроходный, ведь С++ требует предеклараций и пасит код в прямом порядке. ... << RSDN@Home 1.1.4 beta 3 rev. 207>> |
| Re[16]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Шахтер | |
| Дата: | 20.11.04 03:31 | |
| Оценка: | +1 | |
| Здравствуйте, Кодт, Вы писали: К>Здравствуйте, Павел Кузнецов, Вы писали: >>> Ущербно само требование предварительной декларации. ПК>>Всегда? Требование любых предварительных объявлений? ПК>>Даже предварительного объявления переменных? К>Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... К>Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона. Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename. ... << RSDN@Home 1.1.0 stable >>
|
| Re[17]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 22.11.04 09:52 | |
| Оценка: | +1 | |
| Здравствуйте, Шахтер, Вы писали: К>>Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... К>>Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая Ш>В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона. ... или вообще именем пространства имён. Ш>Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename. Можешь привести пример, как класс имени влияет на синтаксический анализ (не на семантику)? Перекуём баги на фичи! |
| Re: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AVC | |
| Дата: | 22.11.04 11:30 |
| Здравствуйте, Кодт, Вы писали: К>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. В прошлую пятницу я был свидетелем одной милой сцены. Один наш сотрудник, почтенный доктор наук, принес результаты тестов, подтверждающие, что для наших задач за глаза хватает 32-битного float. Т.е. встраивать в процессор поддержку double нет никакой нужды. На радостях все разговорились, разоткровенничались. В частности, наш доктор наук заявил, что Си++ — "замечательный язык". Правда, быстро выяснилось, что у него перегрузка некоторых операторов приводит не к тем результатам, которые ожидались. (В тестах ему пришлось обойтись без этой перегрузки.) Программисты стали разбираться. Возникло какое-то затруднение. Чтобы помочь ребятам (и вспомнив о тщательной проработке стандарта Си++) я "подкинул" им электронную копию стандарта Си++. Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++? Хоар |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sergey J. A. | |
| Дата: | 22.11.04 14:30 |
| Здравствуйте, AVC, Вы писали: К>>Тот факт, что Стандарт С++ занимает несколько сотен страниц, говорит не о сложности языка, а о тщательной проработке технической документации. AVC>В прошлую пятницу я был свидетелем одной милой сцены. AVC>Один наш сотрудник, почтенный доктор наук, принес результаты тестов, подтверждающие, что для наших задач за глаза хватает 32-битного float. Т.е. встраивать в процессор поддержку double нет никакой нужды. AVC>На радостях все разговорились, разоткровенничались. В частности, наш доктор наук заявил, что Си++ — "замечательный язык". Правда, быстро выяснилось, что у него перегрузка некоторых операторов приводит не к тем результатам, которые ожидались. (В тестах ему пришлось обойтись без этой перегрузки.) Программисты стали разбираться. Возникло какое-то затруднение. Чтобы помочь ребятам (и вспомнив о тщательной проработке стандарта Си++) я "подкинул" им электронную копию стандарта Си++. AVC>Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... AVC>Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++? А в чём было затруднение то ? А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов.... Я — свихнувшееся сознание Джо. |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AVC | |
| Дата: | 22.11.04 17:44 |
| Здравствуйте, Sergey J. A., Вы писали: SJA>А в чём было затруднение то ? Не имел времени вникнуть. (Как Вы думаете, если бы у меня было время, ограничился бы я пересылкой стандарта Си++?) Что-то связанное с подбором кандидатов на перегрузку. Так что я занимался работой и со стороны наблюдал эту сценку. Она меня умилила, вот я и рассказал о ней. SJA>А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов.... Ну, конечно, куда им до Вас! Хоар |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sergey J. A. | |
| Дата: | 22.11.04 18:16 |
| Здравствуйте, AVC, Вы писали: AVC>Здравствуйте, Sergey J. A., Вы писали: SJA>>А в чём было затруднение то ? AVC>Не имел времени вникнуть. (Как Вы думаете, если бы у меня было время, ограничился бы я пересылкой стандарта Си++?) Что-то связанное с подбором кандидатов на перегрузку. AVC>Так что я занимался работой и со стороны наблюдал эту сценку. Она меня умилила, вот я и рассказал о ней. Из Вашей истории совершенно ничего не ясно. Была ли непонятность в стандарте или это программеры просто не догнали. Я знал одного "программера" который не смог понять protected mode процессора. Может станем утверждать, что protected mode только запутывает программиста и вообще, стоит вернуться к real mode ? Вполне возможно, что там был нетривиальный пример. Но мне то откуда знать ? SJA>>А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов.... AVC>Ну, конечно, куда им до Вас! Насчёт себя я ничего не утверждал. Однако я хотя бы держу под рукой стандарт и Страуструпа. Я — свихнувшееся сознание Джо. |
| Re[18]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 22.11.04 18:18 | |
| Оценка: | 41 (2) +1 | |
| Кодт, > Ш>В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона. > ... или вообще именем пространства имён. > Ш>Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename. > Можешь привести пример, как класс имени влияет на синтаксический анализ (не на семантику)? Допустим, есть два выражения языка, a и b. Тогда:
Если a — выражение, обозначающее типа, то результирующая синтаксическая конструкция — объявление, иначе — произведение двух выражений. При этом, в зависимости от того, чем является a, в качестве выражения b разрешены разные виды выражений. Например, если a — тип, то в качестве выражения b конструкция вида c + d не разрешена, и т.п. Еще:
Если a — имя типа, то результирующая синтаксическая конструкция — объявление переменной, если имя объекта — вызов перегруженной функции operator(), если имя функции — вызов функции. При этом, снова-таки, в зависимости от того, чем является a, в качестве b разрешены разные выражения. Например, если a — встроенный тип, то в качестве b выражения вида [i]c, d[i] не разрешены. Это все примеры разных синтаксических конструкций, которые на одном из этапов разбора просто выглядят одинаково. Они порождают разные деревья разбора. И именно для возможности проверки синтаксиса в подобных случаях в шаблонах было введено typename. Конечно, можно Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[2]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 22.11.04 18:48 | |
| Оценка: | +1 | |
| AVC, > В прошлую пятницу я был свидетелем одной милой сцены. <...> > Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... А никто не говорил, что будет легко > Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++? Если серьезно, то сам язык C++ во многих моментах преизрядно сложен. Сложность стандарта — отражение этого момента. Собственно говоря, сложность данного языка является и его сильной (не сама по себе, а в результате выразительности, которая эту сложность вызывает), и его слабой стороной (очень долгий период обучения). P.S. Пусть ваши программисты заходят на rsdn.cpp, там им сравнительно быстро и весьма квалифицированно помогут разобраться. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 22.11.04 21:13 |
| Sergey J. A., > AVC> Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... > AVC> Тут у меня возник "крамольный" вопрос: уж не слишком ли тщательно был составлен стандарт Си++? > А в чём было затруднение то ? > А то у меня кроме вопроса о тщательности составления стандарта возникает и вопрос о квалификации ваших программистов.... Не стоит так категорично... Сложность C++, порожденная стремлением к выразительности языка, зачастую приводит к тому, что полное понимание происходящего даже во внешне простых случаях требует от программиста, действительно, глубокого знания языка, чего часто не нужно (или достигается значительно быстрее) при работе с другими языками. Posted via RSDN NNTP Server 1.9 gamma Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |
| Re[4]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Sergey J. A. | |
| Дата: | 23.11.04 08:27 | |
| Оценка: | 1 (1) | |
| Здравствуйте, Павел Кузнецов, Вы писали: ПК>Не стоит так категорично... Сложность C++, порожденная стремлением к выразительности языка, зачастую приводит к тому, что полное понимание происходящего даже во внешне простых случаях требует от программиста, действительно, глубокого знания языка, чего часто не нужно (или достигается значительно быстрее) при работе с другими языками. Посыпаю голову пеплом. Был несколько пьян, и категоричен Я — свихнувшееся сознание Джо. |
| Re[5]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AVC | |
| Дата: | 23.11.04 14:30 | |
| Оценка: | 3 (1) | |
| Здравствуйте, Sergey J. A., Вы писали: SJA>Из Вашей истории совершенно ничего не ясно. Была ли непонятность в стандарте или это программеры просто не догнали. Я знал одного "программера" который не смог понять protected mode процессора. Может станем утверждать, что protected mode только запутывает программиста и вообще, стоит вернуться к real mode ? SJA>Вполне возможно, что там был нетривиальный пример. Но мне то откуда знать ? Я вовсе не критикую стандарт Си++. Сложность языка и стандарта, должно быть, вытекает из задач, которые были поставлены разработчиками языка. Критиковать язык можно лишь на такой основе. (Я хотел раньше, чтобы именно так критиковали Оберон.) "Цель" моей "зарисовки с натуры" другая: применить "остраннение" (термин литературоведа В.Шкловского), посмотреть на ситуацию со стороны. Хотя бы и так, как Холстомер у Л.Н.Толстого наблюдал оперное пение. А ситуация такая. Действительно компетентный специалист в своей области (для нас особо ценный, как специалист по психоакустике) непременно хочет кодировать именно на Си++, языке действительно трудном и требующем изрядного навыка. Приобретение такого навыка требует значительного времени. (Здесь где-то назывался срок 3 года?) Оправданно ли употребление Си++ в такой ситуации? Ведь у нас все программисты (кроме меня, грешного; я, на свою беду, просто прикладной математик) — специалисты в своих областях: физики, аппаратчики и т.д. Им, кроме стандарта языка, надо держать в голове кучу других стандартов. А тут еще такой изощренный язык. Разумно ли это? В этом и состоит мой вопрос. Хоар |
| Re[3]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | AVC | |
| Дата: | 23.11.04 14:56 | |
| Оценка: | 1 (1) +1 | |
| Здравствуйте, Павел Кузнецов, Вы писали: >> Через четверть часа они все еще ходили по перекрестным ссылкам, а в конце концов, утомившись, и вовсе оставили это занятие... ПК>А никто не говорил, что будет легко Меня со стороны даже заинтриговал этот процесс "хождения по ссылкам". Написано что-то вроде см. пункт xxx. Ребята лезут туда. Там пара предложений и сакраментальное "см. пункт yyy". И так далее,
Оговорюсь, что это не критика Си++, это, скорее, просто смешная ситуация. Но некоторые эпизоды собственной жизни, связанные с Си++, не могу забыть. Вот еще один, "на вскидку". Прихожу я первый раз на свою предыдущую работу (в начале 1997 года). И что я вижу? Все (человек шесть) программисты сидят в отладчике Watcom C++. Ну, у меня сразу волосы дыбом... ПК>Если серьезно, то сам язык C++ во многих моментах преизрядно сложен. Сложность стандарта — отражение этого момента. Собственно говоря, сложность данного языка является и его сильной (не сама по себе, а в результате выразительности, которая эту сложность вызывает), и его слабой стороной (очень долгий период обучения). Именно. У каждого языка, заслуживающего внимания, есть свои сильные и слабые стороны. ПК>P.S. Пусть ваши программисты заходят на rsdn.cpp, там им сравнительно быстро и весьма квалифицированно помогут разобраться. Спасибо! Это может и правда пригодиться, а то доктора наук что-то совсем "расшалились", им непременно перегрузку операторов подавай! Хоар |
| Re[18]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Шахтер | |
| Дата: | 24.11.04 02:43 | |
| Оценка: | 46 (2) +1 | |
| Здравствуйте, Кодт, Вы писали: К>Здравствуйте, Шахтер, Вы писали: К>>>Если объявление и инициализация совмещены — это удобно. C#, PHP... где ещё я это видел... К>>>Особенности компиляции/компоновки С/С++ не позволяют так делать, ну значит, планида у них такая Ш>>В процессе парсинга C++ кода приходится определять классы имён. Имя может быть именем переменной, типа или шаблона. К>... или вообще именем пространства имён. Ш>>Не определив класс имени нельзя распарсить выражение -- возникают синтаксические неопределённости. Это одна из главных причин необходимости предварительных деклараций. А так же причина появления в языке ключевого слова typename. К>Можешь привести пример, как класс имени влияет на синтаксический анализ (не на семантику)? Вот совсем свежий примерчик из практики Автор: .Дата: 23.11.04 ... << RSDN@Home 1.1.0 stable >>
|
| Re[19]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 24.11.04 09:44 |
| Здравствуйте, Шахтер, Вы писали: Ш>Вот совсем свежий примерчик из практики Автор: .Дата: 23.11.04 Это вообще горе C++, что не хватило скобок на шаблоны. Перекуём баги на фичи! |
| Re[20]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Шахтер | |
| Дата: | 25.11.04 00:29 |
| Здравствуйте, Кодт, Вы писали: К>Здравствуйте, Шахтер, Вы писали: Ш>>Вот совсем свежий примерчик из практики Автор: .Дата: 23.11.04 К> К>Это вообще горе C++, что не хватило скобок на шаблоны. Не только С++. Пора уже на клавиатуру вместо всяких виндовых гадостей добавить правильные кнопки. ... << RSDN@Home 1.1.0 stable >>
|
| Re[21]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Кодт rsdn | |
| Дата: | 25.11.04 08:38 |
| Здравствуйте, Шахтер, Вы писали: К>>Это вообще горе C++, что не хватило скобок на шаблоны. Ш>Не только С++. Пора уже на клавиатуру вместо всяких виндовых гадостей добавить правильные кнопки. Или в клавиатурный драйвер добавить юникодные композиты. Тогда можно будет на оригинальном APL писать Перекуём баги на фичи! |
| Re[6]: Oberon family | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Павел Кузнецов rsdn | http://engineering.meta-comm.com http://tydbits.com |
| Дата: | 29.11.04 23:26 | |
| Оценка: | 40 (1) | |
| AVC, > А ситуация такая. Действительно компетентный специалист в своей области (для нас особо ценный, как специалист по психоакустике) непременно хочет кодировать именно на Си++, языке действительно трудном и требующем изрядного навыка. Приобретение такого навыка требует значительного времени. (Здесь где-то назывался срок 3 года?) Если человек уже знаком с каким-нибудь другим "настоящим" языком программирования (не SQL, не Basic и т.п.), и уверенно управляется с основными понятиями computer science (алгоритмы и структуры данных), при условии наличия кого-нибудь, кто по ходу дела мог бы подсказывать, как "правильно" работать с C++, я бы уменьшил ожидаемый срок обучения в несколько раз по сравнению с названным (несколько месяцев я нахожу более чем реальным). Это до уровня уверенного использования без наступания на грабли. Другой вопрос, что язык, с которым он мог быть знаком, мог не позволять получить рабочее знание некоторых парадигм, с которыми этот человек наверняка захочет работать в C++. В зависимости от языка обучения, соответственно — умение работать на языке с сильной статической типизацией, ОО, обобщенное программирование, некоторые аспекты функционального программирования и т.п. Вот на практически полезное освоение этих понятий — да, может уйти преизрядное время. Но это не из-за сложности реализации этих вещей в C++, а в их одновременном наличии: если хочется научиться всему, то учиться долго. > Оправданно ли употребление Си++ в такой ситуации? Ведь у нас все программисты (кроме меня, грешного; я, на свою беду, просто прикладной математик) — специалисты в своих областях: физики, аппаратчики и т.д. Им, кроме стандарта языка, надо держать в голове кучу других стандартов. А тут еще такой изощренный язык. Разумно ли это? Сложный вопрос. С одной стороны, язык, действительно, непростой. С другой — мне почему-то кажется, что основным для успешного использования какого-либо языка является наличие большого количества готовых решений, которые можно использовать в разработке, плюс, очень желательно наличие серьезного сообщества, у которого можно получать информацию о best practices. По моей информации C и C++ достаточно широко используются в научных разработках. Но, имхо, тут каждый должен решать для себя сам: со стороны многих существенных для правильного выбора моментов не видно... Posted via RSDN NNTP Server 1.9 delta Discussion is an exchange of knowledge; an argument is an exchange of ignorance. | Discussion is an expression of logic; an argument is an expression of temper. Discussion tries to prove what is right; an argument tries to prove who is right. |