TNSDL
TNSDL oznacza język specyfikacji i opisu TeleNokia . TNSDL jest oparty na ITU-T SDL -88. Jest używany wyłącznie w Nokia Networks , głównie do tworzenia aplikacji dla central telefonicznych .
Zamiar
proceduralny język programowania ogólnego przeznaczenia . Szczególnie dobrze nadaje się do tworzenia wysoce współbieżnych, rozproszonych systemów.
Pierwotnie został zaprojektowany do programowania central z komutacją obwodów. Gdy świat przesunął się w kierunku telekomunikacji z komutacją pakietów i opartej na Internecie, TNSDL okazał się również doskonałym rozwiązaniem do tworzenia serwerów internetowych.
Projekt
TNSDL to bardzo prosty, łatwy do nauczenia język programowania.
Podstawy
TNSDL to silnie typowany proceduralny język programowania . Jego podstawowe możliwości są porównywalne z C i Pascal .
Wieloprzetwarzanie
W TNSDL procesy są tworzone poleceniem CREATE. (Jest to trochę podobne do POSIX fork lub pthread_create ). Polecenie CREATE tworzy proces systemu operacyjnego lub zadanie kooperacyjne .
Model procesu można wybrać konfigurując. Sam kod źródłowy nie odzwierciedla używanej metody planowania. Mimo to, aby uniknąć pewnych sytuacji związanych z wyścigiem , programiści mogą potrzebować przygotowania do wykonywania równoległego. TNSDL wyraźnie obsługuje sekcje krytyczne, które mają być oznaczone w kodzie.
W przypadku kooperacyjnego wielozadaniowości program jest planowany jako jeden proces systemu operacyjnego. Gdy wątek kooperacyjny wejdzie w stan oczekiwania na wejście asynchroniczne, może zostać uruchomiony inny wątek programu.
Przekazywanie wiadomości
Cechą TNSDL jest model aktora . Procesy mają być zaprojektowane jako automaty skończone sterowane zdarzeniami . Komunikacja między procesami odbywa się poprzez asynchroniczne przekazywanie komunikatów . Polecenie OUTPUT wysyła komunikat, podczas gdy instrukcje INPUT definiują oczekiwane komunikaty.
Timery, z perspektywy TNSDL, to opóźnione komunikaty. Podobnie jak zwykłe komunikaty, wygaśnięcie timera jest obsługiwane przez instrukcję INPUT. Rozpoczyna się polecenie SET, a polecenie RESET anuluje timer.
Maszyny stanowe mogą być opcjonalnie używane, na przykład, aby zapobiec akceptowaniu pewnych komunikatów wejściowych na pewnym etapie przetwarzania.
Poniższy fragment kodu przedstawia serwer, który otrzymuje sygnał zapytania (komunikat), kontaktuje się z procesem bazy danych w celu uzyskania niezbędnych danych i ostatecznie wysyła sygnał odpowiedzi.
DCL WITHWARMING /* Dane do migracji na żywo (na platformach obsługujących „warming”) */ query_process pid ; /* PID nadawcy query_signal */ CONSTANT time_to_wait = 10 ; /* Przekroczenie limitu czasu odpowiedzi bazy danych */ TIMER db_timeout_timer ; /* Licznik odpowiedzi bazy danych */ STATE idle ; /* Stan bezczynności, czekaj na sygnał zapytania */ INPUT query_signal ( DCL input_data ); zapytanie_bazy danych DCL
db_query_type ; /* Zmienna lokalna, przechowywana na stosie. */ TASK query_process := NADAWCA ; /* Adres nadawcy zapisywany w określonym obszarze pamięci, który jest zachowywany nawet podczas aktualizacji oprogramowania.*/ TASK db_query . pole1 := jakaś_procedura ( dane_wejściowe ), zapytanie_db . pole2 := dane_wejściowe . pole1 ; WYJŚCIE db_request_signal ( db_query ) DO db_process
; /* Wyślij żądanie do procesu bazy danych */ SET ( TERAZ + time_to_wait , db_timeout_timer ); /* Uruchom licznik czasu odpowiedzi bazy danych */ NEXTSTATE wait_db ; /* Podaj stan wait_db, w którym oczekiwana jest odpowiedź bazy danych */ ENDSTATE idle ; STAN baza_oczekiwania ; WEJŚCIE db_response_signal ( DCL answer_data ); RESET ( db_timeout_timer ) KOMENTARZ '
Baza danych odpowiedziała na czas ' ; WYJŚCIE sygnał_odpowiedzi ( dane_odpowiedzi.rekordy ) TO proces_zapytania ; _ _ NASTĘPNY STAN bezczynny ; INPUT db_timeout_timer ; /* Limit czasu */ OUTPUT error_signal ( error_constant ) TO query_process ; NASTĘPNY STAN bezczynny ; KONIEC stanu oczekiwania_db ;
Uwagi:
- Maszyna stanów zapobiega przetwarzaniu jakiegokolwiek nowego zapytania_sygnału podczas oczekiwania na odpowiedź programu bazy danych.
- Z PODGRZEWANIEM oznacza, że gdy inny komputer przejmie rolę bieżącego, zaznaczone dane (zmienna) zostaną skopiowane na nowy komputer. Dzięki temu, jeśli w trakcie oczekiwania na odpowiedź bazy nastąpi zmiana sprzętu lub aktualizacja oprogramowania, adres nadawcy zapytania nie zostanie utracony, a odpowiedź może zostać dostarczona poprawnie. Nie jest jednak obsługiwany na wszystkich platformach.
TNSDL umożliwia powiązanie danych wejściowych z kilkoma lub wszystkimi stanami. W razie potrzeby sygnał wejściowy może mieć zachowanie specyficzne dla stanu.
STATE idle COMMENT ' Stan bezczynności ' ; INPUT jesteś_jesteś zajęty ; nr WYJŚCIA DO NADAWCY ; STAN NASTĘPNY - ; /* Brak zmiany stanu */ /* ... inne procedury obsługi wejścia */ ENDSTATE idle ; STATE * ( idle ) COMMENT ' Dowolny stan oprócz idle ' ; _ WEJŚCIE jesteś_jesteś zajęty
; WYJŚCIE tak DO NADAWCY ; STAN NASTĘPNY - ; /* Brak zmiany stanu */ ENDSTATE * ( idle ); STATE * COMMENT ' Dowolny stan ' ; INPUT are_you_żyje ; WYJŚCIE tak DO NADAWCY ; STAN NASTĘPNY - ; /* Brak zmiany stanu */ ENDSTATE * ;
Różnice w stosunku do SDL-88
Nokia dokonała kilku modyfikacji języka, głównie obejmujących uproszczenia i dodatki, takie jak:
- Funkcje takie jak kanały i trasy sygnału zostały zastąpione innymi mechanizmami.
- Koncepcje modułów i usług zostały dodane w TNSDL (koncepcja usługi SDL-88 jest podobna do funkcji podautomatu TNSDL).
- Nazwy niektórych elementów zostały zmienione (na przykład Wejścia Priorytetowe są nazywane Wewnętrznymi Wejściami w TNSDL).
- W TNSDL pominięto funkcję MAKRO i dodano konstrukcję WHILE, aby umożliwić pętle w ustrukturyzowany sposób bez użycia JOIN.
Kompilowanie
TNSDL nie jest bezpośrednio kompilowany do kodu maszynowego. Zamiast tego programy TNSDL są tłumaczone na kod źródłowy języka C. Zadaniem TNSDL jest umożliwienie łatwego i bezpiecznego kodowania obsługi komunikatów, definicji maszyn stanowych, synchronizacji wykonywania równoległego, „ogrzewania danych” itp. Zadanie generowania kodu specyficznego dla procesora i optymalizacji niskiego poziomu jest delegowane do używanego kompilatora C.
Po przetłumaczeniu TNSDL na C można użyć dowolnego zgodnego ze standardami kompilatora C, konsolidatora, narzędzia do pomiaru pokrycia i profilowania. Aby umożliwić debugowanie na poziomie źródła, TNSDL umieszcza odwołania do numerów linii w wygenerowanym kodzie C.
Kod TNSDL może wywoływać procedury zaimplementowane w innych językach, jeśli istnieją dla nich obiekty lub biblioteki. Nawet makra języka C mogą być używane, jeśli obecne są pliki nagłówkowe C. Zewnętrzne deklaracje muszą być udostępnione tłumaczowi TNSDL.
Tłumacz TNSDL jest zastrzeżonym narzędziem. Specjalnie dla TNSDL opracowano również analizator kodu źródłowego (osiągalności).
Używać
TNSDL jest powszechnie używany na platformach DX 200 , IPA 2800 i Linux w aplikacjach o wysokiej wydajności i dostępności.
TNSDL to aktywnie używany i rozwijany język programowania używany przez tysiące programistów (w 2010 r.). [ potrzebne źródło ]
TNSDL jest używany głównie w Nokia Networks do tworzenia oprogramowania dla SGSN , BSC , mobilnych centrów przełączania , serwerów aplikacji zarówno w tradycyjnych konfiguracjach, jak i jako wirtualne funkcje sieciowe (VNF) rozwiązań NFV .
Podobne języki programowania
Pomimo różnicy w składni, prawdopodobnie jednym z najbliższych krewnych TNSDL jest język Go . Oba języki skupiają się na lekkich procesach . Kanały Go są podobne do wejść TNSDL INPUT, a instrukcja Go dotycząca kanałów pozwala na bardzo podobny projekt programu. Istnieją jednak różnice. TNSDL wykorzystuje asynchroniczne przekazywanie komunikatów między aktorami , podczas gdy kanały w Go mogą być synchroniczne lub asynchroniczne (buforowane). TNSDL umożliwia przekazywanie komunikatów między procesami działającymi na tych samych lub oddzielnych węzłach komputerowych. Pod tym względem TNSDL jest krewnym Erlanga .
Chociaż w TNSDL można definiować operatory dla typów i chronić atrybuty struktury, aby były dostępne tylko za pośrednictwem tych operatorów, TNSDL nie jest językiem zorientowanym obiektowo . Pod tym względem należy do rodziny proceduralnych języków programowania innych niż OOP , takich jak język C.
Historia
Lata 80.: Na początku ITU-T SDL miał składnię graficzną. Składnia tekstowa została wprowadzona później. firmie Nokia opracowano odpowiednie narzędzie graficzne i generator kodu .
1990: ITU-T SDL przesunął się w kierunku reprezentacji tekstowej. W oparciu o specyfikację SDL-88 narodził się TNSDL. TNSDL to uproszczony i mocno dostosowany wariant SDL-88.