Итак, уважаемые господа и великоуважаемые товарищи...
Недавно на нашем сайте развернулась ожесточенная рекламная компания бессмерного творения уважаемого господина Вирта — Оберона 2.
Ряд очень инициативных лиц хочет причинить неотвратимое щастье детям, которые волею судеб теперь еще со школьной скамьи обучаются основам программирования (под кодовым названием информатика и вычислительная техника).
Вот здесь: http://www.oberon.ch/blackbox.html есть ссылка на среду программирования BlackBox. Весит это добро довольно много (около 8 метров), но все же не откажите в любезности, скачайте это творение рук ученых и попробуйте на нем поработать. Ну, создать пару примитивных программ, скомпилировать их и запустить на выполнение. При этом просьба стараться не обращаться к документации. Помните! Это среда рассчитана на обучение детей, а они не только только не любят читать документацию, но и плохо умеют это делать на английском языке.
В общем, цель этого тэст-драйва получить максимальное количество впечатлений и поделиться оными в данной теме. За самое яркое и выразительное описаний своих эмоций будет поставлено неимоверное количество оценок.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Настоящие джедаи трудностей не боятся! Они их сами и создают! А на чёрный ящик у них шашка есть!
В общем, я, кончно, понимал, что Влад врядли будет плохо высказываться о хорошей вещи и ожидал "нечто"...
Но чтоб такое! Да ещё ДЕТЯМ?!!! Просто в шоке...
Хотя проматривается тонкий расчёт — если ребёнок научится программировать на ЭТОМ, то это будет втророй Торвальдс...
Здравствуйте, VladD2, Вы писали:
VD>Итак, уважаемые господа и великоуважаемые товарищи...
1) На самом деле речь идет не об Обероне-2, а о другом языке программирования — Component Pascal (Более продвинутая версия этого замечательного языка). Component Pascal — первый язык программирования поддерживающий Компонентно Ориентированную парадигму программирования (КОП). Оригинальный Оберон-2 не поддерживает КОП. В этом состоит вся разница между ними.
2) Ссылка http://www.oberon.ch/blackbox.html ни в коем случае не предназначена для детей. Она даже не рекомендована для преподавателей. Преподавателям рекомендуется скачивать русифицированную версию с сайта проекта Информатика-21http://www.inr.ac.ru/~info21/install/welcome.html
Ссылка http://www.oberon.ch/blackbox.html предназначена для программистов-профессионалов. К концу 2004 года Oberon Microsystems обещала открыть исходные коды этой замечательной системы (компилятор, загрузчик, сама визуальная среда)
3) Прошу рассматривать следующую фразу:
...При этом просьба стараться не обращаться к документации. Помните! Это среда рассчитана на обучение детей, а они не только только не любят читать документацию, но и плохо умеют это делать на английском языке....
как бред сивой кобылы.
4) Прошу обратить внимание на то что данный продукт распространяется бесплатно. Все претензии типа — это же старье лишены смысла. Продукт создавался десять лет назад еще под Windows 95. Помните сколько оперативной памяти тогда устанавливали в компьютеры? Правильно от 8 до 32 мегабайтов. Попробуйте запустить современную MS Visual Studio на компьютере с 8 мегабайтами оперативки... В свое время BlackBox продавался примерно за 250 — 1500 долларов, в зависимости от конфигурации.
5) Что касается отношения BlackBox к детям. Для получения ответа на этот вопрос прошу обращаться к первоисточнику, а именно — проекту Информатика-21http://www.inr.ac.ru/~info21/
Приведите, пожалуйста, основные отличия сред, скачиваемых с этих двух сайтов. И ещё скриншот.
СГ>Ссылка http://www.oberon.ch/blackbox.html предназначена для программистов-профессионалов. К концу 2004 года Oberon Microsystems обещала открыть исходные коды этой замечательной системы (компилятор, загрузчик, сама визуальная среда)
Нда. Зачем мне исходные коды среды, если моей задачей является решение вполне определённой задачи? Мне важно, чтобы с инструментом было работать удобно...
СГ>3) Прошу рассматривать следующую фразу:
СГ>...При этом просьба стараться не обращаться к документации. Помните! Это среда рассчитана на обучение детей, а они не только только не любят читать документацию, но и плохо умеют это делать на английском языке....
К сожалению, полный перевод документации на русский язык выходит за наши возможности. На данный момент переведен основополагающий документ — Сообщение о языке Компонентный Паскаль, — а также некоторые вспомогательные документы (см. меню Справка в русифицированной версии или Help в оригинальной; имена соответствующих файлов оканчиваются на _rus.odc). Все они присутствуют в двух конфигурациях, указанных выше.
СГ>4) Прошу обратить внимание на то что данный продукт распространяется бесплатно.
См. на сайте Microsoft Visual C# 2005, например.
СГ>Все претензии типа — это же старье лишены смысла. Продукт создавался десять лет назад еще под Windows 95.
СГ>Помните сколько оперативной памяти тогда устанавливали в компьютеры? Правильно от 8 до 32 мегабайтов. Попробуйте запустить современную MS Visual Studio на компьютере с 8 мегабайтами оперативки...
Зачем?
На ваши возражения по поводу слабых компьютеров в школах напомню про ТурбоПаскаль.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Влад, я качаю потихоньку. Есть как раз хорошая тестовая задачка... ЗХ>Но на дайлапе еще пару ночей буду качать
А ты москвич? А то приходи завтра на ЮГ, я тебе его солью. За одно Питон и Руби.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Насколько я понял, кто-то (не помню кто) тут планировал использовать
BlackBox для обучения программированию в _средней школе_.
Вот что я вам скажу, коллеги. Эти кто-то очень любят программирование и
очень не любят детей.
Сам я начинал профессиональную деятельность в 1988 году на ЕС-1045, так
что убогим интерфейсом меня не напугаешь. Но с тех пор всё-таки прошло
16 лет. Такое впечатление, что авторы BlackBox не видели даже ( Norton |
Midnight ) Commander.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Зверёк Харьковский, ... VD>А ты москвич? А то приходи завтра на ЮГ, я тебе его солью. За одно Питон и Руби.
Ну солнышко, ну какой я нафик москвич с моим ником-то?
сам слушаю и вам рекомендую: Разные Люди — Отчизна
Здравствуйте, Сергей Губанов, Вы писали:
СГ>4) Прошу обратить внимание на то что данный продукт распространяется бесплатно. Все претензии типа — это же старье лишены смысла. Продукт создавался десять лет назад еще под Windows 95. Помните сколько оперативной памяти тогда устанавливали в компьютеры? Правильно от 8 до 32 мегабайтов. Попробуйте запустить современную MS Visual Studio на компьютере с 8 мегабайтами оперативки...
Visual Studio 6.0 вполне резво бегала на 90 МГц AMD'ешке с 16 метрами памяти. Насколько я помню принципиально по удобству от студии 7.1, она не отличалась.
Здравствуйте, Зверёк Харьковский, Вы писали:
VD>>Здравствуйте, Зверёк Харьковский, ... VD>>А ты москвич? А то приходи завтра на ЮГ, я тебе его солью. За одно Питон и Руби. ЗХ>Ну солнышко, ну какой я нафик москвич с моим ником-то?
Ну почему нельзя поставить сразу три смайлика?
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
Здравствуйте, Undying, Вы писали:
U>Visual Studio 6.0 вполне резво бегала на 90 МГц AMD'ешке с 16 метрами памяти. Насколько я помню принципиально по удобству от студии 7.1, она не отличалась.
Вообще-то она и приципиально отличается, и никаких дотнетов не поддерживает. Да и С++ там урод уродом.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Вообще-то она и приципиально отличается, и никаких дотнетов не поддерживает. Да и С++ там урод уродом.
Это понятно, я имею в виду, что интерфейс в шестерке был по удобству сравним с семеркой, что ни сколько не мешало ей бегать на очень дохлых компах. Это я к тому, что ограничения по памяти и мощности проца нельзя считать оправданием внешней убогости.
To change these visual properties, a control property inspector is used. It is opened by selecting a control and then issuing Edit->Object Properties... (Windows) or Edit->Part Info (Mac OS), respectively. Edit the "label" field in order to change the selected control's label, and click on the default button to make the change permanent.
И хелп и среду писали китайцы. Почему разные пункты меню в разных ОС? Что за кнопка по умолчанию? А почему у меня не Object Properties а просто Properties? Может у меня Винда неправильная?
ЗЫ. У меня кнопка по умолчанию — ОК. Это правильно?
Далее, внутри одного и того же хелпа:
It is opened by selecting a control and then issuing Edit->Object Properties... (Windows) ...
...make sure to call Layout->Sort Views
Без пол-литры не разберешь
Далее.
As a convention, the dialog box layouts of all examples are saved in directory Obx/Rsrc. In this case, we save the new dialog box as Obx/Rsrc/PhoneUI.
Я так и не понял, что произойдет, если я сохраню что-либо где-либо вне папки Obx/. Рисковать не буду, так как боже упаси. Господа Оберонщики о понятии проект слышали?
Сразу говорю, что я знаю, что такое модуль. Но если среда не дает мне организовать эти модули как я хочу — нафиг.
"Едем дальше видим мост, на мосту..."(c)
When you are happy with the layout,...
Как мне добиться такого же скриншота, как в хелпе? Т.е. маленькая, аккуратненькая формочка? А то она у мене большая. Для людей с железными нервами — Layout->Set Grid. Скажете мне на каком по счету клике вы догадались нажать Cancel.
Вы еще с нами?
The directory name Rsrc stands for "Resources"...
Без комментариев. Насколько я помню, Вынь95 поддерживала длинные имена...
Опять же для людей с железными нервами. Вызовите тот самый Edit->Object Properties для любого компонента на форме. Потом щелкните по хелпу. Потом обратно по еомпоненту. Попейте валидол. Успокойтесь.
Далее. Вы еще здесь? У вас действительно железные нервы.
...every control must first be linked to its corresponding interactor field...
When a control is linked ... then the module to which the control should be linked must be loaded.
Перевод. Контролям присваиваются уникальные имена. Причем без объяснения причин хелп предлагает нам следующик имена: ObxPhoneUI.phone.number, ObxPhoneUI.phone.lookupByName. Почему? Потому что они связаны с экспортируемыми из модуля ObxPhoneUI, содержащего public record phone*, содержащий соответствующие поля. Ой. Вы поняли? Судя по всему одинаковые модули иметь не моги.
Еще раз. Господа Оберонщики о понятии проект слышали?
To achieve this level of functionality (and safety against incorrect use), BlackBox provides several advanced "metaprogramming" services, in particular dynamic module loading on demand and typesafe lookup of variables. The latter requires extensive run-time type information (RTTI) that is relatively uncommon in fully compiled languages.
Перевод. "Мы сами понимаем, что все это — отбросы, но наши ребята из PR-Department требуют, чтобы мы использовали как можно больше заумных слов." Последняя строка присутствует в C#, но адвоката C# играет Vlad2 в соседних ветках.
It was one of the design goals for BlackBox to separate user interface details from program logic.
Для тех кто в танке, а также для тех, кто не в силах прочитать такое количество текста в соседних ветках, Re[19]: Обновление (73 KB)
Там показано, как хорошо среда BlackBox с этим справляется.
Дальнейшие измышления опускаем. Там идет описание механизма, используемого MFC в диалогах.
This strong separation of user interface from program logic is uncommon.
"Продолжаем нашу утреннюю передачу для тех, кто еще не спит." (c)
Its advantage is simplicity: as soon as you know how to define procedures and how to declare record types and global variables, you can already construct graphical user interfaces for modules. This is possible even for someone who is just beginning to learn programming.
ноу комментс. Пропаганда программирования "от формы", а от этого потом просто так не отучишься.
"Where is my mind, where is my mind, where...." (c)
we ... discuss important aspects of standard controls which ... increase ... [application's] useability, i.e., its user-friendliness.
In section 1.2 we have already discussed what user-friendliness means. For example, it means avoiding modes wherever possible. For this reason, BlackBox doesn't support modal dialog boxes.
For what reason? С каких пор модальные диалоги стали плохими? Или мне начинать приводить примеры, где они нужны? Или создатели Блэкбокса — эксперты по юзабилити? Они свой собственный Блэкьокс видели?
Стоп. Я нашел причину, почему модальность плохо. Если вы стоите, сядьте, если сидите — ложитесь. Валидол при вас? Держитесь:
Modes are unavoidable if a user action sometimes makes sense, and sometimes doesn't. For example, if the clipboard is empty, its contents cannot be pasted into a text. If it is not empty and contains text, pasting is possible. This cannot be helped, and is harmless if the current state is clearly visible or can easily be inquired by the user. For example, if the clipboard is empty, the Paste menu command can be visibly marked as disabled. The visual distinction gives the user early feedback that this command is currently not meaningful. This is usually much better than to let the user try out a command and then give an error message afterwards.
Кто сказал, что модальность нужна только для отображения ошибок, когда пользователь решил вставить текст при пустом буфере обмена? Держите меня, я сейчас буду кричать...
Запасы валидола подходят к концу....
Так, дальше читать не могу. Дальше идет описание легкого способа дизейблить контролы. Я согласен, в принципе, с идеей, но вне Ьлэкбокса. Жуть и ужас....
Compilation also produced a new code file on disk. However, the old version of ObxPhoneUI is still loaded in memory! In other words: once loaded, a module remains loaded ("terminate-and-stay-resident").
Воспоминания, ностальгия. Это я так, чтобы расслабиться выделил и здесь поместил. Едем дальше.
Нет, извините, дальше мы не едем. Дальше мой мозг отказывается что-либо воспринимать.
Может, кто-нибудь продолжит?
З.Ы. Этот текст создан на основе одного только раздела хелпа. Что творится в других — страшно себе представить.
З.Ы.Ы. Защитникам Блэкбокса. Блэкбокс — студенческая поделка и ничего более. Тот факт, что ее исходные коды скоро будут раскрыты лучше ее не делают. Здесь уже приводилась в качестве примера среда Eclipse. Для Линуха есть KDevelop. Да о чем я говорю? Сцинтилла, используемая в RSDN@Home — сложнее, чем вся среда BlackBox. С подсветкой синтаксиса. С поддержкой Code Completion.
Среда BlackBox — отбросы, не имеющие право на существование в современном программистском обществе. Коммандная строка и то лучше.
Это было о среде.
Теперь об Обероне.
Оберон возвел класс в ранг модуля, но от необходимых классу атрибутов (public/private) он не отказался. Зато такое возведение требует от программиста знания всех full-qualified names для всех модулей/обьектов/компонентов/классов/свойств/полей в системе, что не есть гуд, когда система разрастается.
Что делать при конфликте имен модулей? Что делать, если я хочу одну и ту же форму использовать разными модулями? Почему пропагандируется программирование от формы? Оставшиеся вопросы уже былм заданы в соседних ветках.
Вывод. BlackBox нельзя давать детям (да и кому бы то ни было) в руки. Учить программировать на Обероне нельзя, так как ничего нового (особенно на начальном уровне) он не дает, а психику поломать может.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, VladD2, Вы писали:
VD>>Вообще-то она и приципиально отличается, и никаких дотнетов не поддерживает. Да и С++ там урод уродом.
U>Это понятно, я имею в виду, что интерфейс в шестерке был по удобству сравним с семеркой, что ни сколько не мешало ей бегать на очень дохлых компах. Это я к тому, что ограничения по памяти и мощности проца нельзя считать оправданием внешней убогости.
Добавим к этому, что info21 планирует заменить Turbo Pascal/Turbo C блэкбоксом, а уже они намного совершеннее в плане юзабилити
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Poisson, Вы писали:
P>>Просто для сравнения сделал скриншотик squeak smalltalk: здесь. VD>А просто для разнообразия сделать его по меньше и залить на РСДН не хочешь?
Зачем? Хоть на народе, хоть на RSDN — скриншотику все равно. А если сделать сильно поменьше,
то ничего видно не будет.
мдя... посмотрел я на то что было написано здесь, сравнил с тем что было написано в пользу БлэкБокса... и понял, что такое настоящий пиар
и вот этим изделием предполагается травмировать неокрепшую детскую психику?
Здравствуйте, VladD2, Вы писали:
VD>Вот здесь: http://www.oberon.ch/blackbox.html есть ссылка на среду программирования BlackBox. Весит это добро довольно много (около 8 метров), но все же не откажите в любезности, скачайте это творение рук ученых и попробуйте на нем поработать. Ну, создать пару примитивных программ, скомпилировать их и запустить на выполнение. При этом просьба стараться не обращаться к документации. Помните! Это среда рассчитана на обучение детей, а они не только только не любят читать документацию, но и плохо умеют это делать на английском языке.
VD>В общем, цель этого тэст-драйва получить максимальное количество впечатлений и поделиться оными в данной теме. За самое яркое и выразительное описаний своих эмоций будет поставлено неимоверное количество оценок.
Начнём с того, что виндовский инсталлятор у них кривой.
Сделали self-extracting winzip exe, и что дальше? Ну распаковали чего-то-там во временный каталог (на многопользовательских виндах путь до него неслабый), и всё.
Ладно, сетап. Нашёл setup.exe и запустил. А что нужно делать с так называемым сервиспаком?
У меня не получилось самостоятельно родить что-то. Полез в туториал...
Перекуём баги на фичи!
Re: Как запустить Блэкбокс и выполнить первую программу
Для того чтобы не оказаться в роли мартышки из басни "Мартышка и очки", перед работой с системой BlackBox нужно ознакомится со следующей документацией:
Работа с текстами программ
1) Редактирование и форматирование
2) Как писать служебные слова из прописных букв
3) Организация файлов в Блэкбоксе
Компилирование и отладка
1) Простейший цикл разработки (Некоторые заповеди)
2) Как компилятор сообщает об ошибках
3) Перезагрузка модулей
4) Как происходит аварийная остановка программы
Прочие вопросы
1) Простейший вывод информации (средства модуля StdLog)
2) Рабочий журнал (Log)
3) Как организована документация в Блэкбоксе
А то тут нашлись некоторые, программу написали в документ журнала работы (в Log) а потом удивлялись почему компилятор тоже в этот же документ что-то пишет (так это же log!!!).
На счет проектов. Весь BlackBox это ОДИН проект (точнее такого понятия как проект в оберонах не существует — есть одна
МОДУЛЬНАЯ РАСШИРЯЕМАЯ СИСТЕМА). Для того чтобы завести другой проект, нужно либо просто скопировать всю папку BlackBox-а в другую папку — папку нового проекта, либо пользоваться механизмом вторичных дирректорый (про вторичные дирректории подробно изложено на сайте info21).
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Для того чтобы не оказаться в роли мартышки из басни "Мартышка и очки", перед работой с системой BlackBox нужно ознакомится со следующей документацией:
[ skip links ]
СГ>А то тут нашлись некоторые, программу написали в документ журнала работы (в Log) а потом удивлялись почему компилятор тоже в этот же документ что-то пишет (так это же log!!!).
.
СГ>На счет проектов. Весь BlackBox это ОДИН проект (точнее такого понятия как проект в оберонах не существует — есть одна СГ>МОДУЛЬНАЯ РАСШИРЯЕМАЯ СИСТЕМА). Для того чтобы завести другой проект, нужно либо просто скопировать всю папку BlackBox-а в другую папку — папку нового проекта, либо пользоваться механизмом вторичных дирректорый (про вторичные дирректории подробно изложено на сайте info21).
Вплоть до "Использование цвета и т.п." все хорошо. Далее
Цвет — мощная помощь в разметке визуальной информации
Очень верно
Например, удобно использовать цвет для новых, еще не проверенных вставок в программный текст. Можно определенным цветом выделять комментарии, и т.п. Хорошо выделять, скажем, красным цветом символы экспорта (звездочки и минусы после идентификаторов) в виду их большой важности
...
Кроме того, рекомендуется использовать курсив для комментариев, а жирным шрифтом выделять идентификаторы процедур в их заголовках, а также операторы RETURN и EXIT
Это называется подсветка синтаксиса, которая должна предоставляться средой и должна быть настраиваема из среды.
Имя модуля CommObxStreamsClient разбивается на префикс Comm (имя подсистемы) и собственно имя модуля и соответствующих файлов — ObxStreamsClient. Тогда исходный текст хранится в Comm/Mod/ObxStreamsClient.odc, кодовый файл — в Comm/Code/ObxStreamsClient.ocf, а символьный файл — в Comm/Sym/ObxStreamsClient.ocf
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Mamut, Вы писали:
M>>Turbo Pascal/Turbo C блэкбоксом, а уже они намного совершеннее в плане юзабилити
СГ>Прочитайте вот это: http://www.rsdn.ru/Forum/Message.aspx?mid=878133&only=1
Здравствуйте, Poisson, Вы писали:
P>Здравствуйте, Mamut, Вы писали:
M>>Весело, красиво. Жутко непонятно. Будем ковырять дальше P>Как поковыряешь, расскажи о впечатлениях — интересно.
Интересно, цветно и необычно.
В самом начале пытался воспринимать, как среду разработки, и она мне не понравиляась. Потом неожиданно дошло, что это — (операционная) система. Все встало на свои места. К сожалению, нет времени углубиться в изучение Smalltalk'a
Что мне действительно понравилось — http://squeakland.org. Вот, что детям давать надо!
Здравствуйте, Кодт, Вы писали:
К>Ладно, сетап. Нашёл setup.exe и запустил. А что нужно делать с так называемым сервиспаком?
Да уж сервиспак у них отдельная загадка. Я его открыл в "среде" поглядел, но тоже не очень понял куда его сувать.
К>У меня не получилось самостоятельно родить что-то. Полез в туториал...
Ну, я даже хэлоу-волд смог запустить. Но чего это стоило!
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как запустить Блэкбокс и выполнить первую программу
А что такого? Это в Си++ время компиляции огромно, а в оберонах глазом моргнуть не успеешь.
Ctrl+K — компиляция
Ctrl+E — переход к следующей ошибке.
Так как компиляция практически мгновенная (человеком такой маленький интервал времени не воспринимается), то какая разница что нажимать Ctrl+K или Ctrl+E ? А если предыдущую ошибку исправил, но случайно внес другую ошибку, то Ctrl+K — ее сразу же покажет. Так что лучше жать на Ctrl+K.
Re[4]: Как запустить Блэкбокс и выполнить первую программу
M>Устраняйте самую первую ошибку — и сразу компилируйте снова, нажимая Ctrl+K
Это наследственная беда компиляторов паскаля.
Так было и в TP вплоть до 7 версии.
Связано с тем, что компилятор "учебно-тренировочный", а восстановление контекста после ошибки — дело нетривиальное.
Проще парсеру сразу выпасть, чем после спотыкания ехать дальше.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Так как компиляция практически мгновенная (человеком такой маленький интервал времени не воспринимается), то какая разница что нажимать Ctrl+K или Ctrl+E ? А если предыдущую ошибку исправил, но случайно внес другую ошибку, то Ctrl+K — ее сразу же покажет. Так что лучше жать на Ctrl+K.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Так как компиляция практически мгновенная (человеком такой маленький интервал времени не воспринимается), то какая разница что нажимать Ctrl+K или Ctrl+E ? А если предыдущую ошибку исправил, но случайно внес другую ошибку, то Ctrl+K — ее сразу же покажет. Так что лучше жать на Ctrl+K.
Не смешите тапочки.
Я несколько лет программировал на TurboPascal 5.5 — 7. Причём делал не хелловорлды, а здоровенную программу.
Уверяю тебя, цена перекомпиляции тяп-за-ляпом в большом проекте может измеряться часами.
Достаточно, например, поменять интерфейсную часть в часто используемом модуле, чтобы пришлось подтягивать все остальные, каждый в ста местах.
Перекуём баги на фичи!
Re[5]: Как запустить Блэкбокс и выполнить первую программу
M>>Устраняйте самую первую ошибку — и сразу компилируйте снова, нажимая Ctrl+K
К>Это наследственная беда компиляторов паскаля. К>Так было и в TP вплоть до 7 версии. К>Связано с тем, что компилятор "учебно-тренировочный", а восстановление контекста после ошибки — дело нетривиальное. К>Проще парсеру сразу выпасть, чем после спотыкания ехать дальше.
Если я не ошибаюсь, то, начиная с языка Modula-2, процедуры заканчиваются не
END;
, а
END ProcName;
именно для того, чтобы компилятор мог пропустить кусок кода, относящегося к данной процедуре, содержащей ошибку, и продолжить компиляцию дальше.
Насчет данной рекомендации точно не скажу как там с компиляторов в BlackBox'e, но не исключено, что это просто рекомендация в целях перестраховки. Надо просто проверить, сможет ли компилятор сообщить сразу о нескольких ошибках.
А вот, кстати, в своем реальном проекте на С++ я так и делаю: исправляю первую ошибку (если она не совсем уж тривиальная) и сразу компилирую снова, потому как фиг его знает, сколько мне выпало сообщений о реальных ошибках, а сколько — наведенные.
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Кодт, Вы писали:
К>Не смешите тапочки. К>Я несколько лет программировал на TurboPascal 5.5 — 7. Причём делал не хелловорлды, а здоровенную программу. К>Уверяю тебя, цена перекомпиляции тяп-за-ляпом в большом проекте может измеряться часами. К>Достаточно, например, поменять интерфейсную часть в часто используемом модуле, чтобы пришлось подтягивать все остальные, каждый в ста местах.
Во-первых, а при чем тут ТурбоПаскаль, если речь идет об оберонах?
Во-вторых, а что Вы, собственно, хотите если поменяли интерфейсную часть в часто используемом модуле? Разумеется Вам после этого надо все перекомпилировать, а как же еще-то?
Re[5]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Во-первых, а при чем тут ТурбоПаскаль, если речь идет об оберонах?
Потому что болезнь одна и та же: компилятор останавливается на первой проблеме.
СГ>Во-вторых, а что Вы, собственно, хотите если поменяли интерфейсную часть в часто используемом модуле? Разумеется Вам после этого надо все перекомпилировать, а как же еще-то?
А так, что в С я получу ошибки по всем файлам, на которых это отразилось, и смогу залпом поправить. На паскале же если там фигня в 100 местах, я 100 раз нажму.
Причём нужно заметить, что
1) языки С/С++ более затейливы грамматически, чем паскаль сотоварищи — однако же для них научились восстанавливать контекст после ошибок. Когда TP перешёл рубеж и из преимущественно учебной среды стал промышленной — т.е. Delphi — в нём эту фичу тоже быстренько прикрутили.
2) компиляторы С/С++ имеют регулировку — после какого числа ошибок в файле останавливаться. Слишком мало — неудобно для разработчика. Слишком много — есть шанс получить вагон мусора (из-за неточного восстановления контекста).
Перекуём баги на фичи!
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Во-первых, а при чем тут ТурбоПаскаль, если речь идет об оберонах?
К>Потому что болезнь одна и та же: компилятор останавливается на первой проблеме.
Да-а-а, а еще значит говорите, что посмотрели BlackBox... Ничего Вы его не посмотрели, раз такое пишите. BlackBox выдает все ошибки, а не только первую.
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Насчет данной рекомендации точно не скажу как там с компиляторов в BlackBox'e, но не исключено, что это просто рекомендация в целях перестраховки. Надо просто проверить, сможет ли компилятор сообщить сразу о нескольких ошибках.
Здравствуйте, Кодт, Вы писали:
К>А что нужно делать с так называемым сервиспаком?
С сервиспаком ничего делать не надо. Его нужно просто стереть.
BB ведь на Обероне написан?
Тогда багов там быть не может в принципе и сервиспаки не нужны по определению.
Re[9]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Да-а-а, а еще значит говорите, что посмотрели BlackBox... Ничего Вы его не посмотрели, раз такое пишите. BlackBox выдает все ошибки, а не только первую.
Сергей, простите, но не стоит так надрываться и с пеной у рта доказывать, что Oberon и т.п. имеют право на жизнь и т.д.
ИМХО, в нем заложены несколько иниые концепции, нежели в студии, делфи и пр. Да и не предназначен он для разработки Wibdows-приложений.
Здравствуйте, VladD2, Вы писали:
VD>В общем, цель этого тэст-драйва получить максимальное количество впечатлений и поделиться оными в данной теме. За самое яркое и выразительное описаний своих эмоций будет поставлено неимоверное количество оценок.
Хм, а не скажешь ли мне... по идее — не офтоппик должно быть
Вот у меня пока нету даже демы VisualStudio2005 но когда я общаюсь с тем, что у меня есть для C# я чё то не нахожу примитивных возможностей — хождения в исходниках по именам как гиперссылкам; интеллисайнса, в котором выпадает не все подряд, а то что мне нужно; всяческих дебагерных фич, давно уже присутствующих у Борландов... что-то мне это напоминает выдвиннутое сравнение, только немного со стороны
То что у меня стоит и называется VS явно по-моему мнению уступает в ловкости рук, предлагаемой BDS2.0 (расшифрую — IDE Delphi8.Net)
Так что не все коту масленница чур RationalRose2010 для улучшения производительности труда не предлагать
Здравствуйте, Mamut, Вы писали:
M>Еще раз. Господа Оберонщики о понятии проект слышали?
BlackBox — это и есть один проект, или точнее сказать одна расширяемая модульная система. Хотите получить еще одну расширяемую модульную систему — скопируйте BlackBox в другую папку и расширяйте уже другими модулями. Впрочем, сам BlackBox.exe и некоторые общие модули копировать в отдельный каталог не обязательно, можно пользоваться механизмом вторичных директорий. Подробнее об этом на сайте info21 (там просто BlackBox.exe надо запустить с параметром "имя другого корневого каталога" и он будет работать с модулями находящимися в том каталоге, а если не будет находить там некоторых модулей, то будет искать их в своем главном каталоге, т.е. там где он сам находится. То есть общие модули можно держать в главном каталоге BlackBox-а, а свои "проекты" располагать во вторичных каталогах).
M>Оберон возвел класс в ранг модуля, но от необходимых классу атрибутов (public/private) он не отказался. Зато такое возведение требует от программиста знания всех full-qualified names для всех модулей/обьектов/компонентов/классов/свойств/полей в системе, что не есть гуд, когда система разрастается.
Как класс можно возвести в ранг модуля? Ерунда какая-то.
Модуль — это первичное понятие. Модуль является:
1) Единицей исполнения (нет никаких других исполняемых единиц кроме модуля)
2) Единицей компиляции (нельзя скомпилировать нечто размером меньше чем модуль)
3) Единицей инкапсуляции (только модуль может гарантировать НАСТОЯЩУЮ инкупсуляцию, инкапсуляция на уровне класса — сродни соглашению, так как взглянув на исходный код класса все его приватные члены сразу видно, а к (скомпилированному) модулю прилагается только символьный файл (хедер) в котором написано только то что всем остальным модулям видно, так что для того чтобы взломать инкапсуляцию модуля нужно будет его дизассемблером ковырять, а так просто ничего не увидишь).
4) Структурной единицей архитектуры программы (граф импорта модулей друг другом ацикличен, таким образом модули всегда иерархически организованы).
5) Самой крупной структурной единицей в языке программирования (весь код программы пишется внутри модулей)
6) Динамически загружается (и линкуется) во время работы программы (а, также, динамически выгружается)
7).....еще можно много чего понаписать...
*Еще модули маленькие. Я имею в виду следующее. Обычное средних размеров приложение как правило состоит не из одного единственного (исполняемого) модуля, а из нескольких десятков. В этом состоит разница между оберонистыми модулями и сборками в .NET или пакетами в Java. Одна дотнетовская сборка по размеру эквивалентна нескольким десяткам оберонистых модулей. Это нужно, по крайней мере, по двум причинам:
1) Большое количество модулей потом можно будет использовать в других приложениях. Один раз написанный модуль остается в системе навсегда расширяя ее.
2) Решается проблема сложности системы. Дело в том что график сложности системы имеет U-образную форму зависимости от размера структурной единицы:
Если структурные единицы системы маленькие, значит между ними много связей, сложность системы растет вместе с ростом количества связей. Если структурные единицы системы крупные, то сложность системы растет вместе с ростом размера структурных единиц системы. Существует оптимум — когда размер структурной единицы системы еще не так велик, чтобы стать проблемой, а с другой стороны когда их количество еще не так велико чтобы запутаться в связях. Поэтому оберонистые модули гораздо мельче чем дотнетовская сборка, но гораздо больше чем один класс. Модуль содержит в себе несколько классов, а "проект" содержит в себе несколько десятков модулей.
M>Что делать при конфликте имен модулей?
Эта проблема решается только одним способом — давайте модулям разные имена. А Вы как думали? Кроме того, для упрощения работы с длинными именами в Component Pascal существуют псевдонимы имен модулей:
Mmm и Nnn — это псевдонимы модулей с длинным именем.
M>Что делать, если я хочу одну и ту же форму использовать разными модулями? Почему пропагандируется программирование от формы? Оставшиеся вопросы уже былм заданы в соседних ветках.
Понятие формы в BlackBox кардинальным образом отличается от понятия формы, например, в Delphi. Дело в том, что форма в Delphi — это экемпляр класса, и таких экземпляров можно наштамповать сколько угодно. Сам текст класса генерируется генератором кода в design-time. В БлэкБоксе форма — это не экземпляр класса и там нет никакого design-time. Форма — это настоящий "живой" объект в который динамически агрегированны другие объекты — контролы, текст, графика... Все эти объекты ПЕРСИСТЕНТНЫ (потомки от абстрактного типа Strores.Store) таким образом форма в БлэкБоксе сохраняется просто напросто в самый обычный оберон-документ (хранилище сериализованных объектов ссылающихся друг на друга произвольным образом). Другими словами форма — это объект, а не класс объектов. Не существует никакого класса форм. Если хотите заиметь еще одну точно такую же форму, то Вам надо ее КЛОНИРОВАТЬ. И это гораздо круче, чем иметь класс этой формы, так как разделение процесса разработки на design-time и run-time порочно, например в Смалтолке его тоже нет.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>...разделение процесса разработки на design-time и run-time порочно, например в Смалтолке его тоже нет...
1. С этого, кстати, надо было начинать рассказывать об Обероне.
2. Это, как минимум, весьма спорное утверждение.
А дебуг — тоже порочен, кстати? То есть лично Вы согласны с этим утверждением?
сам слушаю и вам рекомендую: @winamp
FAQ — це мiй ай-кью!
Re[8]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Кодт, Вы писали:
К>А так, что в С я получу ошибки по всем файлам, на которых это отразилось, и смогу залпом поправить. На паскале же если там фигня в 100 местах, я 100 раз нажму.
А рулез, как обычно, третий вариант. Ставим решарпер и наслаждаемся подсветкой большинства ошибок в рилтайме в процессе набора текста. Если БлекБокс так крут, то с примитивной грамматикой оберона могли бы без проблем такое сделать.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>*Еще модули маленькие. Я имею в виду следующее. Обычное средних размеров приложение как правило состоит не из одного единственного (исполняемого) модуля, а из нескольких десятков. В этом состоит разница между оберонистыми модулями и сборками в .NET или пакетами в Java. Одна дотнетовская сборка по размеру эквивалентна нескольким десяткам оберонистых модулей. Это нужно, по крайней мере, по двум причинам:
1) Размер сборки в дотнете можно делать каким угодно. Хоть по сборке на класс. Вот только никто так не делает, потому что неудобно.
2) Package в джаве вобще чисто логическая сущность. Физически она не существует. Единицей хранения в джаве является класс, что все таки меньше чем модуль.
СГ>Эта проблема решается только одним способом — давайте модулям разные имена.
. А если два разных продукта используют одинаковый модуль?
AVK>. А если два разных продукта используют одинаковый модуль?
Это называется повторное использование компонента. В этом состоит смысл компонентно ориентированного программирования — один модуль используется несколькими "проектами".
Здравствуйте, Сергей Губанов, Вы писали:
AVK>>. А если два разных продукта используют одинаковый модуль?
СГ>Это называется повторное использование компонента. В этом состоит смысл компонентно ориентированного программирования — один модуль используется несколькими "проектами".
Отлично. А вот теперь начинается самое интересное — что если два модуля используют третий, причем разных версий?
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>А дебуг — тоже порочен, кстати? То есть лично Вы согласны с этим утверждением?
Да лично я согласен. Дебаг все ошибки все равно не найдет. Кое какие ошибки будут сыпаться у пользователя в релизе. И он будет гневно обращаться в службу сопровождения, служба сопровождения будет передавать это дело программистам, а те будут пытаться симитировать ситуацию возникшую у пользователя. Все это долго и без гарантии, что они ее таки симитируют.
Я поступаю следующим образом: каждую процедуру окружаю дополнительным блоком try except end (на работе я пишу на Delphi), в котором дописываю к сообщению об ошибке еще и полное имя процедуры (вместе с именем модуля) и, иногда, некоторые значения локальных параметров; и перевозбуждаю это исключение дальше. А также записываю это в журнал ошибок. Таким образом в журнале ошибок оказывается весь стек вызовов процедур по которым прокатилось исключение. Оставляю все это дело в релизе. Если в друг у пользователя программа грохнется, то мне сразу будет известно в каком месте и почему это случилось. Да и сам пока программу пишу — уже много раз это очень помогало. Ведь не надо голову ломать где именно и почему именно произошла ошибка — все сразу видно по логу.
В Component Pascal с одной стороны все проще, там мне лично не пришлось бы каждую процедуру окружать блоком try except end (там и блока то такого нет), там все "автоматом" и так сделано и в случае ошибки весь стек вызовов процедур со ВСЕМИ локальными переменными (в виде гиперссылок) показывается. То есть с точки зрения разработки — этого хватает на 100%. С другой стороны, пользователю же исходников давать не будешь, так что если прога грохнется у пользователя, то максимум что удастся узнать — точку падения, но не весь стек вызовов процедур, а это уже немного хуже. Впрочем к вопросу о дебагере это отношения все равно не имеет.
Здравствуйте, AndrewVK, Вы писали:
AVK>Отлично. А вот теперь начинается самое интересное — что если два модуля используют третий, причем разных версий?
В смысле есть два разных третьих модуля, но названия у них одинаковые? А что — а ничто! Крышка. Не будет работать нифига. Надо будет переписывать.
Re[9]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Кодт, Вы писали:
К>>А так, что в С я получу ошибки по всем файлам, на которых это отразилось, и смогу залпом поправить. На паскале же если там фигня в 100 местах, я 100 раз нажму.
AVK>А рулез, как обычно, третий вариант. Ставим решарпер и наслаждаемся подсветкой большинства ошибок в рилтайме в процессе набора текста. Если БлекБокс так крут, то с примитивной грамматикой оберона могли бы без проблем такое сделать.
А что интересная идея — повесить компиляцию на событие любого редактирования текста...
Здравствуйте, Сергей Губанов, Вы писали:
ЗХ>>А дебуг — тоже порочен, кстати? То есть лично Вы согласны с этим утверждением?
СГ>Да лично я согласен. Дебаг все ошибки все равно не найдет.
С одной стороны. А с другой — весьма, имхо, полезное средство.
Мой вопрос был к тому, что аргументация в стиле "автомобиль может сбить человека, поэтому надо запретить автомобили" — порочно. А отсутствие дебуггера в BlackBox'е аргументируется именно так.
Здравствуйте, Сергей Губанов, Вы писали:
AVK>>Отлично. А вот теперь начинается самое интересное — что если два модуля используют третий, причем разных версий?
СГ>В смысле есть два разных третьих модуля, но названия у них одинаковые?
Может даже один и тот же, но первый и второй модуль отлаживали с использованием разных вариантов третьего.
СГ> А что — а ничто! Крышка. Не будет работать нифига. Надо будет переписывать.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Ctrl+K — компиляция
А "K" — это "Кampilatcia" ?
И почему было не завести какую-нибудь фиксированную точку старта? Тогда можно было бы как во всех современных средах сделать шорткат на запуск под отладкой. Хотя да. Отладки же нет.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Так как компиляция практически мгновенная (человеком такой маленький интервал времени не воспринимается),
Гы. Это потому что приложения микроскопические. Дотнетный код тоже пока мелки мгновенно компилируется. А когда в солюшене по 10 огромных проектов зависимых от какой-нить кодогенерации, то этот мгновение может занимать по нескольку секунд. Хотя это в прочем уже детали.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Кодт, Вы писали:
К>Это наследственная беда компиляторов паскаля.
А причем тут наследство других компиляторов? Каждый компилятор пишется отдельно. И каждый может обработывать ошибки как хочет. Это просто халтура тех кто делал компилятор. Надо было генераторы парсеров использовать. Тогда таких бы проблем было меньше.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Во-вторых, а что Вы, собственно, хотите если поменяли интерфейсную часть в часто используемом модуле? Разумеется Вам после этого надо все перекомпилировать, а как же еще-то?
Я думаю, он это к тому, что сказки про реалтайм-компиляцию выглядят довольно смешно. И все определяется объемом кода. А стало быть такая вещь как список ошибок был бы не лишним.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Если я не ошибаюсь, то, начиная с языка Modula-2, процедуры заканчиваются не K_O>
K_O>END;
K_O>
, а K_O>
K_O>END ProcName;
K_O>
именно для того, чтобы компилятор мог пропустить кусок кода, относящегося к данной процедуре, содержащей ошибку, и продолжить компиляцию дальше.
Что-то ты не дооценивашь компиляторы. Они и так способны пропускать очень многое и без таких банальных подсказок. Тем же компиляторам Шарпа от МС и Явы от Сана или IBM-а не требуется никаких подсказок. Они и так очено качественно обнаруживают и диагностируют ошибки.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Кстати, не известно почему Борланд сделала компилятор именно Паскаля, а не Модулы. Модула же лучше.
Потому-что они сделали свой язык с синтаксисом популярного в те времена Пасклая. А модула так популярности и не получила. Хотя с точки зрения структурного программирования она действительно выглядела лучше. Даже лучше оберона.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали: СГ>А что интересная идея — повесить компиляцию на событие любого редактирования текста...
Ну, как бы этой идее уже N лет. Сейчас уже как-то она считается непременным признаком полноценной среды разработки.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, AndrewVK, Вы писали:
К>>А так, что в С я получу ошибки по всем файлам, на которых это отразилось, и смогу залпом поправить. На паскале же если там фигня в 100 местах, я 100 раз нажму.
AVK>А рулез, как обычно, третий вариант. Ставим решарпер и наслаждаемся подсветкой большинства ошибок в рилтайме в процессе набора текста. Если БлекБокс так крут, то с примитивной грамматикой оберона могли бы без проблем такое сделать.
Тут дело не в крутизне, а в том, что
1) шарп востребован
2) дофига пользователей-энтузиастов и фирм, обслуживающих менее шаловливых потребителей шарпа
3) наконец, MS только приветствует жизнь сообщества шарповодов
То есть — приличный человеческий ресурс.
А у Оберона — такого нет. Соответственно, не работает закон больших чисел, создающий естественный отбор фич и багов.
В результате ещё на ранней стадии в разработке системы были заложены препятствия, которые дополнительно отпугивают людей (в частности, сомнительный формат файлов и структура каталогов).
Оберон мог бы стать привлекательным, если бы было отчётливо ясно, какую нишу он занимает для разработчиков.
Что он даёт? Типобезопасность — есть и в С++, и в явке, и в шарпе. Кому хочется супер-безопасность — пожалуйста, Ада, Эйфель. Модульность — возможно, неплохая задумка была отвратительно реализована в блэкбоксе. Синтаксическая стройность — ну, так скажем, сравнима с языками группы паскаля и си. Скорость разработки — троюродный брат, Дельфи, рулит и побеждает.
Какие-то особые парадигмы? Открытость и гибкость для разных парадигм? (Например, ФП, ЛП, КА... — насколько легко это воплощать). Совместимость на уровне API? Интегрируемость? Ведь почему C++ так популярен: его к чему угодно можно прицепить на уровне сишных API, и в него много чего можно встроить. Многие скриптовые языки сделаны так, что их можно прицепить к другим программам.
Последний пункт — из той же области, что и "рулез третьего варианта". Мало потребителей — мало исполнителей — никому не нужно — ну и хрен с этой фичей.
Языкам Lisp и Smalltalk в своё время крупно повезло: при том, что они достаточно академичные, в момент зарождения они оказались гораздо красивее и практичнее россыпи откровенных поделок. Где-то в конце 60-х и в 70-х был бум всяких разных языков, заточенных под специальные задачи — настоящая вавилонская башня.
Если бы лисп появился сейчас, ему пришлось бы конкурировать с подобными скриптовыми языками — тем же питоном, руби, васиком наконец. И не факт, что он набрал бы достаточно голосов для развития.
А в те светлые времена... Подумать только: транслятор проще пареной репы, работает на чём угодно, выразительная мощность — ну не сравнить с ресурсоёмкостью. Да ещё и "базис под тезис подвели" — ФП (у смолтока — ООП). Сказка!
Может ли Оберон оказаться такой же путеводной звездой, как эти? Нет.
Вот Алгол-60, Паскаль — да. Это действительно отцы-основатели.
Я сейчас подумал: а ведь с религиями подобная вещь случается. Раз в несколько сотен лет происходит на Земле СОБЫТИЕ — приходит кто-то, несущий свет миллионам, и не только на короткий миг, но на долгое время.
Не стоит думать, что между этими вспышками духовная жизнь человечества замирает: нет, огоньки зажигаются и горят всё время, но свет их не столь очевиден. Мастера дзен могли умереть спокойно, если передавали Традицию хотя бы одному ученику.
Но в то же время слава великих деяний не даёт покоя фанатично настроенным. Так появляются секты, чьи лидеры уверяют — мол, только здесь Истина. Появляются церкви, монополизирующие или, можно сказать, патентующие Истину, принесённую тем, кто был в основе. (Jesus Christ incorporated — звучит! Надо Ватикану за деньги продать). Наконец, появляются лжепророки.
Не хочу затрагивать низменные составляющие такого недостойного поведения людей — ну там власть, деньги, всё такое.
Бог с ними, наверное, Дедушка-На-Облаке знает что делает.
Но вот отчётливо есть общее: фанатизм. Это не ругательство, это такой факт. Искажение сознания, при котором какая-то идея приобретает несвойственный ей вес. В пределе — вытесняет все остальные идеи как недостойные.
Как, например, РПЦ: роль её как платформы для укрепления духа россиян безусловна. Роль Убежища для многих искателей — сеть монастырей, сообщество святых отцов — безусловна. Попытки оградить от некачественного "духовного товара" — дело правое, но уже с перегибами (претензия на суд последней инстанции). А идеи государственности — откровенный перебор (впрочем, здесь уже низкие составляющие более чем влияют).
Так вышло и с Обероном на RSDN. Единственный эксперт по этому языку здесь — Сергей Губанов — к сожалению, оказался не просто последователем, а фанатичным приверженцем. Что и вызвало такую же жёсткую ответную реакцию.
(Сергей, прошу не обижаться. Во-первых, это просто повод делать "поправку на ветер" — как тебе, так и собеседникам. Во-вторых, мне кажется, этот приступ фанатизма не фатальный).
Здравствуйте, Mamut, Вы писали:
M>Предлагаю наградить меня орденом "За попытки полюбить Блэкбокс" Третьей Степени с лентой и именным пистолетом
Ты герой, однозначно! И наградить тебя следует за доблесть, мужество, а главное, выдержку! Только вот пистолет не дам. И не проси. Сядешь опять за BlackBox, нервы не выдержат, да и затстрелишься к едреней фене.
Любая сложная технология неотличима от волшебства. (Артур Кларк)
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
К>>Это наследственная беда компиляторов паскаля.
VD>А причем тут наследство других компиляторов? Каждый компилятор пишется отдельно. И каждый может обработывать ошибки как хочет. Это просто халтура тех кто делал компилятор. Надо было генераторы парсеров использовать. Тогда таких бы проблем было меньше.
У Паскаля операторная грамматика (про Оберон не скажу, но видимо, тоже), что позволяет делать очень простой парсер. К сожалению, простой парсер научить телепатии трудно...
MA>Вот у меня пока нету даже демы VisualStudio2005
Так скачай. Ссылка давали сто раз. Только лучше не качай последнюю полубэту. Она говорят дико глючная.
MA> но когда я общаюсь с тем, что у меня есть для C# я чё то не нахожу примитивных возможностей — хождения в исходниках по именам как гиперссылкам; интеллисайнса, в котором выпадает не все подряд, а то что мне нужно; всяческих дебагерных фич, давно уже присутствующих у Борландов... что-то мне это напоминает выдвиннутое сравнение, только немного со стороны
Ну, каждый кулик свое болото хвали... Ты скачай ReSharper и погляди. Думаю, после этого на Борлондовские продукты будет тошно смотреть. Ну, или как уже упоминалось 2005-ю студиню.
Ну, а предварительно скачай БлэкБокс. После этого ты ТурбоПаскаль за щастье примешь.
MA>То что у меня стоит и называется VS явно по-моему мнению уступает в ловкости рук, предлагаемой BDS2.0 (расшифрую — IDE Delphi8.Net)
Ну, если до этого переработал на борлондовских продуктах, но возможно. А так. У беорланда с редактированием текста всегда хреново было. 8-ка более мнее, но тоже многого нехватает. Тут все зависит от количества долбимого текста. Чем больше долбиш, тем больше обычно понимашь тех кто писл студию.
MA>Так что не все коту масленница чур RationalRose2010 для улучшения производительности труда не предлагать
А кто-то педлагал? Это все же несколько иное. Хотя и в борлондовских продуктах, и в нуовых МС-ных похожие вещи тоже есть.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, achp, Вы писали:
A>Здравствуйте, Кодт, Вы писали:
К>>Jesus Christ incorporated — звучит! Надо Ватикану за деньги продать
A>Они давно уже это сами продают по всему миру. Каждого 25 декабря.
Напомнило мне. В 97-м в Штатах христианская общественность была всколыхнута. Некий художник нарисовал — на полном серьезе — распятого Санта Клауса и вывесил на всеобщее обозрение. Кстати, здесь:
1997: Artist Robert Cenedella drew a painting of a crucified Santa Claus. It was displayed in the window of the New York's Art Students League and received intense criticism from some religious groups. His drawing was a protest. He attempted to show how Santa Claus had replaced Jesus Christ as the most important personality at Christmas time.
И что бы вы подумали? "Православные" (в смысле правильные) христиане в Штатах обозвали это ересью и мракобесием. И продолжили праздновать Рождество как обычно.
ЗЫ. В Штатах два главных shopping days с наибольшими обьемами продаж — это за день до Рождества и день сразу за Рождеством (когда все подарки обменивают).
Здравствуйте, Кодт, Вы писали:
К>У Паскаля операторная грамматика (про Оберон не скажу, но видимо, тоже), что позволяет делать очень простой парсер. К сожалению, простой парсер научить телепатии трудно...
Что такое "операторная грамматика" науке не извесно. А простота парсинга Паскаля определяется тем, что этот язык полностью удовлетворяет требованиям LL(1)-парсеров и его можно парсить банальным рекурсивным спуском без откатов или других вывертов. Понятно что это позволяет обходиться без использования генераторов парсеров. Но это же не значит, что именно так и нужно поступать? В общем, кроме как халтурой — это объяснить больше ничем нельзя.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Мой вопрос был к тому, что аргументация в стиле "автомобиль может сбить человека, поэтому надо запретить автомобили" — порочно. А отсутствие дебуггера в BlackBox'е аргументируется именно так.
А это такая политика в стиле МС. Пока у нас нет чего-то, то мы во всю глотку орем, что это вредное излишество. Когда это что-то появляется, то орем что без этой вещи жить нельзя.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Это называется повторное использование компонента. В этом состоит смысл компонентно ориентированного программирования — один модуль используется несколькими "проектами".
А можно услышать твое определение компонента и компонентного подхода в производистве ПО?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, bkat, Вы писали:
B>С сервиспаком ничего делать не надо. Его нужно просто стереть. B>BB ведь на Обероне написан? B>Тогда багов там быть не может в принципе и сервиспаки не нужны по определению.
Боюсь 99% народов так и сделают. Я тоже тупо смотрел на этот файл думая куда ж его...
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Судя по тому, что данный термин встречается в гугле ровно 2 раза (а второй так и вовсе не удается найти), то я склоннен думать, что этот наукобразный термин не вошел в реальную жизнь.
Судя по описанию из этого документа данная техника пригодна только для рабзобра выражений. Для парсинга же нужен хотя бы LL(1)-парсер.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
VD>А можно услышать твое определение компонента и компонентного подхода в производистве ПО?
Зачем мое? Оно, как бы, официально десяток лет назад было дано в статье Клеменса Шиперского. И реализовано в языке Component Pascal. Жаль что ссылку на статью не могу дать (битая ссылка, куда-то переместили ее, а куда я не знаю). Вот тут его другие статьи, тоже по компонентам: http://www.sdmagazine.com/columnists/szyperski/
Clemens Szyperski is a research software architect with Microsoft Research and author of the Jolt Award-winning book Component Software: Beyond Object-Oriented Programming (Addison-Wesley, 1998). You can reach him through Software Development magazine.
До того как он перешел работать в Микрософт, Клеменс Шиперский был со-основателем Oberon Microsystems.
Оригинальная статья Шиперского у меня где-то валялась, если что, могу поискать и выслать. Она короткая, страницы три-четыре. Сначала он рассматривает что-такое модульные расширяемые (операционные) системы и делает вывод что это хорошо. Потом он рассматривает библиотеки (иерархий наследования) классов и показывает, что это плохо. Потом он показывает как можно объединить модульность с классами чтобы было хорошо (какие ограничения надо наложить на ООП) и дает формулировку КОП — это более дисциплинированное ООП, далее по пунктам:
КОП = ООП
+ модульность (включая упрятывание информации и позднее связывание модулей, т.е. возможность подгружать необходимые модули в процессе выполнения программы, а не заранее, как это обычно делается в старых системах программирования)
+ безопасность (статический контроль типов переменных и автоматическое управление памятью)
— наследование через границы модулей.
Последняя строчка означает, что в КОП запрещено расширение типов, реализованных в других модулях; расширять можно только абстрактные, чисто интерфейсные типы.
То есть, например, компоненты Delphi — это вовсе не компоненты в рамках КОП, а просто библиотека классов, со всеми вытекающими из этого проблемами (слово "компонент" — имеет очень широкий смысл). В рамках КОП компоненты — это модули, в которых находятся реализации абстрактных типов (классов или интерфейсов). Есть модуль с определением абстрактного типа (интерфейса), и есть несколько модулей от сторонних производителей с реализацией этого интерфейса. Собственно, Микрософтовская COM — достаточно близко находится от КОП, только у Микрософта не было языка в котором COM объекты были бы "родными", вот они и создали C#, а COM трансформировали в .NET.
Re[7]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, VladD2, Вы писали:
K_O>>Если я не ошибаюсь, то, начиная с языка Modula-2, процедуры заканчиваются не K_O>>
K_O>>END;
K_O>>
, а K_O>>
K_O>>END ProcName;
K_O>>
именно для того, чтобы компилятор мог пропустить кусок кода, относящегося к данной процедуре, содержащей ошибку, и продолжить компиляцию дальше.
VD>Что-то ты не дооценивашь компиляторы. Они и так способны пропускать очень многое и без таких банальных подсказок. Тем же компиляторам Шарпа от МС и Явы от Сана или IBM-а не требуется никаких подсказок. Они и так очено качественно обнаруживают и диагностируют ошибки.
Что-то ты склонен все сильно упрощать. Я не говорю, что при конструкции end; невозможно показать все ошибки, я имел ввиду то, что при конструкции end ProcName; компилятор можно сделать проще при тех же возможностях по обнаружению ошибок. Кстати, и мне как программисту удобнее было бы видеть окончание процедуры как end ProcName; потому как тогда проще обнаружить лишний или недостающий end;
Re[6]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов,
Здравствуйте, VladD2.
Начну с цитаты.
"- Дяденька, зачем вы стоите здесь и проповедуете добро? Ведь вас никто не слушает. Да и разве вы в силах что-либо изменить?
— Все это я и сам понимаю. Но если я не буду каждый день пытаться изменить человечество, то боюсь, что оно изменит меня."
Уважаемый Сергей, ты согласен с тем, что ты стоишь сейчас на месте этого проповедника добра? Понимаешь, твоя христианская идея немного устарела. Этого добра сейчас полным полно, штабелями навалено, только оно никому сегодня не нужно. Я безжалостно и уверенно объясню тебе, почему. Я буду рад увидеть твои серьезные возражения по каждому пункту и на каждое мое сказанное слово.
Пропагандируемая тобой идея компонентного программирования сама по себе никому не нужна. Нужна удобная среда, библиотеки, сообщество людей, переиспользование старого кода, поиск ответов в интернете — возможность успешно решать современные реальные проблемы, а не нигилизм, как у тебя в программной среде BlackBox. "Разрушить мир до основанья, собрать все старое, и сжечь, мы наш, мы новый мир построим!" (не со зла немного исковерканные мною классики).
Учителя должны учить учеников думать и делать, для того, чтобы ученики научились хорошо разбираться в мире и достигать своих целей. А значит, нужно, чтобы они умели хорошо решать как абстрактные, так и реальные задачи. Конечно, хорошо было бы свести все задачи к знанию твоих принципов и их применению, но, увы, умения часто имеют мало общего со знаниями. Кроме того, замечу, что принципы сами по себе (без задач) не нужны вообще. По моим наблюдениям, программисты, которых учили только в классическом стиле, не умеют выживать. То же относится и ко всем другим профессиям (самый наглядный пример — экономисты, у которых соотношение теория/практика = 99/1). Им приходится разбираться в современном производстве программ и программных систем с самых азов. И причина этого — именно консерватизм учителей, которые должны одновременно совмещать две цели: обучение духа (знания, принципы, теории) и обучение тела (реальные задачи, примеры, методы), но часто забывают или об одном, или о другом.
При широком распространении сейчас учебников и учебных пособий, педагогика сейчас не нужна для преподавания и преподавать может любой желающий. Но ведь у преподавателей в наше время нет никакой обратной связи с учениками, или же она растягивается на многие годы — как узнать, пригодятся ли твоему ученику знания и умения, которые ты ему дал? Может, поэтому так много сейчас среди преподавателей людей, которые не ведают, что творят?!
Процитирую еще:
"Теории приходят и уходят, а примеры остаются."
(И.М. Гельфанд, математик, академик РАН, академик АН СССР)
Уважаемый Сергей, как ты считаешь, среда BlackBox — это хороший пример для детей? Это ли достойная идея с достойным воплощением? Я обращаюсь сейчас к твоему опыту решения практических задач. Давай откроем глаза и перечислим его плюсы и его минусы. А то твои фанатично горящие глаза, боюсь, не видят самого важного, того, что в наше время надежно сокрыто от профанов — объективного и всестороннего видения мира и знания его законов. И возрази мне, если это не так.
Уважаемый Влад, отпусти его с миром (ибо не ведает он, что творит ). Не выросло у него еще то, что должно позволять ему не впадать в религиозный фанатизм — разумелка. Видно, не нужен был все эти годы ему разум А излишние сообщения чисто рекламного характера (по-русски, лукавые, то есть, замалчивающие плохие стороны) с его стороны в других темах, из-за которых и появилась эта тема, я предлагаю именовать "спамом" и обращаться с ними, как с любым мусором. Нужен — оставить, не нужен — убрать, человека предупредить и, если человек и дальше будет мусорить, забанить.
СГ>Оригинальная статья Шиперского у меня где-то валялась, если что, могу поискать и выслать.
Было бы неплохо ее получить. Ты бы хоть название ее сказал, можно было бы поискать.
... << RSDN@Home 1.1.3 stable >>
Re[10]: Как запустить Блэкбокс и выполнить первую программу
Вы неправы. Просто большая часть доступной литературы — по-английски.
Поищите словосочетание "operator precedence grammar" (именно в кавычках,
чтобы отсечь "правила предшествования операторов"). Мне попадался
русский перевод "грамматика с операторным предшествованием". Такие
грамматики "проще", чем LL(k) и упоминаются в любом серьёзном курсе
конструирования компиляторов.
VladD2 wrote:
> Судя по тому, что данный термин встречается в гугле ровно 2 раза (а > второй так и вовсе не удается найти), то я склоннен думать, что этот > наукобразный термин не вошел в реальную жизнь.
Там в разделе публикаций есть ссылка на ту статью, о которой я говорил:
Component-oriented Programming: A refined variation on object-oriented programming. Clemens Szyperski. Oberon Tribune, 2:1, Oberon microsystems, Zurich, Switzerland. January 1996.
Прикол в том, что там дана таже самая битая ссылка!
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, VladD2, Вы писали:
VD>>А можно услышать твое определение компонента и компонентного подхода в производистве ПО?
СГ>Зачем мое?
Понятно. Значит дать не можешь. Что до КОП == ООП — это большое заблуждение. На С++ можно легко писать в ОО-стиле, но очень трудно писать в компонентном стиле.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>>Ctrl+K — компиляция
VD>>А "K" — это "Кampilatcia" ?
СГ>Швейцарцы писали, а у них в стране, кажется, четыре официальных языка, может на каком-то из них компиляция на латинскую букву "K".
Вряд ли они не знали на какую букву компиляция в английском. А интерфейс ведь англоязычный.
СГ>info ---> Menus ---> Dev/Rsrc/Menus ---> MENU "Dev" СГ>Строчка: СГ>
Здравствуйте, 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 — ведущему физику-теоретику, специалисту по квантовой теории поля приостановить свою науную деятельность на пару лет только для того чтобы освоить программирование на С++). На кой ляд использовать Си++? ПОВЫШЕНИЯ скорости исполнения на этой задаче он НЕ ДАЕТ — это специально проверялось специальными недоверчивыми программистами-студентами-аспирантами.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>ООП и Модульность — ортогональные понятия. Попытка соединить ООП и Модульность в одном флаконе, с неизбежностью приводят к появлению, того же самого COM или его аналогов.
А это как... плохо или хорошо?
СГ> ООП может существовать само по себе, Модульность — тоже может существовать сама по себе, но чтобы они были вместе и одновременно — нужен COM или его аналоги, которые называются КОМПОНЕНТАМИ, а программирование в стиле ООП+Модульность называется Компонентно Ориентированным программированием — КОП. В тоже самое время в связке ООП+Модульность, само ООП не может остаться прежним, оно нуждается в некоторой модификации, а именно ОГРАНИЧЕНИИ. Вспомни что такое COM интерфейсы в терминологии С++ — это классы без членов-данных, а все члены-функции ВИРТУАЛЬНЫ. Другими словами, ограничение наложенное на ООП состоит в том, что МЕЖМОДУЛЬНОЕ наследование возможно только от АБСТРАКТНЫХ классов.
Нда. Эдакий взгляд на жинь из дупла. То что заметил — существует. Остальное — миф.
Представь себе, что компонентность не равно КОМ. Есть и другие реализации. И они не имеют ограничений присущих КОМ-у.
Вообще странно слышать подобные слова от человека программирующего на Дельфи. В ней как раз есть возможность создавать наследников классов расположенных в других модулях (физических длл-ях). Правда там все было несколько витиевато, так как для рельного разнесения классы нужно было помещать в специльные библиотеки.
В Яве и дотнете все доведено до блеска и практически все классы хранятся в отдельных сборках. При этом никаких проблем с наследованием от класса находящегося в другой сборке (длл-и) нет.
СГ> С COM — все так в точности и обстоит, из DLL-лек мы можем импортировать именно только ИНТЕРФЕЙСЫ, а не сами классы — это ОГРАНИЧЕНИЕ НАЛОЖЕННОЕ НА ООП при его слиянии с МОДУЛЬНОСТЬЮ.
Это чущь. Это не ограничение модульности, а всего лишь ограничения кокретной реализации. В Яве, дотнете, Дельфи и многих других компонентно-ориентированных средах таких ограничений нет.
СГ>Если бы из DLL можно было бы импортировать не интерфейсы, а сами классы и от них наследоваться, то таким образом построенные системы не были бы МОДУЛЬНЫМИ — ведь в этом случае динамическая загрузка одного модуля (с определением какого-то класса) в память всегда должна была бы сопровождаться динамической загрузкой в память всех-всех-всех остальных модулей в которых находятся классы-предки того класса (загрузка в память класса обозначает загрузку в память всех-всех-всех классов предков).
Это твоя теория. На самом деле модули могут грузиться по мере использования. Если, например, в программе есть класс Б и С и С унаследован от класса А расположенного в другом модуле. То до обращения к методам класса С модуль в котором размещен класс А не обязан загружаться в память. Так что класс Б можно использовать даже если сборки с классом А вообще нет на диске.
СГ>А в модульных системах такого безобразия быть не должно
Опять же не верное предположение. Нет никакого ограничения на то когда подгружать зависимые сборки (в дотнете модули называются сборками).
СГ> — там модуль загружается только тогда, когда вызывается какая-либо подпрограмма из этого модуля
Это всего лишь стратегия. Можно так, можно иначе.
СГ> (т.е. простая декларация IMPORT StdLog; — еще не повод загрузить в память модуль StdLog, вот когда выполнение программы дойдет до точки StdLog.String("Здравствуй Мир!"); — вот тогда модуль StdLog будет загружен в память).
Кстати, а что в Обероне нельзя раследоваться от класса размещенного в другом модуле? Или в он не компонентный?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, Сергей Губанов, Вы писали:
СГ>А что не на ассемблере?
Ну, что уж там. Тогда уж в маш. кодах.
СГ> Component Pascal для этого подходит лучше поскольку писать на нем можно гораздо быстрее и делать гораздо-перегораздо-переперегораздо меньшее количество ошибок,
Вообще-то речь шала о том, что ЖЦ не дает выигрыша в скорости. Зачем так переключать тему?
Ошибок может и меньше будет. А вот писать на нем точно будет не проще. С++ все же не из трех операторов состоит.
Ну, а уж с дотнетом этому недоязыку точно не тягаться. Приемущества по количеству ошибок уже не будет, а возможностей в разы больше.
СГ> а самое главное — языку Component Pascal можно обучиться за неделю,
С нуля? Ой ли. А если не с нуля. То неделя это слишком много. Человек знающий С++ начинает писать на яве или дотнете в первый же день. А через три дня уже способен написать рабочее приложение.
СГ> а С++-су нужно обучаться несколько лет
Это преувеличение. С++ не простой язык. Но для того чтобы писать на нем приметивные программы двух лет не нужно. За 2-3 года можно гуру стать, а не то что язык выучить.
СГ> (Вы ведь не собираетесь предложить info21 — ведущему физику-теоретику, специалисту по квантовой теории поля приостановить свою науную деятельность на пару лет только для того чтобы освоить программирование на С++).
Если человеку уже умеющему программировать нужно 2 года на освоение С++, то он зря ест свой хлеб. Думаю, что и физик он будет некудышный. Так что будем реалистами. На неделю-две. Остальное по ходу пьесы.
СГ> На кой ляд использовать Си++?
А зачем ты предлогаешь? И вообще причем тут физики-теоретики я не понял. Вроде речь была об обучении детей в школах. Там С++ вообще не нужен. Там нужен какой-нить C# или VB.Net.
СГ> ПОВЫШЕНИЯ скорости исполнения на этой задаче он НЕ ДАЕТ — это специально проверялось специальными недоверчивыми программистами-студентами-аспирантами.
Язык не может давать повышения скорости вообще. Повышение дает компилятор. Ну, а тестам студентов-аспирантов доверять нельзя в принципе. Не думаю, что создатели КП были стольк же продвинуты в области оптимизации как команда Intel C++ или VC последних версий. Ну, да не о том речь.
Я вообще не понял перехода. Я сказал, о том что GC не дает приемущества в скорости. Так как ручная оптимизация всегда может оказаться эффективнее.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Как запустить Блэкбокс и выполнить первую программу
Здравствуйте, xvost, Вы писали:
X>Пошли в аську — 20520141. Либо по е-мейлу.
Ловлю на слове. Аськи у меня нет. А по мылу с удовольствием пообщаюсь. Вот только у тебя мыла в профайле нет. Книнь, мне его на мыло, плиз (vc as rsdn.ru).
ЗЫ
Кстати, мы оказывается одногодки. И религии сходные.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
При чем тут это? Я Вам объяснил смысл Компонентно ориентированного программирования. Не хотите программировать в рамках этой парадигмы — не программируйте. Вас никто не заставляет. ООП само по себе — это тоже взгляд на жизнь из дупла: подумать только — обо всем надо думать как об объектах. Модульное программирование — это тоже взгляд на жизнь из дупла: подумать только — кроме модулей больше ничего не бывает. Структурное программирование — это тоже взгляд на жизнь из дупла: подумать только — кроме структурных конструкций нелья ничем пользоваться (запрет goto). Всякая новая более строгая дисциплина программирования — это "залезание в еще более узкое дупло" — это ограничение степеней свободы.
VD>Вообще странно слышать подобные слова от человека программирующего на Дельфи. В ней как раз есть возможность создавать наследников классов расположенных в других модулях (физических длл-ях).
Нет, не так, такой возможности нет.
VD>В Яве и дотнете все доведено до блеска и практически все классы хранятся в отдельных сборках. При этом никаких проблем с наследованием от класса находящегося в другой сборке (длл-и) нет. Кстати, а что в Обероне нельзя раследоваться от класса размещенного в другом модуле? Или в он не компонентный?
Естественно, что такая возможность есть. Я не говорю что нет возможности. В оберонах тоже можно расширять типы определенные в других модулях. Даже в Component Pascal — первом языке поддерживающем КОП это делать все равно можно. Только не надо забывать, к чему это может привести. Вам решать — как писать программу. В рамках КОП — наследоваться от не абстрактных классов определенных в других модулях нельзя, но если хотите, то наследуйтесь, но только Ваша программа, в этом случае, уже не будет удовлетворять принципам КОП.
Component Pascal отличается от Oberon-2 прежде всего тем, что в язык были добавлены ключевые слова: EXTENSIBLE, ABSTRACT, LIMITED — модификаторы типа. По умолчанию тип не расширяем (как говорится — sealed). Чтобы тип был расширяем, программист должен пометить его как EXTENSIBLE или ABSTRACT. Чтобы переменные типа можно было размещать только внутри текущего модуля программист должен пометить тип как LIMITED (это аналог приватного конструктора в С++). Если Вам не нравится парадигма КОП, то наздоровье — помечайте все типы как EXTENSIBLE и пусть их кто угодно потом расширяет...
СГ>Component Pascal отличается от Oberon-2 прежде всего тем, что в язык были добавлены ключевые слова: EXTENSIBLE, ABSTRACT, LIMITED — модификаторы типа. По умолчанию тип не расширяем (как говорится — sealed). Чтобы тип был расширяем, программист должен пометить его как EXTENSIBLE или ABSTRACT. Чтобы переменные типа можно было размещать только внутри текущего модуля программист должен пометить тип как LIMITED (это аналог приватного конструктора в С++). Если Вам не нравится парадигма КОП, то наздоровье — помечайте все типы как EXTENSIBLE и пусть их кто угодно потом расширяет...
Помоему, все это — тщетная попытка эмулировать те же sealed, public, virtual. То есть языку этого явно не хватало, и его решили "улучшить" такими вот расширениями.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> ... <<Winamp is now playing "Silence — Music to my ears">>
Здравствуйте, Mamut, Вы писали:
СГ>>Component Pascal отличается от Oberon-2 прежде всего тем, что в язык были добавлены ключевые слова: EXTENSIBLE, ABSTRACT, LIMITED — модификаторы типа. По умолчанию тип не расширяем (как говорится — sealed). Чтобы тип был расширяем, программист должен пометить его как EXTENSIBLE или ABSTRACT. Чтобы переменные типа можно было размещать только внутри текущего модуля программист должен пометить тип как LIMITED (это аналог приватного конструктора в С++). Если Вам не нравится парадигма КОП, то наздоровье — помечайте все типы как EXTENSIBLE и пусть их кто угодно потом расширяет...
M>Помоему, все это — тщетная попытка эмулировать те же sealed, public, virtual. То есть языку этого явно не хватало, и его решили "улучшить" такими вот расширениями.
EXTENSIBLE - это противоположность sealed.
А public и virtual тут при чем, не объясните? Очень любопытно.
СГ>EXTENSIBLE - это противоположность sealed.
СГ>А public и virtual тут при чем, не объясните? Очень любопытно.
Сорри, хотел написать private вместо public
В тех же С# и C++ тип по умолчанию extensible, что есть правильно. C# ввел понятие sealed. Не понимаю, зачем нужен ABSTRACT. Класс с виртуальными функциями?
К чему я клоню. К тому, что козалось, что Оберон не соответствует задачам, стоящим перед программистами. Пришлось его расширять, вводить для этого дополнительные синтаксические конструкции и для чего? Для того чтобы эмулировать то, что уже существует в других языках.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> ... <<Winamp is now playing "Silence — Music to my ears">>
Здравствуйте, Mamut, Вы писали:
M> В тех же С# и C++ тип по умолчанию extensible, что есть правильно. C# ввел понятие sealed.
Могу поспорить, что наоборот лучше. Судите сами:
1) Каждый расширяемый тип представляет потенциальную угрозу расширяемости системы. Если проектировщик системы решил сделать какой-то тип расширяемым, это означает, что он очень сильно перед этим подумал. Взвесил все за и против и, наконец, решил, что сделать данный тип расширяемым все-таки нужно. Формализовал свое взвешенное волеизъявление он тем что собственноручно написал EXTENSIBLE, а у остальных типов он ничего не написал — они остались (по умолчанию) не расширяемыми.
2) Расширяемых типов гораздо меньше чем не расширяемых, следовательно просто экономически выгоднее очень небольшое количество раз (каждый раз сильно обдуманно) написать слово EXTENSIBLE, чем очень много раз (у всех остальных типов) тупо писать слово sealed.
M> Не понимаю, зачем нужен ABSTRACT. Класс с виртуальными функциями?
Нет, не обязательно. В Component Pascal данный тип может не иметь ни одного абстрактного метода и даже может не иметь ни одного расширяемого метода (даже вообще может никаких методов не иметь). ABSTRACT обозначает всего лишь то, что экземпляров данного типа как таковых не бывает (они сами по себе не имеют смысла) бывают только потомки. Так, например, тип любого персистентного объекта должен быть расширением типа Stores.Store
не расширяем (не виртуален). А все остальные методы, хоть и расширяемы (виртуальны), но ни один из них не абстрактен (не ABSTRACT). Тем не менее, тип Stores все равно объявлен абстрактным просто потому, что экземпляры этого типа самого по себе не имеют никакого смысла. Смысл имеют только переменные расширенных типов.
M>К чему я клоню. К тому, что козалось, что Оберон не соответствует задачам, стоящим перед программистами. Пришлось его расширять, вводить для этого дополнительные синтаксические конструкции и для чего? Для того чтобы эмулировать то, что уже существует в других языках.
А вот этого не надо. Посмотрите сначала на даты создания оберонов (первый оберон начал разрабатываться в 1985 году) и на даты создания других языков. Тогда все разговоры "кто у кого чего перенял" поутихнут. Все у всех появлялось примерно одинаково.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>При чем тут это? Я Вам объяснил смысл Компонентно ориентированного программирования.
Изивини, то ты объясняешь свое видение. И, оно очень далего от полноценного.
VD>>Вообще странно слышать подобные слова от человека программирующего на Дельфи. В ней как раз есть возможность создавать наследников классов расположенных в других модулях (физических длл-ях).
СГ>Нет, не так, такой возможности нет.
Ага. А как же, по-твоему, работает дизайнер форм и компонетов? И как от контрола лежащего в одном пакедже можно унаследовать другой?
VD>>В Яве и дотнете все доведено до блеска и практически все классы хранятся в отдельных сборках. При этом никаких проблем с наследованием от класса находящегося в другой сборке (длл-и) нет. Кстати, а что в Обероне нельзя раследоваться от класса размещенного в другом модуле? Или в он не компонентный?
СГ>Естественно, что такая возможность есть. Я не говорю что нет возможности. В оберонах тоже можно расширять типы определенные в других модулях. Даже в Component Pascal — первом языке поддерживающем КОП
Гы. Первым. Порозительные знания.
СГ> это делать все равно можно. Только не надо забывать, к чему это может привести. Вам решать — как писать программу. В рамках КОП — наследоваться от не абстрактных классов определенных в других модулях нельзя, но если хотите, то наследуйтесь, но только Ваша программа, в этом случае, уже не будет удовлетворять принципам КОП.
Чушь. Не только можно, но нужно. Самый распространенный пример — форма в дотнете. Класс System.Windows.Forms.Form расположен в сборке System.Windows.Forms.dll. Твое приложение по определению является отедьным модулем. Оно обязано породить класс-наследник от Form. Причем Form не абстрактрый. Форму легко можно создать и отобразить с помощью следующей строчки:
new Form().Show();
при компиляции класс Form не подлинковывается к твоему проекту (это просто невозможно). Вместо этого в твоем ехе-шнике делается ссылка на System.Windows.Forms.dll и когда вызвается приведенная строчка кода эта длл загружается из из нее извлекаеся описание и код класса Form.
Точно так же происходит с любым другим классом расположенным в других модулях. Так что ты очень сильно отстал от жизни. То что ты считаешь архитектурным ограничением есть всего лишь ограничение реализации систем прошлого поколения.
СГ>Component Pascal отличается от Oberon-2 прежде всего тем, что в язык были добавлены ключевые слова: EXTENSIBLE, ABSTRACT, LIMITED — модификаторы типа. По умолчанию тип не расширяем (как говорится — sealed). Чтобы тип был расширяем, программист должен пометить его как EXTENSIBLE или ABSTRACT. Чтобы переменные типа можно было размещать только внутри текущего модуля программист должен пометить тип как LIMITED (это аналог приватного конструктора в С++).
В С++ структура ничем кроме уровня доступа принятого по умолчанию не отличается. Так что не стоит ссылаться не этот язык. Данное утверждение справидливо тольк для С.
СГ> Если Вам не нравится парадигма КОП, то наздоровье — помечайте все типы как EXTENSIBLE и пусть их кто угодно потом расширяет...
Мне не нравится ассоциация ее с одной убогой реализацией. А сам компонентный подход мне как раз нравится. Только мне нравится когда этот подход гладко встроен в средство разработки и не трубет костылей (типа требования абстрактности для базовых типов).
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mamut, Вы писали:
M>В тех же С# и C++ тип по умолчанию extensible, что есть правильно. C# ввел понятие sealed. Не понимаю, зачем нужен ABSTRACT. Класс с виртуальными функциями?
К компонентности это отношения не имеет. А ABSTRACT... В Шарпе abstract означает что класс нельзя создать явно. Причем даже если в класе нет ни одного абстрактоно метода. Очень удобно для базовых классов в которых не хватает функцональности. Так же дисциплинирует так как не позволяется добавлять абстрактные методы в не абстрактный класс. На практике очень удобно.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>1) Каждый расширяемый тип представляет потенциальную угрозу расширяемости системы. Если проектировщик системы решил сделать какой-то тип расширяемым, это означает, что он очень сильно перед этим подумал. Взвесил все за и против и, наконец, решил, что сделать данный тип расширяемым все-таки нужно. Формализовал свое взвешенное волеизъявление он тем что собственноручно написал EXTENSIBLE, а у остальных типов он ничего не написал — они остались (по умолчанию) не расширяемыми.
И зачем тода в Обероне 2 по умолчанию все методы виртуальными сделаны?
СГ>2) Расширяемых типов гораздо меньше чем не расширяемых, следовательно просто экономически выгоднее очень небольшое количество раз (каждый раз сильно обдуманно) написать слово EXTENSIBLE, чем очень много раз (у всех остальных типов) тупо писать слово sealed.
Ну, как бы по факту sealed-классов почти нет. Это скорее исключение чем правило.
СГ>Нет, не обязательно. В Component Pascal данный тип может не иметь ни одного абстрактного метода и даже может не иметь ни одного расширяемого метода (даже вообще может никаких методов не иметь). ABSTRACT обозначает всего лишь то, что экземпляров данного типа как таковых не бывает (они сами по себе не имеют смысла) бывают только потомки.
Содрали с Явы и Шарпа. Вот и вопрос, им еще драть и драть пока человеческий язык получится. Не проще ли сразу использовать готовй? Если что-то не устраивает, то проще было доработать имеющийся чем полуфабрикат вроде оберона.
M>>К чему я клоню. К тому, что козалось, что Оберон не соответствует задачам, стоящим перед программистами. Пришлось его расширять, вводить для этого дополнительные синтаксические конструкции и для чего? Для того чтобы эмулировать то, что уже существует в других языках.
СГ>А вот этого не надо. Посмотрите сначала на даты создания оберонов (первый оберон начал разрабатываться в 1985 году) и на даты создания других языков. Тогда все разговоры "кто у кого чего перенял" поутихнут. Все у всех появлялось примерно одинаково.
Вот сморю. На дворе 2004, почти 2005. КП только сейчас получает то что Ява имела при рождении (в 96-ом). Да и не оберон это уже. А у оберона этого всего нет.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>При чем тут это? Я Вам объяснил смысл Компонентно ориентированного программирования.
...
СГ>В рамках КОП — наследоваться от не абстрактных классов определенных в других модулях нельзя, но если хотите, то наследуйтесь, но только Ваша программа, в этом случае, уже не будет удовлетворять принципам КОП.
Software component
A software component is a loosely defined term for a software technology for encapsulating software functionality. Clemens Szyperski and David Messerschmitt give the following five criteria for what a software component shall be to fulfill the definition:
Multiple-use
Non-context-specific
Composable with other components
Encapsulated i.e. non-investigable through its interfaces
A unit of independent deployment and versioning
Software components often take the form of objects (from Object Oriented Programming), in some binary or textual form, adhering to some interface description language (IDL) so that the component may exist autonomously from other components in a computer.
When a component is to be accessed or shared across execution contexts or network links, some form of serialization (also known as marshalling) is employed to turn the component or one of its interfaces into a bitstream.
Здравствуйте, buriy, Вы писали:
B>Уважаемый Влад, отпусти его с миром (ибо не ведает он, что творит ). Не выросло у него еще то, что должно позволять ему не впадать в религиозный фанатизм — разумелка. Видно, не нужен был все эти годы ему разум А излишние сообщения чисто рекламного характера (по-русски, лукавые, то есть, замалчивающие плохие стороны) с его стороны в других темах, из-за которых и появилась эта тема, я предлагаю именовать "спамом" и обращаться с ними, как с любым мусором. Нужен — оставить, не нужен — убрать, человека предупредить и, если человек и дальше будет мусорить, забанить.
Чебурашка с крокодилом Геной забрались ночью в унвермаг...
— Ген! А, Ген! Тебе сапоги яловые не нужны?
— Неси их сюда.
— Немогу. В них мусор.
— Так викини его и неси их сюда.
— Немогу он меня за шкирку держит.
Вот у меня такая же ситуация.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Изивини, то ты объясняешь свое видение. И, оно очень далего от полноценного.
Ёёёё, ЕСТЕСТВЕННО я дал свое видение — имеено так как Вы и попросили. Сначала Вы попросили дать Вам определение КОП, я его дал со ссылкой на Шиперского. Вам не понравилось — Вы попросили дать лично мое определение простыми русскими словами, я его дал — и опять Вам не понравилось. Чего же Вам надо-то было?
VD>>>Вообще странно слышать подобные слова от человека программирующего на Дельфи. В ней как раз есть возможность создавать наследников классов расположенных в других модулях (физических длл-ях).
СГ>>Нет, не так, такой возможности нет.
VD>Ага. А как же, по-твоему, работает дизайнер форм и компонетов? И как от контрола лежащего в одном пакедже можно унаследовать другой?
Секрет в том, что "пакедж" — это не DLL. Из win32 DLL Delphi не может "вынимать" классы, а может "вынимать" только переменные интерфейсных типов или типов классов все методы которых виртуальны. А дизайнер форм работает на специальной особенности дельфийского механизма RTTI — он позволяет в run-time знать не только адреса, но и имена published свойств и методов объектов. Для того чтобы натянуть VCL под C++ Builder Борланду пришлось внести в язык С++ расширение — published члены (вдобавок к существующим public, private, protected). Кстати, поскольку Delphi появилось раньше чем Java, .NET, то идею reflections они стало быть содрали у Delphi.
VD> Чушь. Не только можно, но нужно. Самый распространенный пример — форма в дотнете.
А что так сразу нужно-то? Можно не значит нужно. Вон в BlackBox форма — это не экземпляр класса потомка от класса формы, там это персистентный объект, хочется еще одну точно такую же форму — клонируй эту, а никакого класса этой формы не существует.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Кстати, поскольку Delphi появилось раньше чем Java, .NET, то идею reflections они стало быть содрали у Delphi.
June 1991
Gosling starts working on the "Oak" interpreter, which, several years later (following a trademark search), is renamed "Java."
Правда, говорится, что формально Java была объявлена в 1995:
May 23, 1995
Sun formally announces Java and HotJava at SunWorld '95.
Решил я, значит, Visual C попробовать. Установился с 5-го раза. Господи! Ну и примитив. Что за редактор у них? Да у Лексикона возможностей форматирования больше. Предварительного просмотра нет. Регулярных выражений, понятно, тоже. Попробовал картинку из фотошопа вставить — фиг. Похоже, про OLE ребята из MS не в курсе. Про гипертекст тоже. Идем дальше. Что это у нас? А, редактор диалогов. А чего это он такой убогонький? А протестировать диалог можно? Нет, только посмотреть. А чтобы протестировать, надо проект собирать. Фу! Но самое прикольное, что и функцию просто так нельзя протестировать. И кому это убожище нужно? Херим его.
Попробовать Delphi, что ли. Что за фигня вылезла? А где текст набирать? Ладно, приятель подсказал. Поместил на форму копку, щелкнул по ней, написал writeln('hello world'), запускаю, опс: "программа выполнила недопустимую операцию". И люди на этом программируют? Жалко мне их.
Здравствуйте, Трурль, Вы писали:
Т>Решил я, значит, Visual C попробовать. Установился с 5-го раза. Господи! Ну и примитив. Что за редактор у них? Да у Лексикона возможностей форматирования больше. Предварительного просмотра нет. Регулярных выражений, понятно, тоже. Попробовал картинку из фотошопа вставить — фиг. Похоже, про OLE ребята из MS не в курсе. Про гипертекст тоже. Идем дальше. Что это у нас? А, редактор диалогов. А чего это он такой убогонький? А протестировать диалог можно? Нет, только посмотреть. А чтобы протестировать, надо проект собирать. Фу! Но самое прикольное, что и функцию просто так нельзя протестировать. И кому это убожище нужно? Херим его.
Незнаю-незнаю, Трурль... Но половина всего что перечислено есть...Или даже больше.
Здравствуйте, Клапауций, Вы писали:
К>Здравствуйте, Трурль, Вы писали:
Т>>Попробовал картинку из фотошопа вставить — фиг. Похоже, про OLE ребята из MS не в курсе. Про гипертекст тоже.
Могу поспорить, что не лучше. Судите сами
СГ>1) Каждый расширяемый тип представляет потенциальную угрозу расширяемости системы.
На то оно и программирование, чтобы дать стороннему проектировщику возможность дописывать и додумывать твое решение. Это творчество, а не юзание
Что ты усмотрел в Обероне — это принцип операционной системы, а не среды разработки. Там просто необходима "защита от дурака" — не давать юзеру возможности совершать неправильные действия, формулируя лозунгом
все что не разрешено, то запрещено
Принцип же общения между разработчиками — доделывайте пожалуйства, если у вас получиться что-то стоящее на том базовом фундаменте, который мы вам предложили т.е. формулируется лозунгом
то, что сотворено, то сотворено для вашего блага, пропагандируйте
Что-то ты в семантике запутался, как мне кажется
СГ>Если проектировщик системы решил сделать какой-то тип расширяемым, это означает, что он очень сильно перед этим подумал. Взвесил все за и против СГ>и, наконец, решил, что сделать данный тип расширяемым все-таки нужно. Формализовал свое взвешенное волеизъявление он тем что собственноручно написал EXTENSIBLE, а у остальных типов он ничего не написал — они остались (по умолчанию) не расширяемыми.
Закрытость для среды разработки уже вроде имеется, но на другом уровне абстракций — interface/implementation для модуля или public/private для классового типа (а в Delphi8 и для record). Эти спецификаторы накладывают ограничение на некоторую чать либо декларации класса, либо описаний методов в модуле, что собственно по моему ничем особо не отличается по семантике защиты
Для всего другого "в плане закрытости" даже в Delphi теперь есть специальные диррективы — например закрытый для дальнейшего изменения виртуальный метод или (ещё по аналогии из той же оперы) — устаревший тип.
СГ>2) Расширяемых типов гораздо меньше чем не расширяемых, следовательно просто экономически выгоднее очень небольшое количество раз (каждый раз сильно обдуманно) написать слово EXTENSIBLE, чем очень много раз (у всех остальных типов) тупо писать слово sealed.
Это совершенно не очевидное утверждение, собственно и послужившее как мне кажется неправильным посылом для предыдущего пункта.
Здравствуйте, WFrag, Вы писали:
WF>А вообще, reflection был уже в Smalltalk (если я не ошибаюсь), а уж он то появился еще раньше.
А если ещё точнее, то reflection восходит к старому доброму LISP, с его парадигмой "программа = данные".
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Сергей Губанов, Вы писали:
VD>>>>Вообще странно слышать подобные слова от человека программирующего на Дельфи. В ней как раз есть возможность создавать наследников классов расположенных в других модулях (физических длл-ях).
СГ>>>Нет, не так, такой возможности нет.
VD>>Ага. А как же, по-твоему, работает дизайнер форм и компонетов? И как от контрола лежащего в одном пакедже можно унаследовать другой?
СГ>Секрет в том, что "пакедж" — это не DLL. Из win32 DLL Delphi не может "вынимать" классы, а может "вынимать" только переменные интерфейсных типов или типов классов все методы которых виртуальны. А дизайнер форм работает на специальной особенности дельфийского механизма RTTI — он позволяет в run-time знать не только адреса, но и имена published свойств и методов объектов.
Да, но тормозного рефлекшена в Обероне и в Delphi7 кажется нету Есть только RTTI. Так что не все так интересно.
СГ>Для того чтобы натянуть VCL под C++ Builder Борланду пришлось внести в язык С++ расширение — published члены (вдобавок к существующим public, private, protected).
про published уже как-то обсуждалось Это аттавизм возникший из-за отсутствия АОП конструктивов, типа атрибутов в среде разработки
Кстати, поскольку Delphi появилось раньше чем Java, .NET, то идею reflections они стало быть содрали у Delphi.
У VCL Delphi7 нет рефлекшена, есть метаклассовый RTTI
У CLR нет метаклассового RTTI
У Delphi8.Net есть и то и другое, так как VCL поверх CLR.
А у Оберона я незнаю, мне он и так сразу не понравился
Так что кто чего у кого содрал — это можно запутаться
Сравнивая, что наваяно в VCL _TClass и что в CLR System.Type можно понять, что они разные
Здравствуйте, VladD2, Вы писали:
VD>>>Вообще странно слышать подобные слова от человека программирующего на Дельфи. В ней как раз есть возможность создавать наследников классов расположенных в других модулях (физических длл-ях).
СГ>>Нет, не так, такой возможности нет.
VD>Ага. А как же, по-твоему, работает дизайнер форм и компонетов? И как от контрола лежащего в одном пакедже можно унаследовать другой?
Вообще для этого как мне кажется одного BPL (аналога Netовской сборки) недостаточно
Если что-то дописать или зарегестрировать на тулсе компонент надо, то обязательно долен быть и DCU
VD>>>В Яве и дотнете все доведено до блеска и практически все классы хранятся в отдельных сборках. При этом никаких проблем с наследованием от класса находящегося в другой сборке (длл-и) нет.
не сказал бы что до блеска. Механизма хэлперов вроде нету
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Секрет в том, что "пакедж" — это не DLL.
Ну, это не правда. Пакедж — это совершенно точно обычный DLL. В этом можно убедиться, взглянув на него любым броузером PE-формата.
Просто линкер Delphi в режиме поддержки runtime-packages вместо встраивания VMT в приложение, использует внешнюю ссылку. Эти ссылки при загрузке разрешаются тем же самым загрузчиком винды безо всякой дополнительной магии. Такая же механика применяется плюсовыми линкерами под Win, которые поддерживают DLL.
Кроме того, в BPL генерируется информация о юнитах, включенных в него, для того, чтобы в рантайме можно было избежать дублирования кода. Эта функциональность является, строго говоря, совершенно дополнительной, и используется только при динамической загрузке пакетов. СГ>Из win32 DLL Delphi не может "вынимать" классы, а может "вынимать" только переменные интерфейсных типов или типов классов все методы которых виртуальны.
Ну, скажем так, линкер Delphi действительно не обучен вынимать классы из "обычных" DLL, так же как не обучен экспортировать классы в обычных DLL. СГ>А дизайнер форм работает на специальной особенности дельфийского механизма RTTI — он позволяет в run-time знать не только адреса, но и имена published свойств и методов объектов.
RTTI не имеет никакого отношения к обсуждаемому вопросу. Проблема не в RTTI, а в том, что твой TForm1 унаследован от Forms.TForm, который в рантайме берется из vclX0.bpl.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Mamut, Вы писали:
Т>>>Попробовал картинку из фотошопа вставить — фиг. Похоже, про OLE ребята из MS не в курсе. Про гипертекст тоже.
M>Зачем это?
Просто хотел продемонстрировать уровень критики в этой теме.
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Mamut, Вы писали:
Т>>>>Попробовал картинку из фотошопа вставить — фиг. Похоже, про OLE ребята из MS не в курсе. Про гипертекст тоже.
M>>Зачем это? Т>Просто хотел продемонстрировать уровень критики в этой теме.
Так зачем врать то ? Active документы вполне себе можно вставить. По крайней мере Word, Visio и Excel. А если фотожоп не вставляется то это уже проблемы Adobe.
Здравствуйте, Клапауций, Вы писали: К>Так зачем врать то ? Active документы вполне себе можно вставить. По крайней мере Word, Visio и Excel. А если фотожоп не вставляется то это уже проблемы Adobe.
Вот открыл я программу в Sudio 6, создал диаграмму в Excel,жму Ctrl-C,Ctrl-М и никакого результата. Что я делаю не так? В ворде все работало.
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Клапауций, Вы писали: К>>Так зачем врать то ? Active документы вполне себе можно вставить. По крайней мере Word, Visio и Excel. А если фотожоп не вставляется то это уже проблемы Adobe. Т>Вот открыл я программу в Sudio 6, создал диаграмму в Excel,жму Ctrl-C,Ctrl-М и никакого результата. Что я делаю не так? В ворде все работало.
Может руки ? У меня Ctrl+C работает. А Ctrl+M и в обычном Excel ничего не делает.
Здравствуйте, Клапауций, Вы писали: К>Может руки ? У меня Ctrl+C работает. А Ctrl+M и в обычном Excel ничего не делает.
Да не Ctrl+M, а Ctrl+М. Может у меня Excel необычный, но в нем Ctrl+М и Ctrl+V работают одинаково.
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Клапауций, Вы писали: К>>Может руки ? У меня Ctrl+C работает. А Ctrl+M и в обычном Excel ничего не делает. Т>Да не Ctrl+M, а Ctrl+М. Может у меня Excel необычный, но в нем Ctrl+М и Ctrl+V работают одинаково.
Да. Долго сверял Ctrl+M и Ctrl+М... Думал — я дурак. Потом понял, что ты почему-то считаеш, что любой человек влёт может определить откуда M — из кирилицы или из латиницы....
VD>Чушь. Не только можно, но нужно. Самый распространенный пример — форма в дотнете. Класс System.Windows.Forms.Form расположен в сборке System.Windows.Forms.dll. Твое приложение по определению является отедьным модулем. Оно обязано породить класс-наследник от Form. Причем Form не абстрактрый. Форму легко можно создать и отобразить с помощью следующей строчки:
А с чего ты решил что FCL написана по принципам компонентно-ориентированного программирования?
From: Трурль >Просто хотел продемонстрировать уровень критики в этой теме.
Бесполезно, так еще непонятнее.
Надо детскую психологию учитывать.
Программисту ведь результат его труда не нужен, ему надо трудности преодолевать, тогда жалование больше.
Вот если назначить на Оберон цену $5000 за лицензию, тогда народ сразу к нему потянется. Для России еще очень важно чтобы его требовалось воровать. Например убрать из дистрибутива компилятор, но сделать "дыру" в каком-то сервере в домене .mil и чтобы компилятор работал только там. Сразу все полезут.
Здравствуйте, ON, Вы писали:
ON>Вот если назначить на Оберон цену $5000 за лицензию, тогда народ сразу к нему потянется. Для России еще очень важно чтобы его требовалось воровать. Например убрать из дистрибутива компилятор, но сделать "дыру" в каком-то сервере в домене .mil и чтобы компилятор работал только там. Сразу все полезут.
Ага, будут писать намеренно ill-formed программы, причём как можно заковыристей, чтобы башню у компилятора срывало. Или какой-нибудь из модулей ядра перекомпильнут. Ведь это не наш сервак, а пентагоновский, пущай потом разгребают помойку.
И когда в проекте System окажется тыща-другая модулей VasyaPupkinLongMnemonicIDENTIFIER123, вот тогда авторы языка крепко задумаются — а стоило ли вообще организовывать модульность таким ракообразным способом.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Секрет в том, что "пакедж" — это не DLL. Из win32 DLL Delphi не может "вынимать" классы, а может "вынимать" только переменные интерфейсных типов или типов классов все методы которых виртуальны.
Патрисаусче! Как расшифровывается DLL?
СГ> А дизайнер форм работает на специальной особенности дельфийского механизма RTTI — он позволяет в run-time знать не только адреса, но и имена published свойств и методов объектов. Для того чтобы натянуть VCL под C++ Builder Борланду пришлось внести в язык С++ расширение — published члены (вдобавок к существующим public, private, protected).
И вот засада. МС чтобы прикрутить к плюсам визуальный дизайнер не пришлось вносить published в язык. А может published — это детали реализации, а не особенность КОП?
СГ> Кстати, поскольку Delphi появилось раньше чем Java, .NET, то идею reflections они стало быть содрали у Delphi.
Изумительно! Жаль что мужики этого не знают. Ну, те мужики которые в 91 залудили Яву. И те мужики что делали Дельфи (они то до сих пор не знают, что у них есть рефлекшен, а думают, что это такой RTTI).
VD>> Чушь. Не только можно, но нужно. Самый распространенный пример — форма в дотнете.
СГ>А что так сразу нужно-то? Можно не значит нужно.
Так значит все же ты понял, что можно. ОК, тезисо о нужно снимается.
СГ> Вон в BlackBox форма — это не экземпляр класса потомка от класса формы, там это персистентный объект, хочется еще одну точно такую же форму — клонируй эту, а никакого класса этой формы не существует.
Ну, недостаки технологии. Что же поделаешь? Древний все же Оберон.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>А если ещё точнее, то reflection восходит к старому доброму LISP, с его парадигмой "программа = данные".
Уж к чему к чему, а к Лиспу рефлекшон отношиния не имеет. Скорее уж норги ростут из СмолТока.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, mister-AK, Вы писали:
MA>Вообще для этого как мне кажется одного BPL (аналога Netовской сборки) недостаточно MA>Если что-то дописать или зарегестрировать на тулсе компонент надо, то обязательно долен быть и DCU
Тут могу ошибаться, но дела это не меняет. В итоде получаются две ДЛЛ-и в одной наследник, в другой родитель.
MA>не сказал бы что до блеска. Механизма хэлперов вроде нету
Это как в дельфи 8? Или о чем ты? Ну, да многим вот доступа к встроенному ассемблеру не хватает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>А с чего ты решил что FCL написана по принципам компонентно-ориентированного программирования?
А любой публичный класс в дотнете написан по этим принципам. Они все помещаются в бинарные, отчуждаемые молули и позволяет работать с ними в рантайме не требуя ниличия исходников.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, mister-AK, Вы писали:
MA>Вообще для этого как мне кажется одного BPL (аналога Netовской сборки) недостаточно MA>Если что-то дописать или зарегестрировать на тулсе компонент надо, то обязательно долен быть и DCU
DCU нужен для того, чтобы компилер мог получить статическую информацию о типах. Среде вполне достаточно BPL, т.к. она использует только RTTI.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, VladD2, Вы писали:
Т>>Просто хотел продемонстрировать уровень критики в этой теме. VD>Ну, продемонстрировал несколько другое.
Да вся эта тема — практически сплошное оттопыривание пальцев.
Всем известно, что Клапауций великий программист, не такой великий как Трурль. Вот он из зависти и навешивает всяческие ярлыки. Это он обзывал меня "конструктором самых глупых думающих машин в мире". Но до такого еще не доходило. Клапауций пошел на явную ложь, лишь бы обвинить во лжи своего злейшего друга.
К>>>Так зачем врать то ? Active документы вполне себе можно вставить.
Здравствуйте, VladD2, Вы писали:
VD>А любой публичный класс в дотнете написан по этим принципам. Они все помещаются в бинарные, отчуждаемые молули и позволяет работать с ними в рантайме не требуя ниличия исходников.
В том то и дело что отчуждаемость модулей весьма сомнительна. Я как раз и понимаю компонент прежде всего как отчуждаемую (в рамках деплоймента хотя бы) часть общей системы. И вот заметь. С одной стороны, скажем System.Drawing и System.Windows.Forms — это разные компоненты, но с другой отделить одно от другое не получится. И так во всем фреймворке. Именно поэтому требование не наследоваться от неабстрактных классов мне кажется вполне логичным для КО, так как благодаря нему компонент становится более автономным и систему действительно проще описывать на уровне отдельных модулей.
Здравствуйте, Трурль, Вы писали:
Т>Всем известно, что Клапауций великий программист, не такой великий как Трурль. Вот он из зависти и навешивает всяческие ярлыки. Это он обзывал меня "конструктором самых глупых думающих машин в мире". Но до такого еще не доходило. Клапауций пошел на явную ложь, лишь бы обвинить во лжи своего злейшего друга.
Здравствуйте, AndrewVK, Вы писали:
AVK>Вот свеженькое определение, а не покрытое плесенью AVK>
AVK>Software component
AVK>A software component is a loosely defined term for a software technology for encapsulating software functionality. Clemens Szyperski and David Messerschmitt give the following five criteria
...
А теперь посмотрим оригинал "отца-основателя КОП" Clemens Szyperski:
OOP = Polymorphism + (Some) Late Binding + (Some) Information Hiding + Inheritance
COP = Polymorphism + (Really) Late Binding + (Real) Information Hiding + Safety
Component-Oriented Programming a refined variation on Object-Oriented programming. The Oberon Tribune, Vol 1, No 2, December 1995.
ВВ>В том то и дело что отчуждаемость модулей весьма сомнительна.
И в чем сомнительность? Попробуй обосновать.
ВВ> Я как раз и понимаю компонент прежде всего как отчуждаемую (в рамках деплоймента хотя бы) часть общей системы. И вот заметь. С одной стороны, скажем System.Drawing и System.Windows.Forms — это разные компоненты,
Это не компоненты. Это пространства имен.
Компоненты — это классы в них. А модули называются System.Drawing.dll
и System.Windows.Forms.dll.
ВВ> но с другой отделить одно от другое не получится.
Тоже не верно. System.Windows.Forms.dll использует System.Drawing.dll, но System.Drawing.dll может никак не ссылается на System.Windows.Forms.dll. Так что можно гворить только о том, что некоторые компонетны из System.Windows.Forms.dll используют компонеты из System.Drawing.dll. Обратное не верно.
И вообще, использование одними компонентами других не делает их не компонентами. Это нормальное явление.
ВВ> И так во всем фреймворке.
Опять не правда. Есть множество сборок никак друг от друга не зависищих.
ВВ> Именно поэтому требование не наследоваться от неабстрактных классов мне кажется вполне логичным для КО, так как благодаря нему компонент становится более автономным и систему действительно проще описывать на уровне отдельных модулей.
Осталось только доказать, связь между автономностью компонентов и абстракностью безовых классов.
На самом деле нет никакой связи между компонентностью и требованиями абстракности. Абстрактность — это всего лишь выражение того факта, что класс не содержит всей необходимой функциональности.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
ВВ>>В том то и дело что отчуждаемость модулей весьма сомнительна. VD>И в чем сомнительность? Попробуй обосновать.
Нельзя рассматривать System.Windows.Forms отдельно от System.Drawing
ВВ>> Я как раз и понимаю компонент прежде всего как отчуждаемую (в рамках деплоймента хотя бы) часть общей системы. И вот заметь. С одной стороны, скажем System.Drawing и System.Windows.Forms — это разные компоненты, VD>Это не компоненты. Это пространства имен.
Т.е. если бы я дописал расширение файлов тебе было бы спокойнее?
VD>Компоненты — это классы в них. А модули называются System.Drawing.dll VD> и System.Windows.Forms.dll.
Классы в них? Мне казалось мы говорим о компонентах, а не о System.ComponentModel.Component.
ВВ>> но с другой отделить одно от другое не получится. VD>Тоже не верно. System.Windows.Forms.dll использует System.Drawing.dll, но System.Drawing.dll может никак не ссылается на System.Windows.Forms.dll. Так что можно гворить только о том, что некоторые компонетны из System.Windows.Forms.dll используют компонеты из System.Drawing.dll. Обратное не верно.
А почему обратное обязательно должно быть верно? Одно этого уже более чем достаточно. Это значит что System.Windows.Forms не может рассматриваться как автономная библиотека. Развертывание этой библиотеки неибежно тянет за собой другие библиотеки — и там, паровозиком, весь фреймворк. И никакими компонентами тут не пахнет.
VD>Опять не правда. Есть множество сборок никак друг от друга не зависищих.
Хочешь сказать что есть сборки в которых не используется ни один из примитивов дотнета?
VD>На самом деле нет никакой связи между компонентностью и требованиями абстракности. Абстрактность — это всего лишь выражение того факта, что класс не содержит всей необходимой функциональности.
А никто и не пытается доказать связь между компонентностью и требованиями абстрактности. Речь о другом на самом деле. Попробуй например нарисовать компонентную модель фреймворка. И посмотри что у тебя получится
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, VladD2, Вы писали:
ВВ>>>В том то и дело что отчуждаемость модулей весьма сомнительна. VD>>И в чем сомнительность? Попробуй обосновать.
ВВ>Нельзя рассматривать
И не нужно. За-то System.Drawing можно легко рассматривать отдельно от System.Windows.Forms.
ВВ>Т.е. если бы я дописал расширение файлов тебе было бы спокойнее?
Это были бы разные веши.
VD>>Компоненты — это классы в них. А модули называются System.Drawing.dll VD>> и System.Windows.Forms.dll.
ВВ>Классы в них?
В них.
ВВ> Мне казалось мы говорим о компонентах, а не о System.ComponentModel.Component.
Может быть тебе не казалось?
ВВ>>> но с другой отделить одно от другое не получится. VD>>Тоже не верно. System.Windows.Forms.dll использует System.Drawing.dll, но System.Drawing.dll может никак не ссылается на System.Windows.Forms.dll. Так что можно гворить только о том, что некоторые компонетны из System.Windows.Forms.dll используют компонеты из System.Drawing.dll. Обратное не верно.
ВВ>А почему обратное обязательно должно быть верно?
Какое обратное? Ты свои слова перечитай.
ВВ> Одно этого уже более чем достаточно. Это значит что System.Windows.Forms не может рассматриваться как автономная библиотека.
А зачем ей быть автономной? Она еще и без фрэймворка работать не сможет. Только от этого модулем она быть не перестанет.
ВВ> Развертывание этой библиотеки неибежно тянет за собой другие библиотеки
Правильно.
ВВ> — и там, паровозиком, весь фреймворк.
Фрэймворк обязан стоять на машине. Его нельзя поставить частично. Но тем не менее библиотеки не тянут все. Они требуют только те сборки от которых зависят. Причем более того... зависимости подгружаются по требованию, так что пока ты не создашь компонент требующий другой из другой сборки, то эта другая сборка так же не потребуется.
ВВ> И никакими компонентами тут не пахнет.
Тут пахнет только одним. Нежеланием признавать очевидного. Своей отсталости.
VD>>Опять не правда. Есть множество сборок никак друг от друга не зависищих.
ВВ>Хочешь сказать что есть сборки в которых не используется ни один из примитивов дотнета?
Я то что хотел уже сказал. Есть множество сборок не зависящих друг от друга. По крайней мере от одной сборки mscorlib.dll обязаны зависить все сборки дотнета.
Я првильно понимаю, что, по-твоему — это резко подавляет способности дотнета к поддержке компонетных технологий?
VD>>На самом деле нет никакой связи между компонентностью и требованиями абстракности. Абстрактность — это всего лишь выражение того факта, что класс не содержит всей необходимой функциональности.
ВВ>А никто и не пытается доказать связь между компонентностью и требованиями абстрактности.
. Иначе тут говорить было бы не очем.
ВВ> Речь о другом на самом деле. Попробуй например нарисовать компонентную модель фреймворка. И посмотри что у тебя получится
Зачем ее рисовать? Может еще танк попробовать поднять?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Приглашает чукча к себе гостей. Заходят они к нему в юрту, а там детей — немеренно. В общем куда не плюнь — сплошные дети. Бегают, кричат, ревут. Ну народ удивляется, спрашивает:
— Чукча, а на фига столько детей? Ты че детей так любишь?
— Не, — говорит, — мне сам процесс нравится, однако.
А как в этом Чёрном Коробке перекомпилировать файл ?
Допустим написал я Hello. Запустил — работает. Подправил, скомпилял, запустил — работает первая версия.
Как завтавить эту коробочку запускать последний скомпилированный файл ?
А то приходится просто обзывать модуль по другому: Hello1, нужно перекомпилять — Hello2 и т.д.
Здравствуйте, Sergey J. A., Вы писали:
SJA>А как в этом Чёрном Коробке перекомпилировать файл ? SJA>Допустим написал я Hello. Запустил — работает. Подправил, скомпилял, запустил — работает первая версия. SJA>Как завтавить эту коробочку запускать последний скомпилированный файл ? SJA>А то приходится просто обзывать модуль по другому: Hello1, нужно перекомпилять — Hello2 и т.д.
И ещё вопрос:
MODULE A9;
IMPORT StdLog, Files;
PROCEDURE T*();
VAR locator: Files.Locator; file: Files.File; writter: Files.Writer; b: BYTE; r:REAL; i:INTEGER;
BEGIN
StdLog.String(" Begin !");
locator := Files.dir.This("C:\");
file := Files.dir.Old(locator, "New.txt", TRUE);
writter := file.NewWriter(NIL);
writter.WriteByte(32);
StdLog.String(" End !");
END T;
END A9.
Почему не записывает в файл байт байт ? Файл обычный, не RO ...
Здравствуйте, Sergey J. A., Вы писали:
SJA>А как в этом Чёрном Коробке перекомпилировать файл ? SJA>Допустим написал я Hello. Запустил — работает. Подправил, скомпилял, запустил — работает первая версия. SJA>Как завтавить эту коробочку запускать последний скомпилированный файл ? SJA>А то приходится просто обзывать модуль по другому: Hello1, нужно перекомпилять — Hello2 и т.д.
Compile and Unload
... << RSDN@Home 1.1.4 beta 3 rev. 185>> ... <<Winamp is playing "Silence">>
Здравствуйте, Sergey J. A., Вы писали:
SJA>>А как в этом Чёрном Коробке перекомпилировать файл ?
Надо выгружать уже загруженный модуль из памяти. Делается так: "Dev --> Unload" или "Dev --> Compile and Unload". А еще лучше сделать как у info21: у него "Dev --> Compile and Unload" обрабатывается при нажатии Ctrl + Shift + K. Изменить набор горячих клавиш очень просто: "Info --> Menus / Update Menus"
SJA>Почему не записывает в файл байт байт ? Файл обычный, не RO ...
1. Надо в Files.dir.Old(locator, "New.txt", TRUE); написать вместо TRUE --> FALSE, то бишь не расшареный.
2. Чтобы изменения вступили в силу надо
2.1. либо явно сделать file.Flush();
2.2. либо явно закрыть файл file.Close();
2.3. либо понадеятся на вызов GC финализатора, т.е. дождаться когда объект file сам умрет — например при выгрузке модуля из памяти "Dev --> Unload" финализатор точно будет вызван.
Здравствуйте, VladD2, Вы писали:
VD>>>По крайней мере от одной сборки mscorlib.dll обязаны зависить все сборки дотнета.
AVK>>Это не так.
VD>Это ж почему?
Ну потому что можно создать сборку, не ссылающуюся на mscorlib.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, VladD2, Вы писали:
VD>>>>По крайней мере от одной сборки mscorlib.dll обязаны зависить все сборки дотнета.
AVK>>>Это не так.
VD>>Это ж почему?
AVK>Ну потому что можно создать сборку, не ссылающуюся на mscorlib.
Ссылка тут уже не причем. mscorlib.dll — это CommonLanguageRuntimeLibrary в ней все основные типы. Есть ссылка, не ее все равно без этой сборки работа приложения невозможно. Даже обжект и тот в ней объявлен.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Sergey J. A., Вы писали:
SJA>А как в этом Чёрном Коробке перекомпилировать файл ? SJA>Допустим написал я Hello. Запустил — работает. Подправил, скомпилял, запустил — работает первая версия. SJA>Как завтавить эту коробочку запускать последний скомпилированный файл ? SJA>А то приходится просто обзывать модуль по другому: Hello1, нужно перекомпилять — Hello2 и т.д.
Гы. Я тоже по началу потрахался. Потом нашел пункт меню сброса (Compile and Unload кажется) если вызвать его, то следущая компиляция цепляет обновленный вариант.
ЗЫ
Вот я и стал консультантом по Чёрным Коробкам.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>... В рамках КОП — наследоваться от не абстрактных классов определенных в других модулях нельзя, но если хотите, то наследуйтесь, но только Ваша программа, в этом случае, уже не будет удовлетворять принципам КОП.
Почему не будет? Может не стоит слишком заморачиваться на определения которые Оберон навязывает.
Что такое наследование? Если нет виртуальных(переопределяемых) функций, то это просто синтаксический сахар. Можно все равно определить класс(тип) с такими же методами и вручную написать обертки и будет то же самое.
А если есть переопределяемые функции это одна из разновидностей подключения CallBack вызовов, что в КОП нельзя компоненте вызывать чью то CallBack функцию?