Los tipos lineales y la lógica de separación son excelentes, pero pueden requerir bastante esfuerzo del programador. Escribir una lista enlazada segura en Rust podría ser bastante difícil, por ejemplo.
Pero hay una alternativa que requiere mucho menos esfuerzo del programador, aunque con garantías menos estrictas. Un flujo de trabajo (bastante antiguo) es garantizar la seguridad de la memoria mediante el uso de (generalmente una pila de) regiones. Usando la inferencia de la región, un compilador puede decidir estáticamente en qué región debe ir una parte de los datos asignados, y desasignar la región cuando está fuera de alcance.
La inferencia de la región es demostrablemente segura (no puede desasignar la memoria accesible) y requiere una mínima interferencia del programador, pero no es "total" (es decir, todavía puede perder memoria, aunque definitivamente es mucho mejor que "no hacer nada"), por lo que generalmente se combina con GC en la práctica. losMLtonEl compilador de ML Kit usa regiones para eliminar la mayoría de las llamadas de GC, pero todavía tiene un GC porque de lo contrario aún perdería memoria. Según algunos de los primeros pioneros en las regiones, la inferencia regional no se inventó realmente para este propósito (creo que fue para la paralelización automática); pero resultó que también podría usarse para la gestión de la memoria.
Para un punto de partida, diría que vaya al documento "Implementación del cálculo λ de llamada por valor tipado usando una pila de regiones" por Mads Tofte y Jean-Pierre Talpin. Para más documentos sobre inferencia regional, busque otros documentos de M. Tofte y J.-P. Talpin, algunos de los trabajos de Pierre Jouvelot, así como la serie de documentos de Greg Morrisett, Mike Hicks y Dan Grossman sobre Cyclone.