2012-05-02 3 views
4

Я конвертирую несколько модулей на основе OCaml в F # и запускаю директиву компилятора OCaml '' Quotation.add 'для расширителя цитат.Преобразование OCaml в F #: преобразование расширения и расширения цитаты OCaml в F #

Расширитель цитаты - это функция, написанная в OCaml. Вызов функции в библиотеке Camlp4 '' Quotation.add '' добавляет котировку расширитель. не

Camlp4 - Tutorial, Ch. 3

После поиска как в котировальный расширителя и «директивы компилятора» Quotation.add «» в F # книгах, то # сайт F, Google и здесь, ответ я получаю нет.

Может кто-то подтвердить, что F # не поддерживает концепцию директивы компилятора OCaml '' Quotation.add '' или концепцию расширителей цитат OCaml.

EDIT

Примечание: Я только что узнал, что Camlp4 препроцессор некрасиво-принтер OCaml, я думал, что это была отдельная библиотека для OCaml, когда я задал вопрос; теперь это имеет смысл.

+3

Вы правы - campl4 библиотека недоступна для F #, поэтому, боюсь, вам понадобится использовать другой подход для повторной реализации функциональных возможностей, которые вам нужны в F #. Можете ли вы поделиться более подробной информацией о функциях, которые вы конвертируете? –

+0

Я думал, что это был довольно простой ответ, но я добавил еще несколько указателей, которые могут быть релевантными (для вас или других читателей). –

+0

@TomasPetricek Это может быть базовый ответ, но, зная, что он не существует, мне очень нужна работа, требующая чего-то, чего не существует. Как мы знаем, некоторые люди не смотрят на комментарии. Благодарю. –

ответ

10

Вы правы - библиотека camlp4 недоступна для F #, поэтому, боюсь, вам понадобится использовать другой подход для повторной реализации требуемой функциональности в F #.

В общем, есть несколько связанных с ними технологий, которые можно использовать с F # (но это трудно сказать, если любой из них полезно для вас, не зная больше о конкретной проблеме):

  • F# Quotations позволяют вам манипулировать кодом F #, но имеют ограниченные возможности компиляции (хороши, то есть для перевода F # на SQL, JavaScript или, возможно, GPU)
  • F# CodeDom (из F # PowerPack) позволяет сгенерировать код и скомпилировать его с помощью компилятора F #, но вы можете генерировать код как текст или использовать объектно-ориентированный стиль .NET.
  • T4 Templating механизм .NET шаблонный, хотя последний раз я проверил, что она не поддерживает F # (но я думаю, что версия Mono может работать)
  • F# Type Providers (благодаря KVB) позволяет генерировать типы от F # плагин для компилятора. Это обрабатывает случаи, когда вы используете camplp4 для генерации некоторых типов, которые будут использоваться позже (т. Е. Из более короткой спецификации), но они имеют ограниченное применение, если вам нужно сгенерировать код
+3

Поставщики типов также могут представлять интерес, если параметр F # 3.0 является опцией. – kvb

+0

@ kvb Отличная точка. Я добавлю это! –

Смежные вопросы