El significado de las palabras no es fijo, pero puedo darte mi interpretación.
Un cálculo es algo con lo que calculamos en el sentido de hacer malabares con las ecuaciones (piense en la manipulación de series de Taylor o en el cálculo de integrales en el análisis). Un cálculo nos dice cuáles son las reglas de manipulación, pero no cuáles debemos usar en una situación dada.
Un lenguaje de programación es algo que nos dice cómo calcular. Nos dice exactamente cómo usar las reglas. Por lo general, dejamos que la computadora use las reglas, ya que es mucho más rápido. Las reglas pueden ser no deterministas, y puede haber muy buenas razones para que no sean deterministas. La naturaleza del cálculo puede ser que no sea determinista (piense en procesos de comunicación concurrentes), o la fijación de una estrategia particular puede ser perjudicial para las técnicas de implementación y la optimización.
λλ
Por el contrario, Standard ML es un lenguaje de programación. Se da en términos de semántica operativa, es decir, reglas de cálculo. Hay nociones derivadas de igualdad (equivalencia contextual, equivalencia observacional, etc.) que podemos poner encima para considerarlo como una especie de cálculo.
Por supuesto, a menudo hay conexiones útiles entre un cálculo y su manifestación como lenguaje de programación. La normalización confluente es solo una forma de pasar del cálculo al lenguaje de programación (aunque lamentablemente algunas personas lo han convertido en una especie de religión). La interacción entre los cálculos y los lenguajes de programación es importante: los lenguajes de programación se pueden usar realmente, pero los cálculos explican de qué se tratan los programas.
Solo para molestar a la gente, permítanme decir también que pretender que no hay diferencia entre un cálculo y su manifestación operativa a veces conduce a visiones sesgadas de la programación y las mini religiones dentro de la comunidad de programación. Puedes intentar adivinar qué idioma tengo en mente. (¡Es un lenguaje genial!)