Нещодавно я переробляв великі фрагменти коду і замінював їх запитами Linq.
Усунення зміщення мови - Linq - це по суті набір операцій Map / Filter і Reduct, які працюють на послідовності даних.
Це змусило мене задуматися, як далеко я б теоретично змогла це прийняти. Чи зможу я переписати всю кодову базу в серію (або навіть єдину) операцій "Карта / Фільтр" та "Зменшити".
На жаль, мені платять за корисні речі, тому мені не вдалося експериментувати набагато далі, але я не можу придумати жодної структури коду, яка не могла б бути перероблена як така. Кодовий ефект може бути вирішений за допомогою монад. Навіть вихідний результат суттєво відображає адреси пам'яті на екранні адреси.
Чи є щось, що неможливо (теоретично) переписати як запит Linq?
my_list.map(_ignored => a copy of my_list)
, схоже, використання простору такої програми обмежене деяким поліномом (залежно від довжини програми). Тоді така мова, безумовно, не могла обчислити проблеми, яких немає в PSPACE. Однак, оскільки багато проблем у PSPACE вважаються нерозв'язними, якщо говорити про більші класи, це може бути не дуже серйозним обмеженням.