sanırım son 5 yıldır “ah zamanım olsa da erlang yazsam” diyorum. sonunda bugün oturup advent of code‘un ilk bulmacasını erlang ile çözmeye karar verdim.
erlang hakkındaki ilk izlenimlerim:
- erlang shell’den
Ctrl-D
ile değil,Ctrl-C
ile çıkılıyor. benim aşina olduğum aşağıda Julia Evans‘ın da bahsettiği davranış (tüm thread için link):
- erlang’ta for veya while gibi döngüler yok. onun yerine rekürsif fonksiyonlar yazmak gerekiyor:
find_needle(Hay, Needle) ->
case Hay of
[] ->
not_found;
[Head | Rest] ->
if Head == Needle ->
Head;
true ->
find_needle(Rest, Needle)
end
end.
- kodun görüntüsü çok hoşuma gitti diyemem ama alışmak lazım tabii:
- yeni bir programlama dili ile kod yazmaya başlamak LLM ile çok hızlı bir süreç olabilir ama insan, öğrendiği şeyler doğru mu yanlış mı bilemiyor. idiomatik erlang için biraz kod okumam lazım.
- ben kodu
erlc
ile derleyip derleyip çalıştırdım ama sanırım Eshell’i kullansam daha hızlı itere edebilirim. henüz Eshell’de nasıl çalışmam lazım pek anlayamadım. - bir crash durumunda aşağıdaki gibi çıktı alıyorum:
{"init terminating in do_boot",{{badmatch,["35039",[],[],"67568"]},[{p01,read_and_build_lists,3,[{file,"p01.erl"},{line,10}]},{p01,main,
0,[{file,"p01.erl"},{line,19}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ({{badmatch,3503967568},[{p01,read_and_build_lists,3,[{_},{_}]},{p01,main,0,[{_},{_}]},{init,start_em,1,[]},
{init,do_boot,3,[]}]})
Crash dump is being written to: erl_crash.dump...done
ilk bakışta, debug etmek için anlaşılması güç geldi ama zamanla anlar, alışırım diye düşünüyorum.