Эликсир - Библиотеки

Elixir обеспечивает отличную совместимость с библиотеками Erlang. Давайте кратко обсудим несколько библиотек.

Двоичный модуль

Встроенный модуль Elixir String обрабатывает двоичные файлы в кодировке UTF-8. Двоичный модуль полезен, когда вы имеете дело с двоичными данными, которые не обязательно закодированы в UTF-8. Давайте рассмотрим пример, чтобы лучше понять двоичный модуль -

# UTF-8
IO.puts(String.to_char_list("Ø"))

# binary
IO.puts(:binary.bin_to_list "Ø")

Когда вышеуказанная программа запускается, она дает следующий результат -

[216]
[195, 152]

Приведенный выше пример показывает разницу; модуль String возвращает кодовые точки UTF-8, а: binary работает с байтами необработанных данных.

Крипто-модуль

Модуль шифрования содержит функции хеширования, цифровые подписи, шифрование и многое другое. Этот модуль не является частью стандартной библиотеки Erlang, но включен в дистрибутив Erlang. Это означает, что вы должны указывать: crypto в списке приложений вашего проекта всякий раз, когда вы его используете. Давайте посмотрим на пример использования модуля криптографии -

IO.puts(Base.encode16(:crypto.hash(:sha256, "Elixir")))

Когда вышеуказанная программа запускается, она дает следующий результат -

3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB

Модуль Digraph

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

digraph = :digraph.new()
coords = [{0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}]
[v0, v1, v2] = (for c <- coords, do: :digraph.add_vertex(digraph, c))
:digraph.add_edge(digraph, v0, v1)
:digraph.add_edge(digraph, v1, v2)
for point <- :digraph.get_short_path(digraph, v0, v2) do 
   {x, y} = point
   IO.puts("#{x}, #{y}")
end

Когда вышеуказанная программа запускается, она дает следующий результат -

0.0, 0.0
1.0, 0.0
1.0, 1.0

Математический модуль

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

# Value of pi
IO.puts(:math.pi())

# Logarithm
IO.puts(:math.log(7.694785265142018e23))

# Exponentiation
IO.puts(:math.exp(55.0))

#...

Когда вышеуказанная программа запускается, она дает следующий результат -

3.141592653589793
55.0
7.694785265142018e23

Модуль очереди

Очередь - это структура данных, которая эффективно реализует (двусторонние) очереди FIFO (first-in first-out). В следующем примере показано, как работает модуль очереди -

q = :queue.new
q = :queue.in("A", q)
q = :queue.in("B", q)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)
{{:value, val}, q} = :queue.out(q)
IO.puts(val)

Когда вышеуказанная программа запускается, она дает следующий результат -

A
B