저는 (거의 완성 된) Javascript 프로젝트를 14 개월 넘게 작업하고 있습니다. 프로젝트는 밤새 끝날 것으로 예상되는 해킹으로 시작되었지만 시간이 지남에 따라 Javascript 부분은 68 개의 개별 파일과 10,314 개의 비어 있지 않은 행으로 성장했습니다. 슬프게도 현재 C 제작 프로세서에 의존하여 구축하고 있습니다.자바 스크립트 친화적 인 전 처리기 딜레마
JavaScript에 대해 cpp를 사용하는 방법을 설명하기가 어렵습니다. 이것은 단지 해킹 일 뿐이며, 매크로 확장, ifdef 정의 및 너무 많은 노력없이 포함 된 것을 필요로했습니다. 약 3 초가 지나면 cpp가 작업에 "완벽 함"을 알게되었습니다.
- 릴리스 모드에서 사라지는 LOG() 매크로를 제공하십시오.
- 릴리스 모드에서 사라지는 ASSERT() 매크로를 제공하고 원본 파일 및 줄 번호 태그가 지정된 예외를 생성합니다.
- 충돌이 발생하면 서버에 다시보고되는 이벤트를 압축 된 형태로 기록하는 "확인 된"빌드를 생성 할 수있는 코드에 대해 LOG() 및 ASSERT() 구현을 스왑합니다.
- Python 백엔드와 공유되는 구성 파일을 기반으로 PROJECT_SOME_CONFIG_VAR_NAME을 "1"로 바꿉니다.
모든 해킹과 마찬가지로이 해킹은 현재 프로젝트에 너무 하드 코딩되어있어 실제로이를 대체해야하는 작업에 대해 생각조차 싫어합니다. 내 프로젝트는 코드베이스를 자신의 전용 테스트 서버 (내 랩탑이 아닌)로 옮기고 싶지만, 리눅스 인스턴스를 설정할 때, 4.1 이후의 GNU cpp 버전은 더 이상 자바 스크립트를 사전 처리하지 않는다는 것을 발견했다. 오류가 발생하여 고장났습니다.
GCC의 특정 버전을 빌드 요구 사항 목록에 추가하는 대신, 나는이 혼란을 진정으로 해결할 좋은 시간이 될 것이라고 생각했습니다. 내 문제는, 그게 내가 cpp와 동일한 전원 및 기능을 가진 대체 선행 프로세서를 찾을 수 없다는 것입니다! 나는 m4를 고려해 보았지만, m4는 고통의 세계입니다. 내가 찾은 다른 자바 스크립트 특정 처리기는 모든 예를 들어 나는 현재에 의존하고 기능이 부족 :
__FILE__
&__LINE__
- 가변 인자 매크로를
- 토큰 연결
- 조건부 컴파일
심각하게 고려하고 있습니다. Javascript만을위한 아주 새로운 전 처리기를 구현했다. C 전처리 기 구문이 너무 잘 작동했기 때문에이 전 처리기 구문을 완전히 빌려왔다. 그렇게하기 전에 더 나은 옵션이 있는지 궁금합니다. :) 아마도 스왑 할 수있는 cpp와 유사한 일반 전처리 기가 아마도 있을까요? 68 개의 파일에서 모든 전 처리기 구문을 바꾸는 데 필요한 작업은 전처리기만 간단히 다시 구현하는 데 필요한 작업량에 접근합니다.
C 전처리기에 의존하면서 필자가 지금까지 만든 것에 놀랐습니다. 그것은 마음이 이해하기에 건강한 것보다이 일에 더 효과적입니다. 나에게 열려있는 또 다른 옵션은 Linux, Darwin-i386, Win32 용 cpp-4.1 버전을 정적으로 빌드하고이 바이너리를 프로젝트 저장소에 저장하는 것이다.
도움말!
좋아, 나는 동정한다. 너 진짜 엉망진창이야, 왜 cpp가 추락하니? 그렇게해서는 안됩니다. –
@Stefano, 세분화 오류와 같은 진정한 충돌은 아닙니다. Javascript의 어휘 및 문법 집합이 C. GCC 4.2+와 분명히 다르므로 파서가 혼란스러워지고 있습니다. GCC 4.2+는 훨씬 더 엄격한 파서를 갖고있는 것처럼 보입니다. 호기심에서 벗어난 – dmw
: JS 구성 요소가 C PP를 혼동 하는가? – Christoph