Es ist ein Unvollständigkeitsproblem, kein Unentscheidbarkeitsproblem
Es stimmt zwar, dass die optimale Platzierung von Freigabebescheinigungen nicht zu entscheiden ist, aber das ist hier einfach nicht das Problem. Da dies sowohl für den Menschen als auch für den Compiler unentscheidbar ist, ist es unmöglich, immer wissentlich die optimale Platzierung für die Freigabe auszuwählen, unabhängig davon, ob es sich um einen manuellen oder einen automatischen Prozess handelt. Und da niemand perfekt ist, sollte ein ausreichend fortgeschrittener Compiler in der Lage sein, Menschen zu übertreffen, um annähernd optimale Platzierungen zu erraten. Also, Unentscheidbarkeit ist nicht , warum wir explizite Freigabe Aussagen müssen .
Es gibt Fälle, in denen externes Wissen die Platzierung von Freigabeerklärungen beeinflusst. Das Entfernen dieser Anweisungen entspricht dann dem Entfernen eines Teils der Betriebslogik, und das Auffordern eines Compilers, diese Logik automatisch zu generieren, entspricht dem Auffordern, zu erraten, was Sie denken.
Angenommen, Sie schreiben eine Read-Evaluate-Print-Loop (REPL). : Der Benutzer gibt einen Befehl ein und Ihr Programm führt ihn aus. Der Benutzer kann Speicher zuweisen / freigeben, indem er Befehle in Ihren REPL eingibt. Ihr Quellcode würde angeben, was die REPL für jeden möglichen Benutzerbefehl tun soll, einschließlich der Freigabe, wenn der Benutzer den Befehl dafür eingibt.
Wenn der C-Quellcode jedoch keinen expliziten Befehl für die Freigabe der Zuweisung bereitstellt, muss der Compiler darauf schließen, dass er die Zuweisung durchführen soll, wenn der Benutzer den entsprechenden Befehl in REPL eingibt. Ist dieser Befehl "freigeben", "frei" oder etwas anderes? Der Compiler kann nicht wissen, wie der Befehl lauten soll. Selbst wenn Sie in der Logik programmieren, um nach diesem Befehlswort zu suchen, und die REPL es findet, kann der Compiler nicht wissen, dass es mit Freigabe reagieren soll, es sei denn, Sie weisen es ausdrücklich im Quellcode an.
tl; dr Das Problem istCode CQuelle nicht den Compiler mit externem Wissen zur Verfügung stellen. Unentscheidbarkeit ist nicht das Problem, da es dort ist, ob der Prozess manuell oder automatisiert ist.