Dodano propozycję z Alain Frisch of Lexifi over a year ago for an alternative to camlp4 for writing sytnax extensions making use of the -ppx flag dodaną w OCaml 4.00. W tym czasie wspomniał, że jest jeszcze trochę pracy do wykonania (atrybuty, cytaty itp.), Ale było to już w pewnym sensie użyteczne. Czy OCaml 4.01 ma ulepszoną obsługę tego stylu pisania rozszerzeń składni? Czy ktokolwiek używa tego mechanizmu teraz zamiast camlp4, czy też camlp4 nadal jest zalecanym sposobem pisania rozszerzeń składni OCaml?Jaki jest stan rozszerzeń składni -ppx dla OCaml?
Odpowiedz
Praca nad "(atrybutami, cytatami itp.)" Została wykonana przez Alaina w formie odgałęzienia źródeł kompilatora OCaml, nazwanych punktami rozszerzeń. Postępy w tej dziedzinie były szeroko dyskutowane na publicznej liście dyskusyjnej wg-camlp4, ale nie zostały zintegrowane w wersji 4.01. Od wersji 4.01 został on zintegrowany z trunkingiem (referencyjną gałęzią rozwojową kompilatora), więc powinien być dostępny dla wersji 4.02 (zauważ, że główne wersje są obecnie wydawane co roku).
Alain utrzymuje formę dokumentacji dla punktów rozszerzenia w trunk/experimental/frisch/extension_points.txt. Oczywiście nie obejmuje to przypadków użycia Camlp4, ale wciąż jest ich duża część. Niezależnie od tego, czy wolisz używać tego, jest to osobista decyzja; obietnica jest taka, że nieco bardziej niezręczna składnia zapewnia łatwiejsze wdrażanie i współdziałanie z oprzyrządowaniem i innymi rozszerzeniami.
Od wersji 4.00 lub 4.01, -ppx
nie jest przystosowany do rozszerzenia składni, można przetwarzać (i ewentualnie filtrować/przekształcać) składniowo poprawny kod OCaml. Jest technicznie możliwe, aby wykasować istniejącą składnię OCaml w celu dodania nowych znaczeń, ale polecam przeciw temu. Powinieneś raczej poczekać na 4.02, jeśli chcesz go użyć do rozszerzenia składni.
- 1. Podświetlanie składni dla plików bez rozszerzeń
- 2. Jaki jest obecny stan GWT?
- 3. Jaki jest pożytek ze składni: =?
- 4. vim: to samo podświetlanie składni dla różnych rozszerzeń plików
- 5. Pisanie parser dla DSL w SML użyciu PPX i wewnętrzny punkt
- 6. Jaki jest stan wsparcia dla procesora C++ w Eclipse?
- 7. Jaki stan jest przechowywany między wierszami JavaScript?
- 8. OCaml dla JVM. Czy jest jakiś?
- 9. JQuery - Jaki jest cel tej składni $ (function() {...});
- 10. python dla rozszerzeń firefox?
- 11. Jaki jest głupio prosty sposób na skompilowanie projektu OCaml?
- 12. Jaki jest obecny stan w frameworkach sieciowych Haskell
- 13. Jaki jest obecny stan obsługi testów jednostkowych w języku R
- 14. Jaki jest stan tworzenia aplikacji na iOS w systemie Linux?
- 15. Jaki jest obecny stan obsługi "thread_local" na platformach?
- 16. Wiązanie bazy danych dla OCaml?
- 17. W jaki sposób metody rozszerzeń łączą się
- 18. dla pętli stan konwencje
- 19. Jaki jest obecny stan implementacji WebCL w głównych przeglądarkach?
- 20. Jaki jest obecny stan GHC w 64-bitowym systemie Windows?
- 21. Jaki jest obecny stan sprawdzania typu statycznego JavaScript?
- 22. Jaki jest stan obsługi C99 w głównych kompilatorach/toolchains?
- 23. Jaki stan jest zapisany między ponownymi zapytaniami w Linqpad?
- 24. Jaka jest pełna lista prawidłowych rozszerzeń plików dla zdjęć?
- 25. Jaki jest powód używania takiej składni (0, _.Em)();
- 26. Grupowanie stan jest spadła
- 27. Jaki jest obecny stan optymalizacji wywołań końcowych dla F # on Mono (2.11)?
- 28. Czy stan HashAlgorithm.ComputeHash() jest stanowy?
- 29. OCaml - Co to jest typ niesłuszny?
- 30. Idiomatyczne wyjątki dla wychodzących pętli w OCaml