TNSDL
TNSDL står för TeleNokia Specification and Description Language . TNSDL är baserat på ITU-T SDL -88-språket. Den används uteslutande på Nokia Networks , främst för att utveckla applikationer för telefonväxlar .
Syfte
TNSDL är ett allmänt procedurprogrammeringsspråk . Det är särskilt väl lämpat för att utveckla mycket samtidiga, distribuerade system.
Den designades ursprungligen för programmering av kretskopplade växlar. När världen skiftade mot paketkopplad och internetbaserad telekommunikation visade sig TNSDL passa utmärkt även för att utveckla internetservrar.
Design
TNSDL är ett väldigt enkelt programmeringsspråk som är lätt att lära sig.
Grunderna
TNSDL är ett starkt skrivet procedurprogrammeringsspråk . Dess grundläggande funktioner är jämförbara med språken C och Pascal .
Multibearbetning
I TNSDL skapas processer av kommandot CREATE. (Det liknar något POSIX- gaffel- eller pthread_create- kommandona.) CREATE-kommandot skapar antingen en operativsystemprocess eller en samarbetsuppgift .
Processmodellen kan väljas genom konfiguration. Källkoden i sig återspeglar inte vilken schemaläggningsmetod som används. Ändå, för att undvika vissa tävlingsförhållanden , kan utvecklare behöva vara förberedda för parallell körning. TNSDL stöder uttryckligen kritiska avsnitt som ska markeras i koden.
Vid samverkande multitasking schemaläggs ett program som en operativsystemprocess. När en kooperativ tråd går in i tillståndet att vänta på asynkron inmatning, kan en annan tråd i programmet köras.
Meddelandet passerar
Funktionen hos TNSDL är skådespelarens modell . Processer är avsedda att utformas som händelsestyrda finita tillståndsmaskiner . Kommunikation mellan processer sker genom asynkron meddelandeöverföring . Kommandot OUTPUT skickar ett meddelande, medan INPUT-satser definierar de förväntade meddelandena.
Timers, ur TNSDL-perspektiv, är försenade meddelanden. Precis som vanliga meddelanden hanteras timerns utgång av INPUT-satsen. SET-kommandot startar och RESET-kommandot avbryter en timer.
Tillståndsmaskiner kan valfritt användas, till exempel för att förhindra att vissa ingångsmeddelanden accepteras i något skede av behandlingen.
Följande kodbit visar en server som tar emot en frågesignal (meddelande), kontaktar en databasprocess för att erhålla nödvändig data och slutligen skickar en svarssignal.
DCL WITHWARMING /* Data som ska live-migreras (på plattformar som stöder "warming") */ query_process pid ; /* PID för query_signal avsändare */ KONSTANT time_to_wait = 10 ; /* Timeout för databassvar */ TIMER db_timeout_timer ; /* Timer för databassvar */ STATE inaktiv ; /* Idle state, wait for query signal */ INPUT query_signal ( DCL input_data ); DCL db_query db_query_type ; /* Lokal variabel, lagrad på stack. */ TASK query_process := AVSÄNDARE ; /* Avsändaradress sparad i ett specifikt minnesområde, som bevaras även vid programuppdatering.*/ TASK db_query . field1 := some_procedur ( input_data ), db_query . field2 := input_data . fält1 ; OUTPUT db_request_signal ( db_query ) TILL db_process ; /* Skicka begäran till databasprocessen */ SET ( NOW + time_to_wait , db_timeout_timer ); /* Starta databassvarstimer */ NEXTSTATE wait_db ; /* Ange wait_db-tillstånd där databassvar förväntas */ ENDSTATE idle ; STATE vänta_db ; INPUT db_response_signal ( DCL answer_data ); RESET ( db_timeout_timer ) KOMMENTAR ' Databasen svarade i tid ' ; OUTPUT answer_signal ( answer_data . records ) TO query_process ; NEXTSTATE inaktiv ; INPUT db_timeout_timer ; /* Timeout */ OUTPUT error_signal ( error_constant ) TO query_process ; NEXTSTATE inaktiv ; ENDSTATE wait_db ;
Kommentarer:
- Tillståndsmaskinen förhindrar att någon ny query_signal bearbetas medan den väntar på att databasprogrammet ska svara.
- WITHWARMING innebär att när en annan dator tar över rollen som den nuvarande, kommer den markerade datan (variabeln) att kopieras till den nya datorn. Om maskinvaran ändras eller mjukvaruuppdateringen sker medan du väntar på att databasen ska svara, kommer därför inte adressen till avsändaren av frågan att gå förlorad, och svaret kan levereras korrekt. Det stöds dock inte på alla plattformar.
TNSDL tillåter att ingångar kopplas till flera eller alla tillstånd. En insignal kan ha tillståndsspecifikt beteende om det behövs.
STATE inaktiv KOMMENTAR ' Idle state ' ; INPUT are_you_busy ; OUTPUT nej TILL AVSÄNDARE ; NEXTSTATE - ; /* Ingen tillståndsändring */ /* ... andra indatahanterare */ ENDSTATE idle ; STATE * ( idle ) KOMMENTAR " Alla tillstånd , utom inaktiv " ; INPUT are_you_busy ; UTGÅNG JA TILL AVSÄNDARE ; NEXTSTATE - ; /* Ingen tillståndsändring */ ENDSTATE * ( idle ); STATE * KOMMENTAR " Alla tillstånd " ; INPUT are_you_alive ; UTGÅNG JA TILL AVSÄNDARE ; NEXTSTATE - ; /* Ingen tillståndsändring */ ENDSTATE * ;
Skillnader från SDL-88
Nokia har gjort flera modifieringar av språket, främst inklusive förenklingar och tillägg, såsom:
- Funktioner som kanaler och signalvägar har ersatts av andra mekanismer.
- Begreppen moduler och tjänster lades till i TNSDL (servicekonceptet för SDL-88 liknar subautomatfunktionen i TNSDL).
- Vissa element har bytt namn (till exempel kallas Priority Inputs Input Internals i TNSDL).
- I TNSDL har MACRO-funktionen utelämnats och en WHILE-konstruktion har lagts till för att tillåta loopar på ett strukturerat sätt utan att använda JOINs.
Sammanställning
TNSDL är inte direkt kompilerad till maskinkod. Istället översätts TNSDL-program till C-språkets källkod. TNSDL:s ansvar är att tillåta meddelandehantering, tillståndsmaskindefinitioner, synkronisering av parallell exekvering, "datauppvärmning" etc. enkelt och säkert kodad. Uppgiften med processorspecifik kodgenerering och lågnivåoptimering delegeras till den använda C-kompilatorn.
Efter översättning av TNSDL till C kan alla standardkompatibla C-kompilatorer, länkare, täckningsmätnings- och profileringsverktyg användas. För att göra felsökning på källnivå möjlig sätter TNSDL radnummerreferenser till den genererade C-koden.
TNSDL-kod kan anropa rutiner implementerade på andra språk, om objekt eller bibliotek finns för dem. Även C-språkmakro kan användas, om C-huvudfiler finns. Externa deklarationer måste göras tillgängliga för TNSDL-översättaren.
TNSDL-översättaren är ett eget verktyg. En källkodsanalysator (reachability) har också utvecklats specifikt för TNSDL.
Använda sig av
TNSDL används ofta på DX 200 , IPA 2800 och Linux-plattformarna för högpresterande applikationer med hög tillgänglighet.
TNSDL är ett aktivt använt och utvecklat programmeringsspråk som används av tusentals utvecklare (2010). [ citat behövs ]
TNSDL används främst på Nokia Networks för att utveckla mjukvara för SGSN , BSC , mobilväxel , applikationsservrar både i traditionella inställningar och som virtuella nätverksfunktioner (VNF) av NFV -lösningar.
Liknande programmeringsspråk
Trots skillnaden i syntax är Go language förmodligen en av de närmaste släktingarna till TNSDL . Båda språken har lätta processer i fokus. Go's kanal liknar TNSDL INPUTs och Go's select-sats på kanaler tillåter mycket liknande programdesign. Det finns dock skillnader. TNSDL använder asynkron meddelandeöverföring mellan aktörer , medan kanaler i Go antingen kan vara synkrona eller asynkrona (buffrade). TNSDL tillåter meddelandeöverföring mellan processer som körs på samma eller separata datornoder. I den aspekten är TNSDL en släkting till Erlang .
Även om man i TNSDL kan definiera operatörer för typer och skyddsstrukturattribut som endast är tillgängliga via dessa operatörer, är TNSDL inte ett objektorienterat språk. I den aspekten tillhör det familjen icke-OOP- procedurprogrammeringsspråk , såsom C-språk .
Historia
1980-talet: I början hade ITU-T SDL en grafisk syntax. Textsyntax introducerades senare. Ett motsvarande grafiskt verktyg och kodgenerator utvecklades inom Nokia .
1990: ITU-T SDL övergick till textbaserad representation. Baserat på SDL-88-specifikationen föddes TNSDL. TNSDL är en förenklad och kraftigt anpassad variant av SDL-88.