J'ai récemment refactorisé de gros morceaux de code et les remplacer par des requêtes Linq.
Suppression du biais linguistique - Linq est essentiellement un ensemble d'opérations Map / Filter and Reduce qui opèrent sur une séquence de données.
Cela m'a fait réfléchir, jusqu'où serais-je théoriquement capable de prendre cela. Serais-je capable de réécrire la base de code entière en une série (ou même une seule) d'opérations de carte / filtre et de réduction.
Malheureusement, je suis payé pour faire des choses utiles, donc je n'ai pas pu expérimenter beaucoup plus, mais je ne pense à aucune structure de code qui ne pourrait pas être restructurée en tant que telle. Le code à effets secondaires peut être traité via des monades. Même la sortie mappe essentiellement les adresses mémoire aux adresses d'écran.
Y a-t-il quelque chose qui ne pourrait pas (théoriquement) être réécrit en tant que requête Linq?
my_list.map(_ignored => a copy of my_list)
, il semble que l'utilisation de l'espace d'un tel programme soit limitée par un polynôme (en fonction de la longueur du programme). Alors un tel langage ne pourrait certainement pas calculer des problèmes qui ne sont pas dans PSPACE. Cependant, comme de nombreux problèmes dans PSPACE sont considérés comme insolubles, sans parler des classes plus importantes, cela peut ne pas être une restriction très sérieuse.