Подтвердить что ты не робот

Библиотеки заметок для C?

Для проекта, над которым я работаю, существует ряд состояний, в которых расчеты могут быть использованы для возврата тех же результатов (и не имеют побочных эффектов). Очевидным решением было бы использовать memoization для всех дорогостоящих функций.

Мне нужно будет иметь memoization, который обрабатывает несколько состояний (так что я могу сделать недействительным один кеш-набор без отмены другого). Кто-нибудь знает хорошую библиотеку C для такого рода вещей? (Обратите внимание, что это не может быть С++, мы говорим C.)

Я работал с некоторыми хорошими реализациями на Python, которые используют декораторы, чтобы иметь возможность гибко запоминать кучу различных функций. Я немного удивляюсь, есть ли общая библиотека, которая могла бы делать подобные вещи с C (хотя, вероятно, с явной функцией wrapping, а не с удобным синтаксисом). Я просто думаю, что было бы глупо добавлять кэш-память для каждой функции по отдельности, если это достаточно распространенная проблема, для этого должны быть некоторые готовые решения.

Я бы хотел найти следующие характеристики:

  • Можно кэшировать функции с различными типами ввода и вывода
  • Управляет несколькими различными кешами (так что вы можете иметь кратковременное и долгосрочное кэширование).
  • Имеет хорошие функции для недействительности кешей
  • Предназначен для использования путем переноса функций, а не для изменения существующих функций.

Кто-нибудь знает реализацию C, которая может обрабатывать все или большинство этих реквизитов?

4b9b3361

Ответ 1

Хорошо, поскольку у меня не было библиотек memoization для C, и я искал выпадающее решение для memoizing существующих функций C в базе кода, я создал свою собственную небольшую библиотеку memoization, которую я выпускаю под APL 2.0, Надеемся, что люди найдут это полезным, и он не будет разбиваться и гореть на других компиляторах. Если у него есть проблемы, напишите мне здесь, и я буду изучать его каждый раз, когда у меня есть время (которое, вероятно, будет измеряться с шагом в несколько месяцев).

Эта библиотека не создана для скорости, но она работает и была протестирована, чтобы убедиться, что она довольно проста в использовании и не отображает утечек памяти в моем тестировании. По сути, это позволяет мне добавлять memoization к функциям, подобным шаблону декоратора, к которому я привык в Python.

В настоящее время библиотека находится в SourceForge как C-Memo Library. Он поставляется с небольшим руководством пользователя и несколькими сторонними лицензированными лицензиями для общего хеширования. Если местоположение изменится, я попытаюсь обновить эту ссылку. Я нашел это полезным при работе над моим проектом, надеюсь, другие найдут его полезным для своих проектов.

Ответ 2

memoization полностью встроен в язык haskell. Вы можете вызвать эту функцию с помощью c

Обновление:
Я все еще изучаю функциональное программирование, но я знаю, что memoization довольно распространена в функциональном программировании, потому что возможности языка облегчают работу. Я изучаю f #. Я не знаю haskell, но это единственный функциональный язык, который я знаю, который будет взаимодействовать с c. Возможно, вам удастся найти еще один функциональный язык программирования, который более подходит с интерфейсом c, чем то, что предоставляет haskell.