การเขียนโปรแกรมเชิงฟังก์ชันเกี่ยวข้องกับการพัฒนาเว็บหรือไม่ [ปิด]


88

เมื่อเร็ว ๆ นี้ฉันได้เห็นเกี่ยวกับการเขียนโปรแกรมเชิงฟังก์ชันและ Clojure ดูน่าสนใจเป็นพิเศษ ในขณะที่ฉัน 'เข้าใจ' คำอธิบายพื้นฐานว่ามันคืออะไร แต่ฉันไม่สามารถเข้าใจได้ว่าฉันจะใช้มันในแต่ละวันในฐานะนักพัฒนาเว็บได้อย่างไรถ้าฉันทำได้ สิ่งที่ฉันได้อ่านจำนวนมากมุ่งเน้นไปที่ด้านคณิตศาสตร์ของการเขียนโปรแกรมเชิงฟังก์ชันแทนที่จะเป็นสถานการณ์การเขียนโปรแกรมทั่วไปที่พบใน OO ทั่วไป

ฉันมีปลายไม้ผิดหรือไม่? การเขียนโปรแกรมเชิงฟังก์ชันไม่เกี่ยวข้องกับการพัฒนาเว็บโดยสิ้นเชิงหรือไม่ ถ้าไม่มีมีตัวอย่างการใช้ "สำหรับเว็บ" หรือไม่

คำตอบ:


31

ตัวอย่างบางส่วนจากด้านบนของหัวของฉัน:

  • Yahoo! Store ขับเคลื่อนโดย Lisp (เดิมชื่อViawebก่อนการซื้อกิจการ)
  • Redditได้รับการสร้างต้นแบบอย่างสมบูรณ์ใน Lisp แม้ว่าพวกเขาจะเปลี่ยนมาใช้ Pythonในปี 2548
  • ข่าวแฮ็กเกอร์เขียนทั้งหมดด้วยภาษาอาร์ค (ภาษาถิ่นของ Lisp)

7
Yahoo! Store ถูกเขียนใหม่ใน c ++ ไม่กี่ปีที่ผ่านมา
เม.ย.

5
language! = กระบวนทัศน์การเขียนโปรแกรม.
phkahler

58
ตัวเลือกตัวอย่างแปลก ๆ ... Yahoo! Store เขียนโดย Paul Graham ซึ่งเป็นผู้สนับสนุน Lisp รายใหญ่ นอกจากนี้เขายังเขียน Hacker News ซึ่งก็คือโคลน Reddit อย่างมีประสิทธิภาพ สันนิษฐานว่า HN เขียนขึ้นเพื่อตอบสนองต่อการเปลี่ยนจาก Lisp เป็น Python ของ Reddit ในขณะที่พวก Reddit เป็นส่วนหนึ่งของ YCombinator: โปรแกรมเร่งความเร็วที่ดำเนินการโดย Paul Graham ฉันจะนับสิ่งนี้เป็นหนึ่งตัวอย่างไม่ใช่สามตัว
Brandon Bloom

การกำหนดค่าเซิร์ฟเวอร์ @ShermPendley การตั้งค่าเครือข่ายและการเข้าถึงฐานข้อมูลก็เป็นปัจจัยหลักในการทำงานเช่นกัน เวลาในการเรียกใช้สคริปต์ของเว็บแอปมักเป็นเพียงเศษเสี้ยวของต้นทุนโดยรวม
AgmLauncher

62

การเขียนโปรแกรมตามหน้าที่ตรงกับเว็บแอปเป็นอย่างดี เว็บแอปรับคำขอ HTTP และสร้างผลลัพธ์ HTML สิ่งนี้ถือได้ว่าเป็นฟังก์ชันจากการร้องขอไปยังเพจ

เปรียบเทียบกับแอปเดสก์ท็อปซึ่งโดยปกติแล้วเราจะมีกระบวนการทำงานที่ยาวนาน UI ที่มีสถานะและกระแสข้อมูลในหลายทิศทาง สิ่งนี้เหมาะกับ OO มากกว่าซึ่งเกี่ยวข้องกับวัตถุที่มีสถานะและข้อความส่งผ่าน


20

ฉันไม่เห็นว่าทำไมไม่ - ตราบใดที่คุณส่ง HTML ที่เป็นไปตามมาตรฐานไปยังเบราว์เซอร์พวกเขาไม่สนใจสิ่งที่คุณใช้สร้างมันไม่ว่าจะเป็นภาษาที่ใช้งานได้ภาษาที่จำเป็นหรือลิงที่ได้รับการฝึกฝน


20

เพียวเขียนโปรแกรมการทำงานอาจ map ไม่ได้เป็นอย่างดีในสภาพแวดล้อมของโปรแกรมเว็บ แต่อุปสรรคหลักคือการขาดโครงสร้างพื้นฐาน (เฟรมเวิร์กและ API) จะต้องใช้เวลานาน (อาจจะไม่เคยเป็นจริง) ก่อนที่ภาษาที่ใช้งานได้จะมีสภาพแวดล้อมการเขียนโปรแกรมบนเว็บที่สมบูรณ์แบบเช่น Java, Python หรือ Ruby

ที่กล่าวว่ามีตัวเลือกบางอย่าง

  • HAppS - เซิร์ฟเวอร์แอปพลิเคชันบนเว็บของ Haskell
  • หน้าเซิร์ฟเวอร์ Haskell
  • ลิงค์ - ภาษาการเขียนโปรแกรมบนเว็บที่ใช้งานได้
  • mod_caml - โมดูล OCaml CGI สำหรับ Apache
  • Ocsigen / Eliom - เว็บเซิร์ฟเวอร์ / กรอบการเขียนโปรแกรม OCaml
  • OPA - กรอบงานเว็บแอปพลิเคชันเชิงพาณิชย์
  • Yesod - เว็บเฟรมเวิร์กสำหรับ Haskell

ฉันไม่มีประสบการณ์ใด ๆ กับสิ่งเหล่านี้ บางทีผู้แสดงความคิดเห็นอาจพิจารณาสิ่งที่ใช้ได้ผลดีสำหรับพวกเขา



4

สำหรับ Clojure มีการเริ่มต้นที่น่าสนใจ (TheDeadline) ซึ่งพัฒนาโดยใช้ Clojure และ Google App Engine พวกเขามี ppt ที่ดีใน Slideshare และการให้สัมภาษณ์เกี่ยวกับ InfoQ

สำหรับการสนทนาที่ดีเกี่ยวกับการปรับใช้ Clojure กับ GAE: http://news.ycombinator.com/item?id=1239788

เท่าที่ฉันรู้ Clojure มีไลบรารีการพัฒนาเว็บอยู่สองสามแห่ง Compojure Ring Conjure

หวังว่านี่จะตอบคำถามของคุณได้นะ =) (ฉันก็เพิ่งเริ่มเหมือนกัน .. )

ดีที่สุดไรอัน


3

ไม่เกี่ยวข้องกับการพัฒนาเว็บโดยสิ้นเชิง แอปที่ทำงานอยู่บนเซิร์ฟเวอร์สามารถใช้ประโยชน์จากคุณสมบัติการทำงานเช่นการปิดฟังก์ชันลำดับที่สูงขึ้นความไม่เปลี่ยนรูปความโปร่งใสในการอ้างอิง ... การเขียนโปรแกรมเชิงฟังก์ชันช่วยได้ที่นี่และด้วยเหตุผลที่สำนวนของมันกำลังเจาะกลุ่มภาษาหลัก คุณสมบัติการใช้งานช่วยในเรื่องความกระชับทดสอบได้การขนานและยังสามารถให้วิธีแก้ปัญหาแบบเนทีฟสำหรับปัญหาที่คุณจะแก้ไขด้วยรูปแบบ

อัปเดต: มีเว็บเฟรมเวิร์กสำหรับภาษาที่ใช้งานได้ด้วย Weblocks สำหรับ Common Lisp, Lift for Scala นี่คือสิ่งที่ฉันเคยได้ยินมาอาจมีมากกว่านั้น ... อย่างไรก็ตามคุณไม่จำเป็นต้องใช้งานได้อย่างหมดจดตัวอย่างเช่น Scala ไม่บริสุทธิ์และควรทำงานกับกรอบงาน Java ใด ๆ คุณยังคงสามารถทำได้ เพื่อใช้การเขียนโปรแกรมเชิงฟังก์ชันสำหรับชั้นธุรกิจ ฯลฯ


3

ตรวจสอบUr / Web มันเร็วมากและระบบประเภทคงที่รู้เกี่ยวกับสิ่งต่างๆเช่น HTML และ SQL ดังนั้นจึงสามารถรับประกันสิ่งดีๆเกี่ยวกับความปลอดภัยได้ทุกประเภท


3

Erlang ดูเหมือนจะได้รับประโยชน์อย่างมากในโครงสร้างพื้นฐานบางอย่างสำหรับเว็บแอปที่ปรับขนาดได้ ฐานข้อมูล CouchDB และ Riak ส่วนใหญ่เขียนใน Erlang เช่นเดียวกับเซิร์ฟเวอร์จัดคิวข้อความ RabbitMQ หนึ่งในกุญแจสู่ความสำเร็จคือการจัดการการทำงานพร้อมกันผ่านการส่งข้อความโดยไม่มีสถานะที่เปลี่ยนแปลงร่วมกันได้ เป็นวิธีคิดเกี่ยวกับปัญหาที่มีประโยชน์มากกว่าภาษาการเขียนโปรแกรมเชิงฟังก์ชันใด ๆ

หรือดูที่ MapReduce มันเป็นวิธีที่ใช้งานได้ดีมากในการดูการคำนวณแม้ว่าแผนที่ของคุณและฟังก์ชันการลดจะเกิดขึ้นภายในสถานะ - และด้วยเหตุนี้จึงเหมาะอย่างยิ่งในการสืบค้นชุดข้อมูลขนาดใหญ่ด้วยวิธีที่ทนทานต่อความผิดพลาดและกระจาย

โดยทั้งหมดไปกับสิ่งที่ดูเหมือนจะเป็นประโยชน์สำหรับคุณ แต่ให้เขียนโปรแกรมเชิงฟังก์ชันไว้ในใจเสมอเพราะคุณไม่มีทางรู้ว่ามันจะมีประโยชน์เมื่อใด



2

ภาษาและกระบวนทัศน์ไม่สำคัญสำหรับเว็บแอปทุกอย่างดีและไม่ดีเท่ากัน หากคุณกำลังมองหาเหตุผลในการเรียนรู้กระบวนทัศน์ใหม่เพียงแค่ดำน้ำคำแนะนำของฉันคือการวิเคราะห์ปัญหาที่คุณกำลังพยายามแก้ไขและเลือกชุดเครื่องมือที่เหมาะสม



2

เราเพิ่งเปิดตัวสเปรดชีตออนไลน์ที่มีการเขียนแบ็กเอนด์ทั้งหมดใน Erlang

http://hypernumbers.com

ตามมาตรฐานใด ๆ นี่เป็นหนึ่งในเว็บแอปที่ซับซ้อนที่สุดที่คุณสามารถสร้างด้วย GUI ที่ยิ่งใหญ่ที่มีความซับซ้อนทางจิตใจ


2

ที่นี่เป็นประสบการณ์ที่นักพัฒนาเว็บในการสร้างปพลิเคชันเว็บโดยใช้Haskell แม้ว่าภาษาที่ใช้งานได้จะมีความปลอดภัยและมีการทำงานพร้อมกันที่ดี แต่ก็ยังขาด API ของสายพันธุ์ที่ดีที่สุดเนื่องจากเป็นที่รักของสถาบันการศึกษามานานและยังไม่ได้รับการยอมรับอย่างมากในโลกแห่งความเป็นจริง หวังว่าคงไม่ไกลเกินไป Erlang ได้เข้าไปแล้ว


1

เหตุผลที่การเขียนโปรแกรมเชิงฟังก์ชันเป็นที่นิยมในการเขียนโปรแกรมบนเว็บก็คือการแบ่งปันและเปลี่ยนสถานะอย่างชัดเจนและช่วยให้โปรแกรมเมอร์สามารถแสดงส่วนที่ใช้งานได้อย่างหมดจดเป็นฟังก์ชันที่บริสุทธิ์ ฟังก์ชัน Pure มีข้อได้เปรียบในการทำงานแบบขนานที่ง่ายมากเนื่องจากไม่มีผลข้างเคียง

อย่างน้อยนั่นก็เป็นเหตุผลของฉัน


1

อีกคำตอบสั้น ๆ : http://www.mlstate.com - แพลตฟอร์มการพัฒนาเว็บเต็มรูปแบบโดยใช้ FP ความหมายที่ชัดเจนของภาษาอนุญาตให้มีการวิเคราะห์ความปลอดภัยและความปลอดภัยอัตโนมัติทุกประเภทการเพิ่มประสิทธิภาพ ฯลฯ

Caveat: ฉันทำงานที่นั่น


1

ภาษาที่ใช้งานได้อาจไม่มีประโยชน์โดยตรงสำหรับการสร้างแอปที่ยอดเยี่ยม แต่เราใช้กระบวนทัศน์การเขียนโปรแกรมเชิงฟังก์ชันอย่างมากในการสร้างแอปของเรา การเขียนโปรแกรมที่ใช้งานได้จริงทำให้ข้อ จำกัด ของ "ไม่มีผลข้างเคียง" สิ่งนี้ทำให้มั่นใจได้ว่าการโทรที่ใช้งานได้จริงจะให้ผลลัพธ์เดียวกันกับสิ่งที่เคยเรียกตามลำดับ สิ่งนี้ไม่เหมาะสำหรับการพัฒนาเว็บ แต่หากรวมการเขียนโปรแกรมเชิงฟังก์ชันเข้ากับระบบที่เปลี่ยนแปลงสถานะจะสามารถสร้างเว็บแอปที่มีประสิทธิภาพได้ มีลักษณะที่กระดาษของฉันสำหรับรายละเอียดเพิ่มเติม: FAST เซิร์ฟเวอร์ เหล่านี้ยังภาพนิ่ง


0

ได้เนื่องจากการเขียนโปรแกรมเชิงฟังก์ชันสามารถทำได้ในทุกภาษาคุณสามารถใช้เป็นนักพัฒนาเว็บได้ในแต่ละวัน

คุณควร? ขึ้นอยู่กับปัญหาที่คุณกำลังแก้ไข การเขียนโปรแกรมเชิงฟังก์ชันเป็นกระบวนทัศน์การเขียนโปรแกรมและตำแหน่งที่คุณควรใช้ขึ้นอยู่กับปัญหาที่คุณกำลังแก้ไข

เพื่อให้การตัดสินใจง่ายขึ้นลองคิดดูว่าการแก้ปัญหาบางอย่างง่ายขึ้นหรือไม่โดยใช้แนวคิด OOPs ที่การห่อหุ้มความหลากหลายการถ่ายทอดลักษณะเช่นคุณสมบัติสามารถทำให้ชีวิตของคุณง่ายขึ้นหรือไม่?

ถ้าใช่อย่าไปเขียนโปรแกรมเชิงฟังก์ชันที่นั่นและใช้ OOP หากแอปพลิเคชันของคุณกำลังจะทำการคำนวณ / คำนวณ / ตรรกะทางธุรกิจที่ซับซ้อนและเกี่ยวข้องกับการประมวลผลพร้อมกันอย่างหนักการเขียนโปรแกรมเชิงฟังก์ชันสามารถนำเสนอเครื่องมือและข้อดีมากมายในกรณีดังกล่าว

สิ่งเหล่านี้เป็นเพียงรูปแบบที่แตกต่างกันในการสร้างโครงสร้างและองค์ประกอบของโปรแกรมดังนั้นทั้งหมดนี้เกี่ยวกับการใช้เครื่องมือที่เหมาะสมสำหรับงานที่เหมาะสมพักทุกอย่างสามารถทำได้โดยใช้อะไรก็ได้

การเขียนโปรแกรมเชิงฟังก์ชันในการพัฒนาเว็บ:

JavaScript รองรับการเขียนโปรแกรมเชิงฟังก์ชันและได้รับการสนับสนุนอย่างมากเมื่อเราอยู่ในบริบทของการพัฒนาเว็บกรอบการตอบสนองได้รับอิทธิพลอย่างมากจากหลักการเขียนโปรแกรมเชิงฟังก์ชันและใช้ในเว็บแอปพลิเคชันจำนวนมาก

นอกจากนี้คุณยังสามารถค้นหาเว็บแอปพลิเคชันจำนวนมากที่สร้างและทำงานด้วยเฟรมเวิร์กที่พัฒนาบนภาษาโปรแกรมที่ใช้งานได้ตามรายการด้านล่าง

• WebSharper (F #)

•สแน็ป (Haskell)

•ลิฟท์ (Scala)

• Ocsigen (OCaml)

•บอสชิคาโก Zotonic (erLang)

หวังว่าคำตอบของฉันจะช่วยทุกคน


-2

คุณอาจจะไม่ใช้มันและไม่ควรใช้ แต่เมื่อคุณบอกว่ามีคนมักจะพบข้อยกเว้นของกฎ (Viaweb ฯลฯ ) โดยทั่วไปไม่มี "super language" มีเพียงบรรทัดของโค้ดที่ใช้งานได้โดยปกติจะอยู่ใน "Blub" แม้แต่พอลเกรแฮมยังกล่าวว่าประโยชน์หลัก (ในความเป็นจริงเท่านั้น) ของ Lisp คือความสามารถในการสร้างต้นแบบอย่างรวดเร็ว

นอกจากนี้ "ซูเปอร์ภาษา" มักจะขัดขวางมากกว่าเพิ่มความสามารถในการอ่านโค้ดซึ่งหมายความว่า "อัจฉริยะ" คนหนึ่งที่เขียนมันจะต้องรักษามันไว้ตลอดไปเพราะไม่มีใครสามารถเข้าใจมันได้โดยเฉพาะอย่างยิ่งเมื่อเขามีแนวโน้มที่จะเขียนมันในภาษาถิ่นของเขา สิ่งนี้จะลดขอบเขตที่เป็นไปได้ของโครงการใด ๆ ซึ่งหมายความว่าแม้ว่าสิ่งใหม่ ๆ จะสามารถทำได้ แต่ก็ไม่สามารถขยายได้และยังคงอยู่ในระดับที่ค่อนข้างเล็ก (เช่น Hacker News ใน Arc)

ไม่ได้หมายความว่าใครบางคนไม่สามารถมีความคิดอัจฉริยะและนำไปใช้ในรูปแบบที่ไม่สามารถเข้าใจได้ซึ่งจากนั้นสามารถเขียนซ้ำใน Blub และขยายออกไปเพื่อให้ผู้คนจำนวนมากได้รับประโยชน์จากมัน อันที่จริงนั่นคือสิ่งที่เกิดขึ้นในเรื่องราวความสำเร็จของ Lisp ทั้งหมดไม่ต้องพูดถึงนักปรัชญาชื่อดังทุกคนที่เคยมีชีวิตอยู่ แต่แน่นอนว่าหากคุณเป็น "อัจฉริยะ" คุณก็อาจจะสร้างต้นแบบผลิตภัณฑ์ของคุณด้วยวิธีอื่นได้เช่นกัน

สำหรับ FP ใน JVM นั้นมีสิ่งที่ จำกัด แต่เจ๋งมาก แม้ว่าโดยส่วนตัวแล้วฉันจะใช้มันเพื่อการสร้างต้นแบบเท่านั้น แต่ก็เป็นไปได้ว่าคุณอาจมีกรณีการใช้งาน (โดยปกติจะเกี่ยวข้องกับมัลติเธรด) ซึ่งจะให้การปรับปรุงบางอย่าง


1
ที่จริงแล้ว Paul Graham กล่าวว่าข้อได้เปรียบที่ยิ่งใหญ่ของ Lisps คือภาษาที่ "ทรงพลังที่สุด" ที่มีอยู่ เขาสนับสนุนข้อโต้แย้งของเขาโดยบอกว่าสิ่งที่คล้ายกับหนึ่งในสี่ของผ่านทางเว็บ (ตามบรรทัด) คือมาโคร Lisp การเขียนโปรแกรมเมตาในภาษาส่วนใหญ่ (โดยเฉพาะอย่างยิ่งในช่วงกลางทศวรรษที่ 90) เป็นเรื่องยาก ไม่ใช่ต้นแบบหากถูกผลักไปยังเซิร์ฟเวอร์ที่ใช้งานจริง
nmichaels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.