Инструменты пользователя

Инструменты сайта


ao

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
ao [2016/04/15 09:08]
prospero78 [4.4 Новое для IA32]
ao [2020/10/29 07:08]
127.0.0.1 внешнее изменение
Строка 24: Строка 24:
 Множество расширений языка **Oberon** было предложено как в **ETH**, так и вне его. **Object Oberon** [19], **Oberon-2** [18], и **Froderon** [7] исследуют добавление дополнительных объектно-ориентированных свойств в язык; **Oberon-V** [9] предлагает дополнения для поддержки параллельных операций на векторных компьютерах; **Oberon-XSC** [15] добавляет математические возможности для поддержки научных вычислений; также было предложено встраивание модулей [24]. //Параллелизм// был впервые добавлен в операционную систему через специальный системный **API** в **Concurrent Obero**n [25] и **XOberon** [2]; попытка моделирования параллелизма средствами самого языка была предпринята **Radenski** [23]. Множество расширений языка **Oberon** было предложено как в **ETH**, так и вне его. **Object Oberon** [19], **Oberon-2** [18], и **Froderon** [7] исследуют добавление дополнительных объектно-ориентированных свойств в язык; **Oberon-V** [9] предлагает дополнения для поддержки параллельных операций на векторных компьютерах; **Oberon-XSC** [15] добавляет математические возможности для поддержки научных вычислений; также было предложено встраивание модулей [24]. //Параллелизм// был впервые добавлен в операционную систему через специальный системный **API** в **Concurrent Obero**n [25] и **XOberon** [2]; попытка моделирования параллелизма средствами самого языка была предпринята **Radenski** [23].
  
-PIC  FIXME+{{ ::activeoberonreport_rus0x.png?nolink&400 |}} 
 Рис. 1: Эволюция языков семейства Pascal Рис. 1: Эволюция языков семейства Pascal
  
Строка 428: Строка 429:
 ==== 4.5 Прочее ==== ==== 4.5 Прочее ====
  
-Некоторые расширения из Oberon-2 были адаптированы для Active Oberon:+Некоторые расширения из **Oberon-2** были адаптированы для **Active Oberon**:
  
     ASSERT     ASSERT
Строка 435: Строка 436:
     динамические массивы     динамические массивы
  
-Переменные указатели автоматически инициализируются значением NIL.+Переменные указатели автоматически инициализируются значением ''NIL''.
  
  
Строка 570: Строка 571:
 ==== B.1 Читатели и писатели ==== ==== B.1 Читатели и писатели ====
  
-<code>+<code oberon2>
 MODULE ReaderWriter;   MODULE ReaderWriter;  
    
Строка 606: Строка 607:
   END RW;     END RW;  
    
-END ReaderWriter.</code>+END ReaderWriter. 
 +</code>
  
-Образец Читатели --- Писатели регулирует доступ к данным в критической секции. Либо один Писатель (активность, изменяющая состояние объекта), либо несколько Читателей (активности, не изменяющие состояние объекта) допускаются в критическую секцию в предоставленное время.+Образец ''Читатели --- Писатели'' регулирует доступ к данным в //критической секции//. Либо один ''Писатель'' (активность, изменяющая состояние объекта), либо несколько ''Читателей'' (активности, не изменяющие состояние объекта) допускаются в критическую секцию в предоставленное время.
  
 ==== B.2 Сигналы ==== ==== B.2 Сигналы ====
  
-<code>+<code oberon2>
 TYPE TYPE
   Signal* = OBJECT     Signal* = OBJECT  
Строка 642: Строка 644:
 </code> </code>
  
-Signal реализует примитивы для работы с сигналами Active Oberon подобно тому, как это сделано в Java и Modula-2. Он использует слегка измененный ticket-algorithm. Как в некоторых магазинах, каждый покупатель получает занумерованый билет, это гарантирует, что покупатели будут обслужены в порядке их прибытия.+''Signal'' реализует примитивы для работы с сигналами **Active Oberon** подобно тому, как это сделано в **Java** и **Modula-2**. Он использует слегка измененный ''ticket-algorithm''. Как в некоторых магазинах, каждый покупатель получает занумерованый билет, это //гарантирует//, что покупатели будут обслужены в порядке их прибытия.
  
 ==== B.3 Повторно входимые блокировки ==== ==== B.3 Повторно входимые блокировки ====
  
-<code>+<code oberon2>
 ReentrantLock* = OBJECT   ReentrantLock* = OBJECT  
   VAR     VAR  
Строка 669: Строка 671:
 </code> </code>
  
-ReentrantLock позволяет блокировать объект его хозяином более одного раза. Клиенты этого объекта должны явно использовать Lock и Unlock вместо пометки защищаемого участка оператором EXCLUSIVE.+''ReentrantLock'' позволяет блокировать объект его хозяином //более// одного раза. Клиенты этого объекта должны явно использовать ''Lock'' и ''Unlock'' вместо пометки защищаемого участка оператором ''EXCLUSIVE''.
  
 ==== B.4 Бинарный и общий семафоры ==== ==== B.4 Бинарный и общий семафоры ====
  
-<code>+<code oberon2>
 MODULE Semaphores;   MODULE Semaphores;  
    
Строка 715: Строка 717:
 </code> </code>
  
-Это хорошо известные синхронизирующие примитивы Дейкстры [5]. Заметим, что возможность реализовать семафоры показывает, что модель Active Oberon достаточно мощная для поддержки защиты и синхронизации параллельных процессов.+Это хорошо известные синхронизирующие примитивы **Дейкстры** [5]. Заметим, что возможность реализовать семафоры показывает, что модель **Active Oberon** достаточно мощная для поддержки защиты и синхронизации параллельных процессов.
  
 ==== B.5 Барьеры ==== ==== B.5 Барьеры ====
  
-<code>+<code oberon2>
 MODULE Barriers;   MODULE Barriers;  
 (*   (*  
Строка 748: Строка 750:
 P = Phase ;P hase ;...P hase i i,0 i,1 i,n P = Phase ;P hase ;...P hase i i,0 i,1 i,n
  
-то барьер используется для гарантии того, что все активности выполнят Phasei,j до начала Phasei,j+1. Отдельный поток исполнения будет выглядеть подобно следующему: +то барьер используется для гарантии того, что все активности выполнят ''Phasei,j'' до начала ''Phasei,j+1''. Отдельный поток исполнения будет выглядеть подобно следующему: 
-<code> +<code oberon2
-  FOR j := 0 TO N DO  +  FOR j := 0 TO N DO  b
     Phase(i, j); barrier.Enter       Phase(i, j); barrier.Enter  
   END;   END;
 </code> </code>
  
-Барьер сбрасывает счетчик in после выполнения условия чтобы избежать переполнения. Это возможно потому, что активности, повторно запрашивающие блокировку через инструкцию AWAIT, имеют более высокий приоритет по сравнению с активностями, запрашивающими блокировку в первый раз в том же блоке EXCLUSIVE.+Барьер сбрасывает счетчик ''in'' после выполнения условия чтобы избежать переполнения. Это возможно потому, что активности, повторно запрашивающие блокировку через инструкцию ''AWAIT'', имеют более высокий приоритет по сравнению с активностями, запрашивающими блокировку в первый раз в том же блоке ''EXCLUSIVE''.
  
 ==== B.6 Ограниченный буфер ==== ==== B.6 Ограниченный буфер ====
  
-<code>+<code oberon2>
 MODULE Buffers;   MODULE Buffers;  
    
Строка 798: Строка 800:
 </code> </code>
  
-Buffer реализует ограниченный кольцевой буфер. Методы Put и Get защищены от одновременного доступа; они так же проверяют наличие свободного места и данных соответственно, в противном случае активность приостанавливается до того, как место освободиться или поступят новые данные.+''Buffer'' реализует ограниченный кольцевой буфер. Методы ''Put'' и ''Get'' защищены от одновременного доступа; они так же проверяют наличие свободного места и данных соответственно, в противном случае активность приостанавливается до того, как место освободиться или поступят новые данные.
  
 ===== C Примеры активных объектов ===== ===== C Примеры активных объектов =====
Строка 805: Строка 807:
 ==== C.1 Обедающие философы ==== ==== C.1 Обедающие философы ====
  
-<code>+<code oberon2>
 MODULE Philo;   MODULE Philo;  
    
Строка 852: Строка 854:
 ==== C.2 Решето Эратосфена ==== ==== C.2 Решето Эратосфена ====
  
-<code>+<code oberon2>
 MODULE Eratosthenes; (* prk 13.09.00 *)   MODULE Eratosthenes; (* prk 13.09.00 *)  
    
Строка 901: Строка 903:
 END Eratosthenes.</code> END Eratosthenes.</code>
  
-Eratosthenes использует отсеивающий алгоритм для поиска простых чисел. Каждое решето --- это активный объект, который передает все полученные значения, не являющиеся множителем первого полученного числа, на следующее решето. Синхронизация осуществляется в буфере. +''Eratosthenes'' использует //отсеивающий алгоритм// для поиска простых чисел. Каждое решето --- это активный объект, который передает все полученные значения, не являющиеся множителем первого полученного числа, на следующее решето. Синхронизация осуществляется в буфере. 
ao.txt · Последнее изменение: 2022/08/19 22:56 — yarrom