มีสิ่งใดบ้างที่ Elixir สามารถทำได้ที่ Erlang ทำไม่ได้หรือในทางกลับกัน?


103

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

คำถามของฉันคือถ้าฉันเลือก Elixir ฉันจะสะดุดกับสิ่งที่ฉันไม่สามารถทำได้ แต่สามารถทำได้ใน Erlang หรือไม่? ฉันสามารถใช้ OTP ทุกอย่างไลบรารี Erlang ทั้งหมดการโหลดโค้ดและอื่น ๆ ด้วย Elixir ได้หรือไม่

ฉันไม่ได้ถามถึงความชอบของใครบางคนระหว่างคนทั้งสอง ข้อเท็จจริงเกี่ยวกับความเป็นไปได้ของภาษา โดยเฉพาะอย่างยิ่งจากผู้ที่ใช้ทั้งในการผลิต


20
@hedgehog ไม่ใช่ความเห็นความจริง คำถามคือ "คำถามของฉันคือถ้าฉันเลือก Elixir ฉันจะสะดุดกับบางสิ่งที่ฉันไม่สามารถทำได้ แต่สามารถทำได้ใน Erlang ฉันสามารถใช้ OTP ทั้งหมด, ห้องสมุด Erlang ทั้งหมด, การโหลดโค้ดและอื่น ๆ ด้วย Elixir ได้หรือไม่" และคำตอบนั้นขึ้นอยู่กับข้อเท็จจริงไม่ใช่ความเห็น
SašaŠijak

4
สำหรับคำถามนั้นคำตอบคือทุกสิ่งที่คุณทำได้ใน Erlang เป็นไปได้ใน Elixir แต่ชื่อเรื่องแสดงให้เห็นว่าคำถามคือสิ่งที่คุณควรลงทุนและคำตอบก็คือ "ขึ้นอยู่กับ" เธออยากทำอะไรล่ะ? สำหรับเว็บแอปพลิเคชัน Elixir นั้นดีกว่ามากเพราะสร้างขึ้นเพื่อแก้ปัญหานี้ สำหรับระบบกระจายบางประเภทคุณจะพบความเรียบง่ายของ Erlang ที่เหนือกว่า การขาดคุณสมบัติมักเป็นสิ่งที่ดี การเรียนรู้เฉพาะ Erlang จะช่วยให้คุณมุ่งเน้นไปที่บิตที่สำคัญที่สุด: OTP
tkowal

2
@ SašaŠijakฉันเปลี่ยนชื่อคำถามเพื่อให้ IMO สะท้อนสิ่งที่เกี่ยวกับเรื่องนี้ได้ดีขึ้น - เปลี่ยนกลับถ้าคุณไม่เห็นด้วย
Paweł Obrok

2
@ PawełObrokการแก้ไขที่ยอดเยี่ยมมันสรุปได้อย่างถูกต้องว่าฉันสนใจที่จะรู้
SašaŠijak

3
ทุกครั้งที่ฉันตั้งคำถามแบบนี้ฉันจะได้รับ
คะแนนโหวต

คำตอบ:


37

เพียงแค่นำหน้า - ฉันใช้ Elixir ในการผลิตเท่านั้นไม่ใช่ Erlang

ฉันอยากจะแนะนำ Elixir อย่างตรงไปตรงมา นี่เป็นความคิดเห็นของฉันและไม่จำเป็นต้องใช่สำหรับคุณ แต่ด้านล่างฉันจะระบุเหตุผลของฉัน

  1. ผลผลิต: ฉันมาจากพื้นหลัง Ruby / Rails ดังนั้นไวยากรณ์และรูปแบบ Elixir จึงเป็นสิ่งที่ฉันคุ้นเคยมาก ปัจจัยหลักอย่างหนึ่งที่ช่วยให้ฉันตัดสินใจได้ว่าจะเรียนรู้ภาษาได้หรือไม่คือฉันสามารถทำงานได้ดีเพียงใดโดยส่วนใหญ่เป็นเหตุผลที่ฉันเลือก Ruby Elixir ก็เช่นเดียวกัน ฉันสามารถทำงานได้เร็วที่สุดเท่าที่จะทำได้ Ruby ด้วยประโยชน์เพิ่มเติมทั้งหมดของการทำงานพร้อมกันและการจับคู่รูปแบบ
  2. Erlang: เนื่องจาก Elixir สร้างขึ้นที่ด้านบนของ Erlang และรวบรวมลงไปที่ erlang และ beam vm คุณจึงสามารถเข้าถึงโมดูลและแพ็คเกจของ erlang ได้ ดังนั้นหากคุณกังวลเกี่ยวกับการใช้ยาอายุวัฒนะและพลาดคุณสมบัติทั้งหมดของ Erlang คุณไม่ควรเป็น Elixir ยังมีการใช้งานคุณสมบัติ Erlang / OTP ที่ใหญ่กว่าเช่น GenServer, GenEvent เป็นต้น
  3. ชุมชน / แหล่งข้อมูล: ชุมชน Elixir เป็นชุมชนที่ยอดเยี่ยมจริงๆ ช่องหย่อนเป็นช่องทางยอดนิยมและเป็นวิธีที่ดีในการรับคำตอบสำหรับคำถามระดับเริ่มต้น มีหนังสือที่เขียนด้วยภาษาที่ดีอยู่แล้ว (Programming Elixir 1.2 - Dave Thomas ผู้แต่ง Ruby Pickaxe) ซึ่งทำให้การเข้าสู่ภาษาเป็นเรื่องง่าย

จริงๆแล้วถ้าคุณมีปัญหากับทั้งสองคนคุณอาจตัดสินใจเหมือนกันว่า Elixir เป็นภาษาที่ดีกว่ามากพร้อมคุณสมบัติทั้งหมดของ Erlang + More มันเพิ่มขึ้นเรื่อย ๆ ฉันจำตัวเลขที่แน่นอนไม่ได้ แต่ฉันจำได้ว่าอ่านบางอย่างจากเว็บไซต์ Hex (ตัวจัดการแพ็คเกจ) เกี่ยวกับการดาวน์โหลดแพ็คเกจที่เพิ่มขึ้นอย่างมาก


14
Elixir ไม่ได้รวบรวมลงใน Erlang แต่จะรวบรวมลงในโค้ด BEAM Elixir ไม่คล้ายกับ Coffeescript และอื่น ๆ อัล แค่เขียน JS
Peter R

64

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

ใน Elixir:

:erlang_module.erlang_function(args)

ใน Erlang:

'Elixir.ElixirModule':elixir_function(args)

2
บางครั้งอาจเป็นเรื่องยุ่งยากเล็กน้อยเมื่อสร้างรุ่นที่มีการอ้างอิงซ้อนกันหรือกรณีเฉพาะอื่น ๆ แต่ฉันคิดว่านี่เป็นคำตอบที่ถูกต้อง หมายเหตุ : หากใช้งานบนเครื่องที่มีทรัพยากร จำกัด การเพิ่มการพึ่งพา Elixir และ Elixir ในรีลีสอาจหนักกว่าในแง่ของหน่วยความจำ ดังนั้นถ้าฉันจำไม่ผิดบางครั้งอาจเกิดขึ้นได้ว่าการยึดติดกับ Erlang บริสุทธิ์อาจมีประโยชน์ในการบันทึกหน่วยความจำไม่กี่เมกะไบต์ทำให้ง่ายต่อการหลีกเลี่ยงข้อขัดข้องเมื่อไม่มีพื้นที่เหลือให้ขยาย VM
Laymer

37

TL; DR - เริ่มต้นด้วย Elixir

Erlang มีเส้นโค้งการเรียนรู้ที่สูงชันกว่าเมื่อเทียบกับ Elixir เมื่อคุณเริ่มเรียนรู้ Elixir คุณจะเริ่มเรียนรู้ Erlang โดยอัตโนมัติ ดังนั้นเริ่มต้นด้วย Elixir Elixir เขียนด้วยภาษา Erlang และ Elixir ดูการแจกจ่ายบน Github (เนื่องจาก Elixir เต็มไปด้วยมาโครหรือที่เรียกว่า meta-programming) การแจกจ่ายรหัสโครงการ Elixir

คุณสามารถใช้ Elixir กับ Erlang และในทางกลับกันได้ด้วยเหตุนี้ระบบนิเวศ Erlang ที่เต็มไปด้วยห้องสมุดมากกว่า 20 ปี

รายละเอียดเพิ่มเติมจากErlang Solutions

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

บล็อกโพสต์ของJoe Armstrong (ผู้ประดิษฐ์ Erlang) เกี่ยวกับ Elixir

เริ่มต้นที่นี่เพื่อเรียนรู้เกี่ยวกับ Elixir - เริ่มต้นใช้งาน

เมื่อคุณรู้สึกของมันไปได้ดีวิธีการทำงานของคุณที่มีต่อการฝึกในExercismและทรัพยากรอื่น


3

มีไม่กี่อย่าง ฉันคิดว่าคุณไม่สามารถสร้างฟังก์ชัน anon แบบเรียกซ้ำใน Elixir ได้ ตอนนี้เพื่อความยุติธรรมนี่คือสิ่งที่ใน 8 ปีขึ้นไปของ Erlang ฉันไม่คิดว่าจะต้องทำและถ้าฉันทำได้ก็สามารถทำได้อย่างง่ายดายด้วยวิธีอื่น อาจมีสิ่งอื่น ๆ อีกสองสามอย่างที่คุณสามารถเพิกเฉยได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.