Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

User avatar
Privet
Администратор
Posts: 17504
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by Privet »

Попались какие-то файлы. Похоже, описание протоколов.
Привет.
User avatar
Privet
Администратор
Posts: 17504
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by Privet »

Пример .hrl - видимо header

Code: Select all

-type(trie_node_id() :: binary() | atom()).

-record(trie_node,
        { node_id        :: trie_node_id(),
          edge_count = 0 :: non_neg_integer(),
          topic          :: binary() | undefined,
          flags          :: [retained | static]
        }).

-record(trie_edge,
        { node_id :: trie_node_id(),
          word    :: binary() | atom()
        }).

-record(trie,
        { edge    :: #trie_edge{},
          node_id :: trie_node_id()
        }).
Привет.
User avatar
Privet
Администратор
Posts: 17504
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by Privet »

Это отрывок .erl

Code: Select all

-include("emqttd_internal.hrl").

%% API Function Exports
-export([start_link/5]).

%% gen_server Function Exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
         terminate/2, code_change/3]).

-define(PING_DOWN_INTERVAL, 1000).

-record(state, {pool, id,
                node, subtopic,
                topic_suffix       = <<>>,
                topic_prefix       = <<>>,
                mqueue             :: emqttd_mqueue:mqueue(),
                max_queue_len      = 10000,
                ping_down_interval = ?PING_DOWN_INTERVAL,
                status             = up}).

-type(option() :: {topic_suffix, binary()} |
                  {topic_prefix, binary()} |
                  {max_queue_len, pos_integer()} |
                  {ping_down_interval, pos_integer()}).

-export_type([option/0]).

%%--------------------------------------------------------------------
%% API
%%--------------------------------------------------------------------

%% @doc Start a bridge
-spec(start_link(any(), pos_integer(), atom(), binary(), [option()]) ->
    {ok, pid()} | ignore | {error, term()}).
start_link(Pool, Id, Node, Topic, Options) ->
    gen_server2:start_link(?MODULE, [Pool, Id, Node, Topic, Options], []).

%%--------------------------------------------------------------------
%% gen_server callbacks
%%--------------------------------------------------------------------

init([Pool, Id, Node, Topic, Options]) ->
    ?GPROC_POOL(join, Pool, Id),
    process_flag(trap_exit, true),
    case net_kernel:connect_node(Node) of
        true -> 
            true = erlang:monitor_node(Node, true),
            Share = iolist_to_binary(["$bridge:", atom_to_list(Node), ":", Topic]),
            emqttd:subscribe(Topic, self(), [local, {share, Share}, {qos, ?QOS_0}]),
            State = parse_opts(Options, #state{node = Node, subtopic = Topic}),
            MQueue = emqttd_mqueue:new(qname(Node, Topic),
                                       [{max_len, State#state.max_queue_len}],
                                       emqttd_alarm:alarm_fun()),
            {ok, State#state{pool = Pool, id = Id, mqueue = MQueue},
             hibernate, {backoff, 1000, 1000, 10000}};
        false -> 
            {stop, {cannot_connect_node, Node}}
    end.
Привет.
User avatar
Privet
Администратор
Posts: 17504
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by Privet »

Нашёл. Это Erlang. Что сие за новшество?
Erlang has built-in support for concurrency, distribution and fault tolerance.
Привет.
User avatar
geek7
Уже с Приветом
Posts: 20318
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by geek7 »

Privet wrote: 05 Jun 2019 07:48 Нашёл. Это Erlang. Что сие за новшество?
Erlang has built-in support for concurrency, distribution and fault tolerance.
функциональный. родом, кажется, из телекома . ещё в банках пытаются использовать. Знаю в РФ ребят делавших на нём что-то в телекоме, потом телеком+медицинское оборудование.
сам на функциональных не программировал (слегка игрался со скалой), но впечатление: при должном переформатировании мозгов, хорошо делать стейт-автоматы - типа при таких входных, получаем такой-то стейт. и соответственно плохо приспособленны для обработки эвентов.
Слышал, что у начинающих программеров с не переформатироваными мозгами обычно получается лажа - типа делают операции с массивами не учитывая, что каждая операция создаёт новый итп, зато профи на подходящей задаче решают гораздо более эффективно и компактно чем процедурными\OO
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
User avatar
mikeG
Уже с Приветом
Posts: 8470
Joined: 02 Aug 2003 01:32
Location: SPb->SFBA

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by mikeG »

Erlang - экзотический язык из 80х.
WhatsApp на нем написан.
User avatar
Privet
Администратор
Posts: 17504
Joined: 03 Jan 1999 10:01
Location: Redmond, WA

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by Privet »

geek7 wrote: 05 Jun 2019 13:14 ... хорошо делать стейт-автоматы - типа при таких входных, получаем такой-то стейт. и соответственно плохо приспособленны для обработки эвентов.
...
Т.е. приспособлен для создания конечных автоматов, но переход между состояниями и происходит по событиям. Событие (нажатие клавиши) -> входные данные (код клавиши) -> переход в новое состояние. Разве не так? Или там другая терминология?
Есть в нём механизмы синхронизации? Если он предназначен для программирования параллельных процессов, то они должны как-то синхронизироваться между собой.
Непонятно насчёт непроцедурности. Даже в примере видно, что там описывается некая процедура Init.

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

Судя по коду, там описываются какие-то протоколы, что тоже подходит под Ваше описание, но в протоколах тоже не обойтись без событий, как говорят мне мои мозги.
Привет.
voyager3
Уже с Приветом
Posts: 1951
Joined: 11 Mar 2015 01:12

Re: Кто знает на каком языке написаны файлы с расширениями .erl и .hrl?

Post by voyager3 »

Не процедура, а функция Init. Erlang - функциональный язык с прологообразным синтаксисом и паттерн-матчингом. Реализация позволяет создавать 100500 "потоков", которые общаются между собой посредством сообщений, и которые выполняются значительно меньшим числом настоящих потоков. Жить потоки могут как на том же хосте, так и на других.
Естественно, побочные эффекты у "функций" ввода-вывода есть, но так у любого практического функционального языка.

Return to “Вопросы и новости IT”