Ada_Ru форум

Обсуждение языка Ада

multitask

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

Сообщения

Aleksey Ulasevich
multitask
2005-07-30 20:41:40

Доброе утро! )

 

Объясните пожалуйста новичку - имеет ли практическое применение мультизадачность средствами языка (компилятора?) при том что мультизадачность успешно существует на уровне ОС ?

 

-- С уважением,

Алексей Ю. Уласевич

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Объясните пожалуйста новичку - имеет ли практическое применение

мультизадачность средствами языка (компилятора?) при том что

мультизадачность успешно существует на уровне ОС ?

 

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

ВФ

 

 

 

 

Vasiliy Fofanov п©п╦я┬п╣я┌:

 

п·п╠я┼я▐я│п╫п╦я┌п╣ п©п╬п╤п╟п╩я┐п╧я│я┌п╟ п╫п╬п╡п╦я┤п╨я┐ - п╦п╪п╣п╣я┌ п╩п╦ п©я─п╟п╨я┌п╦я┤п╣я│п╨п╬п╣ п©я─п╦п╪п╣п╫п╣п╫п╦п╣

п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌я▄ я│я─п╣п╢я│я┌п╡п╟п╪п╦ я▐п╥я▀п╨п╟ (п╨п╬п╪п©п╦п╩я▐я┌п╬я─п╟?) п©я─п╦ я┌п╬п╪ я┤я┌п╬

п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌я▄ я┐я│п©п╣я┬п╫п╬ я│я┐я┴п╣я│я┌п╡я┐п╣я┌ п╫п╟ я┐я─п╬п╡п╫п╣ п·п║ ?

п╒п╟п╨п╬п╣ п©я─п╬я┌п╦п╡п╬п©п╬я│я┌п╟п╡п╩п╣п╫п╦п╣ п╫п╣п╨п╬я─я─п╣п╨я┌п╫п╬, я▐п╥я▀п╨п╬п╡я▀п╣ п╟п╠я│я┌я─п╟п╨я├п╦п╦ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌п╦

п╫п╟ п╫п╦п╥п╨п╬п╪ я┐я─п╬п╡п╫п╣ я─п╣п╟п╩п╦п╥я┐я▌я┌я│я▐ я─п╟п╥я┐п╪п╣п╣я┌я│я▐ п╦п╪п╣п╫п╫п╬ я│п╦я│я┌п╣п╪п╫я▀п╪п╦ я│я─п╣п╢я│я┌п╡п╟п╪п╦.

 

п²п╣ я┐п╡п╣я─п╣п╫. п╞ п╫п╟п©п╦я│п╟п╩ п©я─п╬пЁя─п╟п╪п╨я┐ я│ п╢п╡я┐п╪я▐ п╥п╟п╢п╟я┤п╟п╪п╦. п·я┌п╨п╬п╪п©п╦п╩п╦я─п╬п╡п╟п╩,

п╥п╟п©я┐я│я┌п╦п╩.

п÷п╬я│п╪п╬я┌я─п╣п╩ п╥п╟п©я┐я┴п╣п╫п╫я▀п╣ п©я─п╬я├п╣я│я│я▀ (п╨п╬п╪п╟п╫п╢я▀ top п╦ ps) - п╪п╬я▐ п©я─п╬пЁя─п╟п╪п╪п╟ я█я┌п╬

п╬п╢п╦п╫ п©я─п╬я├п╣я│я│. п≤ я┘п╬я┌я▐ я▐ п╦ п╫п╣ я│п╦п╩п╣п╫ п╡ п╟п╫пЁп╩п╦п╧я│п╨п╬п╪,

п╫п╬ п╨п╟п╨ я▐ п©п╬п╫я▐п╩ п╦п╥ п©я─п╦п╩п╬п╤п╣п╫п╫я▀я┘ п╪п╟п╫я┐п╟п╩п╬п╡ п╡ GNAT п╢п╩я▐ п©п╬п╢п╢п╣я─п╤п╨п╦

п╪п╫п╬пЁп╬п╥п╟п╢п╟я┤п╫п╬я│я┌п╦ п╦я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ я│п╬п╠я│п╡п╣п╫п╫я▀п╧ п╫п╦п╥п╨п╬я┐я─п╬п╡п╫п╣п╡я▀п╧ п╪п╣я┘п╟п╫п╦п╥п╪.

 

п╒.п╣. п╪я▀ п╡п╦п╢п╦п╪ п╠п╣я│я│п╪я▀я│п╩п╣п╫п╫я┐я▌ п©п╬п╢п╢п╣я─п╤п╨я┐ я│я┌п╟п╫п╢п╟я─я┌п╬п╡ п╡ я┐я┴п╣я─п╠ я█я└я└п╣п╨я┌п╦п╡п╫п╬я│я┌п╦ )

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

Не уверен. Я написал програмку с двумя задачами. Откомпилировал, запустил. Посмотрел запущенные процессы (команды top и ps) - моя программа это один процесс. И хотя я и не силен в английском,

но как я понял из приложенных мануалов в GNAT для поддержки

многозадачности используется собсвенный низкоуровневый механизм.

Василий абсолютно прав. GNAT использует именно низкоуровневый интерфейс POSIX. См. файл s-taprop.ads из дистрибутива исходных текстов компилятора.

А не видно этих самых процессов потому, что в FreeBSD есть очень

качественно реализованный механизм нитей (легковесных процессов) и GNAT RTL использует именно его, что значительно повышает производительность по сравнению с использованием процессов.

 

Т.е. мы видим бессмысленную поддержку стандартов в ущерб эффективности )

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

 

Однако, получаемые в результате смены подхода удобства - ничто по сравнению с имеющей место быть потерей производительности.

 

 

--

Vadim Godunko

Не уверен. Я написал програмку с двумя задачами. Откомпилировал,запустил. Посмотрел запущенные процессы (команды top и ps) - моя программа этоодин процесс.

 

Вы что же, хотите сказать что использование полноценных процессов для реализации задач - это было бы эффективно? Массив из 1000 задач будем 1000 процессами реализовывать? :) Естественно это на всех платформах делается через threads. И между прочим если хотите уж критиковать мультизадачность в GNAT (никто не идеален в конце концов), желательно все-таки не

ограничиваться командами top и ps, а почитать исходники :)

 

И хотя я и не силен в английском,

но как я понял из приложенных мануалов в GNAT для

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

 

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

Т.е. мы видим бессмысленную поддержку стандартов в ущерб эффективности )

 

Во-первых, простите, но данная фраза показывает на мой взгляд полное непонимание самого смысла существования стандартов вообще и языков высокого уровня в частности.

 

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

 

ВФ

 

 

 

 

Vasiliy Fofanov п©п╦я┬п╣я┌:

 

п▓я▀ я┤я┌п╬ п╤п╣, я┘п╬я┌п╦я┌п╣ я│п╨п╟п╥п╟я┌я▄ я┤я┌п╬ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ п©п╬п╩п╫п╬я├п╣п╫п╫я▀я┘ п©я─п╬я├п╣я│я│п╬п╡ п╢п╩я▐

я─п╣п╟п╩п╦п╥п╟я├п╦п╦ п╥п╟п╢п╟я┤ - я█я┌п╬ п╠я▀п╩п╬ п╠я▀ я█я└я└п╣п╨я┌п╦п╡п╫п╬? п°п╟я│я│п╦п╡ п╦п╥ 1000 п╥п╟п╢п╟я┤ п╠я┐п╢п╣п╪ 1000

 

я█я└я└п╣п╨я┌п╦п╡п╫п╣п╧ )

 

п©я─п╬я├п╣я│я│п╟п╪п╦ я─п╣п╟п╩п╦п╥п╬п╡я▀п╡п╟я┌я▄? :) п∙я│я┌п╣я│я┌п╡п╣п╫п╫п╬ я█я┌п╬ п╫п╟ п╡я│п╣я┘ п©п╩п╟я┌я└п╬я─п╪п╟я┘ п╢п╣п╩п╟п╣я┌я│я▐

 

п╢п╟

 

я┤п╣я─п╣п╥ threads. п≤ п╪п╣п╤п╢я┐ п©я─п╬я┤п╦п╪ п╣я│п╩п╦ я┘п╬я┌п╦я┌п╣ я┐п╤ п╨я─п╦я┌п╦п╨п╬п╡п╟я┌я▄ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌я▄ п╡

GNAT (п╫п╦п╨я┌п╬ п╫п╣ п╦п╢п╣п╟п╩п╣п╫ п╡ п╨п╬п╫я├п╣ п╨п╬п╫я├п╬п╡), п╤п╣п╩п╟я┌п╣п╩я▄п╫п╬ п╡я│п╣-я┌п╟п╨п╦ п╫п╣

п╬пЁя─п╟п╫п╦я┤п╦п╡п╟я┌я▄я│я▐ п╨п╬п╪п╟п╫п╢п╟п╪п╦ top п╦ ps, п╟ п©п╬я┤п╦я┌п╟я┌я▄ п╦я│я┘п╬п╢п╫п╦п╨п╦ :)

 

я▐ п╫п╟ я│п╟п╪п╬п╪ п╢п╣п╩п╣ п©я▀я┌п╟я▌я│я▄ п©п╬п╫я▐я┌я▄ п╥п╟я┤п╣п╪ я█я┌п╬ п╫п╟п╢п╬ ) п╪п╬п╤п╣я┌ я█я┌п╬ п╦ п©я─п╟п╡п╢п╟ п©я─п╦

п╨п╟п╨п╦я┘ я┌п╬ п╥п╟п╢п╟я┤п╟я┘ п╦п╪п╣п╣я┌ я│п╪я▀я│п╩

 

п≤ я┘п╬я┌я▐ я▐ п╦ п╫п╣ я│п╦п╩п╣п╫ п╡ п╟п╫пЁп╩п╦п╧я│п╨п╬п╪,

п╫п╬ п╨п╟п╨ я▐ п©п╬п╫я▐п╩ п╦п╥ п©я─п╦п╩п╬п╤п╣п╫п╫я▀я┘ п╪п╟п╫я┐п╟п╩п╬п╡ п╡ GNAT п╢п╩я▐

п©п╬п╢п╢п╣я─п╤п╨п╦п╪п╫п╬пЁп╬п╥п╟п╢п╟я┤п╫п╬я│я┌п╦ п╦я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ я│п╬п╠я│п╡п╣п╫п╫я▀п╧ п╫п╦п╥п╨п╬я┐я─п╬п╡п╫п╣п╡я▀п╧ п╪п╣я┘п╟п╫п╦п╥п╪.

п╞ п╫п╣ п©я─п╣п╢я│я┌п╟п╡п╩я▐я▌ п╬я┌п╨я┐п╢п╟ п▓я▀ я█я┌п╬ п╡п╥я▐п╩п╦. п║п╬п╠я│я┌п╡п╣п╫п╫п╬ я┐ п╪п╣п╫я▐ п╢п╟п╤п╣ п╫п╣ я┘п╡п╟я┌п╟п╣я┌

я└п╟п╫я┌п╟п╥п╦п╦ п©я─п╣п╢я│я┌п╟п╡п╦я┌я▄ п╨п╟п╨ п╪п╬п╤п╫п╬ п╦п╪п╣я┌я▄ "я│п╬п╠я│я┌п╡п╣п╫п╫я▀п╧ п╪п╣я┘п╟п╫п╦п╥п╪". п╖п╣я─п╣п╥ п©я─я▐п╪п╬п╧

п╥п╟я┴п╦я┴п╣п╫п╫я▀п╧ п╟я│я│п╣п╪п╠п╩п╣я─п╫я▀п╧ п╢п╬я│я┌я┐п© п╨ п©п╬п╢п╢п╣я─п╤п╨п╣ п©я─п╬я├п╣я│я│п╬я─п╬п╪ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌п╦?

п║п╟п╪п╬я│я┌п╬я▐я┌п╣п╩я▄п╫я▀п╧ п╢п╦я│п©п╣я┌я┤п╣я─ п╨п╡п╟п╫я┌п╬п╡ п╫п╟ п©я─п╣я─я▀п╡п╟п╫п╦я▐ п©я─п╬я├п╣я│я│п╬я─п╫я▀п╣ п╡п╣я┬п╟я┌я▄ п╦ я┌.п©.?

п≤ я┤я┌п╬, п╨п╟п╨п╟я▐ п·п║ п©п╬-п▓п╟я┬п╣п╪я┐ я┌п╟п╨п╬пЁп╬ п╪п╬п╫я│я┌я─п╟ я─п╟п╥я─п╣я┬п╦я┌ п╡п╬п╬п╠я┴п╣ п╥п╟п©я┐я│я┌п╦я┌я▄?

 

 

GNAT Reference Manual

б═12.1 Mapping Ada Tasks onto the Underlying Kernel Threads

 

п╞ п╫п╣ я│п╦п╩п╣п╫ п╡ п╟п╫пЁп╩п╦п╧я│п╨п╬п╪ п╦ п╡п╬п╥п╪п╬п╤п╫п╬ п╫п╣ п©я─п╟п╡п╦п╩я▄п╫п╬ п©п╬п╫я▐п╩.

 

п╒.п╣. п╪я▀ п╡п╦п╢п╦п╪ п╠п╣я│я│п╪я▀я│п╩п╣п╫п╫я┐я▌ п©п╬п╢п╢п╣я─п╤п╨я┐ я│я┌п╟п╫п╢п╟я─я┌п╬п╡ п╡ я┐я┴п╣я─п╠ я█я└я└п╣п╨я┌п╦п╡п╫п╬я│я┌п╦ )

п▓п╬-п©п╣я─п╡я▀я┘, п©я─п╬я│я┌п╦я┌п╣, п╫п╬ п╢п╟п╫п╫п╟я▐ я└я─п╟п╥п╟ п©п╬п╨п╟п╥я▀п╡п╟п╣я┌ п╫п╟ п╪п╬п╧ п╡п╥пЁп╩я▐п╢ п©п╬п╩п╫п╬п╣

п╫п╣п©п╬п╫п╦п╪п╟п╫п╦п╣ я│п╟п╪п╬пЁп╬ я│п╪я▀я│п╩п╟ я│я┐я┴п╣я│я┌п╡п╬п╡п╟п╫п╦я▐ я│я┌п╟п╫п╢п╟я─я┌п╬п╡ п╡п╬п╬п╠я┴п╣ п╦ я▐п╥я▀п╨п╬п╡ п╡я▀я│п╬п╨п╬пЁп╬

я┐я─п╬п╡п╫я▐ п╡ я┤п╟я│я┌п╫п╬я│я┌п╦.

 

п▓п╬п╥п╪п╬п╤п╫п╬ п╢п╩я▐ п©п╬п╩я▄п╥я▀ п╬п╠я┴п╣пЁп╬ п╢п╣п╩п╟ п╦ п╡ я─п╟п╪п╨п╟я┘ я─п╟п╥п╡п╦я┌п╦я▐ я▐п╥я▀п╨п╟ я│я┌п╬п╦я┌

я│я┌п╟п╫п╢п╟я─я┌ п©п╬п╪п╣п╫я▐я┌я▄ - я┐п╠я─п╟я┌я▄ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌я▄ п╦

я│я┌п╟п╫п╢п╟я─я┌п╦п╥п╦я─п╬п╡п╟я┌я▄ п╪п╣п╤п©я─п╬я├п╣я│я│п╬п╡п╬п╣ п╡п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡п╦п╣ (IPC). п░ я┌п╬ п╨п╟п╨ п╬п╫п╬

п╣я│я┌я▄ я│п╣п╧я┤п╟я│ п©п╬п╪п╬п╣п╪я┐ п╦п╪п╣п╣п╩п╬ п╠я▀ я│п╪я▀я│п╩ п╡ MS-DOS.

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

эффективней )

 

Нет, что Вы. Нигде не эффективней. Ни по времени ни по памяти.

 

я на самом деле пытаюсь понять зачем это надо )

 

Что "это"?

 

GNAT Reference Manual

 12.1 Mapping Ada Tasks onto the Underlying Kernel Threads

 

Я не силен в английском и возможно не правильно понял.

 

Ну и что мы там видим?

 

In GNAT, Ada's tasking services rely on a platform and OS independent layer known as GNARL. This code is responsible for implementing the correct semantics of Ada's task creation, rendezvous, protected operations etc.

GNARL decomposes Ada's tasking semantics into simpler lower level operations such as create a thread, set the priority of a thread, yield, create a lock, lock/unlock, etc. The spec for these low-level operations constitutes GNULLI, the GNULL Interface. This interface is directly inspired from the POSIX real-time API.

 

If the underlying executive or OS implements the POSIX standard faithfully, the GNULL Interface maps as is to the services offered by the underlying kernel. Otherwise, some target dependent glue code maps the services offered by the underlying kernel to the semantics expected by GNARL.

Прямым текстом без обиняков говорится что семантика Ады реализуется во всех случаях через поддержку многозадачности ядром ОС, в зависимости от платформы либо напрямую либо через адаптирующий код но всегда тем не менее через ОС. Еще раз повторюсь, а как же иначе?

 

Возможно для пользы общего дела и в рамках развития языка

стоитстандарт поменять - убрать мультизадачность и

стандартизировать межпроцессовое взаимодействие (IPC).

 

Взаимодействие между задачами уже языком стандартизировано, через концепцию асимметричного рандеву. Причем тут MS-DOS непонятно. И вообще я пока хоть убейте не понимаю что Вам не нравится и чего Вы хотите взамен. Вы же вроде только что говорили что Вас не устраивают стандарты потому что они "в ущерб эффективности"?

 

 

ВФ

 

 

 

 

Vasiliy Fofanov п©п╦я┬п╣я┌:

...

б═я│ я┌п╣п╪ я┤я┌п╬ я┐п╢п╟п╩п╦п╩ п╪п╬п╩я┤п╟ я│п╬пЁп╩п╟я┬п╟я▌я│я▄ ) п╦ я│п©п╟я│п╦п╠п╬ )

 

п▓п╬п╥п╪п╬п╤п╫п╬ п╢п╩я▐ п©п╬п╩я▄п╥я▀ п╬п╠я┴п╣пЁп╬ п╢п╣п╩п╟ п╦ п╡ я─п╟п╪п╨п╟я┘ я─п╟п╥п╡п╦я┌п╦я▐ я▐п╥я▀п╨п╟

я│я┌п╬п╦я┌я│я┌п╟п╫п╢п╟я─я┌ п©п╬п╪п╣п╫я▐я┌я▄ - я┐п╠я─п╟я┌я▄ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌я▄ п╦

я│я┌п╟п╫п╢п╟я─я┌п╦п╥п╦я─п╬п╡п╟я┌я▄ п╪п╣п╤п©я─п╬я├п╣я│я│п╬п╡п╬п╣ п╡п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡п╦п╣ (IPC).

п▓п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡п╦п╣ п╪п╣п╤п╢я┐ п╥п╟п╢п╟я┤п╟п╪п╦ я┐п╤п╣ я▐п╥я▀п╨п╬п╪ я│я┌п╟п╫п╢п╟я─я┌п╦п╥п╦я─п╬п╡п╟п╫п╬, я┤п╣я─п╣п╥ п╨п╬п╫я├п╣п©я├п╦я▌

п╟я│п╦п╪п╪п╣я┌я─п╦я┤п╫п╬пЁп╬ я─п╟п╫п╢п╣п╡я┐. п÷я─п╦я┤п╣п╪ я┌я┐я┌ MS-DOS п╫п╣п©п╬п╫я▐я┌п╫п╬. п≤ п╡п╬п╬п╠я┴п╣ я▐ п©п╬п╨п╟ я┘п╬я┌я▄

я┐п╠п╣п╧я┌п╣ п╫п╣ п©п╬п╫п╦п╪п╟я▌ я┤я┌п╬ п▓п╟п╪ п╫п╣ п╫я─п╟п╡п╦я┌я│я▐ п╦ я┤п╣пЁп╬ п▓я▀ я┘п╬я┌п╦я┌п╣ п╡п╥п╟п╪п╣п╫. п▓я▀ п╤п╣ п╡я─п╬п╢п╣

я┌п╬п╩я▄п╨п╬ я┤я┌п╬ пЁп╬п╡п╬я─п╦п╩п╦ я┤я┌п╬ п▓п╟я│ п╫п╣ я┐я│я┌я─п╟п╦п╡п╟я▌я┌ я│я┌п╟п╫п╢п╟я─я┌я▀ п©п╬я┌п╬п╪я┐ я┤я┌п╬ п╬п╫п╦ "п╡ я┐я┴п╣я─п╠

я█я└я└п╣п╨я┌п╦п╡п╫п╬я│я┌п╦"?

 

п∙я│я┌я▄ п╢п╡п╣ п╥п╟п╢п╟я┤п╦:

б═п≈п╟п╢п╟я┤п╟ п░ -б═ п©п╬я│я┌п╬я▐п╫п╫п╬ п╬п╠я─п╟п╠п╟я┌я▀п╡п╟п╣я┌ п╢п╟п╫п╫я▀п╣ (п©п╬п╩я┐я┤п╟я┌п╣я┌ п╦п╥ я─п╟п╥п╩п╦я┤п╫я▀я┘

п╦я│я┌п╬я┤п╫п╦п╨п╬п╡, п©я─п╬п╡п╬п╢п╦я┌ я─п╟я│я┤п╣я┌я▀ я│ п╢п╟п╫п╫я▀п╪п╦, п╡п╣п╢п╣я┌ п▒п■ п╦ я┌п©)

б═п≈п╟п╢п╟я┤п╟ п▒ - я─п╣п╟п╩п╦п╥я┐п╣я┌ пЁя─п╟я└п╦я┤п╣я│п╨п╬п╣ п©я─п╣п╢я│я┌п╟п╡п╩п╣п╫п╦п╣ п╢п╟п╫п╫я▀я┘ п╢п╩я▐ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▐

(п╥п╟п©я─п╟я┬п╦п╡п╟п╣я┌ п╢п╟п╫п╫я▀п╣ я┐ п░, "я─п╦я│я┐п╣я┌" п╦я┘ п╫п╟ я█п╨я─п╟п╫п╣)

 

п÷п╬п©я─п╟п╡я┌я▄п╣ п╣я│п╩п╦ п╫п╣ п©я─п╟п╡:

б═- п╡п╫я┐я┌я─п╦ п╥п╟п╢п╟я┤п╦ п░ п╣я│я┌я▄ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╬ п╡я▀п©п╬п╩п╫я▐п╣п╪я▀п╣ п©я─п╬я├п╣я│я│я▀ п╦ п╬п╫п╦

я─п╣п╟п╩п╦п╥я┐я┌я│я▐ я┤п╣я─п╣п╥ п╪п╣я┘п╟п╫п╦п╥п╪ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌п╦ Ada (GNAT)

б═- п╥п╟п╢п╟я┤п╟ п░ п╡п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡я┐п╣я┌ я│ п╥п╟п╢п╟я┤п╣п╧ п▒ (п╟ я┌п╟п╨п╤п╣ я│ п╥п╟п╢п╟я┤п╟п╪п╦ п©п╬я│я▀п╩п╟я▌я┴п╦п╪п╦

п╢п╟п╫п╫я▀п╣ п╡ п░) я┤п╣я─п╣п╥ IPC я│я─п╣п╢я│я┌п╡п╟п╪п╦ п·п║

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

Есть две задачи:

Задача А - постоянно обрабатывает данные (получатет из различных источников, проводит расчеты с данными, ведет БД и тп)

Задача Б - реализует графическое представление данных для пользователя (запрашивает данные у А, "рисует" их на экране)

 

Поправтье если не прав:

- внутри задачи А есть параллельно выполняемые процессы и они

реализутся через механизм мультизадачности Ada (GNAT)

- задача А взаимодействует с задачей Б (а также с задачами посылающими данные в А) через IPC средствами ОС

 

З А Ч Е М ? !

 

Сценарии:

 

1. Задачи типа A производят сбор информации и сохряняют её в

промежуточном защищенном объекте. Задача Б производят периодическое чтение и отображение её.

 

2. Задачи типа А производят сбор информации и непосредственное её отображение. Задача Б производит обработку действий пользователя.

Второй вариант проще и предпочтительней если нет жестких требований к "реальности" времени периода сбора информации (могут возникать

произвольные задержки при отображении).

 

 

--

Vadim Godunko

 

 

 

 

Vadim Godunko п©п╦я┬п╣я┌:

 

Aleksey Ulasevich wrote:

п∙я│я┌я▄ п╢п╡п╣ п╥п╟п╢п╟я┤п╦:

п≈п╟п╢п╟я┤п╟ п░ - п©п╬я│я┌п╬я▐п╫п╫п╬ п╬п╠я─п╟п╠п╟я┌я▀п╡п╟п╣я┌ п╢п╟п╫п╫я▀п╣ (п©п╬п╩я┐я┤п╟я┌п╣я┌ п╦п╥ я─п╟п╥п╩п╦я┤п╫я▀я┘

п╦я│я┌п╬я┤п╫п╦п╨п╬п╡, п©я─п╬п╡п╬п╢п╦я┌ я─п╟я│я┤п╣я┌я▀ я│ п╢п╟п╫п╫я▀п╪п╦, п╡п╣п╢п╣я┌ п▒п■ п╦ я┌п©)

п≈п╟п╢п╟я┤п╟ п▒ - я─п╣п╟п╩п╦п╥я┐п╣я┌ пЁя─п╟я└п╦я┤п╣я│п╨п╬п╣ п©я─п╣п╢я│я┌п╟п╡п╩п╣п╫п╦п╣ п╢п╟п╫п╫я▀я┘ п╢п╩я▐ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▐

(п╥п╟п©я─п╟я┬п╦п╡п╟п╣я┌ п╢п╟п╫п╫я▀п╣ я┐ п░, "я─п╦я│я┐п╣я┌" п╦я┘ п╫п╟ я█п╨я─п╟п╫п╣)

 

п÷п╬п©я─п╟п╡я┌я▄п╣ п╣я│п╩п╦ п╫п╣ п©я─п╟п╡:

- п╡п╫я┐я┌я─п╦ п╥п╟п╢п╟я┤п╦ п░ п╣я│я┌я▄ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╬ п╡я▀п©п╬п╩п╫я▐п╣п╪я▀п╣ п©я─п╬я├п╣я│я│я▀ п╦ п╬п╫п╦

я─п╣п╟п╩п╦п╥я┐я┌я│я▐ я┤п╣я─п╣п╥ п╪п╣я┘п╟п╫п╦п╥п╪ п╪я┐п╩я▄я┌п╦п╥п╟п╢п╟я┤п╫п╬я│я┌п╦ Ada (GNAT)

- п╥п╟п╢п╟я┤п╟ п░ п╡п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡я┐п╣я┌ я│ п╥п╟п╢п╟я┤п╣п╧ п▒ (п╟ я┌п╟п╨п╤п╣ я│ п╥п╟п╢п╟я┤п╟п╪п╦ п©п╬я│я▀п╩п╟я▌я┴п╦п╪п╦

п╢п╟п╫п╫я▀п╣ п╡ п░) я┤п╣я─п╣п╥ IPC я│я─п╣п╢я│я┌п╡п╟п╪п╦ п·п║

 

п≈ п░ п╖ п∙ п° ? !

 

п║я├п╣п╫п╟я─п╦п╦:

 

1. п≈п╟п╢п╟я┤п╦ я┌п╦п©п╟ A п©я─п╬п╦п╥п╡п╬п╢я▐я┌ я│п╠п╬я─ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╦ я│п╬я┘я─я▐п╫я▐я▌я┌ п╣я▒ п╡

п©я─п╬п╪п╣п╤я┐я┌п╬я┤п╫п╬п╪ п╥п╟я┴п╦я┴п╣п╫п╫п╬п╪ п╬п╠я┼п╣п╨я┌п╣. п≈п╟п╢п╟я┤п╟ п▒ п©я─п╬п╦п╥п╡п╬п╢я▐я┌ п©п╣я─п╦п╬п╢п╦я┤п╣я│п╨п╬п╣

я┤я┌п╣п╫п╦п╣ п╦ п╬я┌п╬п╠я─п╟п╤п╣п╫п╦п╣ п╣я▒.

 

п▓ я┌п╟п╨п╬п╪ я│п╩я┐я┤п╟п╣ п╡п╬п╥п╪п╬п╤п╣п╫ п╨п╬п╫я└п╩п╦п╨ п╪п╣п╤п╢я┐ п╥п╟п╢п╟я┤п╟п╪п╦ я┌п╦п©п╟ п░ п©я─п╦ п©п╬п©я▀я┌п╨п╦

п╬п╠я─п╟я┴п╣п╫п╦я▐ п╨ п╬п╠я┼п╣п╨я┌п╟п╪ я┘я─п╟п╫п╣п╫п╦я▐ (я┐ п╪п╣п╫я▐ я█я┌п╬ я└п╟п╧п╩я▀ п╫п╟ п╢п╦я│п╨п╣)

п╪п╫п╣ п╨п╟п╤п╣я┌я│я▐ я┤я┌п╬ п╪п╣я┘п╟п╫п╦п╥п╪ я│п╬п╬п╠я┴п╣п╫п╦п╧ п╥п╢п╣я│я▄ п╠я┐п╢п╣я┌ п╠п╬п╩п╣п╣ п╫п╟п╢п╣п╤п╣п╫ - я│п╠п╬я─я┴п╦п╨п╦

п╦п╫я└п╬я─п╪п╟я├п╦п╦ я│я┌п╟п╡я▐я┌ я│п╬п╬п╠я┴п╣п╫п╦я▐ п╡

п╬я┤п╣я─п╣п╢я▄ я│п╬п╬п╠я┴п╣п╫п╦п╧, п╟ п╥п╟п╢п╟я┤п╟ п░ я┤п╦я┌п╟п╣я┌ п╦я┘ п╦п╥ п╬я┤п╣я─п╣п╢п╦ п╦ п╬п╠я─п╟п╠п╟я┌я▀п╡п╟п╣я┌

(я─п╟я│п©п╦я┘п╦п╡п╟п╣я┌ п©п╬ я└п╟п╟п╩п╟п╪). п÷я─п╦ я█я┌п╬п╪ п╫п╣п©п╬я│я─п╣п╢я│я┌п╡п╣п╫п╫п╬ я│ я└п╟п╧п╩п╟п╪п╦

я─п╟п╠п╬я┌п╟п╣я┌ я┌п╬п╩я▄п╨п╬ п╥п╟п╢п╟я┤п╟ п░. п║п╬п╬я┌п╡п╣я┌я│п╡п╣п╫п╫п╬ п╥п╟п╢п╟я┤п╟ п▒ п©п╬я│я▀п╩п╟п╣я┌ п╥п╟п©я─п╬я│я▀

п╥п╟п╢п╟я┤п╣ п░ (п╦я│п©п╬п╩я▄п╥п╟я▐ я┌п╟п╨п╬п╧ п╤п╣ п╪п╣я┘п╟п╫п╦п╥ я│п╬п╬п╠я┴п╣п╫п╦п╧).

 

2. п≈п╟п╢п╟я┤п╦ я┌п╦п©п╟ п░ п©я─п╬п╦п╥п╡п╬п╢я▐я┌ я│п╠п╬я─ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╦ п╫п╣п©п╬я│я─п╣п╢я│я┌п╡п╣п╫п╫п╬п╣ п╣я▒

п╬я┌п╬п╠я─п╟п╤п╣п╫п╦п╣. п≈п╟п╢п╟я┤п╟ п▒ п©я─п╬п╦п╥п╡п╬п╢п╦я┌ п╬п╠я─п╟п╠п╬я┌п╨я┐ п╢п╣п╧я│я┌п╡п╦п╧ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▐.

 

п▓я┌п╬я─п╬п╧ п╡п╟я─п╦п╟п╫я┌ п©я─п╬я┴п╣ п╦ п©я─п╣п╢п©п╬я┤я┌п╦я┌п╣п╩я▄п╫п╣п╧ п╣я│п╩п╦ п╫п╣я┌ п╤п╣я│я┌п╨п╦я┘ я┌я─п╣п╠п╬п╡п╟п╫п╦п╧ п╨

"я─п╣п╟п╩я▄п╫п╬я│я┌п╦" п╡я─п╣п╪п╣п╫п╦ п©п╣я─п╦п╬п╢п╟ я│п╠п╬я─п╟ п╦п╫я└п╬я─п╪п╟я├п╦п╦ (п╪п╬пЁя┐я┌ п╡п╬п╥п╫п╦п╨п╟я┌я▄

п©я─п╬п╦п╥п╡п╬п╩я▄п╫я▀п╣ п╥п╟п╢п╣я─п╤п╨п╦ п©я─п╦ п╬я┌п╬п╠я─п╟п╤п╣п╫п╦п╦).

 

п╒я┐я┌ п╢п╣п╩п╬ п╢п╟п╤п╣ п╫п╣ п╡ я█я┌п╬п╪. п║п╠п╬я─ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╨я─я┐пЁп╩п╬я│я┐я┌п╬я┤п╫я▀п╪, п╟

п©п╬п╩я▄п╥п╬п╡п╬я┌п╣п╩я▌ п╣п╣ п╦п╥я┐я┤я┌я▄ п╫п╟п╢п╬ п╩п╦я┬я▄ п╡я─п╣п╪я▐ п╬я┌ п╡я─п╣п╪п╣п╫п╦.

 

п╞ я┘п╬я┤я┐ я┐я┌п╬я┤п╫п╦я┌я▄ п╨ я┤п╣п╪я┐ я▐ я█я┌п╬ п╡я│п╣ п╫п╟п©п╦я│п╟п╩ - п╡ п╪п╬п╣п╪ п╡п╟я─п╦п╟п╫я┌п╣ п╥п╟п╢я┤п╟ п░ п╦

п╥п╟п╢п╟я┤п╟ п▒ - п╢п╡п╟ п╫п╣п╥п╟п╡п╦я│п╦п╪я▀я┘ п©я─п╬я├п╣я│я│п╟ п╦ п╦я┘ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╟я▐ я─п╟п╠п╬я┌п╟

п╬п╠п╣я│п©п╣я┤п╦п╟п╡п╣я┌я│я▐ я│я─п╣п╢я│я┌п╡п╟п╪п╦ п·п║, п╟ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╟я▐ я─п╟п╠п╬я┌п╟ п╫п╣п╨п╬я┌я─я▀я┘ п©я─п╬я├п╣п╢я┐я─

п╡п╫я┐я┌я─п╦ п╥п╟п╢п╟я┤п╦ п░ (п╫п╟п©я─п╦п╪п╣я─ п╬п╠я─п╟п╠п╬я┌п╨п╟ п©п╬я│я┌я┐п©п╟я▌я┴п╦я┘ п╢п╟п╫п╫я▀я┘ п╦ п╬п╠п╪п╣п╫ п╢п╟п╫п╫я▀п╪п╦

я│ п╥п╟п╢п╟я┤п╣п╧ п▒) п╬п╠п╣я│п©п╣я┤п╦п╡п╟я▌я┌я│я▐ я│я─п╣п╢я│п╡п╟п╪п╦ Ada (GNAT). п╞ п╢я┐п╪п╟я▌, я┤я┌п╬

я─п╣п╟п╩п╦п╥п╟я├п╦я▐ я│я─п╣п╢я│я┌п╡п╟п╪п╦ п░п╢п╟ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╬п╧ я─п╟п╠п╬я┌я▀ п░ п╦ п▒ п╠я▀п╩п╟ п╠я▀ п╥п╢п╣я│я▄ п╪п╣п╫п╣п╣

п©п╬п╢я┘п╬п╢я▐я┴п╣п╧.

 

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Vasiliy Fofanov пишет:

 

асимметричного рандеву. Причем тут MS-DOS непонятно. И вообще я пока хоть

Я уже не помню что конкретно это было, но лет 12-13 назад писал я программу на Турбо Паскале и мучила меня тогда мысль,

что если б я некоторые ее части мог запустил бы паралллельно, то алогоритм был бы намного проще. Почему то запомнилось....

 

Извинте за оффтопик )

 

-- С уважением,

Алексей Ю. Уласевич

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

В таком случае возможен конфлик между задачами типа А при попытки обращения к объектам хранения (у меня это файлы на диске)

мне кажется что механизм сообщений здесь будет более надежен - сборщики информации ставят сообщения в

очередь сообщений, а задача А читает их из очереди и обрабатывает (распихивает по фаалам). При этом непосредственно с файлами

работает только задача А. Соответсвенно задача Б посылает запросы задаче А (использая такой же механиз сообщений).

 

Порекомендую найти и изучить книгу Бар, Проектирование систем на языке Ada.

Хоть она описывает считай позапрошлый стандарт, но лучшего учебника по параллельному программированию на Ada не найти.

 

В данном примере если доступ к диску описан внутри защищенного объекта (protected object), то конфликтов быть не может в силу семантики

защищенного объекта.

 

 

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

 

В таком случае имеется определенная необходимость строить распределенную систему.

 

Опять же простейший случай - использование пассивного совместно

используемого пакета (shared passive) для обмена данными. Он

конфигурируется средствами GLADE в раздел задач А.

 

Задача Б запускается как основная задача второго раздела. Первый раздел запускается и работает вечно, а второй - по требованию пользователя.

Очень важно, что при грамотной организации нет (значимых) ограничений на количество одновременно запущенных вторых разделов и их можно запускать не только локально на машине, исполняющей первый раздел, но и на любой другой машине, соединенной через TCP/IP.

 

Я хочу уточнить к чему я это все написал - в моем варианте задча А и задача Б - два независимых процесса и их параллельная работа

обеспечиавется средствами ОС, а параллельная работа некотрых процедур внутри задачи А (например обработка поступающих данных и обмен данными с задачей Б) обеспечиваются средсвами Ada (GNAT). Я думаю, что реализация средствами Ада параллельной работы А и Б была бы здесь менее подходящей.

Использование средств ОС бывает необходимо, но первый вопрос, который необходимо себе задавать, так это попробовать обосновать, зачем нужно использовать эти средства. К сожалению, единственным обоснованием может быть только необходимость взаимодействия с унаследованной C программой.

 

--

Vadim Godunko

 

 

 

 

Vadim Godunko п©п╦я┬п╣я┌:

 

п╒я┐я┌ п╢п╣п╩п╬ п╢п╟п╤п╣ п╫п╣ п╡ я█я┌п╬п╪. п║п╠п╬я─ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╨я─я┐пЁп╩п╬я│я┐я┌п╬я┤п╫я▀п╪, п╟

п©п╬п╩я▄п╥п╬п╡п╬я┌п╣п╩я▌ п╣п╣ п╦п╥я┐я┤я┌я▄ п╫п╟п╢п╬ п╩п╦я┬я▄ п╡я─п╣п╪я▐ п╬я┌ п╡я─п╣п╪п╣п╫п╦.

п▓ я┌п╟п╨п╬п╪ я│п╩я┐я┤п╟п╣ п╦п╪п╣п╣я┌я│я▐ п╬п©я─п╣п╢п╣п╩п╣п╫п╫п╟я▐ п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬я│я┌я▄ я│я┌я─п╬п╦я┌я▄ я─п╟я│п©я─п╣п╢п╣п╩п╣п╫п╫я┐я▌

я│п╦я│я┌п╣п╪я┐.

 

п·п©я▐я┌я▄ п╤п╣ п©я─п╬я│я┌п╣п╧я┬п╦п╧ я│п╩я┐я┤п╟п╧ - п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ п©п╟я│я│п╦п╡п╫п╬пЁп╬ я│п╬п╡п╪п╣я│я┌п╫п╬

п╦я│п©п╬п╩я▄п╥я┐п╣п╪п╬пЁп╬ п©п╟п╨п╣я┌п╟ (shared passive) п╢п╩я▐ п╬п╠п╪п╣п╫п╟ п╢п╟п╫п╫я▀п╪п╦. п·п╫

п╨п╬п╫я└п╦пЁя┐я─п╦я─я┐п╣я┌я│я▐ я│я─п╣п╢я│я┌п╡п╟п╪п╦ GLADE п╡ я─п╟п╥п╢п╣п╩ п╥п╟п╢п╟я┤ п░.

 

п≈п╟п╢п╟я┤п╟ п▒ п╥п╟п©я┐я│п╨п╟п╣я┌я│я▐ п╨п╟п╨ п╬я│п╫п╬п╡п╫п╟я▐ п╥п╟п╢п╟я┤п╟ п╡я┌п╬я─п╬пЁп╬ я─п╟п╥п╢п╣п╩п╟. п÷п╣я─п╡я▀п╧ я─п╟п╥п╢п╣п╩

п╥п╟п©я┐я│п╨п╟п╣я┌я│я▐ п╦ я─п╟п╠п╬я┌п╟п╣я┌ п╡п╣я┤п╫п╬, п╟ п╡я┌п╬я─п╬п╧ - п©п╬ я┌я─п╣п╠п╬п╡п╟п╫п╦я▌ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▐.

 

я┤я┌п╬ п©я─п╣п╢я│я┌п╟п╡п╩я▐п╣я┌ п╦п╥ я│п╣п╠я▐ "я┌я─п╣п╠п╬п╡п╟п╫п╦п╣ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▐" ?

 

п·я┤п╣п╫я▄ п╡п╟п╤п╫п╬, я┤я┌п╬ п©я─п╦ пЁя─п╟п╪п╬я┌п╫п╬п╧ п╬я─пЁп╟п╫п╦п╥п╟я├п╦п╦ п╫п╣я┌ (п╥п╫п╟я┤п╦п╪я▀я┘) п╬пЁя─п╟п╫п╦я┤п╣п╫п╦п╧ п╫п╟

п╨п╬п╩п╦я┤п╣я│я┌п╡п╬ п╬п╢п╫п╬п╡я─п╣п╪п╣п╫п╫п╬ п╥п╟п©я┐я┴п╣п╫п╫я▀я┘ п╡я┌п╬я─я▀я┘ я─п╟п╥п╢п╣п╩п╬п╡ п╦ п╦я┘ п╪п╬п╤п╫п╬ п╥п╟п©я┐я│п╨п╟я┌я▄

п╫п╣ я┌п╬п╩я▄п╨п╬ п╩п╬п╨п╟п╩я▄п╫п╬ п╫п╟ п╪п╟я┬п╦п╫п╣, п╦я│п©п╬п╩п╫я▐я▌я┴п╣п╧ п©п╣я─п╡я▀п╧ я─п╟п╥п╢п╣п╩, п╫п╬ п╦ п╫п╟ п╩я▌п╠п╬п╧

п╢я─я┐пЁп╬п╧ п╪п╟я┬п╦п╫п╣, я│п╬п╣п╢п╦п╫п╣п╫п╫п╬п╧ я┤п╣я─п╣п╥ TCP/IP.

 

я┌.п╣. я█я┌п╬ п╡я│п╣ я│ п©п╬п╪п╬я┴я▄я▌ GLADE п╢п╣п╩п╟п╣я┌я│я▐?

п п╟п╨ я┌п╬ п╬п╫п╬ п╡я│п╣ я┤я┌п╬ п╫я┐п╤п╫п╬ п╢п╣п╩п╟п╣я┌я│я▐ я┌п╬ я│ п©п╬п╪п╬я┴я▄я▌ Florist, я┌п╬ я│ п©п╬п╪п╬я┴я▄я▌

PolyOrb, я┌п╬ я│ п©п╬п╪п╬я┴я▄я▌ GLADE ...

п╜я┌п╬ п╡п╩п╦п╣п╫п╦п╣ п╦п╢п╣п╬п╩п╬пЁп╦п╦ п░п╢п╟ ? п╞ п╫п╬п╡п╦я┤п╣п╨ п╡ п░п╢п╣, п╫п╬ п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬я│я┌я▄ я─п╣я┬п╟я┌я▄

п╥п╟п╢п╟я┤п╦ п╡я│п©п╬п╪п╬пЁп╟я┌п╣п╩я▄п╫я▀п╪п╦

я│я─п╣п╢я│я┌п╡п╟п╪п╦ п╪п╣п╫я▐ я│п╪я┐я┴п╟п╣я┌. п╞ п╡я│п╣пЁп╢п╟ я│я┤п╦я┌п╟п╩ - п╣я│я┌я▄ п·п║ я│ п╣п╣ п╡п╬п╥п╪п╬п╤п╫п╬я│я┌я▐п╪п╦ п╦

п╣я│я┌я▄ п©я─п╦п╨п╩п╟п╢п╫п╬п╧ я│п╬я└я┌

п╨п╬я┌п╬я─я▀п╣ я█я┌п╦ п╡п╬п╥п╪п╬п╤п╫п╬я│я┌п╦ п╦я│п©п╬п╩я▄п╥я┐п╣я┌. п░ я┌я┐я┌ я▐ я│я┌п╬п╩п╨п╫я┐п╩я│я▐ я│ п╢я─я┐пЁп╦п╪п╦

п©я─п╦п╫я├п╦п©п╟п╪п╦ - п╣я│я┌я▄ я│п╬я└я┌ п╨п╬я┌п╬я─я▀п╧ п╠я┐п╢п╣я┌ я─п╟п╠п╬я┌п╟я┌я▄ я┌п╟п╪ пЁп╢п╣ п╣я│я┌я▄ я─п╣п╟п╩п╦п╥п╟я├п╦я▐ Ada п╦ я─п╣п╟п╩п╦п╥п╟я├п╦я▐ я│п╬п╬я┌п╡п╣я┌п╡я┐я▌я┴п╦я┘

п╠п╦п╠п╩п╦п╬я┌п╣п╨. п÷п╬-п╪п╬п╣п╪я┐ я┌п╟п╨п╦п╣ п╡п╣я┴п╦ п╨п╟п╨ GLADE п╦ Florist я█я┌п╬ я┐п╤п╣ п©п╣я─п╣п╠п╬я─. п╜я┌п╬ п╫п╣ п╪п╬п╧ п©я┐я┌я▄. )

п╞ я┘п╬я┤я┐ я┐я┌п╬я┤п╫п╦я┌я▄ п╨ я┤п╣п╪я┐ я▐ я█я┌п╬ п╡я│п╣ п╫п╟п©п╦я│п╟п╩ - п╡ п╪п╬п╣п╪ п╡п╟я─п╦п╟п╫я┌п╣ п╥п╟п╢я┤п╟ п░ п╦

п╥п╟п╢п╟я┤п╟ п▒ - п╢п╡п╟ п╫п╣п╥п╟п╡п╦я│п╦п╪я▀я┘ п©я─п╬я├п╣я│я│п╟ п╦ п╦я┘ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╟я▐ я─п╟п╠п╬я┌п╟

п╬п╠п╣я│п©п╣я┤п╦п╟п╡п╣я┌я│я▐ я│я─п╣п╢я│я┌п╡п╟п╪п╦ п·п║, п╟ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╟я▐ я─п╟п╠п╬я┌п╟ п╫п╣п╨п╬я┌я─я▀я┘ п©я─п╬я├п╣п╢я┐я─

п╡п╫я┐я┌я─п╦ п╥п╟п╢п╟я┤п╦ п░ (п╫п╟п©я─п╦п╪п╣я─ п╬п╠я─п╟п╠п╬я┌п╨п╟ п©п╬я│я┌я┐п©п╟я▌я┴п╦я┘ п╢п╟п╫п╫я▀я┘ п╦ п╬п╠п╪п╣п╫ п╢п╟п╫п╫я▀п╪п╦ я│

п╥п╟п╢п╟я┤п╣п╧ п▒) п╬п╠п╣я│п©п╣я┤п╦п╡п╟я▌я┌я│я▐ я│я─п╣п╢я│п╡п╟п╪п╦ Ada (GNAT). п╞ п╢я┐п╪п╟я▌, я┤я┌п╬ я─п╣п╟п╩п╦п╥п╟я├п╦я▐

я│я─п╣п╢я│я┌п╡п╟п╪п╦ п░п╢п╟ п©п╟я─п╟п╩п╩п╣п╩я▄п╫п╬п╧ я─п╟п╠п╬я┌я▀ п░ п╦ п▒ п╠я▀п╩п╟ п╠я▀ п╥п╢п╣я│я▄ п╪п╣п╫п╣п╣ п©п╬п╢я┘п╬п╢я▐я┴п╣п╧.

 

п≤я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ я│я─п╣п╢я│я┌п╡ п·п║ п╠я▀п╡п╟п╣я┌ п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬, п╫п╬ п©п╣я─п╡я▀п╧ п╡п╬п©я─п╬я│, п╨п╬я┌п╬я─я▀п╧

п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬ я│п╣п╠п╣ п╥п╟п╢п╟п╡п╟я┌я▄, я┌п╟п╨ я█я┌п╬ п©п╬п©я─п╬п╠п╬п╡п╟я┌я▄ п╬п╠п╬я│п╫п╬п╡п╟я┌я▄, п╥п╟я┤п╣п╪ п╫я┐п╤п╫п╬

п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄ я█я┌п╦ я│я─п╣п╢я│я┌п╡п╟. п  я│п╬п╤п╟п╩п╣п╫п╦я▌, п╣п╢п╦п╫я│я┌п╡п╣п╫п╫я▀п╪ п╬п╠п╬я│п╫п╬п╡п╟п╫п╦п╣п╪ п╪п╬п╤п╣я┌

п╠я▀я┌я▄ я┌п╬п╩я▄п╨п╬ п╫п╣п╬п╠я┘п╬п╢п╦п╪п╬я│я┌я▄ п╡п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡п╦я▐ я│ я┐п╫п╟я│п╩п╣п╢п╬п╡п╟п╫п╫п╬п╧ C п©я─п╬пЁя─п╟п╪п╪п╬п╧.

 

п÷п╬я│п╩п╣п╢п╫п╣п╣ п©я─п╣п╢п╩п╬п╤п╣п╫п╦п╣ п╫п╣ п©п╬п╫я▐п╩. п°п╬п╤п╫п╬ п©п╬п╢я─п╬п╠п╫п╣п╧?

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

что представляет из себя "требование пользователя" ?

 

Ситуацию, когда пользователю захотелось посмотреть результаты работы программы первого раздела. (Не обязательно всегда держать запущенной второй раздел)

 

Например, просто запуск программы из командной строки.

 

т.е. это все с помощью GLADE делается?

Это делается с помощью любого допустимого способа. :)

 

Когда проектируется программа, то первым делом ставится вопрос: "А можно ли всё сделать только имеющимися в языке средствами?". (Примечение: GLADE - неотъемлемая часть стандарта, а именно приложения E Distributed Systems)

 

Если ответ отрицательный, то ставится вопрос: "Какие дополнительные внешние библиотеки позволяют упростить решение вопроса?" (AdaSockets, PolyORB, Florist)

 

А потом рассматриваем уровень абстрактнойсти и выбираем из этого

наиболее низкий из всех высоких. Выбор чаще всего будет в районе

PolyORB, поскольку Florist (средства ОС) - слишком низкий; AdaSockets (BSD Sockets) - чуть выше, но достаточно низкий; PolyORB - достаточно абстрактный, что бы не иметь дело с сокетами и нитями и заняться

программированием решения задачи, а не созданием инфораструктуры для её решения. Если же и PolyORB не хватает, то в нём есть ещё и CORBA

Services и CORBA Special Facilities - всё более и более высокие

абстракции. ;)

 

Как то оно все что нужно делается то с помощью Florist, то с помощью PolyOrb, то с помощью GLADE ...

Это влиение идеологии Ада ? Я новичек в Аде, но необходимость решать задачи вспомогательными

средствами меня смущает. Я всегда считал - есть ОС с ее возможностями и есть прикладной софт

которые эти возможности использует. А тут я столкнулся с другими принципами - есть софт который будет

работать там где есть реализация Ada и реализация соответвующих

библиотек. По-моему такие вещи как GLADE

и Florist это уже перебор. Это не мой путь. )

 

Каждый выбирает свой путь сам :) Джедаи тоже :)

 

Но вот Ada программист его не выбирает, он идёт широкой протоптанной и обозначенной дорогой, подбирая по пути то, что ему нужно и (в

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

 

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

PS. Надеюсь, не сильно достал :)

 

 

Последнее предложение не понял. Можно подробней?

 

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

 

 

--

Vadim Godunko

 

 

 

 

Vadim Godunko п©п╦я┬п╣я┌:

 

Aleksey Ulasevich wrote:

я┤я┌п╬ п©я─п╣п╢я│я┌п╟п╡п╩я▐п╣я┌ п╦п╥ я│п╣п╠я▐ "я┌я─п╣п╠п╬п╡п╟п╫п╦п╣ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▐" ?

 

п║п╦я┌я┐п╟я├п╦я▌, п╨п╬пЁп╢п╟ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▌ п╥п╟я┘п╬я┌п╣п╩п╬я│я▄ п©п╬я│п╪п╬я┌я─п╣я┌я▄ я─п╣п╥я┐п╩я▄я┌п╟я┌я▀ я─п╟п╠п╬я┌я▀

п©я─п╬пЁя─п╟п╪п╪я▀ п©п╣я─п╡п╬пЁп╬ я─п╟п╥п╢п╣п╩п╟. (п²п╣ п╬п╠я▐п╥п╟я┌п╣п╩я▄п╫п╬ п╡я│п╣пЁп╢п╟ п╢п╣я─п╤п╟я┌я▄ п╥п╟п©я┐я┴п╣п╫п╫п╬п╧

п╡я┌п╬я─п╬п╧ я─п╟п╥п╢п╣п╩)

 

п²п╟п©я─п╦п╪п╣я─, п©я─п╬я│я┌п╬ п╥п╟п©я┐я│п╨ п©я─п╬пЁя─п╟п╪п╪я▀ п╦п╥ п╨п╬п╪п╟п╫п╢п╫п╬п╧ я│я┌я─п╬п╨п╦.

 

"п╥п╟п©я┐я│п╨ п©я─п╬пЁя─п╟п╪п╪я▀ п╦п╥ п╨п╬п╪п╟п╫п╢п╫п╬п╧ я│я┌я─п╬п╨п╦" - п╪п╣п╫я▐ п╦п╪п╣п╫п╫п╬ я█я┌п╬ п╦п╫я┌п╣я─п╣я│п╬п╡п╟п╩п╬ )

 

 

я┌.п╣. я█я┌п╬ п╡я│п╣ я│ п©п╬п╪п╬я┴я▄я▌ GLADE п╢п╣п╩п╟п╣я┌я│я▐?

п╜я┌п╬ п╢п╣п╩п╟п╣я┌я│я▐ я│ п©п╬п╪п╬я┴я▄я▌ п╩я▌п╠п╬пЁп╬ п╢п╬п©я┐я│я┌п╦п╪п╬пЁп╬ я│п©п╬я│п╬п╠п╟. :)

 

...

 

п░ п╬п╨п╟п╥п╟п╡я┬п╦я│я▄ я─п╬п╡п╫п╬ п©п╬я│п╣я─п╣п╢п╦п╫п╦ п╪п╣п╤п╢я┐ я┌п╣п╪п╦ п╦ п╢я─я┐пЁп╦п╪п╦ п╬п╫ я│п©п╬п╨п╬п╧п╫п╬ я│я┌п╟п╡п╦я┌

я│п╣п╠п╣ п╫п╟ я│п╩я┐п╤п╠я┐ я─п╟п╡п╫п╬ я┐п╢п╟я┤п╫я▀п╣ п╦ п╫п╣я┐п╢п╟я┤п╫я▀п╣ я─п╣п╥я┐п╩я▄я┌п╟я┌я▀ я─п╟п╠п╬я┌я▀ п╬я│я┌п╟п╩я▄п╫я▀я┘.

 

PS. п²п╟п╢п╣я▌я│я▄, п╫п╣ я│п╦п╩я▄п╫п╬ п╢п╬я│я┌п╟п╩ :)

 

 

п▓п╬я┌ я┌п╣п©п╣я─я▄ я▐ я│п©п╬п╨п╬п╣п╫ )))) п╞ п╢я┐п╪п╟п╩, я┤я┌п╬ п╢п╩я▐ п©я─п╬пЁя─п╟п╪п╪п╦я─п╬п╡п╟п╫п╦я▐ п╫п╟ п░п╢п╟

п╫я┐п╤п╣п╫ п╨п╟п╨п╬п╧-я┌п╬ п╬я│п╬п╠я▀п╧ (п╬я┌п╩п╦я┤п╫я▀п╧

п╬я┌ п©я─п╬пЁя─п╟п╪п╪п╦я─п╬п╡п╟п╫п╦я▐ п╫п╟ п╢я─я┐пЁп╦я┘ я▐п╥я▀п╨п╟я┘) п╬п╠я─п╟п╥ п╪я▀я┬п╩п╣п╫п╦я▐. п░ п╫п╟ я│п╟п╪п╬п╪ п╢п╣п╩п╣

п╡я│п╣ я┌п╬ п╤п╣ я│п╟п╪п╬п╣ )

 

п÷п╬я│п╩п╣п╢п╫п╣п╣ п©я─п╣п╢п╩п╬п╤п╣п╫п╦п╣ п╫п╣ п©п╬п╫я▐п╩. п°п╬п╤п╫п╬ п©п╬п╢я─п╬п╠п╫п╣п╧?

 

п п╩п╟я│я│ я┐п╤п╣ пЁп╬я┌п╬п╡я▀я┘ (п╢п╟п╡п╫п╬ п╦я│п©п╬п╩я▄п╥я┐п╣п╪я▀я┘ п╦ п©я─п╬п╡п╣я─п╣п╫п╫я▀я┘) п©я─п╦п╩п╬п╤п╣п╫п╦п╧, п╨п╬я┌п╬я─я▀п╣

п©п╬п╢я─п╟п╥я┐п╪п╣п╡п╟я▌я┌ п╡п╥п╟п╦п╪п╬п╢п╣п╧я│я┌п╡п╦п╣ я┌п╬п╩я▄п╨п╬ я│ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣п╪ п╫п╦п╥п╨п╬я┐я─п╬п╡п╫п╣п╡я▀я┘

п╟п╠я│я┌я─п╟п╨я├п╦п╧.

 

п·п©я▐я┌я▄ п╫п╣ п©п╬п╫я▐п╩. п▓я▀п╥п╬п╡ п╪п╫п╬я▌ я└я┐п╫п╨я├п╦п╧ п╦п╥ libc я│я▌п╢п╟ п©п╬п©п╟п╢п╟п╣я┌? п░ п╬п╠я─п╟я┴п╣п╫п╦п╣ п╨

я└я┐п╫п╨я├п╦я▐п╪ я▐п╢я─п╟ п·п║?

 

--

п║ я┐п╡п╟п╤п╣п╫п╦п╣п╪,

п░п╩п╣п╨я│п╣п╧ п╝. пёп╩п╟я│п╣п╡п╦я┤

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

Вот теперь я спокоен )))) Я думал, что для программирования на Ада нужен какой-то особый (отличный

от программирования на других языках) образ мышления. А на самом деле все то же самое )

 

Образ и впрямь немного специфический.

 

"Специфический" заключается от полного и безоговорочного отказа, с одной стороны, в ковырянии в потрохах и, с другой стороны, в витании в облаках.

А ещё - в максимальном переносе специфики прикладной области в текст программы.

 

Тут могу привести пример из жизни. Есть спецификация отказоустойчивой CORBA. В ней есть понятие стилей репликации. Для обозначения стиля используются целые числа. Всего определено пять стилей (как результат - использовано пять значений с 0 по 4). Как правильно будет написать на Ada проверку установки допустимого стиля?

 

if Style in 0 .. 4 then

 

или

 

if Style = STATELESS

or else Style = COLD_PASSIVE

or else Style = WARM_PASSIVE

or else Style = ACTIVE

or else Style = ACTIVE_WITH_VOTING

then

 

Так как? Правильный ответ - второй! Непривычно? Да, но любому читающему программу понятно, что на самом деле в данном случае может

присутствовать только один из указанных стилей и - никакой другой!

 

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

 

Опять не понял. Вызов мною функций из libc сюда попадает? А обращение к функциям ядра ОС?

 

Нет :)

 

Имелось в виду, что имеется уже существующее и эксплуатирующееся

приложение (например, собирающее информацию от некоторых устройств) и имеющее интерфейс с использованием, скажем, совместно используемой памяти и семафоров.

 

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

Конечно, можно переписать программу сбора, но не всегда это возможно (например, она разработана третьей стороной и её исходников нет в помине; нет ресурсов на такую работу и т.д. и т.п.) Тогда придётся изощеряться с Florist :(

 

В остальных случая использование Florist - противопоказано.

 

 

--

Vadim Godunko

Vadim Godunko пишет:

 

А ещё - в максимальном переносе специфики прикладной области в текст

программы.

 

Тут могу привести пример из жизни. Есть спецификация отказоустойчивой

CORBA. В ней есть понятие стилей репликации. Для обозначения стиля

используются целые числа. Всего определено пять стилей (как результат -

использовано пять значений с 0 по 4). Как правильно будет написать на

Ada проверку установки допустимого стиля?

 

if Style in 0 .. 4 then

 

или

 

if Style = STATELESS

or else Style = COLD_PASSIVE

or else Style = WARM_PASSIVE

or else Style = ACTIVE

or else Style = ACTIVE_WITH_VOTING

then

 

Так как? Правильный ответ - второй! Непривычно? Да, но любому читающему

программу понятно, что на самом деле в данном случае может

присутствовать только один из указанных стилей и - никакой другой!

 

Ну нет ;-) Все это хитрый психологический трюк - кусок кода вырванный из контекста.

 

Вот я представил себя решающим эту задачу и я написал бы так:

 

if (Style = STATELESS) or

(Style = COLD_PASSIVE) or

(Style = WARM_PASSIVE) or

(Style = ACTIVE) or

(Syle = ACTIVE_WITH_VOTING)

then

 

Первый вариант мне и в голову не пришел бы. Он не естественный.

А вот во втором варианте мне не понятна конструкция "or else".

Я доки по ходу изучаю. ) Но мой вариант кажется более читабелен )

 

-- С уважением,

Алексей Ю. Уласевич

(A.STAKANOV)

http://www.livejournal.com/users/a_stakanov/

Aleksey Ulasevich wrote:

 

Вот я представил себя решающим эту задачу и я написал бы так:

 

if (Style = STATELESS) or

(Style = COLD_PASSIVE) or

(Style = WARM_PASSIVE) or

(Style = ACTIVE) or

(Syle = ACTIVE_WITH_VOTING)

then

 

Первый вариант мне и в голову не пришел бы. Он не естественный.

Ну тогда с логикой у Вас всё в порядке и

 

Добро пожаловать в мир Ada программирования!

 

;)

 

А вот во втором варианте мне не понятна конструкция "or else".

Я доки по ходу изучаю. ) Но мой вариант кажется более читабелен )

Просто дело стиля. Там где этот код используется руководящими

документами требуется использовать именно такую форму.

 

Логически же разницы нет.

 

PS. "or else" - так называемая короткозамкнутая форма оператора or. Суть в том, что оптимизирующий компилятор обязан вычислить выражение слева, и только если оно ложно, то вычислить выражение справа. :)

 

Хороший пример:

 

if Z /= 0 and then X / Z = 5 then

 

Если "and then" заменить на "and", компилятор вправе вначале вычислить X / Z, что, в случае Z = 0, приведёт к возбуждению исключения

Constraint_Error.

 

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

 

 

--

Vadim Godunko

Vadim Godunko wrote:

 

Тут могу привести пример из жизни. Есть спецификация отказоустойчивой CORBA. В ней есть понятие стилей репликации. Для обозначения стиля используются целые числа. Всего определено пять стилей (как результат - использовано пять значений с 0 по 4). Как правильно будет написать на Ada проверку установки допустимого стиля?

 

if Style in 0 .. 4 then

 

или

 

if Style = STATELESS

or else Style = COLD_PASSIVE

or else Style = WARM_PASSIVE

or else Style = ACTIVE

or else Style = ACTIVE_WITH_VOTING

then

 

Так как? Правильный ответ - второй! Непривычно? Да, но любому читающему программу понятно, что на самом деле в данном случае может

присутствовать только один из указанных стилей и - никакой другой!

Ещё интересный момент - компилятор GCC 4.0.2 сгенерировал абсолютно идентичный код для обоих операторов.

 

 

--

Vadim Godunko

т.е. это все с помощью GLADE делается? Как то оно все что нужно делается то с помощью Florist, то с помощьюPolyOrb, то с помощью GLADE ... Это влиение идеологии Ада ? Я новичек в Аде, но необходимость решатьзадачи вспомогательными средствами меня смущает. Я всегда считал - есть ОС с ее возможностями иесть прикладной софт которые эти возможности использует. А тут я столкнулся с другимипринципами - есть софт который будет работать там где есть реализация Ada и реализация соответвующихбиблиотек. По-моему такие вещи как GLADE и Florist это уже перебор. Это не мой путь. )

 

Вадим в принципе уже обстоятельно на это письмо ответил, но поскольку данный аспект он упомянул вскользь, хочу подчеркнуть: GLADE не является посторонним "довеском", это гнатовская реализация приложения E стандарта Ады. См. напр. http://www.adahome.com/rm95/rm9x-E.html

 

Я ж говорю, все уже стандартизировано :)

 

ВФ

Aleksey Ulasevich wrote:

 

работать там где есть реализация Ada и реализация соответвующих

библиотек. По-моему такие вещи как GLADE

и Florist это уже перебор. Это не мой путь. )

 

Что же, какие то программисты пишут переносимые программы, какие то пишут под одну ОС.

Все зависит от требований заказчиков и понятий программиста.

 

Или так.

 

Кому то интересно разложить все по полочкам, отделить язык от

операционки и работать на прикладном уровне.

А кому то интересно изучить конкретную ОС и дергать ее за системные вызовы, тоже кайф своего рода.

Новое сообщение:
Страницы: 1 2

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти