基本的なタむプずそれらの操䜜。 パヌトIデヌタ型、サむズ、制限。

任意の蚀語のビルディングブロックは、䜜業に䜿甚できる基本デヌタ型です。 それらを知るこずで、この関数たたはその関数が返すこの倉数たたはその倉数に栌玍されおいるものを垞に理解できたす。 デヌタに察しおどのようなアクションを実行できたすか。 これがベヌスです。 したがっお、これはたさにこの蚘事で特に泚目したいものであり、特にバむナリデヌタを扱う䟋でもありたす。

この資料は䞻に、Erlang-eで曞き始めたばかりの人、たたは曞き始めたい人を察象ずしおいたす。 しかし、私は蚀語のこの偎面を完党にカバヌしようずしたので、この文章がより䞊玚の読者に圹立぀こずを願っおいたす。

最初の材料は3぀の郚分に分割する必芁がありたした。この基本的な蚀語では、基本的な皮類を䜜成する方法ず、各皮類の消費リ゜ヌスを怜蚎したす。

゚ントリヌ


そもそも、カルマを高め、この蚘事をハブに掲茉する機䌚を䞎えおくれたGoogleのロシア語Erlangメヌリングリストの参加者に深く感謝したいず思いたす。

プレれンテヌション䞭に、Erlangのコマンドシェルシェルからサンプルが提䟛されたす。 したがっお、䜜業の簡単な原則を孊ぶ必芁がありたす。 シェル内の各コマンドはコンマで区切られおいたす。 同時に、それはたったく問題ではなく、セットは1行たたは耇数行で䜜成されたす。

1> X=1, Y = 2,
1> Z = 3,
1> S=4.
4

入力の完了ず実行の開始ぞのポむンタはピリオドです。 この堎合、シェルは最埌のコマンドで返された倀を衚瀺したす。 䞊蚘の䟋では、倉数Sの倀が返されたす。開始されたすべおの倉数の倀は蚘憶され、Erlangで開始された倉数の倀を再定矩できないため、オヌバヌラむドしようずするず゚ラヌになりたす。

2> Z=2.
** exception error: no match of right hand side value 2

したがっお、珟圚の䜜業セッションでシェルが倉数の倀を「忘れる」ようにする必芁がある堎合は、f関数を䜿甚できたす。 匕数なしで呌び出され、初期化されたすべおの倉数を削陀したす。 匕数ずしお倉数名を指定するず、それだけが削陀されたす倉数のリストを転送するこずはできたせん

3> f(Z).
ok
4> X = 4.
** exception error: no match of right hand side value 4
5> f().
ok
6> X = 4. %,
4

終了するには、単にhaltを入力するか、Crtl + Gナヌザヌむンタヌフェむスを呌び出しおqを入力したすhコマンドはヘルプを衚瀺したす。 シェルでデゞタルデヌタを出力する堎合、それらは10進数に倉換されたす。

提瀺されおいる資料は、珟圚最新のバヌゞョン5.6.5に関連しおいたす。 文字列の゚ンコヌドには、 ISO-8859-1 Latin-1゚ンコヌドが䜿甚されたす。 したがっお、すべおの数倀文字コヌドはこの゚ンコヌドから取埗されたす。 ゚ンコヌドの前半コヌド0〜127はUS-ASCIIコヌドに察応しおいるため、ラテンアルファベットに問題はありたせん。

内郚衚珟ではLatin-1を仮想マシンの「倖郚」で䜿甚するずいう開発者の声明にもかかわらず、これはしばしば完党に明癜ではありたせん。 これは、Erlangがコヌドの圢匏で文字を送受信するために発生したす。 ロケヌルが端末に蚭定されおいる堎合、コヌドは蚭定されたコヌドペヌゞに基づいお解釈され、可胜であれば印刷された文字で衚瀺されたす。 SSHセッションの䟋を次に瀺したす。
# setenv | grep LANG
LANG=
# erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.6.5 (abort with ^G)
1> [255].
"\377"
2> halt().
# setenv LANG ru_RU.CP1251
# erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.6.5 (abort with ^G)
1> [255].
""

さらに、LANG環境倉数に瀺されおいるこずはたったく問題ではありたせん。䞻なこずは、むンストヌルする必芁があるずいうこずです。

1.基本タむプ


蚀語には倚くの基本的なタむプはありたせん。 この番号敎数たたは浮動小数点、アトム、バむナリデヌタ、ビット文字列、関数オブゞェクトJavaScriptに類䌌、ポヌト識別子、プロセス識別子システムのアヌランではなく、プロセスのアヌラン、タプル、リスト。 いく぀かの疑䌌タむプがありたすwrite、boolean、string。 すべおのデヌタ型必ずしも基本ではないは甚語ず呌ばれたす。

1.1番号

2皮類の数倀がサポヌトされおいたす。 浮動小数点数 Float および敎数 Integer 。 䞀般に受け入れられおいる数字の衚蚘圢匏に加えお、2぀の特定の衚蚘法がありたす。

䟋
1> 42.
42
2> $A.
65
3> $\ .
10
4> 2#101.
5
5> 16#1f.
31
6> 2.3.
2.3
7> 2.3e3.
2.3e3
8> 2.3e-3.
0.0023
9>$.
255

出力の数倀は10進数に倉換されるこずを思い出しおください。

メモリの消費ず制限。 党䜓で1぀のマシンワヌドを䜿甚したす。これは、32ビットプロセッサでは32バむト、64ビットプロセッサでは8バむトです。 倧きな敎数の堎合1 ... Nマシンワヌド。 アヌキテクチャに応じお、浮動小数点数はそれぞれ4および3マシンワヌドを占有したす。

1.2リスト

リスト リスト を䜿甚するず、デヌタを1぀の構造にグルヌプ化できたす。 リストは角括匧を䜿甚しお䜜成され、リスト項目はコンマで区切られたす。 リスト項目は任意のタむプにするこずができたす。 リストの最初の芁玠はheadず呌ばれ、残りはtailず呌ばれたす。

1> Var = 5.
5
2> [1,45, atom, Var,"string", $Z, 2#101].
[1,45,atom,5,"string",90,5]
3>List = [1, 9.2, 3], % 1, [9.2, 3]
3>List.
[1,9.2,3]

リストのサむズは、リスト内の芁玠の数に等しくなりたす。 䞊蚘の䟋では、 List倉数の倀はリストであり、リストのサむズは3です。
リストは動的な構造です。 リスト項目を远加および削陀できたす。 仮想マシンの内郚では、リストは単䞀リンクリストの構造であり、特定の凊理機胜を課したすが、その詳现は以䞋のずおりです。

メモリの消費ず制限。 各リストアむテムは、1マシンワヌドアヌキテクチャに応じお4たたは8バむト+アむテムに栌玍されおいるデヌタのサむズを占有したす。 したがっお、32ビットアヌキテクチャでは、 List倉数の倀は1 + 1+1 + 4+1 + 1= 9ワヌドたたは36バむトを占有したす。

1.3文字列

実際、Erlangには行 String はありたせん。 これは、より䟿利な圢匏で敎数のリストを䜜成できる構文糖衣です。 このリストの各項目は、察応する文字のASCIIコヌドです。

1> "Surprise".
"Surprise"
2> [83,117,114,112,114,105,115,101].
"Surprise"
3> "".
""
4> [$,$,$,$,$,$].
""
5> [$, $, $, $, $, $, 1].
[241,242,240,238,234,224,1]

したがっお、仮想マシンは、アむテムコヌドを印刷文字に倉換できるリストを芋るず、その前に行があるこずを理解し、蚘号圢匏で衚瀺したす。 他の倚くの蚀語ずは異なり、Erlangの文字列は二重匕甚笊を䜿甚しお䜜成され、単䞀ではありたせん。 これは、アトムが単䞀匕甚笊を䜿甚しお䜜成されるためです。 制埡文字列は文字列内で蚱可されたす以䞋を参照。

メモリの消費ず制限。 なぜなら 行は敎数のリストであり、各文字はリストの1぀の芁玠であり、文字は8たたは16バむト2マシンワヌドかかりたす。

1.4アトム

Atomは単なるリテラルです。 他の蚀語の定数のようなデゞタル倀ず関連付けるこずはできたせん。 アトムによっお返される倀は、アトム自䜓です。 アトムは小文字で始たり、数字、ラテン文字、アンダヌスコア_、たたは@犬で構成する必芁がありたす。 この堎合、単䞀匕甚笊から省略するこずができたす。 他の文字がある堎合、単䞀匕甚笊を䜿甚しおフレヌム化する必芁がありたす。 二重匕甚笊は、これには適しおいたせん。 行を囲みたす。

䟋
hello
phone_number
'Monday'
'phone number'

文字列および匕甚笊で囲たれたアトムでは、次の゚スケヌプシヌケンスを䜿甚できたす。
シヌケンス
説明
\ b
リタヌンバックスペヌス
\ d
削陀削陀
\ e
゚スケヌプ゚スケヌプ
\ f
ペヌゞフィヌドフォヌムフィヌド
\
改行
\ r
キャリッゞリタヌン
\ s
スペヌス
\ t
氎平タブタブ
\ v
垂盎タブ
\ XYZ、\ YZ、\ Z
8進文字コヌド
\ ^ a ... \ ^ z
\ ^ A ... \ ^ Z
Ctrl + A ... Ctrl + Z
\ '
䞀重匕甚笊
\ "
二重匕甚笊
\\
バックスラッシュ

匕甚笊で囲たれおいないアトムの名前を予玄語にするこずはできたせん。 これらの単語は次のずおりです。
and and Band begin bnot bor bsl bsr bxor case catch cond div end fun not let or orelse query receive rem try when when xor。

メモリの消費ず制限。 宣蚀された各アトムは䞀意であり、そのシンボリック衚珟は、 アトムテヌブルず呌ばれる仮想マシンの内郚構造に栌玍されたす 。 アトムは4バむトたたは8バむト1マシンワヌドを取り、そのシンボリック衚珟を含むアトムテヌブルの芁玠ぞの単なるリンクです。 ガベヌゞコレクションは、Atomテヌブルをクリヌンアップしたせん。 テヌブル自䜓もメモリ空間を占有したす。 255文字のアトムを䜿甚できたす。合蚈で1,048,576個のアトムを䜿甚できたす。 したがっお、255文字のアトムは255 * 2 + 1 * Nマシンワヌドを占有したす。Nはプログラム内のアトムぞの参照の数です。


1.5タプル

タプルはリストのようなもので、芁玠のセットで構成されおいたす。 たた、芁玠の数ず同じサむズですが、リストずは異なり、サむズは固定されおいたす。 タプルは䞭括匧を䜿甚しお䜜成され、その芁玠は任意のデヌタ型にするこずができ、タプルはネストできたす。

 1> {1,2、2110、n、$ r、[1、5]、 "abc"}。
 {1,2,6、n、114、[1,5]、 "abc"}
 2>男= {男、
 2> {名前、「Alexey」}、
 2> {高さ、{メヌトル、1.86}}、
 2> {幎霢、27}}。
 {男性、{名前、「Alexey」}、{高さ、{メヌトル、1.86}}、{幎霢、27}}
 3> Man2 = {man、
 3> {名前、「Ivan」}、
 3> {高さ、{meter、1.80}}、
 3> {幎霢、25}}。
 4> [Man、Man2]。
 [{man、{name、 "Alexey"}、{height、{meter、1.86}}、{age、27}}、
  {man、{name、 "Ivan"}、{height、{meter、1.8}}、{age、25}}]
 5> {20、100}。
 {20,100}。

タプルは、構造に特定のデヌタを含めるだけでなく、それらを蚘述するこずもできるずいう点で䟿利です。 これは、固定タプルず同様に、テンプレヌトに非垞に効果的に適甚するこずを可胜にしたす。 最初の芁玠でタプルを䜜成するずきは、タプルの本質を蚘述するアトムを蚘述するこずをお勧めしたす。 RDBMSずの類䌌性を匕き出す堎合、リストはテヌブルであり、テヌブルの各行はリストの芁玠であり、この芁玠にあるタプルは察応する列の特定のレコヌドです。

メモリの消費ず制限。 タプルは2マシンワヌド+デヌタ自䜓を保存するのに必芁なサむズを取りたす。 たずえば、5行目のタプルは、32アヌキテクチャで2 + 1+2 + 1= 6マシンワヌドたたは24バむトを占有したす。 タプルの芁玠の最倧数は67 108 863です。


1.6蚘録

レコヌドは実際には構文糖の別の䟋であり、内郚衚珟のタプルずしお保存されたす。 コンパむル段階のレコヌドはタプルに倉換されるため、シェルでレコヌドを盎接䜿甚するこずはできたせん。 ただし、rd関数を䜿甚しおレコヌド構造を宣蚀できたす1行目。 レコヌド宣蚀は垞に2぀の芁玠で構成されたす。 最初の芁玠は、 レコヌド名ず呌ばれるアトムでなければなりたせん。 2番目は垞にタプルで、空の堎合もありたす。その芁玠はfield_name - field_valueのペアであり、フィヌルド名はアトムであり、倀は有効なタむプレコヌド11行目を含むでなければなりたせん。


レコヌド行2に基づいおタプルを䜜成するための挔算子は、ラティスの埌にレコヌド名ずフィヌルド倀を持぀タプルが続き、堎合によっおは空ですが、レコヌド蚘述で宣蚀されおいないフィヌルド名を持぀こずはありたせん。

1> rd(person, {name = "", phone = [], address}).
person
2> #person{}.
#person{name = [],phone = [],address = undefined}
3> #person{phone=[1,2,3], name="Joi", address="Earth"}.
#person{name = "Joi",phone = [1,2,3],address = "Earth"}

タプルに察するレコヌドの利点は、芁玠の凊理がフィヌルドの名前によっお実行されるこずです名前はアトムでなければならず、レコヌドの説明、行1で宣蚀する必芁がありたす。 したがっお、割り圓おの順序は重芁ではありたせん。最初の芁玠に名前、電話、たたは䜏所があるこずを芚えおおく必芁はありたせん。 フィヌルドの順序を倉曎し、新しいフィヌルドを远加できたす。 たた、察応するフィヌルドが指定されおいない堎合、デフォルト倀を割り圓おるこずができたす。

4> rd(person, {name="Smit", phone}).
person
5> P = #person{}.
#person{name = "Smit",phone = undefined}
6> J = #person{phone = [1,2,3], name = "Joi"}.
#person{name = "Joi",phone = [1,2,3]}
7> P#person.name.
"Smit"
8> J#person.name.
"Joi
9> W = J#person{name="Will"}.
#person{name = "Will",phone = [1,2,3]}

゚ントリを䜜成するずきに行4、デフォルト倀が定矩されおいない堎合フィヌルド電話、その倀は未定矩のアトムず等しくなりたす。 7行目ず8行目に説明されおいる構文を䜿甚しお、レコヌドを䜿甚しお䜜成された倉数の倀にアクセスできたす。倉数の倀を新しい倉数にコピヌできたす9行目。 さらに、フィヌルドの倀が定矩されおいない堎合、完党なコピヌが取埗され、定矩されおいる堎合、察応するフィヌルドは新しい倉数で再定矩されたす。 これらの操䜜はすべお、レコヌドの定矩にも叀い倉数のフィヌルドの倀にも圱響したせん。
個人的には、これはクラスの説明ずむンスタンス化を非垞に思い出させたすが、これはタプル倉数を栌玍する単なる方法であるこずをもう䞀床匷調しおいたす。

10> rd(name, {first = "Robert", last = "Ericsson"}).
name
11> rd(person, {name = #name{}, phone}).
person
12> P = #person{name = #name{first="Robert",last="Virding"}, phone=123}.
#person{name = #name{first = "Robert",last = "Virding"},
phone = 123}
13> First = (P#person.name)#name.first.
"Robert"

䞊蚘の䟋は、ネストされた゚ントリず内郚芁玠のアクセス構文を瀺しおいたす。


1.7バむナリデヌタずビット文字列

バむナリタむプ Binaries ずビット文字列 ビット文字列 の䞡方により、バむナリコヌドを盎接操䜜できたす。 バむナリタむプずビット文字列の違いは、バむナリデヌタは敎数バむトのみで構成される必芁があるこずです。 それらのビット数は8の倍数です。 ビット文字列を䜿甚するず、ビットレベルでデヌタを操䜜できたす。 基本的に、バむナリ型はビット文字列の特殊なケヌスであり、そのビット数は8の倍数です。 構造を蚘述しおデヌタを䜜成し、テンプレヌトでこのタむプを䜿甚できたす。 バむナリデヌタは次の構造で蚘述されたす。

<<E1, E2, ... En>>

このような構造の別の芁玠は、 セグメントず呌ばれたす 。 セグメントは、バむナリデヌタの論理構造を衚し、任意の数のビット/バむトで構成されたす。 これは、テンプレヌトで䜿甚するず非垞に匷力で䟿利なツヌルになりたすこのようなアプリケヌションの䟋に぀いおは、第3郚で説明したす。

1> <<20, $W, 50:8, "abc">>.
<<20,87,50, "abc" >>
2> <<400>>.
<<144>>
3> <<400:16>>.
<<1,144>>
4> Var = 30.
30
5> <<(Var + 30), (20+5)>>.
<<60,25>>

理由を理解するために、2行目にバむナリデヌタを䜜成した結果、予想される400ではなく、144぀たり、出力時にすべおのデゞタルデヌタを10進数に倉換するシェルを忘れおいないため、10010000が埗られたしたセグメント蚘述のビット構文を怜蚎しおください。

 Ei =倀|
     倀サむズ|
     倀/ TypeSpecifierList |
     倀サむズ/ TypeSpecifierList

完党なセグメント蚘述フォヌムは、 倀 、 サむズ 、および修食子  TypeSpecifierList で構成されたす。 さらに、サむズず指定子はオプションであり、指定しない堎合はデフォルト倀を䜿甚したす。

コンストラクタヌの倀には、数倀敎数たたは浮動小数点、ビット文字列、たたは文字列を䜿甚できたす。これらは、実際には敎数のリストです。 ただし、同時に、セグメントの倀を偶数のリストにするこずはできたせん。 コンストラクタ内では、文字列はリストではなく敎数ぞの文字ごずの倉換のための構文糖衣です。 ぀たり ゚ントリ<<“ abc” >>は<< [$ a、$ b、$ c] >>ではなく、<< $ a、$ b、$ c >>の構文糖です。
テンプレヌト内では、倀はリテラルたたは未定矩の倉数にするこずができたす。 ネストされたテンプレヌトは蚱可されたせん。 匏はValueでも䜿甚できたすが、この堎合、セグメントを括匧で囲む必芁がありたす5行目。

サむズはセグメントのサむズを単䜍 Unit 、それらに぀いおは少し䜎いで決定し、数倀でなければなりたせん。 Sizeのデフォルト倀はタむプ Type 、以䞋を参照 Valueに䟝存したすが、明瀺的に蚭定するこずもできたす。 敎数の堎合、これは8、64の浮動小数点数、バむナリはバむト数に察応し、ビット文字列はビット数に察応したす。 ビット単䜍の合蚈セグメントサむズは、 Size * Unitずしお蚈算できたす。
テンプレヌトで䜿甚する堎合、 Size倀は明瀺的に蚭定する必芁があり7行目、残りのデヌタが含たれるため、最埌のセグメントのみに蚭定するこずはできたせん必芁な文字数の長さを指定せずに、開始文字から行末たでの行を読み取るのず同様です。

6> Bin = <<30>>.
<<30>>
7> <<X:2, Y:3, Z/bits>> = Bin,
8> Z. % 3 , 110
<<6:3>>


指定子  TypeSpecifierList は、ハむフンで区切られ、ランダムな順序で曞き蟌たれた絞り蟌みオプションのリストで構成されたす 読みやすくするために、ナニットを最埌に蚘述するこずをお勧めしたす。

したがっお、2行目の䟋はより明確になるはずです。 Erlangでは、異なるサむズを明瀺的に指定しない限り、デフォルトのバむナリデヌタコンストラクタヌは1バむトに等しいセグメントを䜜成したす。 したがっお、行2には、 <<400:8/integer-unsigned-big-unit:1>>ずいう圢匏のレコヌドが含たれたす。これは、仮想マシンによっお最埌の1バむトに切り捚おられたす。 ネットワヌクバむトシヌケンスでは、倀が10010000の最埌のバむト、぀たり 144から10進倀。 シヌケンスを少し指定するず、最埌は00000001バむトになりたす。 1から10進倀。 セグメントが倀を゚ンコヌドできる堎合、切り捚おは発生したせん。

9> <<400:16>>.
<<1,144>>
10> <<400:16/little>>.
<<144,1>>
11> <<400:8/unit:2>>.
<<1,144>>

ビット構文を䜿甚するず、同じデヌタをさたざたな方法で蚘述できたす行9ず11は同じ2バむト構造を蚘述しおいたす。

メモリの消費ず制限。 3 ... 6ビット+盎接デヌタ自䜓。 32番目のアヌキテクチャでは、536,870,911バむトの操䜜が可胜です。64ビットシステムでは、2,305,843,009,213,693,951バむトが可胜です。 倧きな構造を凊理するには、凊理関数を自分で䜜成する必芁がありたす。
ご泚意 ゚ントリB=<<1>>は、 B =<<1>>ずしお解釈されB =<<1>> ぀たり、Bは<1 >>以䞋です。 正しいフォヌムにはスペヌスが含たれたす B = <<1>> 。

1.8リンク

参照はmake_ref / 0によっお䜜成される甚語であり、䞀意ず芋なすこずができたす。 このようなデヌタ構造に䞻キヌずしお䜿甚できたす。

メモリの消費ず制限。 32ビットアヌキテクチャでは、珟圚のロヌカルノヌドではリンクごずに5マシンワヌド、リモヌトノヌドでは7ワヌドが必芁です。 それぞれ64ワヌド、4ワヌド、6ワヌド。 さらに、リンクはノヌドテヌブルに関連付けられおおり、 RAMも消費したす。

1.9ブヌル

ブヌル型は擬䌌型です 実際、これらはtrueずfalseの 2぀の原子にすぎたせん。


1.10関数オブゞェクト

楜しい
     Pattern11、...、Pattern1N[GuardSeq1の堎合]->
         Body1;
     ...;
     PatternK1、...、PatternKN[GuardSeqKの堎合]->
        ボディク
終わり

関数宣蚀はfunキヌワヌドで始たり、 endキヌワヌドで終わりたす。 パラメヌタヌのセットは、括匧内のコンマを介しお枡されたす。各パラメヌタヌはテンプレヌトです。 入力パラメヌタヌがパタヌンに䞀臎する堎合、䞀連の呜什が蚘号->から;に実行されたす。 ぀たり 本質的に、入力匕数は入力フィルタヌずしお機胜したす。 耇数のパタヌンが䞀臎しない堎合、゚ラヌメッセヌゞが生成されたす。

1> Fun = fun({centimetre, X}) -> {meter, X/100} end.
#Fun<erl_eval.6.13229925>
2> Fun(10).
** exception error: no function clause matching
erl_eval:'-inside-an-interpreted-fun-'(10)
3> Fun({centimetre, 10}).
{meter,0.1}

ただし、関数の定矩が異なる堎合、2行目の゚ラヌは発生したせん。

 4> f。
わかった
 5> Fun = fun{centimetre、X}->
 5> {meter、X / 100};
 5>X->
 5> X / 100
 5>終了。
 #Fun <erl_eval.6.13229925>
 6>楜しい10。
 0.1

したがっお、入力匕数は、関数で宣蚀されたものず同じ型でなければなりたせん。 whenキヌワヌドの埌およびbefore- >には、結果がtrueたたはfalseである匏を含めるこずができたす。 匏がtrueを返す堎合、関数の本䜓が実行されたす。すべおのチェック䞭に関数の本䜓が実行されなかった堎合぀たり、関数が䜕も返さなかった堎合、゚ラヌが生成されたす行12。関数内の倉数はロヌカルです。

7> F = funXwhen X <0->
7> X + 1;
7>XX> 0の堎合->
7> X-1;
7>0-> 0
7>終了。
#Fun <erl_eval.6.13229925>
8> F5。
 4
9> F-5。
 -4
10> F0。
 0
11> X = funYY> 0-> Y + 1 endの堎合。
#Fun <erl_eval.6.13229925>
12> X-5。
**䟋倖゚ラヌerl_evalに䞀臎する関数句はありたせん '-inside-an-interpreted-fun-'-5
13> X5。 
 6


関数はネストでき、結果は内郚の倖郚関数によっお返されたすメモリの消費ず制限。この関数は、9〜13マシンワヌド+環境のサむズを取りたす。さらに、関数は、メモリも占有する関数のテヌブルに関連付けられおいたす。

14> Adder = fun(X) -> fun(Y) -> X + Y end end.
#Fun<erl_eval.6.72228031>
15> Add6 = Adder(6).
#Fun<erl_eval.6.72228031>
16> Add6(10).
16



1.11プロセスID

Erlangプロセスの䜜成時に、プロセス識別子Pidは関数を返しspawn/1,2,3,4, spawn_link/1,2,3,4 and spawn_opt/4たす。プロセスず察話するための䟿利なメカニズムは、デゞタル識別子ではなく名前でアクセスするこずです。したがっお、Erlangでは、シンボリック名をPidに関連付けお、その名前を䜿甚しおプロセスにメッセヌゞを送信できたす。メモリ消費ず制限。このタむプは、ロヌカルノヌドに1マシンワヌド、リモヌトノヌドに5マシンワヌドを取りたす。さらに、この関数は、メモリも占有するノヌドテヌブルに関連付けられたす。

1> spawn(m, f, []).
<0.51.0>





1.12ポヌトID

ポヌト識別子ポヌト識別子関数が返すopen_port/2あなたがポヌトを䜜成したす。ポヌトは、Erlangプロセスず倖郚の䞖界ずの盞互䜜甚の基本的なメカニズムです。倖郚プログラムず通信するためのバむト指向のむンタヌフェヌスを提䟛したす。ポヌトを䜜成したプロセスは、ポヌトの所有者たたは接続されたプロセスず呌ばれたす。ポヌトに。ポヌトを通過するすべおのデヌタは、ポヌトの所有者も通過したす。プロセスが完了するず、ポヌト自䜓ず倖郚プログラムも終了するはずです。倖郚プログラムは、暙準入出力からデヌタを送受信する別のオペレヌティングシステムプロセスである必芁がありたす。すべおのErlangプロセスはポヌトを介しおデヌタを送信できたすが、ポヌトの所有者のみがポヌトを介しおデヌタを受信できたす。ポヌト識別子およびプロセス識別子には、蚘号名を登録できたす。

メモリ消費ず制限。このタむプは、ロヌカルノヌドに1マシンワヌド、リモヌトノヌドに5マシンワヌドを取りたす。さらに、関数はノヌドテヌブルずポヌトテヌブルに関連付けられおおり、これもメモリを消費したす。


PSこれに぀いおは、基本型の説明で最初の郚分を終了したす。その瞬間たで、私が継続を取り䞊げるたで、ただ時間がない人には、ドキュメント「Getting Started with Erlang」の章の翻蚳である「Getting Started with Erlang」に粟通するこずを匷くお勧めしたす。

Source: https://habr.com/ru/post/J52493/


All Articles