2014-11-19 12 views
28

Geçtiğimiz günlerde, Facebook, çoğunlukla OCaml (https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-javascript/) 'da uygulanan JavaScript için statik tipli bir denetleyici olan Flow'u duyurdu.OCaml'ın Hacklang ve Flow'un arkasında bir programlama dili olarak faydaları nelerdir?

Hacklang (statik tip denetleyicisi ile PHP) ayrıca ağırlıklı OCaml yazılmıştır. Bu yüzden, OCaml'ın statik tip denetleyicisi yapmak için ayırt edici faydalarının neler olduğunu merak ediyorum.

+2

Bu downvoted alma yüzden, ben görmüyorum iyi bir soru. OCaml'ı bilmiyorum, ama derleyiciler yazmak için harika bir araç olduğu söyleniyor (listene HaXe ekleyebilirim) ve [bu eski yazı] (http://flint.cs.yale.edu/cs421/case) -for-ml.html) (ayrıca bakınız [here] (https://news.ycombinator.com/item?id=3002838)) nedenini kısaca özetlemektedir. – georg

+1

Çünkü temelde fikir temelli. –

+0

@georg Sağladığınız bağlantılar gerçekten yararlıdır. Onlar OCaml hakkında tartışmalı yorumlar içerir. – Supasate

cevap

43

"Ne programlama dili olarak OCaml faydalarını olan" gerçekten görüşe dayalı bir soru, ve burada mücadele edecek değilim biridir. Ancak, ben Facebook'ta en Hack takımda çalışmak ve Akış ekibi ile yakın bir çalışma, bu yüzden Sana sormak amaçlanan düşünüyorum soruya cevap verebilir: "Neden Facebook Hack ve Flow inşa etmek OCaml seçtin?"

  • büyük nedeni OCaml sonra pattern matching on them parlak defining your own datatypes için destek ve sahip olmasıdır. Hack ve Flow'un yaptıklarının çoğu, bir AST'nin çeşitli biçimleri üzerinde operasyonlar ve "bu tür bir düğümü bu tür düğümün içinde görüyorsanız, bunu yap" ifadesinin çok değerli olduğunu ifade etmenin gerçekten güzel bir yolunun olması. definition of subtyping in Hack'a bir göz atın - kesinlikle karmaşıktır, ancak kalbinde, bir çift tür üzerinde sadece büyük bir desen eşleşmesi vardır ve kalıp eşleşmesi olmadan herhangi bir dilde okunaksız bir şekilde karmaşık olacaktır.
  • OCaml, birinci sınıf işlevler ve değişmez veri yapıları için büyük destek sağlayan büyük ölçüde işlevsel bir dildir. Eğer typechecking yapıyoruz Benzer şekilde yukarıda, sen haritalar farklı türde bir sürü yapıyor sonunda ve AST ağının üzerine katlanır ve fonksiyonel diller gerçekten kısaca belirtmektedirler. Örneğin, bir kod bloğu yazmak tam anlamıyla just a fold_left over the statements it contains'dur.
  • Ancak, tamamen işlevsel değildir. Bu "impure" - bazen, mutable state, using exceptions, veya benzer bir şey ifade etmenin en güzel yoludur. Ancak en önemlisi, , herhangi bir karmaşık akrobasi veya zihinsel model anahtarına veya bir FFI aracılığıyla C işlevlerine çağrılacak herhangi bir şeye ihtiyacınız olmadığı anlamına gelir. Hem Hack hem de Flow, multithreading için aynı modeli kullanır: özel fork 'd işlemleri arasında paylaşılan, kilitlenmemiş bir karma tablo içeren özel bir mmap' d bölgesi. Bu, C - and that's exactly what we do hariç herhangi bir dilde ifade etmek istemediğim bir şey. OCaml kodu, kaputun altında gerçekte C olan bir sihirbaz olmaksızın birkaç sihir fonksiyonunu çağırabilir. (Bir kenara göre, Ocak ayından çoklu yayıncılığımızın tam olarak nasıl çalıştığını, Hack uygulamalarının diğer bazı bölümleriyle birlikte yapacağım bir teknoloji konuşması yapacağım - bu gerçekten harika, ama kodsuz olsa bile bir intro olmadan kavramak zor açık kaynak!)
+0

"Hem Hack hem de Akış, multithreading için aynı modeli kullanıyor: paylaşılan, kilitlenmeyen bir hash tablosu içeren farklı fork işleme süreçleri arasında paylaşılan özel bir mmap'd bölgesi". İlginç ... –

+2

Hack internals hakkında birkaç hafta önce bir konuşma yaptım; Üçüncü bölüm sihirli mmap'd bölgesi üzerindeydi. Ben bütün konuşma izlerken önerirdim ama o bölüme doğrudan atlama istiyorsanız, burada timestamped link: https://youtu.be/aN22-V-b8RM?t=39m –

+1

Çok teşekkürler! F # veya LLVM'ye bir göz attınız mı? Çok çekirdekli bir GC ile OCaml benzeri bir dil ilgilenir misiniz? –

İlgili konular