F #, OCaml'den türetilmiştir, ancak hangi ana öğeler eksik veya eklenmiştir? Özellikle OCaml öğrenmek için mevcut olan kaynakların F # öğrenmek isteyen biri için de yararlı olup olmadığını merak ediyorum.
F #, OCaml'den türetilmiştir, ancak hangi ana öğeler eksik veya eklenmiştir? Özellikle OCaml öğrenmek için mevcut olan kaynakların F # öğrenmek isteyen biri için de yararlı olup olmadığını merak ediyorum.
Yanıtlar:
Temel farklar, F # 'nın şunları desteklememesidir:
Ayrıca F #, etiketli ve isteğe bağlı parametreler için farklı bir sözdizimine sahiptir.
Teorik olarak, bu özellikleri kullanmayan OCaml programları F # ile derlenebilir. OCaml'i öğrenmek F # için son derece makul bir giriştir (ve bunun tersi de tahmin ediyorum).
Farklılıkların tam listesi burada (not: archive.org ölü bağlantının değiştirilmesi).
Bu soru bir süredir cevaplandı, ancak cevapların çoğunun F # 'da hangi OCaml özelliklerinin eksik olduğunu söylediğine oldukça şaşırdım - bu, mevcut OCaml programlarını F #' a taşımak isteyip istemediğinizi bilmek kesinlikle iyidir (muhtemelen atıfta bulunulan makalelerin çoğunun motivasyonu). Ancak, F # 'ı farklı bir dil yapan birçok özellik vardır (sadece .NET için OCaml'in sınırlı bir sürümü değil!) İşte F #' da eklenen birkaç şey:
+
tüm sayısal tipler ve onu destekleyen tipler için kullanabilirsiniz.Ve dürüst olmak gerekirse, Visual Studio IDE'den bahsetmeye değer olduğunu düşünüyorum. Bu, dilin bir parçası değildir, ancak kullanıcı deneyimini gerçekten iyileştirir (Visual Studio'da IntelliSense desteği gerçekten iyidir!)
Listeye bakarsanız, F # 'ın popülaritesine büyük ölçüde katkıda bulunan pek çok şey vardır, bu yüzden "işlevsiz OCaml" den çok daha fazlasıdır. F # kesinlikle OCaml'ye dayanır (ve Haskell gibi diğer dillerden fikir alır) ve onlarla birçok yön paylaşır, ancak başka pek çok şey de vardır. Sanırım zaman uyumsuz iş akışları, .NET tarzı OO ve meta programlama gibi şeyler olmadan, Microsoft Geliştirici Bölümü Visual Studio 2010'a asla F # eklemeyecekti.
<@ a @>
tip tanımları bir yana, bağlı olmayan değişkenler içeren ifadeleri bile alıntılayamaz <@ type t = int @>
ve Camlp4'ün yaptığı gibi gelişigüzel gramerlerle çok daha az genişletilebilir lexer ve ayrıştırıcıları işleyemez. İyi bir makro sistem eksikliği bir eksikliktir, ancak IMHO, F # için herhangi bir düzgün sözcük ve ayrıştırıcı eksikliği çok daha ciddi bir engeldir. Aslında geliştiricilere, OCaml kullanarak kendi sözcüklerini ve ayrıştırıcılarını oluşturmalarını, kendilerini F #'ın desteklediği alt kümeyle sınırlamalarını ve OCaml'ın üstün araç desteğinden yararlanmak için F #'a geri aktarmalarını tavsiye ediyorum!
F # 'ı her zaman OCaml'ın kuzeni olarak tanımlarım çünkü OCaml, F #' ın sahip olmadığı ve asla elde edemeyeceği birçok özelliğe sahiptir. F #, önceki CAML diliyle daha yakından ilgilidir. Özellikle, F #, soyutlama için çok sınırlı desteğe sahiptir ve yapısal tipleme (OCaml'in nesneleri ve polimorfik varyantları gibi ) için hiçbir desteği yoktur .
Bazı yanıt verenlerin yazdıklarının aksine, F # etiketli ("adlandırılmış") ve isteğe bağlı argümanlar için (sınırlı) desteğe sahiptir.
Ancak, bunların hepsi gelişmiş özelliklerdir ve OCaml ile ilgili kaynakları kullanarak küçük ölçekli OCaml tarzı işlevsel programlamanın arkasındaki temel fikirleri kesinlikle öğrenmeye başlayabilirsiniz. Keşfedeceğiniz ilk büyük fark, OCaml ve F #'da tamamen farklı yollarla çözülen kapsülleme ve soyutlama gibi daha büyük ölçekli problemlerdir. F # ile bunu nasıl yapacağınızı öğrenmek istiyorsanız, mevcut tek literatür tamamen işlevsel veri yapıları hakkındaki bu makaledir .
Ayrıca, OCaml'ın harika modül sisteminin, kod türleri üzerinde (veri yapıları gibi) parametrelendirmeyi kolaylaştırdığını, ancak OOP alternatiflerinin sadece iğrenç değil, .NET üzerinde neredeyse tamamen kullanılmadığını da keşfettim. Dahası, zarif bir şekilde parametrelendirilmiş veri yapıları yazmaya çalışırken, F # derleyicide düzinelerce hataya çarptım çünkü daha önce kimse bunu yapmaya kalkışmadı. F # stdlib bazı güzel veri yapısı uygulamaları içerir, ancak hemen hemen hiç yeniden kullanım yoktur, yani bir kes ve yapıştır işidir.
F # ve OCaml, diğer tuhaf hayvanların bütün bir geçişini içeren ML ailesindeki taksonomik sınıflardır. F #, OCaml'den daha yenidir ve henüz functors [modül fonksiyonları -> modül] veya satır türleri [nesne sınıfları ve polimorfik değişkenler] içermemektedir. Aralarında, bu iki basitleştirme muhtemelen .Net platformunda gelişen biri için öğrenme eğrisini kolaylaştırır. Ne yazık ki, bu iki dil özelliği OCaml'de oldukça güçlüdür, bu nedenle F # için nasıl kod yazılacağına dair fikir edinmek için OCaml literatürünü okumak, muhtemelen her ikisinin de mevcut olduğu C # için mükemmel bir alternatif olduğu zaman, ikincisi için erken bir hayal kırıklığına yol açacaktır.
F #, doğrudan OCaml sözdizimini destekler. % 100 uyumlu olmayabilir, ancak oldukça yakın olduğunu düşünüyorum.
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
İşte bir farklılık listesi (ne kadar güncel olduğundan emin değilim)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html