ACE
Adaptacyjne srodowisko komunikacyjne
(czyli: The Adaptive Communication Environment)
(pytanie: dlaczego nie TACE??? ;-) )
Obiektowo zorientowany zestaw narzedzi
do programowania zastosowan sieciowych w C++
ACE jest to obiektowo-zorientowany (OO) zestaw narzedzi, który implementuje podstawowe wzorce (design patterns) dla oprogramowania komunikacyjnego. ACE to bogaty zbiór napisanych w C++ i nadajacych sie do powtórnego uzycia (reusable) „opakowañ" (wrappers), klas i szkieletow (frameworks), które znacznie ulatwiaja wykonywanie czestych zadañ oprogramowania komunikacyjnego przeznaczonego do pracy w róznych systemach operacyjnych. Chodzi tu o takie zadania jak: rozsylanie zdarzeñ, nawiazywanie polaczenia, komunikacja miedzy procesami, zarzadzanie pamiecia dzielona, kierowanie komunikatami, dynamiczna (re)konfiguracja uslug rozproszonych, wielowatkowosc i kontrola wspólbieznosci.
Co to dla nas oznacza? Ano to, ze ZA DARMO (ACE dostepne jest nieodplatnie!) mozemy w KOMERCYJNYCH programach korzystac z bardzo wysokopiziomowych narzedzi, ktore usprawnia proces tworzenie programu. Nie musimy sie zastanawiac jaka liczba w tablicy oznacza wejscie lacza (pipe), a jaka wyjscie, itp. Mozemy myslec o prgramie bardziej, jak o zbiorze kolejnych zadan do wykonania, skladajacych sie na wieksza calosc. Mozemy pisac efektywniejsze programu - latwiej zauwazyc, ktore czesci sa niezalezne i moga byc wykonywane wspolbieznie. Mamy dostep do setek procedur ktore wykorzystamy w kazdym wiekszym programie. Nie trzeba pisac, nie trzeba testowac. Wystarczy wziac i uzyc.
Czy mozna chciec czegos wiecej? TAK!
ACE przeznaczony jest dla osób pracujacych nad rozwojem wysokowydajnych
serwisów i aplikacji pracujacych na platformach UNIX oraz Win32.
ACE upraszcza rozwijanie aplikacji, które maja miedzy innymi wykonywaæ
wyzej wymienione zadania. ACE automatyzuje konfiguracje i rekonfiguracje
systemów poprzez dynamiczne dolaczanie uslug/serwisów do
aplikacji w czasie wykonania (run-time) oraz umozliwia korzystanie z tychze
uslug w wielu procesach/watkach.
A wiec niewazne pod jaki system operacyjny piszemy. (No powiedzmy, ze oprocz MS-DOS, jakkolwiek formalnie jest to system operacyjny, tyle ze kaleki. Podobno sa nadal inne niewiele mniej kalekie, tyle ze dzialaja.) Jezeli moduly komunikacyjne maja pracowac na roznych komputerach, od PC-tow po mainfareme'y, nie ma problemu. Caly system jest przetestowalny i przenosny, wystarczy przekompilowac. Jest to bardzo istotna i interesujaca cecha systemu, zwlaszcza w kontekscie Internetu, do ktorego jak wiedomo podlaczane sa najrozniejsze komputery. Jezeli tworzymy jakies systemy rozproszone, to nie musimy narzucac rygorystycznych ograniczen sprzetowych. Caly system moze bys spojny, pomimo ze dzialajacy na roznych platformach. A co z Java? Java nie ma jeszcze tak wysoko rozwinietych mechanizmow komunikacyjnych. No i poza tym, jest tez ACE for Java!
ACE zostal osadzony na wielu jedno- i wieloprocesorowych platformach systemów operacyjnych, w tym Win32 (tj. WinNT oraz Win95), wielu wersjach UNIXa (tj. Linux, HP-UX, SCO, SunOS 4.x i 5.x, AIX, SGI IRIX oraz OSF/1), VxWorks no i MVS OpenEdition. Obecnie jest uzywany w komercyjnych produktach kilkunastu wielkich firm, takich jak np.: Ericsson (rodzina telekomunikacyjnych aplikacji EOS), Bellcore (produkty zwiazane z ATM), Siemens (produkty zwi¹zane z medycyn¹), Kodak (Health Imaging System), Motorola (system globalnej komunikacji ruchomej Iridium).
ACE jest wiec szeroko przetestowanym produktem, dostosowanym do pewnych z koniecznosci istniejacych roznic miedzy systemami. I to w sposob niewidoczny/nieistotny dla uzytkownika (tu: programisty). Wymienione, znane wszystkim firmy uzywaja ACE w rowniez znanych produktach. Zreszta ACE powstal i udostepniony jest wszystkim dzieki finansowemu wsparciu tychze (ale nie tylko tych) firm. Mozna entuzjastycznie powiedziec, ze uzywajac ACE znajdujemy sie wsrod najlepszych. Tu chyba wypada powiedziec kto jest tworca ACE: jest to Douglas C. Schmidt i kierowana przez niego grupa osob z Washington University. (brawa; kurtyna opada)
Co konkretniej daje nam ACE? (Wymienie tu tylko rzeczy prostsze i bardziej
znane.)
ACE dostarcza m.inn. wielu uzytecznych "obwolut" (ang. wrappers)
w C++, ktore stworzone sa z interfejsow w C, roznych pod roznymi systemami
operacyjnymi. Sa tu:
Inne nie wymienione, ale nie mniej ciekawe rzeczy, to np. integracja z CORBA.
Na ponizszym diagramie mamy uwidoczniene kluczowe komponenty ACE i ich hierarchiczne zaleznosci:

Mozna wiec ACE podzielic na dwa odrozniajace sie bloki: serwerow uslug rozproszonych, i rozbudowany blok obiektow komunikacyjnych. Jak widac oparty on jest na niskopoziomowych podsystemach, ktore scisle zintegrowane sa z uslugami systemu operacyjnego (osobno dla POSIX i Win32). Wyzej mamy API w C (Interfejscy Programisty), a jeszcze wyzej jest powloka adaptacyjna systemow operacyjnych. Integruje i unifikuje ona korzystanie z roznych uslug roznych systemow. To co mamy wyzej, stanowi wlasciwy system ACE - niezalezny od systemu operacyjnego. Ta abstrakcyjna powloka oddziela system od implementacji. Klasy obiektow udostepnione to jak widac: watki, lacza, gniazda, kolejki, pamiec dzielona etc. ale juz NIEZALEZNE od systemu operacyjnego. A jeszcze wyzej umieszczone sa naprawde wysokopoziomowe serwisy. Jezeli chcesz dowiedziec sie czegos wiecej o nich, zachecam do zajrzenia do ACE. No i oczywiscie zapraszam na wyklad.
Na podstawie materialow towarzyszacych ACE opracowal:
Marcin Polak, Marcin.Polak@students.mimuw.edu.pl
Jezeli masz jakies uwagi, nie krepuj sie, pisz.