Re[23]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 29.10.04 07:27
Оценка: -1 :)
Здравствуйте, VladD2, Вы писали:

VD>А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке.


static-функции члены класса — это попытка заиметь модульность в немодульном языке.
Re[20]: Среда исполнения и загрузчик
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 29.10.04 07:33
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Обероновской виртуальной машиной


Не виртуальной машиной, а динамическим загрузчиком.

Например,

1) Виндозные DLL загружает специальный виндозный DLL загрузчик, являющийся средой исполнения виндозных DLL.

2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов

Аналогично обероновские модули (хоть они сильно похожи на обычные DLL) должны загружаться оберонистым загрузчиком.
Re[16]: Общий делитель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 29.10.04 07:37
Оценка: -2 :))
Здравствуйте, VladD2, Вы писали:

VD>А комун нахрен упало это замшелое старьё?


Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".
Re[18]: *
От: Кодт Россия  
Дата: 29.10.04 07:56
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

СГ>>Есть такая идея. Не забывайте, что и компы в школах тоже не современные, хорошо если Celeron-Pentium-2


VD>P90 уже достаточно чтобы что-то приличное запускать.


Прочитал сперва как F90 и подумал — а что, Фортран-90 вполне приличная вещь. Если, например, дети надеются в дальнейшем заниматься всякой там квантовой химией и прочими арифметикоёмкими предметами.
Перекуём баги на фичи!
Re[17]: Общий делитель
От: Кодт Россия  
Дата: 29.10.04 08:00
Оценка: 1 (1) +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".


Минимальный набор — это, пожалуйста, в Лисп. Тем более, что CLOS уже содержит объекты.
Там нет ни указателей, ни ссылок, ни вообще ничего такого. И всё работает

Так что позволь усомниться в твоём заклинании.
Перекуём баги на фичи!
Re[43]: Что дают шаблоны?
От: Дарней Россия  
Дата: 29.10.04 08:05
Оценка: +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Решение не принимается. Вы использовали процедурные переменные (в качестве которых были взяты интерфейсы), а надо было сделать это не используя процедурных переменных, с помощью какого-то switch-а (неизвестно где находящегося). Мое утверждение как раз и состояло в том, что без процедурных переменных этого сделать нельзя.


процедурные переменные нужны на уровне реализации
Хотя на самом деле этот уровень может быть написан на чем угодно, хоть на ассемблере — а там такого понятия нет в принципе. Я надеюсь, возможность написать на ассемблере любую программу не будет оспариваться?

А вообще — чем дальше, тем больше я удивляюсь. Сначала утверждалось, что процедурная переменная — это то же самое, что указатель на функцию. А теперь мы вдруг узнаем, что указатели на интерфейсы и делегаты чудесным образом попали в эту же категорию. Сначала мы говорили о ЯВУ вообще, а потом вдруг оказалось, что декларативные языки мы не рассматриваем — ибо они слишком уж выбиваются из картины мироздания, в которой Оберон — лучший из языков. И какие неожиданные изменения мы увидим еще?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[24]: *
От: Кодт Россия  
Дата: 29.10.04 08:10
Оценка: +3
Здравствуйте, Сергей Губанов, Вы писали:

VD>>А еще проще пережить ужасный статик. И через два дня будеш уже писать на промышленном языке.


СГ>static-функции члены класса — это попытка заиметь модульность в немодульном языке.




Java — не модульная??? Ну-ну.

static-члены это часть гораздо более глубокой, стройной и тщательной инкапсуляции, чем россыпь того же самого в пространстве имён верхнего уровня.
Перекуём баги на фичи!
Re[27]: *
От: Кодт Россия  
Дата: 29.10.04 08:19
Оценка: :)
Здравствуйте, 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.
Перекуём баги на фичи!
Re[25]: Имена модулей vs namespace
От: Кодт Россия  
Дата: 29.10.04 08:45
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Обратите внимание, что это не решается с помощью namespace'ов (так как имена всех namespace'ов тоже могут совпасть). Это решается только одним способом — надо договариваться об именовании или, по крайней мере, давать модулям длинные имена, чтобы свести к минимуму вероятность совпадения имен двух модулей от разных производителей. В Component Pascal длинные имена модулей не являются помехой, так как в секции импорта модулю можно назначить псевдоним.


В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.
Перекуём баги на фичи!
Re[23]: Модуль - единица инкапсуляции
От: Кодт Россия  
Дата: 29.10.04 08:51
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.


На худой конец, я ведь модуль могу реверснуть.
А для любителей копаться в чужом коде (в том числе в открытом или легко дизассемблируемом, таком как java или .net) — есть обфускаторы.
Перекуём баги на фичи!
Re[23]: Модуль - единица инкапсуляции
От: Schade Россия  
Дата: 29.10.04 09:07
Оценка: +2
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Именно модуль является единицей инкапсуляции, а не class. Когда Вы покупаете модуль у другого производителя, то на руки Вы получаете бинарный и символьный файлы. В символьном файле есть только экспортируемая этим модулем информация. Вся остальная информация РЕАЛЬНО инкапсулирована. С классом дела обстоят с точностью до наоборот. Вы не можете купить "скомпилированный" код класса, а должны купить его исходник (иначе просто смысла нет). А в исходнике все эти самые private Вы потом ручками можете подредактировать, так что липовая получается инкапсуляция, даже если и не будете редактировать, то все равно ПОСМОТРЕТЬ-то сможете.


Споем старую песню про компетенцию?
Те же .NETовские сборки точно так же могут распространяться как бинарники без исходного кода (да и Java, кажется, тоже), причем вся метаинформация (символьный файл, в терминологии оберона) находится там же. Кроме того, в отличие от убогих оберонов, и возможности использования этой мета-информации гораздо шире, и generic-и также находятся в бинарнике (начиная с 2.0).
Ах да, при желании можно декомпилятором заглянуть и ПОСМОТРЕТЬ. Так ведь и оберон компилирует в промежуточный код, нет никаких препятствий (кроме, собственно, отсутствия декомпилятора), чтобы тоже посмотреть. Так ведь это, как и отсутствие отладчика — не плюс, а показатель убогости передовой среды разработки для языка гиганта мысли. У меня вот, скажем, BMW нет — я же от этого лучше не становлюсь
... << RSDN@Home 1.1.4 @@subversion >>
Re[26]: Имена модулей vs namespace
От: Schade Россия  
Дата: 29.10.04 09:13
Оценка: :)
Здравствуйте, Кодт, Вы писали:

К>В .Net есть встроенные способы борьбы с library hell'ом. И это вовсе не длинные_мнемонические_идентификаторы, а номера версий и цифровые подписи сборок.


А уж в BlackBox то какая передовая система классификации модулей предусмотрена! Модули с именами PrefixModule1, PrefixModule2, и т.п. аккуратно складываются в папочку /Prefix. Чего не сделаешь, чтобы не быть похожим на недостойные C-подобные языки и среды.
... << RSDN@Home 1.1.4 @@subversion >>
Re[17]: Общий делитель
От: Schade Россия  
Дата: 29.10.04 09:32
Оценка: 49 (2) +2
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Потому что Оберон построен на фундаментальных принципах и не скоро еще устареет. Он содержит минимальный набор концепций, которые так или иначе всегда будут отображаться в других языках. Он является их "общим делителем".


Что-то этот минимальный набор смахивает на применение напильника в металлообработке. А что — устареет еще не скоро, позволяет, в принципе, сделать практически все, вопрос только в затраченных усилиях и количестве отходов. Ах, да, если заранее тщательно спланировать, где сколько спиливать — все станет сразу гораздо лучше.
Только почему-то промышленное оборудование справляется с этим лучше.
... << RSDN@Home 1.1.4 @@subversion >>
Re[28]: *
От: Mamut Швеция http://dmitriid.com
Дата: 29.10.04 09:46
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Заодно детишки будут учить английский язык.

К>Потому что для 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"
    set the percent_free to ¬
        (((the free space of the startup disk) / ¬
            (the capacity of the startup disk)) * 100) div 1
end tell

if the percent_free is less than 10 then
    tell 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 tell
end if


И потом дети будут уверены, что компьютеры — живые существа и что с ними можно разговаривать на равных


dmitriid.comGitHubLinkedIn
Re[23]: Модуль - единица инкапсуляции
От: Mamut Швеция http://dmitriid.com
Дата: 29.10.04 09:54
Оценка: 1 (1) +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Кодт, Вы писали:


К>>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>>Повторяю. Единицей инкапсуляции является модуль. Все остальное следует из этого.


К>>И это должны запомнить студенты/школьники?


СГ>Что конкретно Вас не устраивает?


СГ>Именно модуль является единицей инкапсуляции, а не class.


Перевожу. С точки зрения ученика.

Модуль — текстовый файл, в котором я пишу код. Все. Не единица инкапсуляции или компиляции. А текстовый файл с куском кода в нем. И вы никогда не заставите его переубедиться в этом. По крайней мере до тех пор, пока этот самый ученик сам не начнет писать компиляторы.

С точки зрения ученика модуль — физическая единица, а класс — логическая. Да и с точки зрения практически любого учителя из глубинки (да и не только) это будет так.


dmitriid.comGitHubLinkedIn
Re[29]: *
От: Дарней Россия  
Дата: 29.10.04 09:56
Оценка:
Здравствуйте, Mamut, Вы писали:

M>И потом дети будут уверены, что компьютеры — живые существа и что с ними можно разговаривать на равных


ИМХО, english-подобие это черта всех первых языков программирования. Это и Кобол, а Бейсик, и в некоторой степени Паскаль, и еще многие другие. Просто тогда всем казалось, что так будет проще для пользователей Но со временем практика показала всю губительность этого подхода.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[43]: Что дают шаблоны?
От: Кодт Россия  
Дата: 29.10.04 09:58
Оценка: 28 (3) +3
Здравствуйте, Сергей Губанов, Вы писали:

СГ>То есть ты признаешь, что сделать это без процедурных переменных невозможно....


Мне кажется, просто НЕОБХОДИМО уйти от понятия "процедурная переменная".
Есть такая вещь, как косвенный вызов.
И есть разные способы, как это сделать. В том числе — не прибегая к указателям на функции, делегатам и интерфейсам.

Применительно к связке EXE+DLL.
Очень просто:
1) заводим в EXE служебный поток — интерпретатор команд
2) передаём в DLL некую рукоятку к этому потоку (указатель на разделяемую очередь данных, семафоры и мутекс)
3) DLL, когда соблаговолит, пишет в эту очередь, отдаёт семафор "послано" и берёт семафор "готово".
4) EXE, в служебном потоке, в цикле: берёт семафор "послано", читает из очереди, интерпретирует команду (с помощью switch, например), пишет ответ, отдаёт семафор "готово"
5) DLL получает семафор "готово" и читает ответ.

Вот и всё. Где здесь указатели на функции?
Ты скажешь — как насчёт запуска потока, с указанием адреса функции. А я отвечу — это всего лишь особенность конкретного рантайма. Если бы мы играли под юниксом, то создать рабочий поток можно было бы с помощью функции fork().
А если бы многопоточность была встроена в язык, то и fork не потребовался бы.
Перекуём баги на фичи!
Re[30]: *
От: Кодт Россия  
Дата: 29.10.04 10:09
Оценка: :))
Здравствуйте, Дарней, Вы писали:

Д>ИМХО, english-подобие это черта всех первых языков программирования. Это и Кобол, а Бейсик, и в некоторой степени Паскаль, и еще многие другие. Просто тогда всем казалось, что так будет проще для пользователей Но со временем практика показала всю губительность этого подхода.


Особенно — после локализации таких языков.
С содроганием вспоминаю —
WordBasic в немецкой локали (offen datei #1)...
РАЯ (он же "Езык") — K&R Си по-русски — почему-то Ершов° думал, что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...
ЯБУН... одно название чего стоит!

°) при всём уважении к А.П.Ершову, равно как Н.Вирту
Перекуём баги на фичи!
Re[21]: Среда исполнения и загрузчик
От: Кодт Россия  
Дата: 29.10.04 10:23
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>2) COM-овские объекты загружает специальный COM-овский загрузчик, являющийся средой исполнения COM-объектов


Чаво???
Берём какую-нибудь книжку "COM на голом Си за 21 день своими ногами" и пишем рантайм для COM-объектов в необходимом объёме.
Не нужен маршалинг? — нафиг!
Не нужны апартаменты? — нафиг!
Не нужны категории? — нафиг!
Не нужна выгрузка ненужных DLL? — нафиг!
Не нужна динамическая загрузка DLL? — нафиг!
Не нужны ProgID'ы? — нафиг!
Нет реестра в ОС? — обойдёмся!
В результате получается очень, очень компактный код. Вся задача которого — регистрировать фабрики и обращаться к ним с заявленным CLSID'ом.

Вот, например, VxDCOM (под VxWorks). Ничего лишнего. Ещё и умеет с удалёнными компьютерами соединяться — правда, криво.
Перекуём баги на фичи!
Re[31]: *
От: Mamut Швеция http://dmitriid.com
Дата: 29.10.04 10:36
Оценка:
Здравствуйте, Кодт, Вы писали:

К>...что эти НЦ-КЦ проще для неокрепшей детской психики, чем {}...




Помню я со своей неокрепшей детской психикой взял книжку по какой-то недорусифицированой версии паскаля. Бррр. Первые две-три главы еще ничего. Но в четвертой они начали обьяснять указатели и использовали для этого какой-то хитрый значок, который я на клавиатуре так и не смог найти Перепробовал все комбинации клавиш. Потом вспомнил, что значок был из разряда тех, что на "электрониках" и "корветах" через AltGr добывался.

И все — психика до сих пор нарушена
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.