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.