ภาษา "มีประสิทธิภาพ" คืออะไร?


22

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


5
ภาษามีประสิทธิภาพเท่ากับผู้ใช้
ysolik

6
@ysolik ไม่จำเป็นต้องเป็นจริง ฉันสามารถให้คนเส็งเคร็งภาษาและดูว่าพวกเขาได้รับไกลแค่ไหน มันมีหนึ่ง op, NOOP! =)
ทำเครื่องหมาย Canlas

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

1
PowerBASIC: ไม่สามารถมีพลังมากกว่านั้น ^^
gablin

1
@ysolik: มันจะแม่นยำกว่าที่จะพูดว่า "ภาษาไม่สามารถมีประสิทธิภาพมากกว่าผู้ใช้ของมัน"
Duncan Bayne

คำตอบ:


32

เราไม่สามารถกำหนดได้ว่าภาษาที่ "มีประสิทธิภาพ" คืออะไรหากไม่ได้กำหนดคำว่า "มีประสิทธิภาพ" ก่อน

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

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

  • เฟรมเวิร์กหรือไลบรารีที่มีวัตถุประสงค์ทั่วไปมากมายสำหรับการทำงานทั่วไปที่หลากหลาย
  • ไวยากรณ์เฉพาะโดเมนที่ซับซ้อนที่ "ทำสิ่งหนึ่งและทำได้ดี"
  • การเข้าถึงฟังก์ชั่นเครื่องจักรโดยตรงเช่นความสามารถในการเขียนรหัสระดับต่ำ
  • สรุปแนวคิดระดับเครื่องออกไปคือความสามารถในการเขียนรหัสระดับสูง
  • ระบบประเภทที่สมบูรณ์มากที่ช่วยให้สามารถใช้กลยุทธ์ขั้นสูงเช่นการสะท้อนการวิเคราะห์และการวิเคราะห์แบบคงที่
  • ระบบพิมพ์ที่หลวมมากซึ่งอนุญาตให้โปรแกรมเมอร์เพิ่งจะทำเสร็จ (การข่มขู่ประเภท ฯลฯ )
  • ความสามารถในการปฏิบัติต่อทุกสิ่งเป็นวัตถุซึ่งมีการตรวจสอบแนวคิด
  • ความสามารถในการปฏิบัติต่อทุกสิ่งเป็นฟังก์ชันซึ่งให้การยืนยันทางคณิตศาสตร์
  • การจัดการหน่วยความจำและทรัพยากรอัตโนมัติ (GC, RAII) นำไปสู่ข้อบกพร่องที่น้อยลง
  • หน่วยความจำด้วยตนเองและการจัดการทรัพยากรซึ่งอาจนำไปสู่การเพิ่มประสิทธิภาพ
  • จำนวนเสียงน้อยที่สุดที่นำไปสู่การอ่านที่ดีขึ้น
  • ไวยากรณ์ที่เหมือนภาษาอังกฤษมากขึ้นซึ่งมีช่วงการเรียนรู้ที่ตื้นกว่า
  • ความสามารถในการเขียนรหัสที่รัดกุมมาก(เช่นผู้ประกอบการที่ประกอบไปด้วยสามส่วน, รวมตัวเป็นโมฆะ, นามสกุลโมฆะ)
  • การไม่สามารถเขียนรหัสที่อาจทำให้สับสน (เช่นไม่มีผู้ประกอบการที่สามเป็นต้น)

ทุกคนเห็นว่าเกิดอะไรขึ้นที่นี่ แทบทุกคุณลักษณะของ bullet-point นั้นสามารถตีความได้ว่าเป็นสัญลักษณ์ของ "กำลัง" และมันสามารถตรงกันข้ามได้แน่นอน!

ใครบางคนอยู่ที่ไหนสักแห่งคิดอย่างเห็นได้ชัดว่าตัวแปรตัวแปรเป็นความคิดที่น่ากลัวที่จะทำให้ภาษามากที่มีประสิทธิภาพ ฉันจะไม่ตัดสิน ฉันไม่ใช่คน PHP

ฉันเสนอว่าแทนที่จะเป็นเรื่องไร้สาระสงครามศักดิ์สิทธิ์เราทุกคนใช้คำจำกัดความที่เรียบง่ายนี้:

ภาษาที่ทรงพลังที่สุดคือภาษาที่ให้คุณจัดส่งผลิตภัณฑ์ที่มีคุณภาพสูงสุดในราคาที่ถูกที่สุดในเวลาอันสั้น

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

ไม่เช่นนั้นคุณอาจจะนำมีดขนาดใหญ่มาต่อสู้กับปืน


1
+1 นี่คือคำจำกัดความเดียวที่พยายามที่จะรวมความคิดต่าง ๆ ของพลังภาษาทั้งหมด ฉันชอบวิธีที่คุณแสดงให้เห็นว่าฟีเจอร์ที่ขัดแย้งกันทั้งสองแบบนั้นถือว่ามีประสิทธิภาพ วิทยาการคอมพิวเตอร์เป็นศาสตร์แห่งการแลกเปลี่ยนแม้กระทั่งในการเลือกภาษา
CodexArcanum

11

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

C, C ++, D มีพลัง แต่เห็นได้ชัดว่านี่เป็นเพียงความเห็นของฉัน


คุณจะใช้ Java สำหรับการเขียนโปรแกรมระดับเคอร์เนลหรือฉันเข้าใจคุณผิด?
Davy8

@ Davy8 คุณถูกต้องตามคำนิยามของฉันฉันไม่ควรรวม Java
grokus

5

มีคำจำกัดความบางประการของพลังที่เกินความสมบูรณ์ของทัวริง มาร์คอ้างถึงสิ่งที่ฉันมักจะคิดว่าเป็น "คำจำกัดความของพอลเกรแฮม" มันเป็นคำนิยามที่ดีทีเดียวมีข้อบกพร่องร้ายแรงหนึ่งข้อ: มันผิด ในทางทฤษฎีแล้วคำจำกัดความที่ดีของพลังภาษา แต่คุณรู้ว่าสิ่งที่พวกเขาพูดเกี่ยวกับความแตกต่างระหว่างทฤษฎีและการปฏิบัติ ...

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

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

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

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

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


1
ปัญหาที่ฉันมีกับสิ่งนี้คือมันดูเหมือนว่าจะชี้ไปที่ภาษาโคบอลเป็นภาษาที่มีประสิทธิภาพมาก
David Thornley

2
ฉันรับไปคุณไม่รู้เสียงกระเพื่อม? :)
dash-tom-bang

1
@ Matt: นั่นคือสิ่งที่ สิ่งที่ภาษาใช้สำหรับถูก จำกัด ด้วยภาษาที่สามารถใช้งานได้และคุณสามารถทำอะไรกับ Python ได้น้อยลงกว่าภาษาที่ไม่มีรายละเอียดเกี่ยวกับหน่วยความจำที่เป็นนามธรรม
Mason Wheeler

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

1
@ Jörg W Mittag: ถูกต้อง แต่ฉันคิดว่าประโยคที่ฉันอ้างถึงหมายถึงการควบคุมโดยตรงของทรัพยากรฮาร์ดแวร์ (เช่นหน่วยความจำ): C ++ ช่วยให้คุณควบคุมได้มากขึ้น แน่นอนถ้าคุณใช้เครื่องเสมือนคุณสามารถควบคุมได้เต็มรูปแบบ แต่ฉันคิดว่า Mason Wheeler เรียกว่ามีการควบคุมเครื่องจริง
Giorgio

4

สิ่งนี้ได้รับการถกเถียงกันซ้ำ ๆ ที่มีความยาวมาก (เช่นบน comp.lang.lisp หลายครั้ง) ฉันไม่คิดว่ามีใครมากับคำตอบที่ "ถูกต้อง" แต่มีคนจำนวนมากที่คิดคำตอบที่ทำให้ฉันผิดอย่างเห็นได้ชัด

ในคำตอบที่ฉันเห็นที่นี่ให้ฉันเลือกคำตอบของ Mason Wheeler ในอีกด้านหนึ่งประเด็นที่เขากล่าวถึงมีความสำคัญ - แต่ในอีกแง่หนึ่งฉันไม่สามารถจินตนาการได้เลยว่าการเรียกพวกเขาเกี่ยวข้องกับ "อำนาจ" มันเหมือนกับว่าเขากำลังพูดว่า Honda mini-van ของเขามีประสิทธิภาพมากกว่า dragster ที่เติมน้ำมันเพราะมันปลอดภัยกว่าเงียบกว่ามีการควบคุมที่ดีกว่าห้องโดยสารที่มากขึ้นและการขับขี่ที่สะดวกสบายยิ่งขึ้น ทั้งหมดนี้เป็นความจริงอย่างแน่นอนและเป็นสิ่งสำคัญ ปัจจัยเหล่านั้น (ในหมู่คนอื่น ๆ ) ทำให้รถมินิแวนนั้นมีประโยชน์และสมเหตุสมผลสำหรับคนส่วนใหญ่ - แต่พวกเขาไม่ได้เปลี่ยนความจริงที่ว่าเครื่องยนต์ของรถมินิแวนนั้นผลิตได้เพียง 250 แรงม้าในขณะที่คนขับรถลาก

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

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


3

ความสมดุลที่เหมาะสมของความกะทัดรัดและความยืดหยุ่น

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

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

ภาษาที่ทรงพลังคือภาษาที่ให้คุณพูดหลายสิ่งหลายอย่างด้วยความยาวน้อยที่สุดเท่าที่จะเป็นไปได้


1
-1 ฉันขอโทษ แต่นั่นไม่ได้เป็นเพียงความเข้าใจผิด แต่เป็นสิ่งที่อันตรายเพราะมันสามารถขัดขวางการผลิตอย่างรุนแรงต่อไปในบรรทัด
Mason Wheeler

@Mason Wheeler: คุณอธิบายได้ไหม?
Joey Adams

@Joey: ดูคำตอบของฉันสำหรับคำถามนี้
Mason Wheeler

1

เมื่อคุณกดทัวริงเสร็จแล้ว (และเป็นเรื่องง่ายสำหรับภาษาที่จะทำสิ่งนี้) "พลัง" ไม่ได้มีความหมายอะไรมากในแง่ที่ว่าสิ่งใดก็ตามที่คุณสามารถพูดได้ในภาษาทัวริงที่สมบูรณ์ คำตอบของ Mark Canlas ตอกย้ำความกะทัดรัดและความยืดหยุ่นที่สร้างความแตกต่าง

ต้องบอกว่ากระดาษของ Matthias Felleisen ในพลังของการเขียนโปรแกรมภาษาทำให้การอ่านที่น่าสนใจ ในนั้นเขาพยายามที่จะทำให้ความคิดของการแสดงออกในภาษาที่เป็นทางการ


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

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

1

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

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

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

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

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

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

โดยอุปนัยผู้เขียนโปรแกรมเพียงคนเดียวที่สามารถเห็นความแตกต่างของอำนาจระหว่างภาษาต่าง ๆ คือผู้ที่เข้าใจผู้ที่มีอำนาจมากที่สุด (นี่อาจเป็นสิ่งที่ Eric Raymond มีความหมายเกี่ยวกับ Lisp ทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้น) คุณไม่สามารถไว้วางใจความคิดเห็นของผู้อื่นได้เนื่องจาก Blub Paradox: พวกเขาพอใจกับภาษาใดก็ตามที่พวกเขาใช้เพราะมันกำหนด วิธีที่พวกเขาคิดเกี่ยวกับโปรแกรม

ฉันไม่เห็นด้วยกับแบบจำลองของคุณว่าภาษาทุกภาษาจำเป็นต้องมีคะแนนเท่ากันในการแจกจ่าย ลองยกตัวอย่างสุดยอดของ brainf * ck และเราสามารถพูดได้อย่างง่ายดายว่ามันไม่สามารถเทียบได้กับภาษาสมัยใหม่ใด ๆ แม้ว่าจะมีเพียงจำนวนคะแนนรวมเท่านั้น เช่นมันไม่ใช่เกมผลรวมเป็นศูนย์ในภาษาการเขียนโปรแกรม - ภาษาไม่ได้เริ่มต้นด้วยจุด x และกระจายพวกเขาพวกเขาเริ่มต้นด้วย 0 และได้รับคะแนนขึ้นอยู่กับคุณสมบัติ ว่ามีการประนีประนอมบางอย่างที่ต้องดำเนินการเป็นธรรมชาติแน่นอน แต่ตัวเลือกทั้งหมดไม่เท่ากัน (ความเห็นของฉันอย่างน้อย)
n1ckp

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

ขออภัยฉันอ่านโพสต์ของคุณอีกครั้งและฉันต้องยอมรับว่าฉันอ่านเร็วไปหน่อย .. แต่ฉันก็ยังไม่เห็นด้วยว่าทุกภาษา (หลัก) มีจุดเดียวกันโดยประมาณ ลองใช้ Java และ c ++ เพราะพวกเขาเป็นภาษาที่ฉันรู้จักค่อนข้างดี ฉันค่อนข้างมั่นใจว่าฉันสามารถยืนยันได้ว่า c ++ มีประสิทธิภาพมากกว่า Java เพียงเพราะว่า c ++ เป็นพื้นทุกอย่างที่ Java ทำ (ยกเว้น gc - แต่จากนั้น Java ไม่ได้เสนอการจัดการหน่วยความจำด้วยตนเอง) รวมทั้งมากกว่า (เทมเพลต FTW จริง) นั่นคือสิ่งที่ฉันต้องการทำให้ฉันคิดว่า: ไม่ทุกภาษาไม่เท่ากันในการเขียนโปรแกรมดินแดนนางฟ้าแม้
n1ckp

เมื่อเปรียบเทียบภาษากระแสหลักเท่านั้น
n1ckp

0

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

ฉันขอยืนยันว่าภาษาที่ "มีประสิทธิภาพ" ที่สุดคือภาษาที่ช่วยให้คุณบรรลุเป้าหมายของคุณโดยใช้เวลาน้อยที่สุดพลังงานและการวิจัยอื่น ๆ นั่นคือภาษาที่ให้ผลตอบแทนการลงทุนที่ยิ่งใหญ่ที่สุด ในบางสถานการณ์อาจเป็น C; ในอื่น ๆ Java; ในคนอื่นยัง Haskell

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


-1

การสนทนาเกี่ยวกับภาษาการเขียนโปรแกรมคือ - IMHO - เช่นการสนทนาเกี่ยวกับโปรแกรมรับส่งเมลในกลุ่มข่าว Linux บางกลุ่ม: พวกเขามีแนวโน้มที่จะเป็นสงครามที่ลุกเป็นไฟ ฉันสามารถจำเวลาที่ VB6 เป็นที่นิยม มีคนถึงกับเถียงว่าไม่ใช่ภาษาการเขียนโปรแกรมเลยในขณะที่คนอื่นสร้างแอพพลิเคชั่นที่น่าทึ่ง

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


+1 เพื่อตอบโต้ downvote ที่ไม่ได้อธิบายและเพราะโดยทั่วไปฉันเห็นด้วย ใช้คำแนะนำสำหรับงานที่ได้รับการออกแบบมา อย่าเขียน GUI ที่ซับซ้อนใน C อย่าเขียนอัลกอริธึมที่ซับซ้อนหรือ OSes ใน VB6
Gerry

-1

มันเป็นเครื่องมือทั้งหมดในหีบเครื่องมือของคุณ ค้อนสามารถทรงพลังได้ แต่ไม่ใช่ถ้าคุณต้องการประแจ C / C ++ นั้นยอดเยี่ยมถ้าคุณเป็นโปรแกรมเมอร์ระบบ แต่ Adobe Flash น่าจะเหมาะกับเว็บไซต์เกมที่คุณต้องการสร้าง


-1

ภาษาโปรแกรมที่ทรงพลังที่สุดคือภาษาที่แก้ปัญหาการโปรแกรมเชิงเส้นต่อไปนี้:

เพิ่ม

      ความรวดเร็วของการพัฒนา
    + ความง่ายในการอ่านโค้ด
    + ความง่ายในการดีบั๊ก
    + ความกะทัดรัด / ความกะทัดรัดของการแสดงออก
    + ความง่ายในการเรียนรู้ / การสอน
    - การใช้ CPU
    - ข้อกำหนดหน่วยความจำ

ภายใต้

  • มันจะต้องสมบูรณ์แบบทัวริง
  • มันจะต้องมีหลายกระบวนทัศน์ : การทำงานเชิงวัตถุการเขียนโปรแกรมเชิงตรรกะการเขียนโปรแกรมข้อ จำกัด การทำงานพร้อมกันการคำนวณแบบกระจาย ฯลฯ
  • มันจะต้องหลากหลายซึ่งทำให้สามารถสร้างอินเตอร์เฟสบรรทัดคำสั่งไลบรารีคอมโพเนนต์เซิร์ฟเวอร์ GUI และเว็บแอปพลิเคชันได้
  • มันจะต้องเป็น แบบพกพาเช่นง่ายต่อการพอร์ตและบำรุงรักษาในการตั้งค่าข้ามแพลตฟอร์ม
  • มันจะต้องเป็น ปรับเปลี่ยนได้เช่นเปิดให้มีการเปลี่ยนแปลงและสามารถพัฒนาเป็นฮาร์ดแวร์ใหม่ (ชิปควอนตัม) กระบวนทัศน์ใหม่และนวัตกรรมอื่น ๆ ในเทคโนโลยีที่เกิดขึ้น
  • ต้องส่งเสริมการพัฒนาห้องสมุด (เช่น CPAN, CTAN และ CRAN)
  • มันจะต้องเป็นฟรีและเปิดแหล่งที่มา

(และใช่ฉันรู้ว่าฉันโพสต์คำตอบที่ขัดแย้งอย่างสมบูรณ์แล้วนั่นเป็นเพราะฉันเป็น dialectcian)


-2

สิ่งนี้เขียนขึ้นเกี่ยวกับภาษาธรรมชาติ แต่ฉันคิดว่ามันเหมาะสมกับภาษาโปรแกรมเช่นกัน:

ความเชื่อที่ว่าบางภาษานั้นเหนือกว่าผู้อื่นนั้นแพร่หลาย แต่ก็ไม่มีพื้นฐานในความเป็นจริงทางภาษา แน่นอนว่าบางภาษามีประโยชน์มากกว่าหรือมีชื่อเสียงมากกว่าภาษาอื่น ๆ ในช่วงเวลาหนึ่งของประวัติศาสตร์ แต่นี่เป็นเพราะความโดดเด่นของผู้พูดในเวลานั้นและไม่ใช่ลักษณะทางภาษาโดยธรรมชาติ
- David Crystal (ed.) สารานุกรม Cambridge ของภาษา 2 / e (1997) p.7

"พลังงาน" นั้นไม่ได้เกิดจากภาษาเดียวกับอีกภาษาหนึ่ง คงจะโง่ถ้าพูดว่า "จีนเป็นภาษาที่ทรงพลังมากกว่าภาษาเกาหลี" ในทำนองเดียวกันมันเป็นเรื่องโง่ที่จะพูดว่า "APL เป็นภาษาที่ทรงพลังมากกว่าภาษาโคบอล"

มีความพยายามหลายครั้งในการเทียบเคียงอำนาจทางภาษากับการวัดวัตถุประสงค์บางอย่าง ฉันเชื่อว่าความพยายามเหล่านี้ล้มเหลว:

  • การหางานในสหรัฐอเมริกาอาจทำได้ง่ายกว่าถ้าคุณพูดภาษาอังกฤษแบบอเมริกันมากกว่าพูดภาษาเมารี ในทำนองเดียวกันก็ไม่ต้องสงสัยเลยว่าจะได้งานเขียนโปรแกรม Java หรือ C ง่ายกว่า LISP หรือ J แต่ความได้เปรียบทางเศรษฐกิจนี้ไม่ได้สะท้อนถึงพลังที่แท้จริงของภาษา มันเกี่ยวกับพลังของผู้พูดภาษา
  • "สวัสดี" ไม่ดีไปกว่า "ni hao" หรือ "ชะโลม" เพราะสั้นกว่า ในทำนองเดียวกันในขณะที่ฟังก์ชั่นอาจแสดงออกอย่างชัดเจนใน APL มากกว่าภาษาโคบอล แต่นี่ก็ไม่ได้สะท้อนถึงพลังบางอย่างของภาษา

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


ฉันไม่เห็นด้วย. สำหรับตัวอย่างที่ง่ายฉันคิดว่าไม่มีใครพูดเป็นอย่างอื่นนอกจากจะพูดมากกว่าที่มีภาษาที่มีประสิทธิภาพมากกว่า brainf * ck (พูด) แม้ว่าในทางทฤษฎีแล้วมันจะทำให้สมบูรณ์ (ฉันคิดว่า) ประเด็นก็คือ 'ที่มีประสิทธิภาพ' คือคุณภาพที่แน่นอนซึ่งไม่เกี่ยวข้องกับความจริงที่ว่าพวกเขาทั้งหมด 'สมบูรณ์' ฉันยอมรับว่ามันค่อนข้างเป็นอัตนัย แต่พูดได้ว่าทุกภาษามีความเสมอภาคในเรื่อง 'ความมีประสิทธิภาพ' ดูเหมือนว่าจะนำมาได้ค่อนข้างไกล
n1ckp

1
@ n1ck: คุณกำลังพูดว่า Power = Readability หรือไม่ และ:. การขาดความสามารถในการอ่านของ BF แสดงถึงการขาดพลังหรือไม่? APL และ J ยังมีการอ่านค่าที่ต่ำมาก แต่ก็มีประโยชน์อย่างมากและรวบรัด ไปในทิศทางตรงกันข้าม COBOL สามารถอ่านได้มาก verbose ของมันอย่างจริงจัง; แต่อีกครั้งสิ่งนี้ทำให้แทบจะไม่ทรงพลังมากกว่า APL หรือ BF BF นั้นสนุกมาก มันมีอำนาจที่จะเป็นที่ชอบใจ; แต่นั่นไม่ใช่ Power qua Power ปัญหาคือไม่มีใครดูเหมือนจะมีทฤษฎีที่ดีของพลังที่พวกเขาสามารถได้รับฉันทามติไป
อื่น ๆ

1
ไม่ฉันไม่ได้แปลว่า power = readability ฉันไม่เห็นด้วยกับมุมมองของคุณว่าทุกภาษามีความเท่าเทียมกันและเราไม่สามารถเปรียบเทียบภาษากับ 'ความมีประสิทธิภาพ' แต่คุณกำหนดไว้ ในความเห็นของฉันจำเป็นต้องมีพื้นฐานของการอ่านเพื่อให้พลังกับภาษาใด ๆ แต่มันไม่ใช่คำถาม ถ้าเราต้องการตอบคำถามเราต้องกำหนดความมีประสิทธิภาพก่อน แต่ในทัศนะของฉันนี่ไม่เหมือนกับ 'ดีที่สุดในทุกสถานการณ์' ซึ่งคำตอบของคุณดูเหมือนจะบอกฉันว่าคุณตีความด้วยวิธีนั้น (เช่นไม่ดีที่สุด ภาษาสำหรับทุกสิ่งที่ฉันเห็นด้วย)
n1ckp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.