Pure-C - это альтернативный бэкэнд для PureScript, строго типизированного, чисто функционального языка программирования, который компилируется до нативного кода через инструментальную цепочку компилятора Clang.

module Main where
import Prelude
foreign import getLine :: Effect (Maybe String)
foreign import putStrLn :: String -> Effect Unit
main :: Effect Unit
main = echo
  where
  echo = do
    mLine <- getLine
    case mLine of
      Just line -> do
        putStrLn line
        echo
      Nothing ->
        pure unit

Pure-C - сам по себе - крошечный, строго оцениваемый, чисто функциональный язык программирования со сборкой мусора, который компилируется в собственный код с минимальными связями. Это означает, что полезные программы могут быть созданы размером всего несколько сотен килобайт без внешних зависимостей.

Идея состоит в том, чтобы использовать все потрясающие функции, которые предоставляет PureScript - от гарантированной компилятором чистоты и полноты функций до более высокодородных типов, классов типов, функциональных зависимостей и т. Д. - для быстрой сборки правильных и автономных программы, которые легко распространять.

Pure-C - это детерминированный перевод кода PureScript и любых связанных файлов FFI в код C, совместимый с цепочкой инструментов clang. Например, он не диктует потоковую модель. Эти решения полностью зависят от авторов библиотеки.

Pure-C также упрощает FFI. Примеры, которые поставляются вместе с проектом, прекрасно иллюстрируют это.

Состояние проекта

В настоящее время основной набор функций Pure-C завершен. То есть он переводит любой действующий модуль PureScript в C. Некоторые усилия были также предприняты для упрощения последующей интеграции с Pure-C: просто включите файл Makefile target.mk, который поставляется с Pure-C и создает целевое правило. Примеры того, как это сделать, можно найти в каталоге примеров, который поставляется вместе с проектом.

Интеграция с пульпой также проста. Учитывая обычную структуру пакета PureScript с каталогами «src» и «test», вызывать make при каждом изменении файла так же просто, как запускать:

pulp -w --then make build

Что касается окружающих библиотек, было перенесено лишь несколько библиотек, а именно: purescript-prelude, purescript-effect, purescript-console и
purescript-control . Перенос библиотек - это постоянная работа, которая, я надеюсь, увидит вклад сообщества.

Призыв к действию

Хотя базовый набор функций, возможно, уже написан, предстоит еще тонна работы. От реализации C FFI для многих популярных библиотек до реализации этапов оптимизации, таких как совокупная стоимость владения, встраивание, распаковка и т. Д.

Я приложил немало усилий, чтобы сделать проект удобным для новичков, так что приходите и проверяйте систему отслеживания проблем, чтобы найти несколько интересных задач, которые можно решить!

В противном случае отметьте проект, если он вам нравится. Это помогает мне и другим оценить интерес и мотивирует потратить на это больше часов.