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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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


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

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

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

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


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

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

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

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

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


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

Общее правило связывания способа передачи с характером передачи определяется в стандарте Ada-95 так (п. 6.2):
Разумеется, в совокупности с п.6.4.1, приведенным ранее.


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

Общее правило связывания способа передачи с характером передачи определяется в стандарте Ada-95 так (п. 6.2):

A parameter is passed either by copy or by reference. When a parameter is passed by copy, the formal parameter denotes a separate object from the actual parameter, and any information transfer between the two occurs only before and after executing the subprogram. When a parameter is passed by reference, the formal parameter denotes (a view of) the object denoted by the actual parameter; reads and updates of the formal parameter directly reference the actual parameter object.

A type is a by-copy type if it is an elementary type, or if it is a descendant of a private type whose full type is a by-copy type. A parameter of a by-copy type is passed by copy.

A type is a by-reference type if it is a descendant of one of the following:
* a tagged type;
* a task or protected type;
* a nonprivate type with the reserved word limited in its declaration;
* a composite type with a subcomponent of a by-reference type;
* a private type whose full type is a by-reference type.

A parameter of a by-reference type is passed by reference. Each value of a by-reference type has an associated object. For a parenthesized expression, qualified_expression, or type_conversion, this object is the one associated with the operand.

For parameters of other types, it is unspecified whether the parameter is passed by copy or by reference





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

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

Нет, этот порядок четко специфицирован в стандарте языка. В ISO Ada-95 (с правками 2000 г.) он выглядит так:

A parameter association defines the association between an actual parameter and a formal parameter.

-- Name Resolution Rules
The formal_parameter_selector_name of a parameter_association shall resolve to denote a parameter_specification of the view being called.

The actual parameter is either the explicit_actual_parameter given in a parameter_association for a given formal parameter, or the corresponding default_expression if no parameter_association is given for the formal parameter. The expected type for an actual parameter is the type of the corresponding formal parameter.

If the mode is in, the actual is interpreted as an expression; otherwise, the actual is interpreted only as a name, if possible.

-- Legality Rules
If the mode is in out or out, the actual shall be a name that denotes a variable. The type of the actual parameter associated with an access parameter shall be convertible (see 4.6) to its anonymous access type.

-- Dynamic Semantics
For the evaluation of a parameter_association:
* The actual parameter is first evaluated.
* For an access parameter, the access_definition is elaborated, which creates the anonymous access type.
* For a parameter (of any mode) that is passed by reference (see 6.2), a view conversion of the actual parameter to the nominal subtype of the formal parameter is evaluated, and the formal parameter denotes that conversion.
* For an in or in out parameter that is passed by copy (see 6.2), the formal parameter object is created, and the value of the actual parameter is converted to the nominal subtype of the formal parameter and assigned to the formal.
* For an out parameter that is passed by copy, the formal parameter object is created, and:
*** For an access type, the formal parameter is initialized from the value of the actual, without a constraint check;
*** For a composite type with discriminants or that has implicit initial values for any subcomponents (see 3.3.1), the behavior is as for an in out parameter passed by copy.
*** For any other type, the formal parameter is uninitialized. If composite, a view conversion of the actual parameter to the nominal subtype of the formal is evaluated (which might raise Constraint_Error), and the actual subtype of the formal is that of the view conversion. If elementary, the actual subtype of the formal is given by its nominal subtype.

A formal parameter of mode in out or out with discriminants is constrained if either its nominal subtype or the actual parameter is constrained.

After normal completion and leaving of a subprogram, for each in out or out parameter that is passed by copy, the value of the formal parameter is converted to the subtype of the variable given as the actual parameter and assigned to it. These conversions and assignments occur in an arbitrary order.

Это была цитата из пункта 6.4.1 (стр. 129) упомянутого стандарта.
Подробнее см. Ada-95 [ISO/IEC 8652:1995] http://www.europrog.ru/doc/doc-iso1995-008652e.pdf


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

Кстати, попутно вскрылась интересная тема. Модули (в понятии Оберона) как основа обеспечения контроля качества (а не просто тестирования или отладки).


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

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


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

Лично я предпочитал следовать простому правилу технологической безопасности (approved вместо trusted, то есть "доверяй, но проверяй"):
1. Фиксировать библиотеки на уровне статуса "approved" (т.е. делать собственную приемку для своей команды разработчиков и давать "добро").
2. Любые изменения библиотеки (модулей) должны на моей стороне (стороне клиента) проходить процедуру приемки.
3. Категорически запрещается напрямую использовать вызовы активно изменяемых API, регулирующих операционный контекст (системные вызовы и т.п.). Для этого выделяется собственный слой модулей (находящихся под особым контролем), который модифицируется (демпфирует) соответственно чихам сторонних компаний.


№ 3771   08-04-2007 23:37 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3764« (Владимир Лось)
___________________________

Руслан, в Аде слова in, out и inout НИКАКОГО ОТНОШЕНИЯ к определению способа передачи (по значению/по ссылке) АБСОЛЮТНО НЕ ИМЕЮТ.

Владимир, спасибо за уточнение. Только я не утверждал, что эти слова в Аде относятся к способу передачи (по ссылке, по значению, по имени). Речь шла о характере передачи (входной, выходной, входной/выходной) и его преломлении в КП. Возможно, Вы просто недопоняли. Из абзаца выше того же цитируемого Вами »сообщение 3722«, думаю, это вполне можно было понять.

Чтобы не было вопросов, приведу выдержку из канонической Ады образца 1979 г.

The formal parameters of a subproram are considered local to the subproram. A parameter has one of three modes:
* in -- The parameter acts as a local constant whose value is provided by the corresponding actual parameter.
* out -- The parameter acts as a local variable whole value is assigned to the corresponding actual parameter as a result of the execution of the subprogram.
* in out -- The parameter acts as a local variable and permits access and assignment to the corresponding actual parameter. If no mode is explicitly given, the mode in is assumed. The components of in parameters that are arrays, records, or objects denoted by access values must not be changed by the subprogram. For in parameters, the parameter declaration may also include a specification of a default expression, whose value is implicitly assigned to the parameter if no explicit value is given in the call. This expression is evaluated when the subprogram specificatlon is elaborated. For all modes, access to the actual parameters can be provided either throughout the execution of the subprogram body or by copying the corresponding actual parameter before the call (in parameters), after the call (out parameters) or both (in out parameters). The effect of a subprogram that is abnormally terminated by the occurrence of an exception is undefined; its actual in out and out parameters may or may not have been updated.


№ 3770   08-04-2007 19:09 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3767« (Сергей Перовский)
___________________________
А как решать эту задачу в чистых функциях?
Никак.
Возможные варианты:
1. Сделать функцию нечистой. Тогда никаких проблем со счетчиком. Правда при этом этой функцией уже нельзя будет нигде пользоваться поскольку компилятор не позволит :))

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


№ 3769   08-04-2007 17:06 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3764« (Владимир Лось)
___________________________

Ответ на »сообщение 3722« (Руслан Богатырев)
___________________________
В Компонентном Паскале взяли схему, близкую к Аде: VAR, IN и OUT. Т.е. для передачи по значению не указывается ничего (режим всегда in), а при передачи по ссылке "квалифицируется" характер передачи -- in, out или inout.
Руслан, в Аде слова in, out и inout НИКАКОГО ОТНОШЕНИЯ к определению способа передачи (по значению/по ссылке) АБСОЛЮТНО НЕ ИМЕЮТ.

Если не ошибаюсь, то выбор метода передачи ложится на конкретную реализацию компилятора... in, out, inout задают только требуемую связь, а компилятор может как передать ссылку, так и просто выполнить копирование в начале и обратное копирование в конце процедуры. Так?


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

>>>Кто может догадаться, какую ошибку допустил разработчик в такой простой процедуре, как процедура замены в тексте, что она стала циклится при определенном (редком) сочетании входных параметров?

Возможно, строку надо было заменить саму на себя?
А потом строка каким-то образом снова попадала в лапы процедуры замены.

Кажется, в Си специально для таких случаев

#define string string


завершает обработку строки...

Или был какой-то другой случай?
 AVC


№ 3767   08-04-2007 16:04 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 3766« (Mirage)
___________________________
>>>Вот и думаю - имеет ли смысл придерживаться правила чистоты функций?
Представте, что мы хотим сосчитать количество обращений к некоторой функции в процессе решения задачи. Наиболее простым способом будет как раз встроить побочный эффект в саму функцию, чтобы она сама увеличивала счетчик.Останется занулить его при запуске программы и в конце вывести значение.
А как решать эту задачу в чистых функциях?


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


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

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

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

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

Перейти на конкретную страницу по номеру
  
Время на сайте: 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

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