Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  21:36[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение. 

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 3796—3787 | 3786—3777 | 3776—3767 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 248


№ 3786   09-04-2007 12:49 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3784« (Сергей Перовский)
___________________________

Что будет происходить, если новые версии модулей будут приходить и включаться в работу автоматически мне представить страшно.

Если страшно, то это можно запретить. От добра, как известно, добра не ищут. Если работает, зачем менять, да еще не спросясь? Лишь бы не было, как с некоторыми нынешними популярными программами -- когда подгружают новую версию безо всякой на то санкции. Правда, снисходят до того, чтобы спросить: "Сразу переключаемся на новую версию, али после перезагрузки"?


№ 3785   09-04-2007 11:36 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3761« (SAGE)
___________________________

Ответ на »сообщение 3748« (Geniepro)

Действительно, если убрать wallpaper такой эффект пропадает...
Я думал дело не воллпейпере... Старался не кликать по столу :)
Но эффект похоже не повторяется если поставить потом другой wallpaper.

Насколько реальное приложение? - http://sage.h15.ru/?e1l1
Там же по поводу кириллических кодировок для Blebottle - http://sage.h15.ru/?e1l2


Рабочий стол масштабируется к размерам обоев :). У меня такой проблемы не возникает - ЖК монитор с разрешением 1280х1024 (видать как и у швейцарцев). :)


№ 3784   09-04-2007 09:52 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3783« (Руслан Богатырев)
___________________________
>>>Проблема спецификации процедуры. Не были зафиксированы предусловия (включая ограничения на контекст использования).
Спасибо, это я знаю :)
Я привел простейший пример. В большинстве случаев предусловия (и тем более контекст) гораздо сложнее. Фокус в том, что поместив замену в цикл автор в чистом виде расширил область применения, во всяком случае был в этом уверен. То, что он при этом сузил контекст использования осталось незамеченным (неосознанным).
А зависимость такая есть: расширение области применения ведет к усложнению контекста. Поэтому я очень боюсь "доработок" в сторонних компанентах - они требуют полномасштабного тестирования всей системы. Мне хватает необходимости тестирования под разными версиями Windows с разными настройками, чтобы множить это количество вариантов на количество версий стороннего компанента.
Кстати, в моей задаче вариант с множественным вхождением параметра не встречался - замена на "более продвинутый" модуль была сделана под давлением рекламы. Я мог не править новый модуль, а просто вернуться к старому.
Что будет происходить, если новые версии модулей будут приходить и включаться в работу автоматически мне представить страшно.


№ 3783   09-04-2007 08:53 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3782« (Сергей Перовский)
___________________________

Но я не мог тестировать на совпадение - не знал, как называется параметр "в оригинале". А разработчику не пришло в голову как раз в силу работы на уровне текста запроса - он видимо представлял себе, что пользователь будет в курсе, что на что заменяется и не будет вызывать процедуру, если запрос уже правильный.

Проблема спецификации процедуры. Не были зафиксированы предусловия (включая ограничения на контекст использования).


№ 3782   09-04-2007 08:29 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3768« (AVC)
___________________________
>>>Возможно, строку надо было заменить саму на себя?
Конечно :)
Но я не мог тестировать на совпадение - не знал, как называется параметр "в оригинале". А разработчику не пришло в голову как раз в силу работы на уровне текста запроса - он видимо представлял себе, что пользователь будет в курсе, что на что заменяется и не будет вызывать процедуру, если запрос уже правильный.




№ 3781   09-04-2007 07:00 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3780« (Руслан Богатырев)
___________________________

Еще о концептуальной экономии применительно к классическому Оберону. Напомню, что в прошлом году в ходе переписки с Виртом и уточнения его взглядов на Оберон с позиций нынешних представлений (16 лет спустя), удалось выяснить, что он считает Оберон образца 1990 г. хорошо сбалансированным языком. Единственными правками, с его точки зрения, могло бы быть:
1. Read-only экспорт переменных по умолчанию и read-write как опция (но здесь у него сомнения)
2. Отказ от излишних базовых типов, различающихся диапазоном представления (SHORTINT=LONGINT=INTEGER). Это стабилизирует язык во времени, вынося вопросы конкретизирующего программирования на иной уровень.
3. Возврат оператора FOR.

По первому пункту стоит заметить, что из четырех базовых сущностей, размещаемых внутри модуля и допустимых к экспорту, -- типа, процедуры, константы и переменной -- только переменная может допускать трактовку двух видов экспорта -- на чтение и на чтение-запись. Это вводит определенную путаницу: в Обероне нет экспорта на чтение, есть только на чтение-запись (модификатор -- звездочка), в Обероне-2 и КП есть тот и другой (модификатор -- минус). Замечу, что экспорт переменных на чтение был еще в экспериментальной Модуле (не Модуле-2). Если фантазировать, то видимо вполне можно было бы обойтись переменными с экспортом только на чтение, а модификацию ставить под контроль соответствующих процедур. Хотя это весьма спорно.

Второй пункт довольно жесткий, но делать язык (даже системного программирования) заложником архитектурных чихов -- тоже не совсем правильно (int16, int32, int64, int128, int256 и т.д. и т.п.). Отсюда можно сделать вывод, что в отношении поддержки двух разных типов CHAR применительно к КП даже в поисках компромисса видимо следует исходить из одного базового типа. Но это моя излишне вольная трактовка. Во всем должно быть чувство меры (как в добавлении средств, так и в их изъятии).


№ 3780   09-04-2007 06:32 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3777« (Руслан Богатырев)
___________________________

Кроме того, в отношении способа передачи он остановился на двух -- передача по значению (by value, by copy) и передача по ссылке (by reference), проведя аналогию с константами и переменными (напомню, что в классическом Паскале 1970 г. указывалось именно так -- const или var).

Решив упростить изложение проблемы, я по ходу внес некоторую путаницу.

Дело в том, что на самом деле при передаче параметра (фактический-формальный) надо различать:
1. способ передачи (по ссылке, по значению, по имени)
2. режим передачи (оригинал, копия)
3. характер передачи (входной, выходной, входной-выходной)

Совмещение 1 и 2 вызывает путаницу (особенно когда речь идет о VALUE-out и VALUE-inout, где под VALUE понимается копия, т.е. режим передачи).

Как мы выяснили, способ передачи можно (без потерь) ограничить передачей по ссылке и по значению, отбросив передачу по имени. Если вывести из тени обсуждения режим передачи, то можно заметить, что оперирование ведется в терминах физического представления -- ячейка памяти (адрес, оригинал) и ее содержимое (данные, копия).

Проблема возникает и из-за того, что было бы неплохо различать константы-значения (RC -- т.е. только чтение и значение никогда не меняется) и разные виды переменных -- R (read-only), W (write-only) и RW (read-write). Как только мы не делаем различий между оригиналом и переменной (называя "по ссылке" и подразумевая, что это параметр-переменная), неизбежно возникает путаница. Под первыми (R) понимаются переменные, допускающие только режим чтения (это не трактовка их как констант, они могут менять значения, доступные внутри данной процедуры, но она сама не может), под вторыми (W) -- только режим однократного присваивания (undefined, либо конкретное значение навечно), под третьими (RW) -- традиционные (привычные нам) изменяемые переменные.

Как только среди переменных мы начинаем проводить различия, выясняется, что оригинал (reference) и копия (copy) требуются для параметров-переменных, тогда как для параметров-значений разницы между копией и оригиналом практически нет (за вычетом накладных расходов на возможное создание копии). Использование оригинала или копии диктуется обычно вопросами эффективности (лучше передавать меньшие объемы) и безопасности (лучше отделять оригинал от вспомогательных вычислений до самого последнего момента -- неявного присваивания после завершения процедуры/функции).

На практике подход, принятый в КП, -- достаточно разумный компромисс во множестве вариаций триады "способ-режим-характер" передачи параметров. Минималистский подход Оберона -- концептуальная экономия, которая проистекает из желания Вирта минимизировать любую конкретизацию на уровне языка. Такой конкретизации, которая может быть вынесена на иной уровень (прагм компилятора, настроек проекта/среды и т.п.).


№ 3779   09-04-2007 05:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3778« (Илья Ермаков)
___________________________

Написать что ли? :-)

Не надо. :) Лучше сначала разобраться и до конца понять цену вопроса.


№ 3778   09-04-2007 05:11 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3777« (Руслан Богатырев)
___________________________

Вариантов и подходов может быть много, например, в классическом Обероне (где только два вида и запутаться в них трудно) префиксировать имя параметра специальным знаком (!), значения префиксировать не надо -- они и передаются по значению. Это может рассматриваться как расширение компилятора, однако, при этом формально нарушается описание языка (хотя такая мелочь элементарно приводится к формально-допустимому виду простой конвертацией).  В КП с этим сложнее, но например, в качестве маркировки могут быть ! (VAR), ? (OUT) и @(IN).

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


№ 3777   09-04-2007 03:37 Ответить на это сообщение Ответить на это сообщение с цитированием
Вопрос относительно способа (по ссылке, по значению, по имени) и характера/режима (in, out, inout) передачи параметров натолкнул вот на какие размышления.

Никлаус Вирт в своих языках (Паскаль, Модула-2, Оберон) отказался от указания характера передачи. Кроме того, в отношении способа передачи он остановился на двух -- передача по значению (by value, by copy) и передача по ссылке (by reference), проведя аналогию с константами и переменными (напомню, что в классическом Паскале 1970 г. указывалось именно так -- const или var). Передача по имени ("текстуальная подстановка") была отвергнута.

Если открыть одну из его последних работ (Good Ideas, through the Looking Glass, 2006), то можно найти раздел "Передача параметров по имени в языке Algol", посвященный обоснованию отказа от передачи по имени (который был в Алголе-60). См. http://www.citforum.ru/programming/digest/wirth/

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

Мы могли бы просто удалить из языка параметры, передаваемые по имени. Однако эта мера была бы слишком решительной и поэтому является неприемлемой. Например, это препятствовало бы присваиванию параметрам для возврата результатов вызвавшей процедуре. Однако это соображение привело к замене в более поздних языках Algol W, Pascal и Ada средства передачи параметров по имени на средство передачи параметров по ссылке. Сегодня идея звучит следующим образом: относитесь скептически к чрезмерно сложным средствам и возможностям. В самом крайнем случае их стоимость должна быть известна пользователям до выпуска, публикации и распространения языка. Эта стоимость должна быть соразмерна преимуществам, получаемым при включении в язык данного средства.


Теперь что касается характера передачи параметра. Если способ передачи подчеркивает физический смысл передачи (оригинал -- ссылка, или копия -- значение), то характер передачи подчеркивает режим использования (только как входной, только как выходной, как входной-выходной), подразумевая контроль (статический, динамический) данного режима. Иными словами, входной режим параметра (in) не должен подвергать параметр модификации (либо гарантировать то, что эта модификация не затронет область, охватывающую данную процедуру). Выходной параметр должен обеспечивать начальную инициализацию такого параметра значением undefined (NIL -- для ссылок).

Если через VAR обозначить передачу по ссылке, а через VALUE -- по значению, то теоретически возможны 6 вариантов: VAR-in, VALUE-in, VAR-out, VALUE-out, VAR-inout, VALUE-inout.

При этом если с VAR (оригиналом) понятно (что inout для него -- штатный режим, а in и out есть просто средства ограничения), то для VALUE возникают вопросы относительно out и inout; тогда как in -- штатный режим). Если при вызове процедуры и связывании фактических и формальных параметров обеспечивается постфактумное (по завершению работы процедуры) копирование значения формальных параметров в фактические, то VALUE-out и VALUE-inout теоретически имеют смысл. При этом параметр VALUE-inout инициализируется значением фактического параметра (до начала исполнения процедуры/функции). Другое дело, зачем нужны VALUE-out и VALUE-inout. Если в ходе выполнения процедуры произойдет сбой (исключение), то работа с копиями (VALUE) вместо оригиналов (VAR) предпочтительнее, поскольку откат к исходным значениям (до вызова) прост и понятен.

Язык Ada, где эту схему решили развернуть во всей красе, предпочел скрыть способ передачи (то есть сделать неявным физический смысл -- оригинал или копия), в результате это вылилось в тот текст пояснений-трактовок (достаточно замысловатый, если не сказать -- запутанный), который я привел ранее из предварительного описания языка (1979) и стандарта Ada-95.

Т.е. программисту нужно помнить, какие типы параметров относятся к by-copy type, а какие -- к by-reference type. После этого надо хорошо разбираться в правилах связывания фактических и формальных параметров. Если говорить о четкости (и надежности), то в идеале нужно иметь все 6 вариантов комбинаций.

На практике, однако, разработчики языков идут по пути компромисса. У Вирта (сторонника концептуальной экономии) оставлено прямое соответствие -- константа или переменная. Т.е. это прямое противопоставление подходу Ады: у Вирта уже способ передачи явный, а характер -- неявный. В результате из игры заведомо исключаются VALUE-out, VALUE-inout и VAR-in, а также нет различия между VAR-out и VAR-inout. Остаются в итоге VAR-inout (параметр-ссылка) и VALUE-in (параметр-значение). Причем, следует иметь в виду, что Оберон проектировался спустя почти 10 лет после появления в драфтах первых вариантов Ады, т.е. выбор Вирта в Обероне был более чем осознанным.

При реальной работе возникает потребность в оптимизации, хинтовке для компилятора (особенно в отношении работы с большими структурами). Тот же массив может передаваться как VALUE-параметр (и как открытый массив), но при этом подразумевать работу с оригиналом (т.е. в режиме чтения). Это может регулироваться на уровне прагм (директив) компилятора в конкретных точках исходного текста. Помнится, подобные прагмы были в TopSpeed-компиляторах.

Авторы Компонентного Паскаля (Пфистер и др.), как я понимаю, решили скрестить Вирта с Адой. В результате в КП пополнили схему Вирта явным указанием (для передачи параметров-переменных) еще и характера передачи (IN, OUT), где IN допустим только для массивов/записей. Таким образом, расширили число возможных комбинаций: VALUE-in  -- для передачи параметров-значений и VAR-inout (VAR), VAR-in (IN), VAR-out (OUT) -- для параметров-переменных. Для КП выбор служебного слова "VAR" (вместо INOUT) диктовался, по-видимому, вопросами совместимости с Oberon-2 (Oberon), хотя, на мой взгляд, логичнее было бы использовать для параметров-переменных именно тройку INOUT, IN и OUT.

Что касается маркировки характера (в меньшей степени -- способа) передачи фактических параметров в точке вызова, то она безусловно повышает наглядность (т.е. полезна для анализа исходных текстов, особенно при их отчуждении). Вариантов и подходов может быть много, например, в классическом Обероне (где только два вида и запутаться в них трудно) префиксировать имя параметра специальным знаком (!), значения префиксировать не надо -- они и передаются по значению. Это может рассматриваться как расширение компилятора, однако, при этом формально нарушается описание языка (хотя такая мелочь элементарно приводится к формально-допустимому виду простой конвертацией).  В КП с этим сложнее, но например, в качестве маркировки могут быть ! (VAR), ? (OUT) и @(IN).


<<<... | 3796—3787 | 3786—3777 | 3776—3767 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 248


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования