2011-01-13 5 views
2

Ich schrieb eine Nodejs-Bindung an glob.h (npm install glob, um es zu verwenden).Welche C-Bibliothek hat die Funktion, die rekursiven Klumpen von zsh zu verwenden?

Ich würde gerne Zshs ausgefallene Art von Sachen unterstützen, aber ich kann nicht scheinen, herauszufinden, welche Bibliothek diese Funktionalität hat.

Ich möchte nicht versuchen, es selbst zu implementieren, und ich suche keine clevere Lösung für das Programmierpuzzle. Ich möchte nur etwas wie das:

#include <fancy_glob.h> 
int do_fancy_glob (etc) { ... } 

Irgendwelche Zeiger? Ich bin mir ziemlich sicher, dass Ruby daran gebunden ist, oder?


EDIT:

habe ich einige der Forschung, und interessante Dinge herausgefunden.

Guido Van Rossum (von Python Fame) schrieb eine Implementierung, die jetzt auf BSD und einigen anderen Unixen gefunden wird. Es enthielt nicht die sogenannten "erweiterten" Glob-Muster (**, etc.). Wenn Sie #include <glob.h> in Ihrem Programm tun, ist es wahrscheinlich, dass dies das ist, was Sie bekommen werden. man 3 glob beschreibt sein Verhalten.

Allerdings haben Bash, Zsh und Ksh jetzt alle erweiterten Glob-Implementierungen, alle von Grund auf neu geschrieben, soweit ich das beurteilen kann. NetBSD hat einen erkennbaren Abkömmling der GVR-Implementierung, mit erweiterten Globs hinzugefügt. Ruby hat Globals implementiert in als Teil seiner Standard-Bibliothek (definitiv in C geschrieben, nicht Ruby). Perl scheint Bindungen zu haben oder Implementierungen von alle die Glob-Bibliotheken in Existenz, was zu erwarten ist, nehme ich an.

Von allen, die ich gefunden habe, scheint NetBSD am nächsten zu dem, mit dem ich mit der typischen nicht-erweiterten libc glob(3) codiert, und seine Lizenz ist am besten für mein Projekt zugänglich.

Ein anderer Ansatz wäre es, es von Grund auf neu zu schreiben. Damit wäre ich in Ordnung, aber ich finde keine klare Spezifikation oder Testsuite. Hast du irgendwelche Vorschläge?


EDIT 2: Ich habe es in JS umgeschrieben. https://github.com/isaacs/node-glob

Antwort

0

Ich bin mir ziemlich sicher, dass Ruby dies selbst tut, und es ist wahrscheinlich Ruby-Code tut es. Neben dem Parsen der Zeichenfolge und dem Gehen des Dateisystems gibt es nicht viele Hürden, dies zu implementieren. Ich bin mir nicht sicher, aber ich denke nicht, dass zsh dafür auch eine Bibliothek verwendet, sondern nur im zsh-Code.

+0

Ruby macht das selbst, aber es ist in C geschrieben, nicht in Ruby-Code. Schauen Sie sich dir.c in der Ruby-Quelle an. – isaacs