Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, VladD2, Вы писали:
VD>>А разбиение на модули куда удобнее делать именно на уровене исполняемых файлов. Зачем мне грузить отдельно еденицу видимости кода???
СГ>Золотые слова. Сами додумались?
СГ>Модуль — это: СГ>1) единица исполнения (исполнимый файл)
EXE? СГ>2) единица компиляции СГ>3) единица инкапсуляции (заметьте НАСТОЯЩЕЙ! инкапсуляции)
а есть ещё псевдоинкапсуляция или симуляция инкапсуляции?
СГ>4) самая крупная структурная единица программы
Т.е. нет ничего более крупного аля просто "программа" или "проект"??? СГ>.... СГ>...можно много еще чего написать СГ>.....
Напиши!
СГ>Кстати, размер модуля как правило не большой и не маленький, так средний.
Определённый Виртом и считающийся великим тайным размером, единственно верным для всех случаев жизни!
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Дарней, Вы писали:
Д>>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>>Перечитайте, пожалуйста, исходную статью. Про "=" и "==" говорит не сам Вирт, а тот учитель слова которого Вирт цитировал, именно сын того учителя (а не сын Вирта) задавался этим вопросом.
Д>>если Вирт про это сказал в докладе — значит, считает это важным
СГ>Так это важно.
Почему это важно?
В С++:
Оператор присваивания: =
Оператор сравнения: ==
В Паскале:
Оператор присваивания: :=
Оператор сравнения: =
В VB:
Оператор присваивания: =
Оператор сравнения: =
Как видите, не важно. В любом случае надо будет просто запомнить. Если человек не понимает операцию присваивания, то такому человеку не поможет даже SET A EQUAL TO B (гипотетически).
И не надо мне говорить, что пара :=/= из Паскаля легче для понимания. Ничем не легче. Люди, далекие от программирования, не понимают и ее тоже. Зато, поняв операцию присваивания, им все равно становится, что писать, :=, = или <-
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Кодт, Вы писали:
К>>1) заводим в EXE служебный поток — интерпретатор команд
СГ>Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.
Ну обойдись без потока — опрашивай регулярно семафоры из главного потока.
(надеюсь Вы не станете требовть решения СОВСЕМ без потоков ? )
Здравствуйте, Sergey J. A., Вы писали:
SJA>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Здравствуйте, Кодт, Вы писали:
К>>>1) заводим в EXE служебный поток — интерпретатор команд
СГ>>Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.
SJA>Ну обойдись без потока — опрашивай регулярно семафоры из главного потока. SJA>(надеюсь Вы не станете требовть решения СОВСЕМ без потоков ? )
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Ключевое слово ПОТОК. Активные объекты в Active Oberon, Zonnon, (и, кажется, в Ada) работают друг с другом примерно так как Вы описали. У каждого объекта есть очередь, в которую ставятся команды-сообщения от других активных объектов.
Да, и в COM при вызовах через границу апартамента.
СГ>Ваше решение не принимается. Я продолжаю настаивать на необходимости процедурных переменных, ну разьве только теперь сделаю оговорку — в обычных, т.е. в не активных системах.
Для чего нужны процедурные переменные? Ну для чего? Чтобы свою правоту показать?
Ладно. Заведём два интерпретатора — один в EXE, другой в DLL.
EXE вызывает функцию из DLL, та записывает в очередь две вещи: что делать и как возобновить. И возвращается.
EXE выполняет действие и снова вызывает функцию из DLL с контекстом возобновления.
DLL доделывает свои дела и возвращает управление.
Здравствуйте, Сергей Губанов, Вы писали:
К>>Обычно все вычисления ведутся на стеке операндов, благо что он адресуем — можно вытащить значение с любой глубины.
СГ>Говорили нет переменных, а оказалось, что просто переменные безымянные.
Я с тобой спорить больше не буду.
Бери учебник по Форту и сам разбирайся, можно ли называть ЭТО безымянными переменными.
PS.
Видел я твой оберон. Так, сапог сапогом. Куча байтов каких-то (всего 256 разных, и те вперемешку). И работает враскоряку.
То есть, не может DLL вызывать процедуры из EXE — да и не надо. Пусть общаются друг с другом через, например, общую память, или вообще посредством TCP/IP.
Вы писали:
К>DLL доделывает свои дела и возвращает управление.
Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.
Здравствуйте, Курилка, Вы писали:
СГ>>1) единица исполнения (исполнимый файл) К>EXE?
СГ>>4) самая крупная структурная единица программы К>Т.е. нет ничего более крупного аля просто "программа" или "проект"???
Нету в расширяемых модульных система EXE!!!!!! В них есть только модули. Надо вызвать процедуру из какого-то модуля — загружаешь этот модуль в память и вызываешь эту процедуру. Вот и все. Все так просто!!!
Нету в расширяемых модульных системах "программ" или "проектов". Есть только сама система и куча модулей расширяющих возможности этой системы. Роль "проекта" может играть, например, какой-нибудь модуль-фасад, импортирующий нужные ему модули, о которых другие модули ничего не знают.
Здравствуйте, Schade, Вы писали:
СГ>>Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). S>Не надоело еще самому себе противоречить?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Золотые слова. Сами додумались?
Пытаясь унизить других ты выглядиь униженным сам. Так что прежде чем сделать выпад подумай кому он больше повредит.
СГ>Модуль — это: СГ>1) единица исполнения (исполнимый файл) СГ>2) единица компиляции
Это что за зверь? Файл исходников по русскому? Ну, это очень неудобно.
СГ>3) единица инкапсуляции (заметьте НАСТОЯЩЕЙ! инкапсуляции)
Ох!!! НАСТОЯЩЕЙ! Не могет быть. А все остальные с игрушечными возятся?
СГ>4) самая крупная структурная единица программы СГ>.... СГ>...можно много еще чего написать СГ>.....
Можно. Но для того что бы понять, что подобная структура не удобна для чего бы то нибыло имеющего размен больший чем школьный пример, ну нужно долго думать.
Сравни на досуге этот подход с подходом дотнета. В нем модулем является проект. Еденицей трансляции файл. А еденицей видемости пространство имен и тип. При работе я обычно подключаю по 1-10 модулей и использую сотни пространств имен. На исходные файлы при этом мне вообще плевать.
СГ> Гораздо больше размера класса, но гораздо меньше размера обычного приложения.
И сколько классов при этом советуется напихивать в один исходный файл?
СГ> То есть обычное приложение, как правило состоит из нескольких десятков модулей, а каждый модуль включает в себя несколько классов.
Вот это и чуш. Зачем мне 50 модулей для создания одного приложения? Мне достаточно ОДНОГО исполняемого файла и 1-5 библиотек.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Кодт, Вы писали:
К>А в том, что не надо ерунду говорить про специализированные "загрузчики" COM. К>Есть ряд ситуаций, где "загрузка" вообще отсутствует, а COM живёт и побеждает. К>Это статически прилинкованные inproc server'ы (в том числе под Windows). А под VxWorks вообще иначе быть не может — там весь код прописывается в boot image.
Не, ну каково, а? Естественно, что в случаях СТАТИЧЕСКОЙ ЛИНКОВКИ не нежен ДИНАМИЧЕСКИЙ ЗАГРУЗЧИК.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Кодт,
СГ>То есть, не может DLL вызывать процедуры из EXE — да и не надо. Пусть общаются друг с другом через, например, общую память, или вообще посредством TCP/IP.
В Win32 exe точно так же как и dll может экспортировать функции, так что технически никаких припятствий к тому чтобы из dll вызывать функции из exe нет.
LVV>Итак, хороший дизайн должен быть в центре нашего преподавания. Но как нам учить образцовому дизайну с помощью инструментов и языков, которые делают нас посмешищем? К нашему сожалению, индустрия программирования сделала немного, чтобы помочь нам, преподавателям, преодолеть наши трудности.
А может, хватит этих воплей ? А то ведь очень сильно напоминают вопли паровозников, когда электровозы появились. Вирт, конечно, классик, спору нет, но он давно уже ИМХО не имеет дела с конкретными разработками. Мир таков, каков он есть, хорошо это или плохо — спорить можно до хрипоты, он от этого другим не станет. В 70-е годы учили Фортрану и ПЛ/1, в 80-е — Паскалю и С/C++, сейчас и Java, и C# тут, а про Фортран и ПЛ/1 все почти забыли. В 2020 году что-то другое будет. Мир за тысячелетия его существования еще не погиб, компьютерный — тоже (за 60 лет), не погибнет и дальше. Каков он будет — таков и будет.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Здравствуйте, Кодт,
СГ>>То есть, не может DLL вызывать процедуры из EXE — да и не надо. Пусть общаются друг с другом через, например, общую память, или вообще посредством TCP/IP.
FR>В Win32 exe точно так же как и dll может экспортировать функции, так что технически никаких припятствий к тому чтобы из dll вызывать функции из exe нет.
РАЗУМЕЕТСЯ ПРЕПЯТСВИЙ НЕТ!!! Надо всего лишь получить адрес этой функции (получить связанную с этой функцией процедурную переменную). Но тут мне пытаются впарить что это же самое можно сделать не используя процедурных переменных. А я говорю, что без процедурных переменных, как без воды, и не туды и не сюды...
Здравствуйте, Сергей Губанов, Вы писали:
СГ>РАЗУМЕЕТСЯ ПРЕПЯТСВИЙ НЕТ!!! Надо всего лишь получить адрес этой функции (получить связанную с этой функцией процедурную переменную). Но тут мне пытаются впарить что это же самое можно сделать не используя процедурных переменных. А я говорю, что без процедурных переменных, как без воды, и не туды и не сюды...
А ты не говори, а сделай по моему рецепту. И увидишь, что очень даже туды и сюды.
Кстати! Кто не так давно просто слюной брызгал при слове "адрес"?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Вот она свои дела доделывает-доделывает и тут вдруг понимает, что надо бы вызвать процедуру из EXE, ан нет — не может. А была бы у нее процедурная переменная связанная с той процедурой, так запросто бы смогла.
Может. Подумай как. Не придумаешь — завтра расскажу.