А что такого? Это в Си++ время компиляции огромно, а в оберонах глазом моргнуть не успеешь.
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 в джаве вобще чисто логическая сущность. Физически она не существует. Единицей хранения в джаве является класс, что все таки меньше чем модуль.
СГ>Эта проблема решается только одним способом — давайте модулям разные имена.
. А если два разных продукта используют одинаковый модуль?