Какие инструменты есть для функционального программирования на C? - PullRequest
141 голосов
/ 19 октября 2008

В последнее время я много думал о том, как заниматься функциональным программированием на C ( не C ++). Очевидно, C является процедурным языком и на самом деле не поддерживает функциональное программирование изначально.

Существуют ли какие-либо расширения компилятора / языка, которые добавляют некоторые функциональные программные конструкции к языку? GCC предоставляет вложенных функций в качестве расширения языка; вложенные функции могут обращаться к переменным из родительского стекового фрейма, но до зрелых замыканий еще далеко.

Например, одна вещь, которая, на мой взгляд, может быть действительно полезной в C, заключается в том, что в любом месте, где ожидается указатель на функцию, вы можете передавать лямбда-выражение, создавая замыкание, которое превращается в указатель на функцию. C ++ 0x будет включать в себя лямбда-выражения (что, я думаю, круто); Тем не менее, я ищу инструменты, применимые к прямой C.

[Edit] Чтобы уточнить, я не пытаюсь решить конкретную проблему в C, которая больше подходит для функционального программирования; Мне просто любопытно, какие инструменты существуют, если я хочу это сделать.

Ответы [ 13 ]

0 голосов
/ 01 апреля 2018

То, как я начал заниматься функциональным программированием на C, заключалось в том, чтобы написать интерпретатор функционального языка на C. Я назвал его Fexl, что сокращенно от «Function EXpression Language».

Интерпретатор очень маленький, компилируется до 68 КБ в моей системе с включенным параметром -O3. Это тоже не игрушка - я использую его для всего нового производственного кода, который я пишу для своего бизнеса (веб-учет инвестиционных партнерств).

Теперь я пишу код на C только для (1) добавления встроенной функции, которая вызывает системную подпрограмму (например, fork, exec, setrlimit и т. Д.), Или (2) оптимизации функции, которая могла бы быть написана в Fexl (например, поиск подстроки).

Механизм модуля основан на понятии «контекст». Контекст - это функция (написанная на Fexl), которая отображает символ в его определении. Когда вы читаете файл Fexl, вы можете разрешить его с любым контекстом, который вам нравится. Это позволяет создавать пользовательские среды или запускать код в «песочнице» с ограниченным доступом.

http://fexl.com

0 голосов
/ 30 ноября 2009

Не знаю о C. В Objective-C есть некоторые функциональные функции, хотя GCC на OSX также поддерживает некоторые функции, однако я бы снова рекомендовал начать использовать функциональный язык, есть много упомянутых выше. Я лично начал со схемы, есть несколько отличных книг, таких как «Маленький мошенник», которые могут помочь вам в этом.

0 голосов
/ 19 октября 2008

Что в C вы хотите сделать функциональным, синтаксис или семантику? Семантика функционального программирования, безусловно, может быть добавлена ​​в компилятор C, но к тому времени, когда вы закончите, вы по существу получите эквивалент одного из существующих функциональных языков, таких как Scheme, Haskell и т.д.

Было бы лучше использовать время только для изучения синтаксиса тех языков, которые непосредственно поддерживают эту семантику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...