การเขียนโปรแกรมเชิงภาษานั้นใช้ได้จริงหรือไม่?


12

ฉันอ่านบทความนี้เกี่ยวกับการเขียนโปรแกรมเชิงภาษา เขาชี้ให้เห็นถึงจุดอ่อนบางอย่างในวิธีการ / OOP ขั้นตอนการเขียนโปรแกรมที่ทันสมัยและแนะนำกระบวนทัศน์การเขียนโปรแกรมใหม่ที่จะแก้ปัญหาพวกเขา

ฉันเป็นส่วนเล็ก ๆ ของโปรแกรมที่มีขนาดเล็กและหลวม: มันเป็นการดียิ่งกว่าที่จะเรียนรู้สิ่งเล็ก ๆ น้อย ๆ มากมายที่คุณจะใช้ทั้งหมดไม่ใช่แค่เรื่องใหญ่ ๆ สองอย่างที่คุณใช้เพียงส่วนเล็ก ๆ

การอ่านบทความฉันรู้สึกว่าผู้เขียนกำลังโปรโมตสิ่งหนึ่งในสองสิ่งนี้:

  • ภาษาสคริปต์ที่สร้างสรรค์ได้ง่ายมากมาย
  • ภาษาเดียวที่สามารถยืดขยายได้อย่างง่ายดายซึ่งสามารถเขียนใหม่เพื่อตอบสนองความต้องการของโปรแกรมเมอร์

หากเขาแนะนำสองฉันจะตอบกลับด้วย "เสร็จเรียบร้อยแล้ว!" และให้เสียงกระเพื่อมเป็นตัวอย่าง ขณะที่พอลเกรแฮมแนะนำภาษาดูเหมือนจะย้ายอย่างต่อเนื่องต่อการอยู่แล้วนี้

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


แน่นอนว่ามันมีศักยภาพที่น่าเหลือเชื่อ

2
ยังไม่ชัดเจนสำหรับฉันว่าปัญหานี้แก้ปัญหาได้อย่างไร อย่างไรก็ตาม LISP ไม่ใช่ตัวอย่างของภาษาที่ประสบความสำเร็จ
mouviciel

7
@mouviciel มันขึ้นอยู่มากมายกับสิ่งที่คุณหมายถึงโดย "ประสบความสำเร็จ" มันถูกใช้โดยโปรแกรมเมอร์ส่วนใหญ่หรือไม่? ไม่มันใช้งานมานานแล้วหรือเปล่า? ใช่ - 50 ปีและการนับ ภาษาสมัยใหม่ส่วนใหญ่ขโมยคุณสมบัติที่มีประโยชน์มากมายจากภาษานั้นหรือไม่? ใช่. (ภาษาสามารถขโมยเพิ่มเติมจากภาษา Lisp ได้อีกหรือไม่ใช่!)
Frank Shearar

2
มีความแตกต่างระหว่างภาษาที่ใช้กันอย่างแพร่หลายและมีประโยชน์ โดยทั่วไปภาษาที่ใช้ในการสำรวจพื้นที่ใหม่นั้นไม่ได้ใช้ แต่อาจมีส่วนช่วยในระยะยาว ในทางกลับกัน Java ไม่มีประโยชน์เนื่องจากมันไม่ได้นำสิ่งใหม่มาสู่ตาราง (แม้ว่าจะเป็นภาษาที่ประสบความสำเร็จโดยทุกบัญชี)
Matthieu M.

1
ฉันคิดว่ามันมีประโยชน์มากกว่าที่จะใช้ Lisp มากกว่า Master Cobol
ลนนาตรอน

คำตอบ:


8

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

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

ฉันคิดว่าสิ่งที่ทำให้ภาษา Domain Specific คือขอบเขตที่มันแสดงออกถึงแนวคิดทางจิตที่กำลังสื่อสารกันอยู่และฉันคิดว่ามันมีวิธีการที่ง่าย โดยทั่วไปหากมีความต้องการอิสระแบบสแตนด์อะโลนอิสระ X ซึ่งอาจรวมอยู่ในโปรแกรมหรือไม่การใช้งานที่ถูกต้องจำเป็นต้องมีชุดของการแทรกโค้ดการลบและการแทนที่ Y ชุดต่าง ๆ ที่เรียบง่ายก่อนและหลังสามารถแสดงได้ Y. จำนวน N ของการเปลี่ยนแปลงดังกล่าวเป็นการวัดว่าภาษานั้นใช้กับโดเมนใด N ที่เล็กกว่านั้นสำหรับความต้องการทั่วไปจะดีกว่า

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

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

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

ฉันไม่เห็นว่าเกิดอะไรขึ้น แต่พวกเขาติดอยู่ใน "โปรแกรม = อัลกอริทึม + โครงสร้างข้อมูล" หรือ "คำนามกลายเป็นคลาสและคำกริยากลายเป็นวิธีการ" โหมดคิดแบบเลี้ยว - หมุน พวกเขาไม่ได้ทำงานในแง่ของวิธีการใช้โดเมนความคิดและภาษาพวกเขาสำหรับความรัดกุมสูงสุด


เห็นด้วยกับคุณอย่างแน่นอนในส่วนของ bandwagon - "เจ้านายที่มีผมแหลมรู้ว่าควรใช้ภาษาใดในการเขียน [... ] Java" อีกประเด็นคือสิ่งที่โจเอลเรียกว่า "มนุษย์อวกาศสถาปัตยกรรม" ฉันสามารถเห็น DSLs ซ้อนกันบนinfitium โฆษณา (sp?) ฉันคิดว่ามันลงไปที่โปรแกรมเมอร์ -> วิศวกรซอฟต์แวร์ -> นักวิทยาศาสตร์คอมพิวเตอร์
Michael K

และถ้ามันไม่ต้องใช้ความพยายามที่จะเข้าใจโอกาสที่มันไม่ได้จริงๆมันคุ้มค่า :)
ไมเคิล K

4

นั่นเป็นแนวทางของทับทิม

  • ทำให้ภาษาหลักง่ายและขยายผ่านอัญมณี
  • สร้างภาษาถิ่นของ Ruby สำหรับโดเมนที่ต้องการผ่านการปรับปรุงลิง ig Ruby on Rails

ฉันไม่รู้ว่านี่จะดีกว่านี้หรือไม่ แต่ฉันคิดว่ามันจะเป็นประโยชน์


7
RoR ไม่ใช่ภาษาถิ่นของ Ruby
back2dos

4
@ back2dos: ฉันกำลังคิดในการเปรียบเทียบโปรแกรม แน่นอน RoR ไม่ใช่ภาษาโปรแกรมที่แตกต่างกัน สิ่งที่ฉันหมายถึงโดยภาษาคือแม้ว่าทุกอย่างภายใต้ Rails เป็น Ruby จากมุมมองของนักพัฒนาเขาใช้ Ruby ในระดับที่สูงกว่าของนามธรรม โดเมน ภาษาถิ่น เขาใช้มุมมองแบบจำลองตัวควบคุมและเขาเขียนโปรแกรมโดยใช้ไวยากรณ์ที่คล้ายกับภาษาอื่นภาษาถิ่นเพื่อพูด นั่นคือความงามของภาษาสคริปต์ที่ทรงพลังราวกับทับทิม
Nerian

ฉันคิดว่ามันเป็นสิ่งสำคัญที่จะเห็นความแตกต่าง AspectJ เป็นภาษาของ Java ในขณะที่ AspectR เป็นเพียงไลบรารี Ruby ความแตกต่างคือภาษาจริงๆ Ruby ถูกออกแบบมาเพื่อมอบความยืดหยุ่นและการแสดงออกและ Java ไม่ได้เป็นเช่นนั้น ทั้งสองถือเป็นภาษาสำหรับวัตถุประสงค์ทั่วไปความแตกต่างคือโดยทั่วไปแล้วทับทิมจะมีความหมายเพียงพอที่จะกำจัดความต้องการของ DSL ที่แท้จริงสำหรับจุดประสงค์ทั่วไปในขณะที่ Java ไม่ได้เป็นเช่นนั้นแม้ว่าคุณจะใช้มุมมองแบบจำลองและตัวควบคุมทั่วไป
back2dos

1

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


ให้อภัยความไม่รู้ของฉัน - eDSL อาจเป็นตัวประมวลผลล่วงหน้าสำหรับภาษา anther ใช่ไหม?
Michael K

@Michael ใช่มันเป็นไปได้ที่จะใช้ eDSL ด้วยวิธีนี้ดูตัวอย่าง CamlP4 แต่บ่อยครั้งที่ eDSL ถูกสร้างขึ้นตามคุณสมบัติของภาษา (เช่น Lisp macros, เท็มเพลต C ++ เป็นต้น)
SK-logic

1

เราจะได้เห็นเกี่ยวกับ Domain Specific Languages ​​มากขึ้นในอนาคตตัดสินโดยคนที่กำลังพูดถึงพวกเขาในตอนนี้ - ฉันสังเกตว่าMartin Fowlerพูดถึงพวกเขามากมายและบทความที่น่าสนใจผ่านLambda The Ultimateในหัวข้อ ท่ามกลางคนอื่น ๆ.

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


คุณสามารถเพิ่ม FoF ด้วยกำลังถูกใช้ในการพัฒนาไดรเวอร์สำหรับ Barrelfish มัลติเคอร์เนล ภาษาที่ใช้พัฒนา DSL ใน :)
Matthieu M.

0

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

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