İşlevsel diller: Ne oldukları, nereye gittikleri

Bazıları tam olarak ne olduğunu iddia etse bile, işlevsel programlama geliştiricilerin ilgisini çekmeye devam ediyor. Ve en popüler işlevsel dillerden üçü - Clojure, F # ve Scala - iyileştirmeler için hazır.

Scala'nın kurucusu Martin Odersky, işlevsel programlamanın bazı geliştiriciler için temel bir çekiciliği olduğunu söylüyor: "Bu segmentteki programcılar, kodu daha net, daha iyi yapılandırılmış hale getirdiği ve birçok hata sınıfını önlediği için işlevsel programlamayı seviyor." Ancak bazıları, işlevsel programlamanın daha az verimli yazılıma yol açtığını iddia ediyor.

Microsoft'un .Net program yöneticisi ve F # sözcüsü David Stephens, işlevsel programlamanın programlama hakkında yeni bir şekilde düşünmeyi de gerektirdiğini söylüyor. Soyutlamalar bir sorun olabilir: "Kodu daha soyut hale getirdiğinizde, bitleri işlemekten uzaklaştığınızda ve açık bir şekilde döngülerden geçtiğinizde, bu soyutlamaları anlamak daha fazla zaman alabilir."

İşlevsel dil tam olarak nedir?

En temel terimleriyle, işlevsel programlama, hesaplamayı matematiksel işlevler olarak ele almakla ilgilidir. Başlangıçtan itibaren işlevsel olarak fatura edilen dillere ek olarak, Java ve C # beğenileri, lambda ifadeleri için destek eklenerek daha işlevsel hale geldi.

Ancak işlevsel programlamanın kesin bir tanımını tespit etmek zor olabilir. Clojurefun blogu, hatalı olduğuna inandığı çeşitli tanımlara atıfta bulunur; bunlar arasında, işlevsel programlamayı, yüksek dereceli işlevlerle işlevsel bir stili veya lambdaları destekleyen bir dili mümkün kılmak olarak tanımlamak da vardır. Doğru tanımın, işlevleri ve değişmez verileri vurgulayan bir dil olduğunu söylüyor.

Ancak Clojure blogunun tercih edilen tanımının mutlaka doğru olmadığını söylüyor diğerleri. Scala'dan Odersky, "Yazar, tesadüfen Clojure'a en çok uyan birini seçiyor - şaşmamalı, bu bir Clojure blogu," diyor Scala'dan Odersky. "Ona yakın ama aynı olmayan bir yorumum var."

Odersky'ye göre bir işlev, girdileri çıktılarla eşleştiren ve bunun dışında başka bir etkisi olmayan bir kod parçasıdır. "Bu, burada kullandığımız fonksiyonun matematiksel tanımıdır. Bazen bu fonksiyonlara, örneğin C'deki fonksiyonlardan ayırmak için 'saf' denir." Typesafe JVM uygulama geliştirme platformunun sağlayıcısı Typesafe'i kuran Odersky, işlevsel bir dilin saf işlevlerle programlamaya odaklandığını ve bunu yapmayı kolay ve güçlü hale getirdiğini söylüyor.

Fonksiyonel programlamanın diğer paradigmalarla birleştirilebileceğini belirtiyor. "Örneğin, işlevsellik, nesne yönelimli ile gerçekten iyi gider. Scala bu anlamda işlevsel bir dildir. Sadece lambdalara sahip olmanın bir dili işlevsel hale getirmediğine katılıyorum; gerekli ama yeterli değil."

Aynı zamanda sistem geliştiricisi Cognitect'in CTO'su olan Clojure geliştiricisi Rich Hickey, Clojure blogunun ana tartışmasına katılıyor. "Makale doğru bir şekilde birinci sınıf veya daha üst düzey işlevlerin işlevsel programlamanın konusu olmadığına işaret ediyor. İşlevsel programlama, programlamayı matematik gibi yapmakla ilgilidir" diyor. Hickey, bununla birlikte, işlevsel programlama için hala bir dizi tanım olduğunu söylüyor.

Microsoft'tan Stephens, yalnızca dillerin ötesine geçen işlevsel yetenekler görüyor. "Dünyadaki en popüler işlevsel programlama dili Excel'dir" diyor. Basit bir Excel çalışma sayfasında A1 X 2 gibi bir dizi değer içeren bir sütun olabilir. "Bu, A1'de saf bir işlevdir ve A1 değişmez, bu nedenle mevcut verilerden değerleri hesaplıyorsunuz."

Microsoft'un Dil ile Tümleşik Sorgu (Linq) teknolojisi aynı zamanda işlevsel programlama da sağlıyor, diyor. "Hemen hemen her programlama dili artık işlevsel dillerin özelliklerini benimsiyor."

Stephens değişmez verilerin işlevsel programlama için kritik olduğunu belirtiyor. Eşzamanlılık - aynı anda veriler üzerinde çalışan birden çok iş parçacığı içeren programlar - aynı zamanda değişmez verilerden de yararlanır, diye ekliyor. "[F #] 'a işlevsel birinci dil diyoruz çünkü diğer dillerin mirasından geliyor." Ayrıca nesne yönelimli programlamayı destekler ve C # ve Visual Basic ile çalışır, diyor.

Clojure'den Hickey, işlevsel dillerin benimsenmesini, bugünlerde daha büyük problemler üstlenmek zorunda olan geliştiricilerin karşı karşıya olduğu artan baskıya bir yanıt olarak görüyor. Hickey, "Bunu yapmak için, programlarının tesadüfi karmaşıklığını azaltmaları gerekiyor. Yaygın durum ve yan etkilerin programlardaki karmaşıklığın ve hataların birincil kaynağı olduğu artık yaygın olarak kabul ediliyor" diyor. "İşlevsel olmayan dillerde yazılan programlarda durum miktarını azaltmak mümkün olsa da, bunu işlevsel programlamayı deyimsel ve varsayılan yapan bir dilde yapmak çok daha kolay ve daha hızlıdır."

En iyi üç işlevsel dil için sırada ne var

Scala'nın kurucusu Odersky, 13 yaşındaki Scala'nın veri biliminde birincil dil olduğunu söylüyor. JVM tarafından desteklenen, tahmini 400.000 ila 500.000 kullanıcıya sahiptir. Kısa vadeli planlar, en son standart Java güncellemesinden gelen bayt kodu talimatlarının Scala'nın daha verimli kod üretmesini sağlayacağı Java 8 için optimize edilmesini gerektirir.

Uzun vadede Scala, bir LLVM derleyici arka ucu düşünüldüğünde, temizlenmiş bir sistem, daha güvenli makrolar ve daha fazla platform desteği alacak. Scala'yı JavaScript'e derlemek için Scala.js'nin kullanılabilirliğini iyileştirmek için daha fazla iyileştirme planlanmaktadır.

Hickey, yine JVM'ye dayanan dokuz yaşındaki Clojure'un finans, perakende, yazılım ve eğlencede kullanıldığını söylüyor. "İşlem işleme ve analiz, büyük veri, ağ işlemleri, tahmine dayalı analitik, arama, güvenlik ve tüketici teklifleri gibi çeşitli uygulama alanlarında uygulandı."

11 yaşındaki F #, Microsoft Research tarafından Don Syme tarafından kuruldu ve F # Foundation tarafından denetleniyor. Çok çeşitli uygulamalarda kullanılır ve Linux, OS X, Android, iOS, Windows ve tarayıcılarda çalışır. Stephens, "Şu anda üzerinde çalıştığımız şey, .Net Framework'ün açık kaynaklı, çapraz platform modüler bir sürümü olan .Net Core ile çalışmasını sağlamak" diyor. Dizelerin yazılmasını kolaylaştıran dize enterpolasyonu, çizim tahtasında yapılır.