Entiendo la función seq y por qué es necesario introducir rigurosidad para la eficiencia. Lo que no entiendo es, ¿por qué se llama a esta primitiva seq
(y no a algo estricto)?
haskell
lazy-evaluation
psquid
fuente
fuente
Respuestas:
TL; DR: Miranda lo llamó
seq
, se introdujo cuandosequence
(probablemente) ya era una cosa para las mónadas, y($!)
se conocióstrict
por poco tiempo.Miranda fue primero
Se llama
seq
porque se llamóseq
en Miranda y en idiomas anteriores, al menos según A History of Haskell: Being Lazy With Class por Paul Hudak, John Hughes, Simon Peyton Jones y Philip Wadler .Tenga en cuenta que Turner solo introdujo los componentes estrictos en el documento de 1985 , no en
seq
sí mismo, y el "manual Sasl NORMA" de Scheevel parece haberse perdido o al menos no está disponible en Internet. La tesis de Hughes ("Hughes, 1983" arriba) tampoco presentaseq
.De cualquier manera,
seq
era parte del entorno estándar de Mirandas y también contiene una pista de por qué se llamabaseq
:La sincronización correcta o SEC uir.
Otros posibles nombres
Ahora, ¿por qué no se llamó simplemente
strict
a Haskell? O inclusosequence
?Bueno, resulta que Haskell 1.3 , que introdujo
seq
, también introdujoMonad
, y por lo tantosequence :: Monad m => [m a] -> m ()
. Por lo tanto,sequence
no estaba disponible como nombre.Ahora que
sequence
estaba fuera de la imagen, echemos un vistazostrict
.strict
se incluyó en 1.3, ya que 1.3 introdujo unaEval
clase de tipo :Ni
Eval
tampocostrict
hicieron el corte en Haskell98 tal como está. En cambio,Eval
se eliminó por completo, ya que se aplicaba a todos los tipos de cualquier manera, ystrict
se le cambió el nombre($!)
.fuente
seq
, y 1.3 tiene una.ps
versión adecuada y HTML a la mano. Si desea ver por qué se celebró la E / S monádica, busque el antiguo[Request] -> [Response]
modelo de E / S. Ser perezoso con clase es probablemente el mejor recurso para mirar más allá, aparte de las viejas actas de las reuniones.