/beat/19.md


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.

20241203195535.png

erlang hakkındaki ilk izlenimlerim:

  1. 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):

20241203195908.png

  1. 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.
  1. kodun görüntüsü çok hoşuma gitti diyemem ama alışmak lazım tabii:

    20241204092632.png

  2. 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.
  3. 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.
  4. 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.