Un lenguaje de programación sincrónica es un lenguaje de programación informática optimizado para programar sistemas reactivos.
Los sistemas informáticos se pueden clasificar en tres clases principales:
La programación síncrona , también llamada programación reactiva síncrona ( SRP ), es un paradigma de programación informática respaldado por lenguajes de programación síncrona. El principio de SRP es hacer la misma abstracción para los lenguajes de programación que la abstracción síncrona en los circuitos digitales. Los circuitos síncronos están diseñados en realidad a un alto nivel de abstracción donde se descuidan las características de temporización de los transistores electrónicos. Por lo tanto, se supone que cada puerta del circuito (o, y, ...) calcula su resultado instantáneamente, se supone que cada cable transmite su señal instantáneamente. Un circuito síncrono está sincronizado y en cada tic de su reloj, calcula instantáneamente sus valores de salida y los nuevos valores de sus celdas de memoria (latches) a partir de sus valores de entrada y los valores actuales de sus celdas de memoria. En otras palabras, el circuito se comporta como si los electrones fluyeran infinitamente rápido. Los primeros lenguajes de programación síncrona se inventaron en Francia en la década de 1980: Esterel , Lustre y SIGNAL . Desde entonces, han surgido muchos otros lenguajes síncronos.
La abstracción sincrónica facilita mucho el razonamiento sobre el tiempo en un programa sincrónico, gracias a la noción de ticks lógicos : un programa sincrónico reacciona a su entorno en una secuencia de ticks, y se supone que los cálculos dentro de un tick son instantáneos, es decir, como si el procesador que los ejecuta fuera infinitamente rápido. Por lo tanto, la declaración "a||b" se abstrae como el paquete "ab", donde "a" y "b" son simultáneos. Para tomar un ejemplo concreto, la declaración de Esterel "cada 60 segundos emiten minuto" especifica que la señal "minuto" es exactamente sincrónica con la ocurrencia número 60 de la señal "segundo". En un nivel más fundamental, la abstracción sincrónica elimina el no determinismo resultante del entrelazado de comportamientos concurrentes. Esto permite una semántica determinista , lo que hace que los programas sincrónicos sean susceptibles de análisis formal, verificación y generación de código certificado, y utilizables como formalismos de especificación formal .
En cambio, en el modelo asincrónico de computación, en un procesador secuencial, la declaración "a||b" puede implementarse como "a;b" o como "b;a". Esto se conoce como no determinismo basado en intercalación. El inconveniente de un modelo asincrónico es que prohíbe intrínsecamente la semántica determinista (por ejemplo, las condiciones de carrera), lo que hace que el razonamiento formal, como el análisis y la verificación, sean más complejos. No obstante, los formalismos asincrónicos son muy útiles para modelar, diseñar y verificar sistemas distribuidos, porque son intrínsecamente asincrónicos.
También se encuentran en contraposición los sistemas cuyos procesos interactúan básicamente de forma sincrónica . Un ejemplo serían los sistemas basados en el modelo de procesos secuenciales comunicantes (CSP) , que permite una elección determinista (externa) y no determinista (interna).