English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Обсуждая производительность, нужно учитывать следующие моменты по Erlang.
Funs очень быстр −В R6B Funs был赋予了自己的 тип данных, и в R7B был оптимизирован.
Использование оператора ++−Нужно правильно использовать этот оператор. Вот пример неправильного выполнения операции ++.
-module(helloworld). -export([start/0]). start() -> fun_reverse([H|T]) -> fun_reverse(T) ++ [H]; fun_reverse([]) -> [].
Когда оператор ++ копирует свой левый операнд, результат будет повторно копироваться,从而导致 двойную сложность.
Использование строк−Если не обращаться с ними правильно, обработка строк может быть медленной. В Erlang вам нужно больше думать о том, как использовать строки, и выбирать подходящее представление. Если вы используете регулярные выражения, используйте модуль re из STDLIB вместо устаревшего модуля regexp.
BEAM — это виртуальная машина bytecode на основе стека−BEAM — это регистровая виртуальная машина. У нее есть 1024 виртуальных регистра, которые используются для хранения временных значений и передачи параметров при вызове функции. Переменные, которые должны оставаться в живых после вызова функции, сохраняются в стеке. BEAM — это интерпретатор кода на струнах. Каждая команда напрямую указывает на слово executable c-код, что делает инструкцию очень быстрой.