Есть ли обновленная версия “Написания Более быстрого Управляемого Кода: Знать Что Вещи Стоимость”?

Вы можете спроектировать базу данных на Лиспе вместо использования базы данных постоянного хранения, и вы можете сохранить данные в сериализованном формате для загрузки / сохранения базы данных. Вы были бы удивлены, но некоторые крупные компании, такие как Yahoo! сделал это в 90-х годах, и многие до сих пор делают это сегодня, вместо использования постоянной базы данных, такой как MySQL. Вот пример структуры программы, если вы хотите написать базу данных на Лиспе. Вы можете использовать CLOS для хранения функций как экземпляров этого класса. Вы говорите, что вам нужно имя функции и параметры функции. Таким образом, вы можете создать класс с атрибутами «имя» и «параметры». Вот пример:

 (defclass functions()
   ((name :accessor func-name
      :initarg :name)
    (params :accessor func-params
        :initarg :params
        :initform '(nil))))

Мы можем создать класс со слотами для имени и параметров, как я показал выше, а затем мы можем создать экземпляры этого класса. Поэтому, если, например, у меня есть такая функция:

(defun foo (n lst)
    (list foo))

я могу создать такой экземпляр ...

 (defvar func-1 (make-instance 'functions
                   :name "foo"
                   :params '("n" "lst")))

И если у меня есть такая функция: [ 1110]

(defun foo-2(lst n)
    (list lst n))

Я могу создать еще один экземпляр, подобный этому:

(defvar func-2 (make-instance 'functions
                   :name "foo-2"
                   :params '("lst" "n")))

Теперь, как мы храним эти экземпляры в базе данных? У нас есть несколько вариантов, но простой и общий пример будет хранить экземпляры в списке. Мы могли бы увеличить сложность или даже создать собственную форму встроенного языка SQL с помощью макросов, но для простоты мы можем просто использовать список и функцию find для создания базы данных make-shift. Вот пример базы данных и двух функций для поиска в этой базе данных по имени функции или параметрам:

(defvar *func-db* nil) ;Create an empty list to store the functions
(push func-1 *func-db*)
(push func-2 *func-db*) ;Push a couple of functions to the DB

(defun find-params (name)
   (func-params
    (find name *func-db*
      :test #'string-equal
      :key #'func-name)))

(defun find-name (param-list)
   (func-name 
    (find param-list *func-db*
      :test #'equal
      :key #'func-params))

Теперь мы можем создать пару функций для поиска параметров функции на основе имени мы ищем или находим имя функции на основе введенных нами параметров. Я буду использовать строки в этом сценарии для простой иллюстрации, но вам, вероятно, следует использовать символы. Вот несколько примеров того, как мы будем искать в БД:

CL-USER> (find-params "foo")
("n" "lst")
CL-USER> (find-params "foo-2")
("lst" "n")
CL-USER> (find-name '("n" "lst"))
"foo"
CL-USER> (find-name '("lst" "n"))
"foo-2"

Именно так мы можем создать временную базу данных в Лиспе. Хорошая книга для чтения - «Практический общий Лисп». Есть бесплатная онлайн-версия, и в этой книге один из главных проектов - создание базы данных MP3. Самый простой пример - использование списка для хранения информации, а затем ее поиск. Если вы хотите сохранить базу данных для дальнейшего использования, вы можете сохранить ее в файл, а затем загрузить, когда захотите использовать ее снова. Этот метод может показаться простым, но я видел, как крупные компании используют его против MySQL. Вы даже можете создать свой собственный встроенный язык SQL для поиска информации, и, поскольку информация хранится в памяти, она может получать результаты даже быстрее, чем MySQL, если вы решили расширить этот проект и создать веб-приложение на Лиспе.

11
задан danmine 5 April 2009 в 18:40
поделиться

2 ответа

Я не думаю так, и я не думаю, что обновленная версия так очень отличалась бы.

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

Статья о низкоуровневых эффектах общих операций в управляемом коде, и это не изменилось очень, так как artice был записан. Новые версии платформы добавили большую функциональность, но она все основывалась на примитивах, который был доступен начиная с C# 1.0.

2
ответ дан 3 December 2019 в 05:14
поделиться

Я не знаю о том, который заменяет это, но книгу, CLR через C# предоставит Вам большое глубокое и соответствующее знание для того, как CLR работает и где это использует много времени и ресурсов.

1
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: