ТНСДЛ
TNSDL означает язык спецификаций и описаний TeleNokia . TNSDL основан на языке ITU-T SDL -88. Он используется исключительно в Nokia Networks , в первую очередь для разработки приложений для телефонных станций .
Цель [ править ]
общего назначения TNSDL — процедурный язык программирования . Он особенно хорошо подходит для разработки распределенных систем с высокой степенью параллелизма. [1]
Первоначально он был разработан для программирования коммутаторов с коммутацией каналов. По мере того, как мир переходил к телекоммуникациям с коммутацией пакетов и Интернету, TNSDL оказался также отличным подходящим средством для разработки интернет-серверов.
Дизайн [ править ]
TNSDL — очень простой и легкий в освоении язык программирования.
Основы [ править ]
TNSDL — строго типизированный процедурный язык программирования . Его основные возможности сопоставимы с языками C и Pascal .
Многопроцессорность [ править ]
В TNSDL процессы создаются командой CREATE. (Это чем-то похоже на команду POSIX fork или pthread_create .) Команда CREATE создает либо процесс операционной системы, либо совместную задачу .
Модель процесса может быть выбрана посредством конфигурации. Сам исходный код не отражает, какой метод планирования используется. Тем не менее, чтобы избежать определенных состояний гонки , разработчикам, возможно, придется быть готовыми к параллельному выполнению. TNSDL явно поддерживает критических разделов пометку в коде.
В случае совместной многозадачности программа планируется как один процесс операционной системы. Когда совместный поток входит в состояние ожидания асинхронного ввода, может запуститься другой поток программы.
Передача сообщений [ править ]
Особенностью TNSDL является модель акторов . Предполагается, что процессы будут разрабатываться как управляемые событиями конечные автоматы . Межпроцессное взаимодействие осуществляется посредством асинхронной передачи сообщений . Команда OUTPUT отправляет сообщение, а операторы INPUT определяют ожидаемые сообщения.
Таймеры, с точки зрения TNSDL, представляют собой отложенные сообщения. Как и в случае с обычными сообщениями, истечение таймера обрабатывается оператором INPUT. Команда SET запускает, а команда RESET отменяет таймер.
Конечные автоматы могут использоваться опционально, например, для предотвращения приема определенных входных сообщений на каком-то этапе обработки.
Следующий фрагмент кода демонстрирует сервер, который получает сигнал запроса (сообщение), связывается с процессом базы данных для получения необходимых данных и, наконец, отправляет сигнал ответа.
DCL WITHWARMING /* Data to be live-migrated (on platforms supporting "warming") */
query_process pid; /* PID of query_signal sender */
CONSTANT time_to_wait = 10; /* Timeout of database response */
TIMER db_timeout_timer; /* Timer of database response */
STATE idle; /* Idle state, wait for query signal */
INPUT query_signal(DCL input_data);
DCL
db_query db_query_type; /* Local variable, stored on stack. */
TASK query_process := SENDER; /* Sender address saved to specific memory area, which is preserved even on software update.*/
TASK db_query.field1 := some_procedure(input_data),
db_query.field2 := input_data.field1;
OUTPUT db_request_signal(db_query) TO db_process; /* Send request to database process */
SET(NOW + time_to_wait, db_timeout_timer); /* Start database response timer */
NEXTSTATE wait_db; /* Enter wait_db state where database response is expected */
ENDSTATE idle;
STATE wait_db;
INPUT db_response_signal(DCL answer_data);
RESET(db_timeout_timer) COMMENT 'Database answered in time';
OUTPUT answer_signal(answer_data.records) TO query_process;
NEXTSTATE idle;
INPUT db_timeout_timer; /* Timeout */
OUTPUT error_signal(error_constant) TO query_process;
NEXTSTATE idle;
ENDSTATE wait_db;
Комментарии:
- Конечный автомат предотвращает обработку любого нового query_signal во время ожидания ответа программы базы данных.
- ПОДОГРЕВ означает, что когда другой компьютер возьмет на себя роль текущего, отмеченные данные (переменная) будут скопированы на новый компьютер. Таким образом, если изменение оборудования или обновление программного обеспечения произойдет во время ожидания ответа базы данных, адрес отправителя запроса не будет потерян, и ответ может быть доставлен правильно. Однако он поддерживается не на всех платформах.
TNSDL позволяет привязывать входные данные к нескольким или всем состояниям. При необходимости входной сигнал может иметь поведение, зависящее от состояния.
STATE idle COMMENT 'Idle state';
INPUT are_you_busy;
OUTPUT no TO SENDER;
NEXTSTATE -; /* No state change */
/* ... other input handlers */
ENDSTATE idle;
STATE *(idle) COMMENT 'Any state, except idle';
INPUT are_you_busy;
OUTPUT yes TO SENDER;
NEXTSTATE -; /* No state change */
ENDSTATE *(idle);
STATE * COMMENT 'Any state';
INPUT are_you_alive;
OUTPUT yes TO SENDER;
NEXTSTATE -; /* No state change */
ENDSTATE *;
Отличия от СДЛ-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 похож на INPUT TNSDL, а оператор выбора Go на каналах позволяет создавать очень похожие программы. Однако есть различия. TNSDL использует асинхронную передачу сообщений между актерами , тогда как каналы в Go могут быть как синхронными , так и асинхронными (буферизованными). TNSDL позволяет передавать сообщения между процессами, работающими на одном или разных компьютерных узлах. В этом аспекте TNSDL является родственником Erlang .
Несмотря на то, что в TNSDL можно определять операторы для типов и защищать атрибуты структуры, чтобы они были доступны только через эти операторы, TNSDL не является объектно-ориентированным языком. В этом аспекте он принадлежит к семейству процедурных языков программирования , не являющихся ООП , таких как язык C.
История [ править ]
1980-е: Вначале ITU-T SDL имел графический синтаксис. Текстовый синтаксис был введен позже. Соответствующий графический инструмент и генератор кода были разработаны внутри Nokia .
1990: ITU-T SDL перешел в сторону текстового представления. На основе спецификации SDL-88 родился TNSDL. TNSDL — это упрощенный и сильно модифицированный вариант SDL-88.
Ссылки [ править ]
- ^ Жаннетт М. Винг; Джим Вудкук; Джим Дэвис, ред. (1999). FM'99 - Формальные методы: Всемирный конгресс по формальным методам, 1999, Труды . Спрингер. ISBN 3540665870 .
- ^ Юринки, Теро (1997). «Динамический анализ программ SDL с сетями предикатов/переходов». Хельсинкский технологический университет, Лаборатория цифровых систем: 22.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Хусберг, Ниссе; Мальмквист, Маркус; Юринки, Теро (1996). «Эмма: инструмент для анализа программ SDL». CiteSeerX 10.1.1.30.3240 .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь )