Jump to content

Джойс (язык программирования)

Джойс
Парадигма параллельный , императивный , структурированный
Семья Вирт Паскаль
Разработано Пер Бринч Хансен
Впервые появился 1987 год ; 37 лет назад ( 1987 )
Стабильная версия
1 / 1987 ; 37 лет назад ( 1987 )
Дисциплина набора текста Сильный
Под влиянием
Взаимодействие последовательных процессов , Паскаль , Параллельный Паскаль
Под влиянием
СуперПаскаль

Joyce — безопасный язык программирования для параллельных вычислений, разработанный Пером Бринчом Хансеном в 1980-х годах. [1] Он основан на последовательном языке Паскаль и принципах взаимодействия последовательных процессов (CSP). Он был создан для устранения недостатков CSP, применяемого в качестве языка программирования, и для предоставления инструмента, в основном для обучения, для реализации распределенных вычислительных систем.

Язык основан на концепции агентов ; одновременно выполняемые процессы, которые взаимодействуют только посредством использования каналов и передачи сообщений . Агенты могут активировать субагенты динамически и рекурсивно . Разработка Джойса легла в основу языка SuperPascal , также разработанного Хансеном примерно в 1993 году.

Особенности [ править ]

Joyce основан на небольшом подмножестве Pascal, дополненном функциями параллелизма, вдохновленными CSP. [2] В следующих разделах описаны некоторые из наиболее новых функций, которые были представлены.

Агенты [ править ]

Агент — это процедура, состоящая из набора операторов и, возможно, вложенных определений других агентов. Агент может динамически активировать субагенты, которые выполняются одновременно со своим создателем . Агент может завершить работу только тогда, когда все его субагенты также завершили работу. Например, агент process2 активирует process1:

agent process1(x, y: integer);
begin
    ...
end;

agent process2();
use process1;
begin
    process1(9, 17);
end;

Активация агента создает новые экземпляры всех локальных переменных , и значение каждого формального параметра копируется в локальную переменную. Следовательно, агенты не могут получить доступ к переменным других агентов, и им разрешено общаться только через каналы. Это ограничение предотвращает проблемы, связанные с использованием общих переменных, таких как условия гонки .

Общение [ править ]

Агенты общаются через объекты, называемые каналами . Каналы имеют алфавит, определяющий набор символов, которые могут передаваться. Каналы создаются динамически, доступ к ним осуществляется с помощью переменных порта . Тип порта определяется отдельным набором символов, составляющих его алфавит. Символы с несколькими значениями определяются определенным типом. Например:

stream = [int(integer), eos];

Символ int(integer) обозначает символ сообщения , называемый int любого целочисленного значения. Второе объявление бестипового символа eos (конец потока) называется сигналом . После определения типа порта можно объявить переменную порта этого типа:

out : stream
in  : stream

И тогда сущность канала, внутренняя для создающего его агента, может быть активирована следующим образом:

+out;

Затем символы можно отправлять и получать по каналам с помощью операторов ввода и вывода в стиле CSP. ? и ! соответственно. Связь может происходить только в том случае, если существует агент-получатель, соответствующий агенту-отправителю. Принимающий агент должен ожидать получения отправляемого типа символа. Например, значение 9, за которым следует eos символ отправляется в порт out:

out ! int(9)
out ! eos

И целочисленное сообщение принимается в переменную соответствующего типа, за которым следует eos:

received : integer
in ? int(received)
in ? eos

Заявления опроса [ править ]

Заявления опроса основаны на концепции защищенных альтернатив CSP. Оператор опроса состоит из набора операторов, каждый из которых защищен оператором входного канала. Когда связь между передающим агентом и охраной согласована, выполняется охрана, за которой следует соответствующий оператор. Например:

poll
    in ? X -> x := x + 1 |
    in ? Y -> y := y + 1
end

Где порт in контролируется по сигналам X или Y, при соответствующей связи соответствующие переменные x или y увеличиваются.

Безопасность [ править ]

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

Пример программы [ править ]

Ниже приведен полный пример программы, взятый из оригинальной статьи, знакомящей с языком программирования Джойса. [1] реализация алгоритма генерации простых чисел, основанного на методе просеивания для генерации простых чисел . А sieve Агенту отправляется поток целых чисел от своего предшественника, первое из которых является простым числом. Он удаляет из потока все кратные этому простому числу и активирует преемника. Это продолжается до тех пор, пока eos Сигнал распространяется по набору сит.

agent sieve(inp, out: stream);
var more: boolean; x, y: integer;
  succ: stream;
begin
    poll
        inp?int(x) -> +succ; 
            sieve(succ, out); more := true |
        inp?eos    -> out!eos; more := false
    end;
    while more do
        poll
            inp?int(y) ->
                if y mod x <> 0 then succ!int(y) |
            inp?eos    -> out!int(x);
                succ!eos; more := false
        end;
end;

Следующий агент инициализирует набор ситовых агентов и вводит в них поток целых чисел от 3 до 9999.

agent primes;
use generate, sieve, print;
var a, b: stream;
begin
    +a; +b; generate(a, 3, 2, 4999);
    sieve(a, b); print(b)
end;

Реализация [ править ]

Распределение стека [ править ]

Из-за одновременного выполнения процедур агента традиционную схему последовательного распределения стека нельзя использовать, поскольку записи активации вызовов агента не следуют шаблону «последним пришел — первым вышел». Вместо этого отношения создатель-субагент образуют стек с древовидной структурой. Для реализации такого поведения используется простая схема, которая работает путем выделения новых записей активации наверху стека и связывания записей активации субагентов с записью их создателя. Эти записи освобождаются только тогда, когда агент завершает работу и они оказываются на вершине стека. [3] Эффективность этой схемы зависит от структуры и поведения программы, что в некоторых случаях приводит к неэффективному использованию памяти. Более эффективная схема была реализована в языке Хансена SuperPascal .

Ссылки [ править ]

  1. ^ Перейти обратно: а б Хансен, Бринч (2002). «Джойс: язык программирования для распределенных систем». В Хансене, Пер Бринч (ред.). Происхождение параллельного программирования: от семафоров к удаленным вызовам процедур . Нью-Йорк, Нью-Йорк: Спрингер. стр. 464–492. дои : 10.1007/978-1-4757-3472-0 . ISBN  978-1-4419-2986-0 . S2CID   44909506 .
  2. ^ Хансен, Бринч (июнь 1989 г.). «Отчет о языке Джойса» . Программное обеспечение: практика и опыт . 19 (6). Джон Уайли и сыновья: 553–578. дои : 10.1002/спе.4380190606 . S2CID   30474491 .
  3. ^ Хансен, Бринч (июнь 1989 г.). «Многопроцессорная реализация Джойса» . Программное обеспечение: практика и опыт . 19 (6). Джон Уайли и сыновья: 579–592. дои : 10.1002/спе.4380190606 . S2CID   30474491 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: dc18da185ca78ba73a38f6305d2f0362__1711490640
URL1:https://arc.ask3.ru/arc/aa/dc/62/dc18da185ca78ba73a38f6305d2f0362.html
Заголовок, (Title) документа по адресу, URL1:
Joyce (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)