На сколько, всё таки, выразительный язык, да.
case S#s.status of
[_|_] ->
send_error(S);
Очередной кошмарный блог на WordPress
Posts tagged ‘erlang’
case S#s.status of
[_|_] ->
send_error(S);
Есть для меня в эрланге один момент, который я до сих пор понять не могу. А именно — если есть списки, зачем вводить в язык еще одну сущность — кортежи? Ну или наоборот, если сначала сделали кортежи, то зачем потом добавляли списки? Нет, я понимаю чем работа с ними отличается в эрланге в принципе, только такое ощущение, что убрать это различие — несколько переписанных BIF.
К чему тяжело привыкнуть в эрланге, это к принципу «дай ему умереть».
P.S. А вобще этопросто проверка кросспоста в FB.
Далее интересно только тем, кто пишет на эрланге.
ufm@imac:~$ erl
Erlang (BEAM) emulator version 5.6.5 [source] [smp:2] [async-threads:0] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> A=[255||X<-lists:seq(1,20000000)],ok.
ok
2> B=list_to_binary(A).
<<»\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377″…>>
3>
3> byte_size(B).
20000000
4> byte_size(B).
20000000
5> byte_size(B).
20000000
Crash dump was written to: erl_crash.dump
eheap_alloc: Cannot allocate 912262800 bytes of memory (of type «heap»).
Aborted
L=lists:seq(1,256).
Ага. Список. От 1 до 256. И как я 256 собрался в binary переводить?
Но что прям так плохо будет — не ожидал.
L=lists:seq(1,20000000) — выжирает память как не в себя.
Вот это — тоже весело:
1> L=lists:seq(1,256).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29|...]
2> B=list_to_binary(L).
** exception error: bad argument
in function list_to_binary/1
called as list_to_binary([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28|...])
ну и напоследок:
34> f().
ok
35> L=lists:seq(1,256).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29|...]Crash dump was written to: erl_crash.dump
eheap_alloc: Cannot allocate 1425410620 bytes of memory (of type «heap»).
Aborted
что самая распространенная ошибка при программировании на erlang — передача в функцию не того параметра. Ну по крайней мере эта ошибка распространена сейчас среди меня. Что я имею в виду: допустим обрабатываем по цепочке данные. Как бы я это писал на Цэ:
tmt = 5;
tmt = fun1(tmt);
tmt = fun2(tmt);
tmt = fun3(tmt);
Как это приходится писать на эрланге
Tmt = 5,
Tmt1 = fun1(Tmt),
Tmt2 = fun2(Tmt1),
Tmt3 = fun3(Tmt2).
В результате достаточно в третьей строчке ошибиться и написать Tmt (при копипейстинге из другого места, реорганизации кода или просто опечататься) и ловить эту ошибку придется достаточно долго. Особенно когда переменная Tmt1 используется между функциями fun1 и fun2 — компилятор даже предупреждения не даст, что переменная нигде не используется.
Хотя, конечно, возможно это просто у меня с непривычки.
P.S. А постоянное слежение за тем, когда писать ‘,’ когда ‘;’ а когда вобще ничего — это отдельная песня. :)
Erlang (BEAM) emulator version 5.6.5 [source] [smp:2] [async-threads:0] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> c(«/home/ufm/src/tmt», [{outdir, "/home/ufm/src/"}]).
{ok,tmt}
2> tmt:pow(2,16).
65536
3> tmt:pow(2,2).
4
4> tmt:pow(1024,1024).
352497141210838265713481483980028154643914213439664710603913826057310702768547493650483
302964736638624569681553952983739732590494759431136198883386731161336668147068707652719
076562056460186083699855587212676703217390319386338332818891926201584265318069231442392
697268763999519611919803480232917034723057637824103945897589345856311110781204353030326
888187514464352913713571717556327753629326947950763134366874696380043276893902467353218
558306108568659249137608267637760032658517165573342106422773434757577997804990215598224
124342750870843172934551295704067075900020717046731355275335432173559875681076975779467
857964124560483600729656168710248662446500810590681830381345185142229871868373945980198
595129936003792361901975768389050807333599890946870089994162477220200619925599314018723
573797084885850036669659306097304307741074074940180653658450770943205347006923544001698
241315783891536569167546822524255627428950268220861122361857689319404333240786923864636
423780292915823845509040122842652771246674528169856593374975809915925102014797665008774
278345666191563143881075857435462890675510524340756781953453733639195713232101136226155
117651343296272079557936053768928759383576728708813056793055212933599754278019219975348
914740908681134673577843597833830910857171008072284250312267769851973643594046830415066
139436466661994548993636858018487767296858378032282161138338547424434092214804502325631
304177096253207949716727377373859839755200477399781651249069168579319609024073978415366
576503787580124091572059395130853242824392901089090690365154306903599631529865877499305
168806703261450369876070529616967815564185509662018228218579780200625368240156976209572
227380655388321870974098595026691965890259611994487589973737929731917233355497723948788
740508545327859224758228364037939866231931740209314323814184370227604126822763829893548
396254532412898071082609051342346791309548675704473545497601746910070785284527450279949
438532294805445123688313787611196816167193276373081423151051205287046835151820383202250
786653139117317493642556212844343049454372146094060086405209720295099554355680948888157
014704194108891565239711821728144232741409554280705943283816670482867719728577034355258
035447078345677740272066141434199824101092619306983110108578748668407438514728576453309
291695484037510844947258937293554504737710599868010583420219027353676279009748723681378
389963973798981614548259709107328582027812829739376428479733818386729806933990394293426
130015951489680820100160610223162428423676727412654054345531072966235596044133263521405
296181711754506578842550993346187227316979201855824371823913976733011681606825166392147
065669814659617313748089491317423647529930783263677141170014042109302515381324422193350
726720968651846913030271569624397770537072865839497640551512918164025464624527191347971
790992102335775962779256460318241722748740845621134400433973951910654736207171042506860
408965809287008425939191732838445314709522056008744823024885238670745329077812649908653
518446848070122080391082875645348545004863915388760636114766656202302948114683518353740
72060530215907909311281816131942219776
Надо было по мимо «равно» (==), «строго равно» (=:=), «не равно» (/=) и «строго не равно» (=/=) ввести еще
«мамой клянусь равно», «что-то типа», «даже рядом не лежало с» и «в общем то по барабану».