Wie sollten von Comint abgeleitete Modi Puffer und Prozesse verfolgen?


8

Nachdem comintich einige benutzerdefinierte Modi geschrieben habe, fällt es mir oft schwer zu entscheiden, wie Puffer und Prozesse verfolgt werden sollen: Zum Beispiel, um verschiedene Quellpuffer mit verschiedenen Interpreten zu verknüpfen. Ist es besser, einen Verweis auf den Puffer oder den Prozess zu behalten?

Bei gegebenem Puffer kann man den zugehörigen Prozess mit finden get-buffer-process. Umgekehrt gibt ein gegebener Prozess process-bufferden zugehörigen Puffer zurück. Sowohl Puffer als auch Prozesse ermöglichen eine zusätzliche Indirektionsebene, indem sie unter einem eindeutigen Namen nachgeschlagen werden. Dies scheint jedoch fragil zu sein, wenn nur ein Verweis auf das Objekt selbst beibehalten wird.

Eine Möglichkeit scheint eindeutig schlecht zu sein, da sie gegen das Prinzip verstößt, Daten einmal und nur einmal zu speichern: Verweise sowohl auf den Puffer als auch auf den Prozess beizubehalten.

Die meisten comint-Funktionen zum Senden von Eingaben verwenden eher einen Prozess als einen Puffer als Argument, das dafür spricht, am Prozessobjekt und nicht am Puffer festzuhalten. Auf der anderen Seite bleiben Puffer in der Regel länger als Prozesse bestehen: Ein Prozess wird möglicherweise beendet oder beendet, und ein neuer Prozess wird in dem zuvor verwendeten Puffer gestartet.

Gibt es andere überzeugende Argumente für die Referenzierung des Prozesses oder seines Puffers?

Antworten:


6

Aus den von Ihnen angegebenen Gründen ziehe ich es im Allgemeinen vor, am Puffer festzuhalten. Dann schreibe ich eine foo-procFunktion, die den entsprechenden Prozess zurückgibt und ihn möglicherweise bei Bedarf neu startet. Und manchmal schreibe ich dann sogar eine foo-bufferFunktion, die aufruft, foo-procdamit sie mir nicht nur den Puffer gibt, sondern auch sicherstellt, dass der Prozess ausgeführt wird.


Vielen Dank, dies ist die Art von Anleitung, nach der ich gesucht habe, und ich werde wahrscheinlich keine bessere Quelle finden!
Jon O.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.