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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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


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

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

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

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


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

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

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

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

<<<... | 5186—5177 | 5176—5167 | 5166—5157 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 109


№ 5176   24-09-2007 01:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5175« (Руслан Богатырев)
___________________________

В отношении управляющей переменной цикла FOR у меня достаточно давно сформировалась своя модель (идеальная) -- область видимости управляющей переменной должна ограничиваться телом цикла. Вне этого цикла ее значение не просто не определено, а она вообще недоступна. Собственно, такое убеждение у меня сложилось при знакомстве с языком Modula-3 в начале 1990-х годов, где по сути этот подход и реализован. Думаю, в новом языке (усл. название Norebo-1), который будет создаваться в рамках проекта "Роса", именно так и будет реализован цикл FOR.

Семантика оператора FOR в Modula-3 изложена в описании языка (Modula-3 Report, http://www.europrog.ru/paper/src052.pdf), см. с.25
A FOR statement has the form:
FOR id := first TO last BY step DO S END;
where id is an identifier, first and last are ordinal expressions with the same base type, step is an integer-valued expression, and S is a statement. "BY step" is optional; if omitted, step defaults to 1. The identifier id denotes a readonly variable whose scope is S and whose type is the common basetype of first and last.


№ 5175   24-09-2007 01:12 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5172« (pepper)
___________________________

>В Обероне это как раз вообще не является проблемой (для массивов любой размерности; сравните с Си/Си++).


foreach (помимо более точного выражения намерений) гарантирует отсутствие вот таких ошибок:


Для отсутствия таких ошибок надо просто аккуратно прописать семантику FOR. В классическом Обероне (вариант 1990 г.) нет оператора FOR. В Оберон-2 его включили с подачи Мессенбека (а заодно и в КП). Семантика Оберона-2 (судя по описанию) не запрещает менять управляющую переменную цикла FOR внутри цикла. Это так. Но если мы говорим про то, как это должно быть (скажем, в Oberon-07), то (если исходить из взглядов Вирта), стоит перечитать описание классического Паскаля (образца 1972 г.) -- http://www.europrog.ru/paper/nw_pas.pdf
См. п.9.2.3.3 (с.29). Там четко прописана эта норма закона:
The control variable, the initial value, and the final value must be of the same scalar type (or subrange thereof), and must not be altered by the repeated statement.

В отношении управляющей переменной цикла FOR у меня достаточно давно сформировалась своя модель (идеальная) -- область видимости управляющей переменной должна ограничиваться телом цикла. Вне этого цикла ее значение не просто не определено, а она вообще недоступна. Собственно, такое убеждение у меня сложилось при знакомстве с языком Modula-3 в начале 1990-х годов, где по сути этот подход и реализован. Думаю, в новом языке (усл. название Norebo-1), который будет создаваться в рамках проекта "Роса", именно так и будет реализован цикл FOR.


№ 5174   24-09-2007 00:41 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5173« (Антон Григорьев)
___________________________

>В отличие от Паскаля, в Обероне вызов процедуры-функции всегда требует присутствия скобок, даже если у функции нет аргументов.

Хорошо, если так. Я проверял это по книге Свердлова "Языки программирования и методы трансляции" - там на 450-ой странице при описании синтаксиса Оберона-2 с помощью БНФ ФактическиеПараметры при вызове процедуры стоят в квадратных скобках и никаких обязательных керуглых скобок там нет. Следовательно, кто-то из вас двоих ошибается.


В классическом Обероне (и в Обероне-2) есть процедуры (proper procedures) и процедуры-функции (function procedures). Оба вида используют одну синтаксическую форму (с вариантами). На уровне EBNF разница между двумя видами не задается. Это уровень семантики. Различие при вызове процедуры и процедуры-функции Вирт обозначил следующей фразой (п. 10.1 в описании языка):
A function procedure without parameters must have an empty parameter list. It must be called by a function designator whose actual parameter list is empty too.

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


№ 5173   23-09-2007 23:48 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5162« (AVC)
___________________________

В отличие от Паскаля, в Обероне вызов процедуры-функции всегда требует присутствия скобок, даже если у функции нет аргументов.

Хорошо, если так. Я проверял это по книге Свердлова "Языки программирования и методы трансляции" - там на 450-ой странице при описании синтаксиса Оберона-2 с помощью БНФ ФактическиеПараметры при вызове процедуры стоят в квадратных скобках и никаких обязательных керуглых скобок там нет. Следовательно, кто-то из вас двоих ошибается.


№ 5172   23-09-2007 21:23 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5153« (AVC)
___________________________


В Обероне это как раз вообще не является проблемой (для массивов любой размерности; сравните с Си/Си++).


foreach (помимо более точного выражения намерений) гарантирует отсутствие вот таких ошибок:


FOR i := 0 TO LEN(a)-1 DO
    i :=0;
    a[i] := 3;
END;




№ 5171   23-09-2007 17:21 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5163« (AVC)
___________________________

Как это выглядит с моей стороны.
Все началось с обсуждения нового поста в блоге Зуева lonely compiler, где он написал, что, предоставляя программисту только процедурную абстракцию и модули, Оберон является слишком низкоуровневым.
Причем это утверждение подается в качестве настолько бесспорного, что даже не снабжается аргументами.


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

Слова эти можно трактовать по-разному. Но здесь нет однозначного утверждения о том, что процедуры и модули при отсутствии других абстракций ведут Оберон к слишком низкоуровневому виду. Что вообще понимается под низкоуровневостью? Какие абстракции? Для каких задач? Язык Оберон создавался для решения задач системного программирования. Причем для реализации вполне конкретной ОС -- Oberon System. Не было, в частности, требования поддержки коллективной разработки (из-за чего "слиплись" DEFINITION И IMPLEMENTATION). Это язык для индивидуального программирования. Без насыщения прагматикой (в контексте промышленного разделения труда) это просто двигатель (ядро), а не автомобиль.

Что касается контроля сложности, то тут я не готов разделить точку зрения Евгения Зуева (по крайней мере, в контексте им изложенного). Именно модуль и процедура -- ключевые сущности в обеспечении контроля сложности. Их недостаточно. Да, с этим согласен. Но они ключевые. Особенно модуль. И это, к сожалению, недооценивают. Впрочем, некоторые свои взгляды я изложил в ветке по "Русской ОС", а в блоге в ближайшее время эти вопросы постараюсь развить поглубже. Они фундаментальные. И здесь источник очень многих проблем современного программирования.

Хотел бы напомнить, что в проекте "Роса" ключевым моментом будет поиск подходов к обеспечению контроля сложности для разработки сложных программных систем (включая и саму ОС).


№ 5170   23-09-2007 17:05 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5168« (Jack Of Shadows)
___________________________

Опередили. Я думал о том же самом :))
Остается только добавить что "специалист не знакомый с ..." это оксюморон.


Проблема в том, на каком уровне знакомый. Можно знать форму языка (грамматику), но не владеть семантикой (знать эталонную трактовку на уровне толкового словаря). Для английского языка это Merriam-Webster (http://www.m-w.com). Но и этого мало. Чтобы разбираться в текстах (что естественного языка, что языка программирования), надо знать контекст, а он определяется  прагматикой языка. Если человек не знает классическую английскую поэзию, ее традиции, то пытаться судить в этой сфере, изучив учебник английского языка, конечно можно. Но это, увы, будет уровень обывателя, а не специалиста.


№ 5169   23-09-2007 16:59 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5162« (AVC)
___________________________

>Единственный недостаток Обеорна в этом плане - это то, что в выражении A := B нельзя определить, чем является B - переменной или функцией без параметров.

А вот и неправда Ваша! :)
В отличие от Паскаля, в Обероне вызов процедуры-функции всегда требует присутствия скобок, даже если у функции нет аргументов.


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


№ 5168   23-09-2007 15:56 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5165« (Стэн)
___________________________
Это как возможность читать текст на английском не зная английского?
Опередили. Я думал о том же самом :))
Остается только добавить что "специалист не знакомый с ..." это оксюморон.
Либо он специалист, то есть знаком и не понаслышке с языком. Либо он не знаком, но в таком случае он не специалист.
Это все равно что искать профессиональных математиков, не знакомых с математической нотацией.



№ 5167   23-09-2007 15:52 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5159« (Антон Григорьев)
___________________________
>>> Я говорил не об ошибках в реализации компилятора и стандартных библиотек, а об ошибках, которые вы можете допустить сами. Вы же можете реализовать свой класс, а в нём - интерфейс IEnumerable.
Да не могу я допустить ошибок... )))
В разбираемом примере функция LEN() применима только ко встроенным типам массивов, а если Вы напишете свой тип, например, сбалансированное дерево... И будет стоять задача обхода всех элементов этого дерева. Что, будете каждый раз весь код обхода копировать? Скорее всего напишете какую-нибудь функцию с процедурным параметром... И тоже от ошибок застрахованы не будете... Используйте foreach только для стандартных типов и все будет ОК...

>>> Например, A.B := <выражение> в Обероне однозначно определяет то, что полю B переменной A будет присвоено значение заданного выражения и более ничего. А в большинстве популярных языков B может быть не полем, а свойством, и при подобном присваивании будет выполнена ещё куча скрытых действий.
Да, есть такая проблема в "большинстве популярных языков"... Только непонятно почему все боятся несоответствующего поведения операторов, но совершенно не боятся несоответствующего поведения функций? Что делает этот код:

SWAP( A, B );


Меняет местами значение переменных или заодно еще и диск форматирует?...


<<<... | 5186—5177 | 5176—5167 | 5166—5157 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 109


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

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

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

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

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

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