İşlevsel programlama web geliştirme ile ilgili mi? [kapalı]


88

Son zamanlarda işlevsel programlama hakkında çok şey görüyorum ve Clojure özellikle ilginç görünüyor. Ne olduğunun temel tanımını 'anlasam da, bunu bir web geliştiricisi olarak her gün nasıl kullanacağımı, eğer yapabiliyorsam, anlayamıyorum. Okuduklarımın çoğu, normal OO'da bulunan tipik programlama durumlarından ziyade, fonksiyonel programlamanın matematik tarafına odaklanıyor.

Çubuğun yanlış ucunu mu aldım? İşlevsel programlama web geliştirmeyle tamamen ilgisiz mi? Değilse, 'web için' kullanıldığına dair herhangi bir örnek var mı?

Yanıtlar:


31

Aklıma gelen birkaç örnek:

  • Yahoo! Mağaza, Lisp tarafından desteklenmektedir ( satın alma öncesinde orijinal olarak Viaweb olarak adlandırılmıştır )
  • Reddit , 2005'te Python'a geçmelerine rağmen Lisp'de tamamen prototiplendi.
  • Hacker News tamamen Arc ile yazılmıştır (Lisp lehçesi)

7
Yahoo! Mağaza birkaç yıl önce c ++ ile yeniden yazıldı.
Nisan

5
dil! = programlama paradigması.
phkahler

58
Garip örnek seçimi ... Yahoo! Store, büyük bir Lisp savunucusu olan Paul Graham tarafından yazılmıştır. Ayrıca bir Reddit klonu olan Hacker News'u da yazdı. Muhtemelen HN, Reddit'in Lisp'ten Python'a geçişine yanıt olarak yazılmıştı, Reddit çalışanları ise Paul Graham tarafından yürütülen bir hızlandırıcı program olan YCombinator'ın bir parçasıydı. Bunu üç değil BİR örnek olarak kabul ediyorum.
Brandon Bloom

@ShermPendley sunucu yapılandırması, ağ kurulumu ve veritabanı erişimi de performansta önemli faktörlerdir. Web uygulamalarının komut dosyası çalıştırma süreleri genellikle toplam maliyetin çok küçük bir kısmıdır.
AgmLauncher

62

Fonksiyonel programlama, web uygulamalarıyla çok iyi eşleşir. Web uygulaması bir HTTP isteği alır ve bir HTML sonucu oluşturur. Bu, isteklerden sayfalara bir işlev olarak düşünülebilir.

Genellikle uzun süren bir sürecimiz, durum bilgisi olan bir kullanıcı arayüzümüz ve çeşitli yönlerde veri akışımız olan masaüstü uygulamalarıyla karşılaştırın. Bu, durum ve mesaj geçişi olan nesnelerle ilgilenen OO için daha uygundur.


20

Neden olmasın anlamıyorum - tarayıcılara standartlara uygun HTML sunduğunuz sürece, onu üretmek için kullandığınız dili, işlevsel bir dil, zorunlu bir dil veya eğitimli maymunlar umursamıyorlar.


20

Saf işlevsel programlama, web programlama ortamına pek iyi uymayabilir. Ancak asıl engel yalnızca altyapı (çerçeveler ve API'ler) eksikliğidir. İşlevsel bir dilin Java, Python veya Ruby kadar zengin bir web programlama ortamına sahip olması uzun zaman alacak (muhtemelen asla, dürüstçe).

Bununla birlikte, bazı seçenekler var.

Bunların hiçbiriyle deneyimim yok. Belki yorumcular, kendileri için neyin işe yaradığına karar verebilir.



4

Clojure için, Clojure ve Google App Engine kullanılarak geliştirilen ilginç bir başlangıç ​​(TheDeadline) var. Slideshare hakkında iyi bir ppt'leri ve InfoQ ile röportajları var.

Clojure'u GAE ile dağıtma hakkında iyi bir tartışma için: http://news.ycombinator.com/item?id=1239788

Bildiğim kadarıyla Clojure'un birkaç web geliştirme kütüphanesi var. Compojure Yüzük Conjure

Umarım bu bazı sorularınızı yanıtlar =) (Ben de yeni başlıyorum ..)

En iyisi Ryan


3

Web geliştirme ile tamamen ilgisi yoktur. Sunucuda oturan uygulama, kapanışlar, üst düzey işlevler, değişmezlik, referans şeffaflık gibi işlevsel özelliklerden çok iyi bir şekilde yararlanabilir ... örneğin, herhangi bir şekilde dönüştürmeniz veya manipüle etmeniz gereken koleksiyonlara sahip olduğunuzdan emin olabilirsiniz. Fonksiyonel programlama burada yardımcı olur ve deyimlerinin ana akım dillere nüfuz etmesinin bir nedeni de budur. İşlevsel özellikler, özlüğe, test edilebilirliğe, paralelleştirmeye yardımcı olur ve ayrıca kalıplarla çözeceğiniz sorunlara yerel çözümler sağlayabilir.

Güncelleme: İşlevsel diller için web çerçeveleri de var. Common Lisp için Web Blokları, Scala için Kaldırma. Bunlar duyduğum şeyler, daha fazlası da olabilir ... ancak tamamen işlevsel olmanız gerekmez - örneğin Scala saf değildir ve herhangi bir Java çerçevesi ile çalışmalıdır, yine de yapabilirsiniz iş katmanı vb. için işlevsel programlama kullanmak


3

Check out Ur / Web . Çok hızlıdır ve statik tip sistemi HTML ve SQL gibi şeyleri bilir, bu nedenle güvenlik ile ilgili her türlü güzel şeyi garanti edebilir.


3

Erlang, ölçeklenebilir web uygulamaları için bazı altyapılarda çokça kullanılıyor gibi görünüyor. CouchDB ve Riak veritabanları, RabbitMQ mesaj sıralama sunucusu gibi çoğunlukla Erlang dilinde yazılır. Başarısının anahtarlarından biri, eşzamanlılığı, paylaşılan değişken bir durum olmadan mesaj iletme yoluyla ele almasıdır. Herhangi bir belirli işlevsel programlama dilinden daha yararlı olan, problemler hakkında bu şekilde düşünmektir.

Veya MapReduce'a bakın. Bu, haritanız ve azaltma işlevleriniz dahili olarak durum bilgisine sahip olsa bile, hesaplamaya bakmanın çok işlevsel bir yoludur - ve bu nedenle, büyük veri kümelerini hataya dayanıklı, dağıtılmış bir şekilde sorgulamak için çok uygun bir yöntemdir.

Elbette, sizin için en pratik görünen şeyle gidin. Ancak işlevsel programlamayı her zaman aklınızın arkasında tutun çünkü ne zaman işe yarayacağını asla bilemezsiniz.



2

Web uygulamaları için dil ve paradigma önemli değildir, hepsi eşit derecede iyi ve kötüdür. Yeni bir paradigma öğrenmek için bir neden arıyorsanız, sadece dalın. Benim tavsiyem çözmeye çalıştığınız sorunu analiz etmek ve uygun araç setini seçmek olacaktır.


2

Javascript (web'in FE kısmının dili ve giderek artan şekilde BE'nin de dili) kendi başına işlevsel değildir, ancak işlevler birinci dereceden işlevseldir


2

Arka ucun tamamen Erlang dilinde yazıldığı çevrimiçi bir elektronik tablo başlattık.

http://hypernumbers.com

Herhangi bir standarda göre bu, zihinsel karmaşıklığa sahip devasa bir GUI ile oluşturabileceğiniz en karmaşık web uygulamalarından biridir.


2

Haskell kullanarak web uygulamaları oluşturmada bir web geliştiricisi deneyimi . İşlevsel diller çok güvenli ve eş zamanlı olmasına rağmen, uzun zamandan beri akademinin sevgilisi olduğu ve gerçek dünyada güçlü bir şekilde benimseneceği için her zaman API türünün en iyisinden yoksundu. Umarım çok uzak değildir. Erlang zaten içine girmişti.


1

İşlevsel programlamanın web programlamada popüler olmasının nedeni, paylaşılan ve değişen durumu açıklaması ve programcının tamamen işlevsel parçaları saf işlevler olarak ifade etmesine izin vermesidir. Saf işlevler, yan etkileri olmadığı için paralel olarak çalıştırmanın çok basit olma avantajına sahiptir.

En azından benim sebebim bu.


1

Başka bir kısa cevap: http://www.mlstate.com - FP'ye dayalı tam bir web geliştirme platformu. Dilin temiz semantiği, her türlü otomatik emniyet ve güvenlik analizine, optimizasyonuna vb. İzin verir.

Uyarı: Orada çalışıyorum.


1

İşlevsel diller, harika uygulamalar oluşturmak için doğrudan yararlı olmayabilir, ancak Uygulamalarımızı oluşturmak için işlevsel programlama paradigmasını yoğun bir şekilde kullanıyoruz. Saf işlevsel programlama, "yan etki yok" kısıtlaması getirir. Bu, saf işlevsel çağrıların, çağrıldıkları sırada aynı sonucu vermesini sağlar. Bu, web geliştirme için ideal değildir, ancak işlevsel programlama, durum değiştiren bir sistemle birleştirilirse, sağlam bir web uygulaması oluşturulabilir. Daha fazla ayrıntı için makaleme bir göz atın: FAST Sunucu Ayrıca bu slaytlar .


0

Evet, fonksiyonel programlama herhangi bir dilde yapılabildiğinden, günlük olarak web geliştirici olarak kullanabilirsiniz.

Sen-meli? çözdüğünüz soruna bağlıdır. Fonksiyonel programlama bir programlama paradigmasıdır ve onu nerede kullanmanız gerektiği, çözmekte olduğunuz probleme bağlıdır.

Kararı basitleştirmek için, kapsülleme, polimorfizm, kalıtım gibi özelliklerin hayatınızı kolaylaştırabileceği OOP kavramlarını kullanarak bazı problemleri çözmenin daha kolay olup olmadığını düşünün.

Cevabınız evet ise, orada fonksiyonel programlamaya gitmeyin ve sadece OOP'leri kullanın. Uygulamanız karmaşık hesaplama / hesaplama / iş mantığı gerçekleştirecekse ve yoğun şekilde eşzamanlı işlemeyi içerecekse, Fonksiyonel programlama bu gibi durumlarda birçok araç ve avantaj sağlayabilir.

Bunlar, programların yapısını ve unsurlarını oluşturmanın farklı stilleri, bu yüzden her şey doğru iş için doğru aracı kullanmakla ilgili. Her şeyi kullanarak her şeyi yapılabilir.

Web geliştirmede fonksiyonel programlama:

JavaScript, işlevsel programlamayı destekler ve web geliştirme bağlamında olduğumuzda çok destekleyicidir.React çerçevesi, işlevsel programlama ilkelerinden büyük ölçüde etkilenir ve birçok web uygulamasında kullanılır.

Ayrıca, aşağıda listelenen işlevsel programlama dillerinde geliştirilen çerçevelerle oluşturulmuş ve çalışan birçok web uygulaması bulabilirsiniz:

• WebSharper (F #)

• Yapış (Haskell)

• Kaldırma (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

Umarım cevabım herkese yardımcı olur.


-2

Muhtemelen kullanmayacaksınız ve kullanmamalısınız, ancak birisinin her zaman kural için bir istisna bulacağını söylediğinizde (Viaweb vb.). Temelde "süper dil" yoktur, genellikle "Blub" ta yalnızca çalışan kod satırları vardır. Paul Graham bile, bir Lisp'in temel (aslında sadece) faydasının, kişinin hızlı prototip oluşturma yeteneği olduğunu söylüyor.

Ayrıca "süper diller" genellikle kodun okunabilirliğini artırmaktan çok etkiler, yani onu yazan "dahi" onu sonsuza kadar sürdürmek zorundadır, çünkü onu başka hiç kimse anlayamaz, özellikle de muhtemelen kendi değiştirilmiş lehçesiyle yazacağı için. Bu, herhangi bir projenin olası kapsamını azaltır; bu, yeni, yenilikçi şeyler yapılabilse bile, genişletilemez oldukları ve dolayısıyla nispeten küçük bir ölçekte kaldıkları anlamına gelir (Arc'daki Hacker News gibi).

Bu, birinin dahi bir fikre sahip olamayacağı ve bunu anlaşılmaz bir tarzda uygulayamayacağı anlamına gelmez, bu daha sonra Blub'da yeniden yazılabilir ve birçok insanın bundan faydalanabilmesi için genişletilebilir. Aslında, şimdiye kadar yaşamış her ünlü filozoftan bahsetmiyorum bile, tüm Lisp başarı öykülerinde olan tam olarak buydu. Ama elbette, eğer bir "dahi" iseniz, ürününüzü başka bir şekilde prototip haline getirebilirsiniz.

JVM'deki FP'ye gelince, sınırlı ama harika şeyler mümkün. Kişisel olarak sadece prototipleme için kullanacak olsam da, bazı iyileştirmeler sağlayan bir kullanım durumunuz (genellikle çoklu iş parçacığı ile ilgili bir şey) olabilir.


1
Aslında Paul Graham, Lisps'in en büyük avantajının "en güçlü" dil olması olduğunu söylüyor. Kendi argümanını, viaweb'in çeyreği gibi (satırlarla) Lisp makroları olduğunu söyleyerek desteklemektedir. Çoğu dilde meta programlama (özellikle 90'ların ortalarında mevcut olanlar) zordur. Üretim sunucusuna gönderilirse prototip değildir.
nmichaels
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.