TNSDL - TNSDL

TNSDL означает TeleNokia Спецификация и язык описания. TNSDL основан на ITU-T SDL -88 язык. Используется исключительно в Nokia Networks, в первую очередь для разработки приложений для телефонные станции.

Цель

TNSDL - универсальный процедурный язык программирования. Он особенно хорошо подходит для разработки распределенных систем с высокой степенью параллелизма.[1]

Первоначально он был разработан для программирования коммутаторов с коммутацией каналов. По мере того, как мир перешел на коммутацию пакетов и интернет-связь, TNSDL также оказалась отличным подходом для разработки интернет-серверов.

Дизайн

TNSDL - очень простой, легкий в освоении язык программирования.

Основы

TNSDL - это строго типизированный процедурный язык программирования. Его основные возможности сопоставимы с C и Паскаль языков.

Мультиобработка

В TNSDL процессы создаются командой CREATE. (Это несколько похоже на POSIX вилка или же pthread_create команд.) Команда CREATE создает либо процесс операционной системы, либо совместная задача.

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

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

Передача сообщений

Особенностью TNSDL является актерская модель. Процессы должны быть разработаны как конечные автоматы, управляемые событиями. Межпроцессного взаимодействия выполняется асинхронным передача сообщений. Команда OUTPUT отправляет сообщение, а операторы INPUT определяют ожидаемые сообщения.

Таймеры с точки зрения TNSDL - это отложенные сообщения. Как и в случае с обычными сообщениями, истечение таймера обрабатывается оператором INPUT. Команда SET запускается, а команда RESET отменяет таймер.

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

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

DCL Согревая / * Данные для живой миграции (на платформах, поддерживающих «потепление») * /  query_process пид; / * PID отправителя query_signal * /ПОСТОЯННЫЙ time_to_wait = 10; / * Тайм-аут ответа базы данных * /ТАЙМЕР db_timeout_timer; / * Таймер ответа базы данных * /ГОСУДАРСТВЕННЫЙ праздный; / * Состояние ожидания, ждем сигнала запроса * /  ВХОД query_signal(DCL входные данные);    DCL      db_query db_query_type;     / * Локальная переменная, хранящаяся в стеке. * /    ЗАДАЧА query_process := ОТПРАВИТЕЛЬ; / * Адрес отправителя сохраняется в определенной области памяти, которая сохраняется даже при обновлении программного обеспечения. * /    ЗАДАЧА db_query.поле1 := some_procedure(входные данные),         db_query.поле2 := входные данные.поле1;    ВЫХОД db_request_signal(db_query) К db_process; / * Отправить запрос в процесс базы данных * /    НАБОР(СЕЙЧАС ЖЕ + time_to_wait, db_timeout_timer);        / * Запускаем таймер ответа базы данных * /    СЛЕДУЮЩИЙ wait_db;                                / * Ввести состояние wait_db, в котором ожидается ответ базы данных * /ENDSTATE праздный;ГОСУДАРСТВЕННЫЙ wait_db;  ВХОД db_response_signal(DCL answer_data);    ПЕРЕЗАГРУЗИТЬ(db_timeout_timer) КОММЕНТАРИЙ 'База данных ответил в время';    ВЫХОД answer_signal(answer_data.записи) К query_process;    СЛЕДУЮЩИЙ праздный;  ВХОД db_timeout_timer; / * Тайм-аут * /    ВЫХОД error_signal(error_constant) К query_process;    СЛЕДУЮЩИЙ праздный;ENDSTATE wait_db;

Комментарии:

  • Конечный автомат предотвращает обработку любого нового query_signal, ожидая ответа от программы базы данных.
  • ОТСУТСТВИЕ означает, что когда другой компьютер берет на себя роль текущего, отмеченные данные (переменная) будут скопированы на новый компьютер. Таким образом, если изменение оборудования или обновление программного обеспечения произойдет в ожидании ответа базы данных, адрес отправителя запроса не будет потерян, и ответ будет доставлен правильно. Однако он поддерживается не на всех платформах.

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

ГОСУДАРСТВЕННЫЙ праздный КОММЕНТАРИЙ 'Праздный государственный';  ВХОД ты занят;    ВЫХОД нет К ОТПРАВИТЕЛЬ;    СЛЕДУЮЩИЙ -; / * Без изменения состояния * /  / * ... другие обработчики ввода * /ENDSTATE праздный;ГОСУДАРСТВЕННЫЙ *(праздный) КОММЕНТАРИЙ 'Любой государственный, Кроме праздный';  ВХОД ты занят;    ВЫХОД да К ОТПРАВИТЕЛЬ;    СЛЕДУЮЩИЙ -; / * Без изменения состояния * /ENDSTATE *(праздный);ГОСУДАРСТВЕННЫЙ * КОММЕНТАРИЙ 'Любой государственный';  ВХОД ты жив;    ВЫХОД да К ОТПРАВИТЕЛЬ;    СЛЕДУЮЩИЙ -; / * Без изменения состояния * /ENDSTATE *;

Отличия от SDL-88

Nokia внесла несколько изменений в язык,[2] в основном включая упрощения и дополнения, такие как:

  • Такие функции, как каналы и маршруты сигналов, были заменены другими механизмами.
  • В TNSDL были добавлены концепции модулей и сервисов (сервисная концепция SDL-88 аналогична функции субавтомата в TNSDL).
  • Некоторые элементы были переименованы (например, приоритетные входы называются в TNSDL внутренними входами).
  • В TNSDL функция MACRO была опущена, и была добавлена ​​конструкция WHILE, позволяющая структурировать циклы без использования JOIN.

Компиляция

TNSDL напрямую не составлен в машинный код. Вместо этого программы TNSDL переводятся на Язык C исходный код. В обязанности TNSDL входит обеспечение простого и безопасного кодирования обработки сообщений, определений конечных автоматов, синхронизации параллельного выполнения, «подогрева данных» и т. Д. Задача генерации кода для конкретного процессора и низкоуровневой оптимизации делегируется используемому компилятору C.

После преобразования TNSDL в C можно использовать любой совместимый со стандартом компилятор C, компоновщик, инструмент измерения покрытия и профилирования. Чтобы сделать возможной отладку на уровне исходного кода, TNSDL помещает ссылки на номера строк в сгенерированный код C.

Код TNSDL может вызывать подпрограммы, реализованные на других языках, если для них присутствуют объекты или библиотеки. Четное Макросы языка C может использоваться, если присутствуют файлы заголовков C. Внешние объявления должны быть доступны для переводчика TNSDL.

Переводчик TNSDL - это проприетарный инструмент. Также специально для TNSDL был разработан анализатор исходного кода (достижимости).[3]

Использовать

TNSDL обычно используется на DX 200, IPA 2800 и платформы Linux для высокопроизводительных приложений с высокой доступностью.

TNSDL - это активно используемый и развивающийся язык программирования, которым пользуются тысячи разработчиков (в 2010 году).[нужна цитата ]

TNSDL в основном используется в Nokia Networks для разработки программного обеспечения для SGSN, BSC, центры коммутации мобильной связи, серверы приложений как в традиционных настройках, так и в качестве функций виртуальной сети (VNF) NFV решения.

Похожие языки программирования

Несмотря на разницу в синтаксисе, вероятно, одним из ближайших родственников TNSDL является Язык Go. Оба языка имеют легкие процессы в их фокусе. Канал Go похож на TNSDL INPUT, а оператор выбора Go для каналов допускает очень похожий дизайн программы. Однако есть различия. TNSDL использует асинхронный передача сообщений между актеры, а каналы в Go могут быть синхронный или асинхронный (с буферизацией). TNSDL позволяет передавать сообщения между процессами, запущенными на одном или разных компьютерных узлах. В этом аспекте TNSDL является родственником Erlang.

Несмотря на то, что в TNSDL можно определять операторы для типов и защищать атрибуты структуры, чтобы они были доступны только через эти операторы, TNSDL не является объектно-ориентированный язык. В этом аспекте он принадлежит к семейству не-ООП. процедурное программирование языки, такие как Язык C.

История

1980-е: Вначале ITU-T SDL имел графический синтаксис. Текстовый синтаксис был введен позже. Соответствующий графический инструмент и генератор кода были разработаны в рамках Nokia.

1990: ITU-T SDL сдвинулся в сторону текстового представления. На основе спецификации SDL-88 родился TNSDL. TNSDL - это упрощенный и сильно модифицированный вариант SDL-88.

Рекомендации

  1. ^ Жаннетт М. Винг; Джим Вудкук; Джим Дэвис, ред. (1999). FM'99 - Формальные методы: Всемирный конгресс по формальным методам, 1999, Труды. Springer. ISBN  3540665870.
  2. ^ Юринки, Теро (1997). «Динамический анализ программ SDL с помощью сетей предикатов / переходов». Хельсинкский технологический университет, лаборатория цифровых систем: 22. Цитировать журнал требует | журнал = (помощь)
  3. ^ Хусберг, Ниссе; Мальмквист, Маркус; Юринки, Теро (1996). «Эмма: инструмент для анализа программ SDL». CiteSeerX  10.1.1.30.3240. Цитировать журнал требует | журнал = (помощь)