Erlang

Erlang jest dość oryginalnym językiem programowania. Jest to język wybitnie funkcyjny (do tego stopnia iż nie ma w nim pętli), posiada dość nietypową składnie, ale np. nie wymaga deklarowania zmiennych.

Wiele z funkcji języka możemy testować w jego linii poleceń (erl, jednak wiele z nich (np. deklarowanie funkcji) wymaga aby były umieszczone w modułach - w tym celu tworzymy plik nazwamodulu.erl, umieszczamy w nim nasz kod a w linii poleceń wydajemy c(nazwamodulu). co powoduje przebudowanie modułu, po czym możemy korzystać z zdefiniowanych w nim funkcji - nazwamodulu:funkcja(argumenty).

Poniżej prezentuję mój patch (aktualnie dodany już do głównego kodu) umożliwiający przechowywanie wiadomości offline dla użytkowników autoryzowanych przez PAM w serwerze XMPP "ejabberd". Polega on na zastąpieniu trywialnego ciała funkcji "is_user_exists" w module "ejabberd_auth_pam" następującym kodem:

is_user_exists( _User, _Server ) ->
 %% wczytujemy do FileStr plik /etc/passwd dodając na początku pustą linię
 {ok,FileBin}=file:read_file("/etc/passwd").
 Tmp=binary_to_list(FileBin).
 FileStr=string:concat("\n", Tmp).

 %% tworzymy RegExp dodając do zmiennej napisowej _User
 %% znak nowej linii na początku i : na końcu
 Tmp2=string:concat("\n", _User).
 RegExp=string:concat(Tmp2, ":").

 %% jeżeli w FileStr wystąpiło wyrażenie RegExp
 %% zwracamy true w przeciwnym razie false
 case regexp:match(FileStr, RegExp) of
   {match, _, _}  ->
       true;
   _ ->
       false
 end.

Nie jest to rozwiązanie eleganckie (odwołania do /etc/passwd to nie PAM), ale w większości wystarczające. Kod ten pokazuje korzystanie z plików i napisów w erl'angu. Obrazuje również zdefiniowanie funkcji przyjmującej dwa argumenty i zwracającej wartość true lub false, deklaracja ciała funkcji następuje po ->, a kończy się kropką.

W ramach serwisu opublikowane jest kilka patchy mojego autorstwa do serwera "ejabberd", który stworzony jest właśnie w erlangu - zachęcam do zapoznania się z nimi jako przykładami programowania w tym języku - "ejabberd_log_offline_message.diff" (łatka stanowiąca fragment system powiadomień XMPP/SMTP, pokazuje obsługę plików, operacje na napisach, a także tworzenie katalogu i formatowanie czasu), JID aliases (zestaw łatek implementujących aliasy JID, pokazuje komunikację z zewnętrzną aplikacją, instrukcję warunkowe, tworzenie funkcji i zwracanie z nich wyników.

Zobacz w Sieci: dokumentacja języka.



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/more/erlang) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2015-10-10 11:34:52 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).