- Fonksiyonel programlama ve statik güvenceleri önemseyen bir geliştirici, birçok dili deneyimledikten sonra OCaml'in dengeli tasarımını özellikle takdir ediyor
- Haskell'in karmaşık tip sistemi ve yavaş derleme hızı ile kıyaslandığında, OCaml sadelik ile pratikliği birlikte sunuyor
- Go'nun hızlı derleme ve sade runtime özelliklerini andırırken, fonksiyonel dillerin pattern matching ve sum type gibi güçlü yanlarını koruyor
- Hızlı build, statik binary, zengin dokümantasyon araçları (
odig, utop) gibi özelliklerle üretkenlik ve erişilebilirlik artıyor
- Sadelik ile ifade gücü arasındaki denge ve rafine dil tasarımı, OCaml'in en büyük çekiciliği olarak sunuluyor
Programlama dili deneyimi ve karşılaştırma
- Çeşitli dillerle amatör ve profesyonel yazılım geliştirme deneyimi üzerinden iyi bir dilin özellikleri özetleniyor
- Hızlı derleme, sade runtime, güçlü statik güvenceler, fonksiyonel bileşenler, iyi performans ve yüksek kaliteli dokümantasyon önemli unsurlar olarak gösteriliyor
- Haskell, fonksiyonel programlama düşünme biçimini kazandırmış olsa da, karmaşık sözdizimi ve yavaş derleme sorun olarak belirtiliyor
- Topluluğun karmaşıklık arayışına eğilimli olması ve space leak gibi runtime sorunları nedeniyle bakımın zorlaştığı söyleniyor
- Go, sadelik, hızlı derleme, iyi araç ekosistemi ve kodu kolay anlama imkanı sunuyor
- Ancak muhafazakar tasarım, uzun ve tekrarlı hata işleme, açık null kontrolünün olmaması nedeniyle hata üretme olasılığını artırıyor ve rahatsız edici bulunuyor
- REPL eksikliği ve fonksiyonel fikirlere yönelik olumsuz tavır da sınırlamalar arasında anılıyor
OCaml'in başlıca güçlü yanları
- OCaml, yukarıdaki ölçütlerin çoğunu karşılayan bir dil olarak değerlendiriliyor
- Güçlü statik güvenceler: sum type, polymorphic variant, pattern matching desteği
- Sade runtime: garbage collection kullanmasına rağmen sistem seviyesi bir dil gibi çalışıyor
- Hızlı derleme hızı: Dune build sistemi sayesinde Haskell veya Rust'tan daha hızlı
- Statik olarak bağlanmış tek binary üretimi ile dağıtım kolaylığı
- Üst düzey dokümantasyon araçları:
odig (çevrimdışı dokümantasyon gezintisi), utop (REPL), interface ve implementation dosyalarının ayrıldığı yapı
- Otomatik tip çıkarımı özelliği kod yazma verimliliğini artırıyor
- Tiplerin interface dosyalarında tanımlandığı yapı, kod içinde daha net gezinmeye yardımcı oluyor
Dil tasarımı ve izlenim
- OCaml eski bir dil olmasına rağmen rafine bir tasarım anlayışını koruyor
- Bazı nesne yönelimli özellikler veya karmaşık kütüphaneler gereksiz olarak değerlendiriliyor
- Genel olarak sadelik ile ifade gücü arasındaki denge ve iyi dokümantasyon ile araç ekosistemi, OCaml'in temel çekiciliği olarak öne çıkıyor
- Yazar, OCaml'i “basit ama ifade gücü yüksek bir dil” olarak çok olumlu değerlendiriyor ve başka dillerde bulunması zor bir tatmin duygusundan söz ediyor
1 yorum
Hacker News görüşleri
OCaml’ı biraz kullandım ve çeşitli sorunlar yaşadım
Windows desteği berbat, ancak OCaml 5 ile ancak “epey kötü” seviyesine kadar iyileşti
Sözdizimini insanların okuması zor ve sözdizimi hatası olduğunda tek bir karakteri yanlış yazsanız bile 1000 satırlık hata çıkabiliyor
Ocamlfmt, karmaşık
matchifadelerini bile tek satıra indirip okunabilirliği düşürüyorBelgeler de aşırı kısa ve neredeyse hiç örnek yok
OPAM teoride iyi görünüyor ama pratikte çok hatalı; hatta 32’den fazla Unix grubuna üyeyseniz
curl’ü bulamama hatası bile vardıFonksiyon imzalarındaki tür notlarının isteğe bağlı olması, statik tiplemenin avantajını azaltıyor
Ekosistem de küçük ve dosya kopyalamak için bile yerleşik fonksiyon yok
Tek bağlı listelere takıntılı olması da verimsiz
Yine de C veya Python’dan daha iyi, ama Rust yerine bunu seçeceğimi sanmıyorum
CLR’ı hedeflediği için dağıtım çok daha kolay ve .NET ekosisteminden doğrudan yararlanabiliyorsunuz
C# veya VB.NET için NuGet kütüphanelerini neredeyse olduğu gibi kullanabildiğiniz için ekosistem çok geniş
F# belgeleri çok daha zengin ve örnek de daha fazla
İlgili bağlantılar: F# language reference, F# Core Docs, F# Cheatsheet
curlhatası gerçekten var mı diye baktım ve sorun #5373 içinde doğruladımAslında bu musl ile ilgili bir sorun ve OPAM’in o ikiliyle derlenmesinden kaynaklanıyor
ocamlformat, janestreet profili ile ayarlanırsa varsayılandan çok daha iyi oluyorFonksiyon imzası tür notu sorunu,
.mlidosyası sağlanırsa çözülüyor ama çoğu kişi bunu yapmıyorBuna karşılık VS Code için OCaml eklentisi, yeni başlayanlara en iyi deneyimi sunuyor
Günümüz donanımında varsayılan koleksiyonun vector olması gerektiğini düşünüyorum
Eskiden ocaml.org üzerinden doğrudan kurulum bile yapılamıyordu; mingw ya da wsl üzerinden geçmek gerekiyordu
Bu yüzden fiilen Windows için OCaml diye bir şey yoktu
Go dilinin tasarımcılarının işlevsel programlama fikirlerini neredeyse hiç benimsememesinin nedeni açık
Rob Pike’ın dediği gibi, Google’daki geliştiricilerin çoğu gençti ve C ailesi dillere alışkındı; bu yüzden öğrenmesi kolay bir dil gerekiyordu
İşlevsel dillerin düşünme biçimine geçmek çok zaman aldığı için Go bu maliyetten kaçınmak istedi
“ML” kelimesini her gördüğümde hâlâ heyecanlanıyorum, sonra bunun Meta Language değil Machine Learning olduğunu fark edip hayal kırıklığına uğruyorum
Bu aralar “AI” kelimesinin bu kadar suistimal edilmesinden daha çok nefret ediyorum
Gerçek AGI çıkana kadar AI kelimesinin kullanılmamasını tercih ederim
Richard Feldman’ın konuşması, işlevsel dillerin neden yaygınlaşamadığını iyi açıklıyor
Ya platforma kilitlenmiş bir dil olmanız, ya bir killer app’inizin olması ya da çok büyük bir pazarlama bütçenizin bulunması gerekiyor
Python’ın hızla büyümesinin nedeni de yapay zeka ekosisteminin merkez dili haline gelmesiydi
Ben de işlevsel programlamayı OCaml ile öğrendim, Haskell ve Zig ile projeler yaptım ama sonunda yine “işe yarayan aracı kullanırsın” gerçeğine dönüyorsunuz
OCaml, Rust ve Haskell “öğrenmek istenen diller” olarak popüler ama “gerçekten yaygın kullanılan diller” değiller
Torch aslında Lua tabanlıydı ve sonradan zaten çok popüler olan Python’a taşındı
FP çevresi gerçek dünyadaki teknoloji değişimlerine kayıtsız kaldı; bu sırada C, Pascal, Perl, Tcl gibi diller pazarı ele geçirdi
Sonuçta FP, “katedraldeki rahipler” olarak kaldı; komut temelli diller ise kitleleri kazandı
F# kullandım ve Actor tabanlı eşzamanlılık kavraması kolay geldi
Ama işin içine mutable Array girince karmaşıklaştı
Pratikte OCaml’ı F#’a tercih etmek için ne gibi bir neden var merak ediyorum
Buna karşılık OCaml, global lock kaldırma, hızlı derleme ve modül·GADT·effect gibi güçlü özellikler sunuyor
F# hâlâ Windows desteği, SIMD ve unboxed types konusunda önde ama OCaml da giderek arayı kapatıyor
Kütüphane çok ama çoğu F# tarzında değil
OCaml’ın yerel ekosistemi daha büyük
C# ile birlikte çalışabilirlik iyiydi ama C# tarafından F# kütüphanelerini kullanmak tam bir kâbustu
Sonunda C# kabuğunu korumak zorunda kalıyorsunuz ve kod tabanı melezleşiyor
.NET ekosistemi zengin ama OOP merkezli düşünce çok baskın, bu da FP tarzıyla çakışıyor
Visual Studio rahat ama CLI tabanlı iş akışları için elverişsiz
Derleme hızları giderek yavaşlıyor, test yazmak da tuhaf hissettiriyor
OCaml’ı deneyince dilin ergonomik tasarımının çok daha doğal olduğunu gördüm
F# “.NET için OCaml” diye anılsa da, gerçekte ML ailesinden bir dil olmasının ötesinde neredeyse bambaşka bir dil
OCaml eski bir dil olduğu için OOP özellikleri çıkarılsa da olur gibi geliyor ama bence Standard ML daha kusursuz
Yapısal tipli kayıtlar, open recursion ve
Js_of_ocamlgibi JS binding’leri için faydalıKayıt güncellemesini de desteklemediği için rahatsız edici
OCaml 2000’lerin başından beri hep “neredeyse kusursuz dil” gibiydi
Ama sürtünme noktaları çözüleceği zamana gelindiğinde diğer diller bu fikirleri çoktan içine almıştı
Öğrenen az ama öğrenen herkes yeni bir dil yapıyor
kaynak
Zaten birçok proje OCaml ile gayet iyi çalışıyor ve
effect sistemi de eklendiğine göre hatta daha da ileri gitmiş durumda
Popülerlik ile yetkinlik aynı şey değil
Popülerlik ≠ üstünlük, müzikte de böyle
Sadece trendler ve atalet tarafından belirleniyor
Çok kullanılan dillerin nefret edeni de çok oluyor,
daha az bilinen diller ise daha kolay abartılıyor
OCaml’ın daha az popüler olmasının nedeni, bu verimliliği hisseden kullanıcı kitlesinin küçük olması
Bir de FP çevresinin doktriner tavrı bunda pay sahibi
Elixir’in, OCaml’a benzeyen ama yaygınlaşma ihtimali olan bir dil olduğunu düşünüyorum
Değişmezlik, pattern matching, Actor modeli gibi FP’nin avantajlarını taşıyor,
BEAM runtime üzerinde de kararlı biçimde çalışıyor
Statik tipleme yok ama kademeli tip denetimi ekleniyor
.NET ekosistemini aynen kullanabildiği halde OCaml’dan bile daha az biliniyor
Gerçekten SaaS backend’lerinde kullanan çok sayıda şirket var
Bu yüzden FP dilleri hâlâ niş kalıyor
OCaml, GC tabanlı bir sistem dili olması bakımından Go’ya benziyor
Elle bellek yönetimi veya borrow checking yerine GC’yi tercih ediyorum
D dilinin GC’si de harikaydı ama sorun, “GC” kelimesinin kendisinin insanları korkutmasıydı