2011-01-13 3 views
2

glob.h에 대한 nodejs 바인딩을 작성했습니다 (사용하려면 npm install glob).zsh의 재귀 적 glob을 수행하는 기능을 가진 C 라이브러리는 무엇입니까?

zsh의 멋진 lib/**/*.js 유형을 지원하고 싶습니다.하지만 어떤 라이브러리에 해당 기능이 있는지 알 수 없습니다.

필자는 직접 구현하려고하지 않으며 프로그래밍 퍼즐에 대한 영리한 솔루션을 찾고 있지 않습니다. 다음과 같은 내용을 원합니다.

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

모든 포인터가 있습니까? 루비가 이걸 구속력이 있다고 확신 하나?


편집 :

나는 몇 가지 조사를했고, 재미있는 물건을 발견했다.

Guido Van Rossum (Python 명성)은 BSD 및 일부 유닉스에서 발견 된 구현을 작성했습니다. 이른바 "확장 된"그록 패턴 (** 등)은 포함되지 않았습니다. 프로그램에서 #include <glob.h>을 수행하면 이것이 가장 가능성이 높습니다. man 3 glob은 동작을 설명합니다.

그러나 Bash, Zsh 및 Ksh의 모든 확장 glob 구현은 모두 처음부터 작성되었으며 현재까지는 알 수 있습니다. NetBSD는 확장 된 glob을 추가하여 GVR 구현의 자손입니다. Ruby는 dir.c에 구현 된 확장 된 glob을 표준 라이브러리의 일부로 사용합니다 (루비가 아닌 C로 작성). 펄은 의 바인딩이나 구현을 가지고있는 것처럼 보입니다. 모두 glob 라이브러리가 존재할 것으로 예상됩니다.

내가 발견 한 모든 것 중에서 NetBSD는 일반적인 비 확장형 libc glob(3)으로 코딩 한 것과 가장 유사하게 보이며 라이센스는 내 프로젝트에 가장 적합합니다.

또 다른 접근법은 처음부터 다시 작성하는 것입니다. 그 일을하는 것이 좋겠지 만 명확한 사양이나 테스트 세트를 찾을 수없는 것 같습니다. 어떤 제안이 있니?


편집 2 : JS로 다시 작성했습니다. https://github.com/isaacs/node-glob

답변

0

저는 루비가이 일을하고 있다고 생각합니다. 아마 루비 코드 일 것입니다. 문자열을 파싱하고 파일 시스템을 걷는 것 외에는 구현할 수있는 장애물이 많지 않습니다. 확실하지는 않지만 zsh가 zsh 코드에있는 라이브러리 중 하나를 사용한다고 생각하지 않습니다.

+0

루비는이 작업을 수행하지만 루비 코드가 아닌 C로 작성되었습니다. 루비 소스에서 dir.c을 확인하십시오. – isaacs