Здравствуйте, VladD2, Вы писали:
VD>А комун нахрен упало это замшелое старьё?
Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".
Здравствуйте, VladD2, Вы писали:
СГ>>Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2
VD>P90 уже достаточно чтобы что-то приличное запускать.
Прочитал сперва как F90 и подумал — а что, Фортран-90 вполне приличная вещь. Если, например, дети надеются в дальнейшем заниматься всякой там квантовой химией и прочими арифметикоёмкими предметами.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".
Минимальный набор — это, пожалуйста, в Лисп. Тем более, что CLOS уже содержит объекты.
Там нет ни указателей, ни ссылок, ни вообще ничего такого. И всё работает
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Решение не принимается. Вы использовали процедурные переменные (в качестве которых были взяты интерфейсы), а надо было сделать это не используя процедурных переменных, с помощью какого-то switch-а (неизвестно где находящегося). Мое утверждение как раз и состояло в том, что без процедурных переменных этого сделать нельзя.
процедурные переменные нужны на уровне реализации
Хотя на самом деле этот уровень может быть написан на чем угодно, хоть на ассемблере — а там такого понятия нет в принципе. Я надеюсь, возможность написать на ассемблере любую программу не будет оспариваться?
А вообще — чем дальше, тем больше я удивляюсь. Сначала утверждалось, что процедурная переменная — это то же самое, что указатель на функцию. А теперь мы вдруг узнаем, что указатели на интерфейсы и делегаты чудесным образом попали в эту же категорию. Сначала мы говорили о ЯВУ вообще, а потом вдруг оказалось, что декларативные языки мы не рассматриваем — ибо они слишком уж выбиваются из картины мироздания, в которой Оберон — лучший из языков. И какие неожиданные изменения мы увидим еще?
Здравствуйте, Сергей Губанов, Вы писали:
VD>>А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке.
СГ>static-функции члены класса — это попытка заиметь модульность в немодульном языке.
Java — не модульная??? Ну-ну.
static-члены это часть гораздо более глубокой, стройной и тщательной инкапсуляции, чем россыпь того же самого в пространстве имён верхнего уровня.
Здравствуйте, Mamut, Вы писали:
M>В Коболе, кстати есть что-то такое, завораживающее:
Доработать напильником и вернуть! Ведь Кобол это язык программирования БД в дореляционную (точнее, раннереляционную) эпоху. Надо скрестить с SQL — и вперёд!
Кстати, SQL тоже изначально задумывался как "подмножество английского".
Заодно детишки будут учить английский язык.
Потому что для C|C++|Java достаточно выучить около 30 слов, а всё остальное — это разнообразные крючочки.
Для Ada — около 50.
А для Кобола — извините, там смысл построения фраз нужно понимать.
if a is less than b then subtract a from b else subtract b from a.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Обратите внимание, что это не решается с помощью namespace'ов (так как имена всех namespace'ов тоже могут совпасть). Это решается только одним способом — надо договариваться об именовании или, по крайней мере, давать модулям длинные имена, чтобы свести к минимуму вероятность совпадения имен двух модулей от разных производителей. В Component Pascal длинные имена модулей не являются помехой, так как в секции импорта модулю можно назначить псевдоним.
В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.
На худой конец, я ведь модуль могу реверснуть.
А для любителей копаться в чужом коде (в том числе в открытом или легко дизассемблируемом, таком как java или .net) — есть обфускаторы.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.
Споем старую песню про компетенцию?
Те же .NETовские сборки точно так же могут распространяться как бинарники без исходного кода (да и Java, кажется, тоже), причем вся метаинформация (символьный файл, в терминологии оберона) находится там же. Кроме того, в отличие от убогих оберонов, и возможности использования этой мета-информации гораздо шире, и generic-и также находятся в бинарнике (начиная с 2.0).
Ах да, при желании можно декомпилятором заглянуть и ПОСМОТРЕТЬ. Так ведь и оберон компилирует в промежуточный код, нет никаких препятствий (кроме, собственно, отсутствия декомпилятора), чтобы тоже посмотреть. Так ведь это, как и отсутствие отладчика — не плюс, а показатель убогости передовой среды разработки для языка гиганта мысли. У меня вот, скажем, BMW нет — я же от этого лучше не становлюсь
Здравствуйте, Кодт, Вы писали:
К>В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.
А уж в BlackBox то какая передовая система классификации модулей предусмотрена! Модули с именами PrefixModule1, PrefixModule2, и т.п. аккуратно складываются в папочку /Prefix. Чего не сделаешь, чтобы не быть похожим на недостойные C-подобные языки и среды.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".
Что-то этот минимальный набор смахивает на применение напильника в металлообработке. А что — устареет еще не скоро, позволяет, в принципе, сделать практически все, вопрос только в затраченных усилиях и количестве отходов. Ах, да, если заранее тщательно спланировать, где сколько спиливать — все станет сразу гораздо лучше.
Только почему-то промышленное оборудование справляется с этим лучше.
Здравствуйте, Кодт, Вы писали:
К>Заодно детишки будут учить английский язык. К>Потому что для C|C++|Java достаточно выучить около 30 слов, а всё остальное — это разнообразные крючочки. К>Для Ada — около 50. К>А для Кобола — извините, там смысл построения фраз нужно понимать. К>
if a is less than b then subtract a from b else subtract b from a.
Тогда уже ставить везде Эпплы и учить AppleScript:
AppleScript is an English-like language used to write script files that automate the actions of the computer and the applications that run on it.
tell application "Finder"
setthepercent_freeto ¬
(((the free space of the startup disk) / ¬
(the capacity of the startup disk)) * 100) div 1
end tellif thepercent_free is less than 10 thentell application (path to frontmost application as text)
display dialog "The startup disk has only " & the percent_free & ¬
" percent of its capacity available." & return & return & ¬
"Should this script continue?" with icon 1
end tellend if
И потом дети будут уверены, что компьютеры — живые существа и что с ними можно разговаривать на равных
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Кодт, Вы писали:
К>>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.
К>>И это должны запомнить студенты/школьники?
СГ>Что конкретно Вас не устраивает?
СГ>Именно модуль является единицей инкапсуляции, а не class.
Перевожу. С точки зрения ученика.
Модуль — текстовый файл, в котором я пишу код. Все. Не единица инкапсуляции или компиляции. А текстовый файл с куском кода в нем. И вы никогда не заставите его переубедиться в этом. По крайней мере до тех пор, пока этот самый ученик сам не начнет писать компиляторы.
С точки зрения ученика модуль — физическая единица, а класс — логическая. Да и с точки зрения практически любого учителя из глубинки (да и не только) это будет так.
Здравствуйте, Mamut, Вы писали:
M>И потом дети будут уверены, что компьютеры — живые существа и что с ними можно разговаривать на равных
ИМХО, english-подобие это черта всех первых языков программирования. Это и Кобол, а Бейсик, и в некоторой степени Паскаль, и еще многие другие. Просто тогда всем казалось, что так будет проще для пользователей Но со временем практика показала всю губительность этого подхода.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>То есть ты признаешь, что сделать это без процедурных переменных невозможно....
Мне кажется, просто НЕОБХОДИМО уйти от понятия "процедурная переменная".
Есть такая вещь, как косвенный вызов.
И есть разные способы, как это сделать. В том числе — не прибегая к указателям на функции, делегатам и интерфейсам.
Применительно к связке EXE+DLL.
Очень просто:
1) заводим в EXE служебный поток — интерпретатор команд
2) передаём в DLL некую рукоятку к этому потоку (указатель на разделяемую очередь данных, семафоры и мутекс)
3) DLL, когда соблаговолит, пишет в эту очередь, отдаёт семафор "послано" и берёт семафор "готово".
4) EXE, в служебном потоке, в цикле: берёт семафор "послано", читает из очереди, интерпретирует команду (с помощью switch, например), пишет ответ, отдаёт семафор "готово"
5) DLL получает семафор "готово" и читает ответ.
Вот и всё. Где здесь указатели на функции?
Ты скажешь — как насчёт запуска потока, с указанием адреса функции. А я отвечу — это всего лишь особенность конкретного рантайма. Если бы мы играли под юниксом, то создать рабочий поток можно было бы с помощью функции fork().
А если бы многопоточность была встроена в язык, то и fork не потребовался бы.
Здравствуйте, Дарней, Вы писали:
Д>ИМХО, english-подобие это черта всех первых языков программирования. Это и Кобол, а Бейсик, и в некоторой степени Паскаль, и еще многие другие. Просто тогда всем казалось, что так будет проще для пользователей Но со временем практика показала всю губительность этого подхода.
Особенно — после локализации таких языков.
С содроганием вспоминаю —
WordBasic в немецкой локали (offen datei #1)...
РАЯ (он же "Езык") — K&R Си по-русски — почему-то Ершов° думал, что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...
ЯБУН... одно название чего стоит!
°) при всём уважении к А.П.Ершову, равно как Н.Вирту
Здравствуйте, Сергей Губанов, Вы писали:
СГ>2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов
Чаво???
Берём какую-нибудь книжку "COM на голом Си за 21 день своими ногами" и пишем рантайм для COM-объектов в необходимом объёме.
Не нужен маршалинг? — нафиг!
Не нужны апартаменты? — нафиг!
Не нужны категории? — нафиг!
Не нужна выгрузка ненужных DLL? — нафиг!
Не нужна динамическая загрузка DLL? — нафиг!
Не нужны ProgID'ы? — нафиг!
Нет реестра в ОС? — обойдёмся!
В результате получается очень, очень компактный код. Вся задача которого — регистрировать фабрики и обращаться к ним с заявленным CLSID'ом.
Вот, например, VxDCOM (под VxWorks). Ничего лишнего. Ещё и умеет с удалёнными компьютерами соединяться — правда, криво.
Здравствуйте, Кодт, Вы писали:
К>...что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...
Помню я со своей неокрепшей детской психикой взял книжку по какой-то недорусифицированой версии паскаля. Бррр. Первые две-три главы еще ничего. Но в четвертой они начали обьяснять указатели и использовали для этого какой-то хитрый значок, который я на клавиатуре так и не смог найти Перепробовал все комбинации клавиш. Потом вспомнил, что значок был из разряда тех, что на "электрониках" и "корветах" через AltGr добывался.