ทำไมมีภาษาการเขียนโปรแกรมมากมาย


130

ฉันใช้ภาษา C / C ++ ได้อย่างคล่องแคล่วและสามารถใช้ภาษาสคริปต์ต่าง ๆ ได้ (awk / sed / perl) ฉันเริ่มใช้ python มากขึ้นเพราะมันรวมแง่มุมที่ดีของ C ++ เข้ากับความสามารถในการเขียนสคริปต์ของ awk / sed / perl

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

การอ่านที่เกี่ยวข้องบางส่วน:


2
นอกจากนี้ยังมีความแตกต่างระหว่าง OO และไม่ใช่ OO นอกจากนี้บางภาษายังมาพร้อมกับแพ็คเกจที่ดี: R, Maple, Matlab, Mathematica ที่มักขาดจากภาษาอื่น
Artem Kaznatcheev



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

4
ทำไมถึงมีรถยนต์มากมาย? ทำไมมีเครื่องบินมากมาย และสิ่งที่เกี่ยวกับเรือ! ฉันหมายถึงจริงๆ! คุณลงไปในมหาสมุทรและมีทุกสิ่งที่เป็นแดง! อะไรคือสิ่งที่แตกต่างกันในจุดต่าง ๆ ?!?!? มันไม่มีประสิทธิภาพ! มันสิ้นเปลือง !! และจุดประหลาดของตัวเลือกที่แตกต่างกันเหล่านั้นคืออะไร?!?! Geez - คนฉลาด! ไม่มีใครอาจต้องการอะไรนอกจาก Yugo, F-150 และเรือเดินสมุทร! โอ้ใช่แล้วเครื่องบิน - MD-80 จะใช้ได้ดีสำหรับทุกอย่าง ที่นั่น ตอนนี้ที่ตัดสินทั้งหมด ... :-)
บ๊อบจาร์วิส

คำตอบ:


116

ภาษาการเขียนโปรแกรมวิวัฒนาการและพัฒนาขึ้นตามกาลเวลา (นวัตกรรม)

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

โปรแกรมเมอร์เริ่มใช้ภาษาในลักษณะเฉพาะที่ไม่ได้รับการสนับสนุนจากโครงสร้างภาษาใด ๆ นักออกแบบภาษาระบุรูปแบบการใช้งานดังกล่าวและแนะนำ abstractions / language constructs ใหม่เพื่อสนับสนุนรูปแบบการใช้งานดังกล่าว ไม่มีขั้นตอนในภาษาแอสเซมบลี ไม่มีคลาสใน C ไม่มีข้อยกเว้นในการจัดการ (ต้น) C ++ ไม่มีวิธีที่ปลอดภัยในการโหลดโมดูลใหม่ในภาษาเริ่มต้น (ง่ายใน Java) ไม่มีเธรดในตัว (easy-peasy ใน Java)

นักวิจัยคิดถึงวิธีทางเลือกในการแสดงการคำนวณ สิ่งนี้นำไปสู่ ​​Lisp และสาขาภาษาที่ใช้งานได้ของแผนผังภาษา, Prolog และสาขาการเขียนโปรแกรมเชิงตรรกะ, Erlang และโมเดลการเขียนโปรแกรมที่อิงกับนักแสดงคนอื่น ๆ

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

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

ในที่สุดบางภาษาได้รับการออกแบบมาเพื่อรองรับโดเมนเฉพาะ ตัวอย่างเช่น SQL, R, Makefiles, ภาษาป้อนข้อมูล Graphviz, Mathmatica, LaTeX การรวมฟังก์ชั่นของภาษาเหล่านี้เข้ากับภาษาที่ใช้งานทั่วไป (โดยตรง) จะค่อนข้างยุ่งยาก ภาษาเหล่านี้มีพื้นฐานมาจาก abstractions เฉพาะสำหรับโดเมนเฉพาะของพวกเขา

หากไม่มีวิวัฒนาการในการออกแบบภาษาโปรแกรมเราทุกคนยังคงใช้ภาษาแอสเซมบลีหรือ C ++

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


1
เห็นด้วยอย่างเต็มที่. ฉันสนใจที่ภาษาแบบหลายกระบวนทัศน์ (เช่น Scala) จะอยู่ในสองสามปี หากพวกเขาอนุญาตการรวม DSL ที่ง่ายดายเราอาจเห็นหมายเลขภาษาลดลงอย่างค่อยเป็นค่อยไป
Raphael

2
คำตอบที่ละเอียดมาก! เราสามารถยอมรับได้ว่าภาษาการเขียนโปรแกรมส่วนใหญ่อาจจะเป็นทัวริงเทียบเท่า แต่นั่นไม่ได้หมายความว่าสิ่งที่เป็นนามธรรมที่พวกเขาสนับสนุนเหมาะสำหรับทุกปัญหา
CyberFonic

การประกอบและC ++ในกล่องเดียวกันทำให้ฉันเจ็บ C ++ มีวิวัฒนาการมาก !! พิเศษตั้งแต่ C ++ 11 ขึ้นไป
Peregring-lk

66

tldr: ไม่มีภาษาสัญลักษณ์แสดงหัวข้อเงิน

ฉันหวังว่าพวกเขาจะไม่ฟ้องฉัน แต่นี่เป็นรูปจากหนึ่งในการนำเสนอของ Stanford

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อคุณตัดสินใจเลือกภาษาคุณสามารถเลือกได้เพียง 2 จาก 3 คุณสมบัตินี้เท่านั้น

และนั่นคือสาเหตุที่ผู้คนเศร้าและต้องการประดิษฐ์ superlanguage ที่จะครอบคลุมทั้งสามคน

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

การรวมกันของปัจจัยดังกล่าวทำให้เกิดภาษาใหม่

( และฉันได้ยินมาว่าโปรแกรมเมอร์ที่ดีทุกคนควรสร้างภาษาใหม่ของตัวเอง) )


11
เมื่อเวลาผ่านไปสามเหลี่ยมกำลังหดตัวในแง่ที่ว่ามุมใกล้กันมากขึ้น ..... ฉันหวังว่า / ฝัน
Dave Clarke

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

นี่เป็นประโยคที่น่าสนใจและทำให้ฉันนึกถึงทฤษฎีบท CAP นี่เป็นเพียงการถกเถียงอย่างไม่เป็นทางการหรือสามเหลี่ยมสามารถพิสูจน์ได้หรือไม่?
evnu

1
@evnu นี่คืออาร์กิวเมนต์ quasiformal ของส่วนหนึ่ง: โดยทั่วไปถือว่าหมายความว่าโปรแกรมที่ถูกต้องของความยาว n ใด ๆ ในภาษา L ครอบคลุมพื้นที่ปัญหาที่ใหญ่กว่าแต่ละพื้นที่ย่อยของปัญหาถูกครอบคลุมโดยเศษส่วนบางส่วนของโปรแกรมความยาว n เท่านั้น หากโปรแกรมที่มีความยาว n นอกสเปซเฉพาะของคุณอยู่ในสเปซของคุณคุณจะมีโอกาสมากขึ้นในการหาโปรแกรมที่สั้นกว่าซึ่งแก้ไขปัญหาของคุณได้ (ดังนั้นคุณน่าจะมีประสิทธิผลมากกว่า) แต่ภาษานั้น - มันจะแก้ปัญหาในพื้นที่ย่อยอื่น ๆ ได้ไม่ดี (เช่นกับโปรแกรมที่ยาวกว่า)
Jonas Kölker

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

25

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

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

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

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

วิวัฒนาการของปากกาจะดำเนินต่อเนื่องจากไม่มีผลิตภัณฑ์ใดที่ตรงกับความต้องการของผู้ใช้ทุกคน ปากกาบางชนิดมีราคาถูกและใช้แล้วทิ้งบ้างมีราคาแพงและทำจากวัสดุคุณภาพสูง บางคนใช้เจลบางคนใช้หมึกบางคนใช้สี บางตัวมีฝาปิดแบบบิดปิดบางตัวไม่มีฝาปิดเลย ถังกว้างถังแคบถังกลมถังสี่เหลี่ยม สั้นยาว; แดง, ขาว, ดำ, น้ำเงิน ฯลฯ

แต่พอเกี่ยวกับปากกา

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

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

(บางทีตอนนี้คุณสามารถดูได้ว่าจะเกิดอะไรขึ้น ... )

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

จากการวิเคราะห์ทางคณิตศาสตร์ของการเขียนโปรแกรมคอมพิวเตอร์มาภาษาทำงาน - วิธีการใหม่ทั้งหมดของการคำนวณ ไม่ดีกว่าไม่แย่ไปกว่าแค่ความแตกต่าง

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

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


ฉันไม่เห็นเหตุผลที่น่าสนใจที่ให้ไว้ที่นี่เพราะเหตุใดเราควรมีหลายภาษานอกเหนือจากที่ผู้คนต้องการด้วยเหตุผลใดก็ตาม
ราฟาเอล

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

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

20

ภาษาเขียนโปรแกรมการทำงานมักจะอยู่บนพื้นฐานที่แตกต่างกัน ( แต่อยู่ในอำนาจเทียบเท่า) รูปแบบของการคำนวณ: แลมบ์ดาแคลคูลัส มีบางภาษาที่ไม่มีการพิมพ์ (มีการพิมพ์คล้าย Python) เช่น LISP, Scheme (ใช้ในโครงสร้างที่เป็นที่รู้จักอย่างกว้างขวางและการตีความของโปรแกรมคอมพิวเตอร์หนังสือ / หลักสูตร) ​​และภาษาที่พิมพ์แบบคงที่เช่น Haskell, ML, F #

SICPคือสิ่งที่ทำให้ฉันเข้าสู่การเขียนโปรแกรมใช้งานได้ แต่คนอื่น ๆ แนะนำบทความนี้โดย John Hughes และบทสัมภาษณ์นี้กับเขา

ขณะนี้การเขียนโปรแกรมเชิงฟังก์ชั่นกำลังถูกผลักดันโดย Microsoft เช่นผู้ที่รวม F # (ภาษาทำงานของพวกเขาสำหรับ. NET) ใน VS2010 และ 11 พวกเขายังจ้างนักพัฒนา Haskell บางคนใน MSR, IIRC

โปรดทราบว่ามีบางภาษาที่ไม่ใช่แลมบ์ดา - แคลคูลัสภาษาโปรแกรมเช่นRefalซึ่งขึ้นอยู่กับการจับคู่รูปแบบและการเขียนใหม่

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


1
ภาษาที่น่าสนใจอีกประเภทหนึ่งคือภาษาโปรแกรมเชิงตรรกะเช่น Prolog ฉันมีประสบการณ์อย่าง จำกัด กับ DataLog ดังนั้นบางคนอาจเขียนคำตอบเกี่ยวกับสิ่งเหล่านั้นได้?
Daniil

2
ฉันยอมรับว่าเราต้องการภาษาการเขียนโปรแกรมสำหรับแต่ละกระบวนทัศน์การเขียนโปรแกรม: จำเป็น, OO, การประกาศ, การทำงาน ฯลฯ แต่นี่ไม่ได้อธิบายว่าทำไมเราจึงมีจำนวนมากพูดภาษา OO
ได

@ ไดก็จริงเหรอ รากฐานทางทฤษฎีไม่ได้เป็นลักษณะเฉพาะของภาษา ตัวอย่างเช่นอาจกล่าวได้ว่าคุณลักษณะสำคัญของ Java หรือ C # คือ (เปรียบเทียบกับ C ++) เครื่องเสมือนซึ่งทำให้ Java แตกต่างกันอย่างมีนัยสำคัญ
Daniil

แต่ถ้าทั้ง C # และ Java ใช้แนวคิดเครื่องเสมือนทำไมเราไม่ใช้ไวยากรณ์เหมือนกันสำหรับทั้งสองภาษา? ฉันคิดว่านักออกแบบทุกคนมีความคิดที่แข็งแกร่งว่าภาษาของเขาควรมีลักษณะอย่างไรและมีแนวโน้มที่จะสร้างมาตรฐานของเขา / เธอเอง
Dai

@Dai มีความแตกต่างเล็กน้อยระหว่าง C # และ Java หลังจากทั้งหมด นอกจากนี้ฉันคิดว่ามีข้อพิพาททางกฎหมายเกี่ยวกับ Java VM สำหรับ Windows หรือบางอย่างในลักษณะนั้น
Daniil

19

โดยเฉพาะอย่างยิ่งมีเหตุผลใดบ้างที่ฉันควรรู้ภาษาการใช้งานในฐานะโปรแกรมเมอร์คอมพิวเตอร์?

ใช่. เพราะฮาเซลเปลี่ยนวิธีที่ฉันคิด มันอาจเปลี่ยนวิธีที่คุณคิดเช่นกัน

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

อ่าน:

  1. ภาษาและวิกิความคิด

  2. สัญกรณ์เป็นเครื่องมือสำหรับความคิดโดยบรรยาย Kenneth E. Iversion, ทัวริงรางวัล

แต่ทำไมมีภาษาการเขียนโปรแกรมที่แตกต่างกันมากมาย

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

นอกจากนี้อ่าน ;-)


5
เพื่อชดเชยคือสวรรค์!
Pratik Deoghare

4
การย้ำมนุษย์เป็นอย่างไร
Suresh

1
ไม่แน่ใจว่านั่นเป็นโฆษณาที่ดีสำหรับ Haskell หรือไม่ ;)
Barry Brown

@Pratik Deoghare การเรียนรู้ Haskell ในหนึ่งวันอาจไม่ใช่ความคิดที่ดี ฉันจะบอกว่าอ่านหนังสือข้อความที่ดีเกี่ยวกับการเขียนโปรแกรมการทำงานเช่น Bird และ Wadler และใช้เวลาของคุณทำมัน จากนั้นพระอาจไม่ยากนัก
Uday Reddy

"ฉันทำทุกอย่างเสร็จก่อนหน้าพระในครึ่งวัน" จริงๆ? คุณเรียนรู้เกี่ยวกับ typeclasses, functors, ADTs, ชนิดอื่น ๆ ในครึ่งวันหรือไม่? นั่นเป็นไปไม่ได้ LYAH มี monads ในบทที่ 12 จาก 14 RWH ไม่มี monads จนถึงบทที่ 6 และพวกเขาได้รับการแนะนำอย่างค่อยเป็นค่อยไป - คำจำกัดความเต็มรูปแบบอยู่ในบทที่ 14
sdcvvc

13

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

Abadi และ Cardelli ใน "ทฤษฎีของวัตถุ" พัฒนาทั้งครอบครัวของภาษาการเขียนโปรแกรมจากรากฐานเชิงวัตถุ พวกเขาพิสูจน์ว่าการตั้งโปรแกรมการทำงานเป็นกรณีพิเศษของ OO แต่ไม่ใช่การสนทนา

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


3
ทฤษฎีของวัตถุไม่ได้นำเสนอทั้งครอบครัวของภาษาการเขียนโปรแกรมที่ใช้งานได้ มันนำเสนอพื้นฐานสำหรับภาษาการเขียนโปรแกรมเชิงวัตถุและภาษาแปลก ๆ ที่ไม่ใช่พื้นฐานของคลาส ฉันไม่เห็นการเชื่อมต่อระหว่าง "ทฤษฎีของวัตถุ" กับการเขียนโปรแกรมที่ใช้งานได้ แคลคูลัสวัตถุไม่มีความคิดเรื่องความเกียจคร้าน นอกจากนี้ยังมีการวิจัยการเข้ารหัสแนวคิด OO ในแง่ของฟังก์ชั่นและบันทึกเช่นงานโดย Pierce ในช่วงปลายยุค 90
Dave Clarke

12

เนื่องจากคนอื่น ๆ ได้รับคำตอบที่ดีสำหรับคำถามนี้ฉันจะแค่อ้าง Alan Perlis

ระวังหลุมน้ำมันทัวริงซึ่งทุกอย่างเป็นไปได้ แต่ไม่มีอะไรน่าสนใจ

นอกจากนี้ http://weblog.raganwald.com/2004/10/beware-of-turing-tar-pit.htmlเป็นการอ่านที่ดี


11

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

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

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

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

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

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

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


คำตอบที่สมบูรณ์แบบมากฉันไม่รู้ว่าทำไมมันถึงไม่เป็นที่ยอมรับ!
Am_I_Helpful

8

ทำไมมีภาษาการเขียนโปรแกรมที่แตกต่างกันมากมาย

เพราะมีตัวเลือกให้ทำ:

  • โหมดของข้อกำหนด: จำเป็นกับการทำงาน
  • การพิมพ์: พิมพ์แบบคงที่และพิมพ์แบบไดนามิก
  • ลำดับการประเมินผล: call-by-value เปรียบเทียบกับ call-by-name
  • Modularity: อิงตามประเภทข้อมูลกับนามธรรม
  • รูปแบบการดำเนินการ: ตามลำดับเทียบกับพร้อมกัน

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

ส่วนหนึ่งของการวิจัยที่เราทำในทฤษฎีภาษาการเขียนโปรแกรมนั้นมีจุดประสงค์เพื่อแก้ไขปัญหาขั้วคู่เหล่านี้ ตัวอย่างเช่นฉันทำงานเพื่อแก้ไขการแบ่งแยกขั้วระหว่างการเขียนโปรแกรมเชิงบังคับและการทำงานในกระดาษที่เรียกว่า " การมอบหมายสำหรับภาษาที่ใช้ " และตอนนี้ Haskell ได้นำวิธีการของเรามาใช้ นั่นไม่ได้หมายความว่าการแบ่งขั้วได้รับการแก้ไขอย่างสมบูรณ์ โปรแกรมเมอร์ Haskell ยังคงเผชิญกับการเลือกว่าจะแก้ปัญหาของเขาในเชิงปฏิบัติหรือไม่เหมาะสม Luca Cardelli ทำงานเกี่ยวกับการแก้ปัญหาขั้วต่อการพิมพ์แบบคงที่และแบบไดนามิก Paul เก็บทำงานในการแก้ปัญหาการเรียกโดยค่าเมื่อเทียบกับการเรียกร้องโดยชื่อขั้ว ผลลัพธ์เหล่านี้บางส่วนยังไม่ได้นำมาใช้ในภาษาการเขียนโปรแกรมในชีวิตจริง


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

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

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


โดยเฉพาะอย่างยิ่งมีเหตุผลใดบ้างที่ฉันควรรู้ภาษาการใช้งานในฐานะโปรแกรมเมอร์คอมพิวเตอร์?

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


1

คุณอาจมองว่ามันเป็นวิวัฒนาการ

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

หลังจากนั้นก็มีการแนะนำภาษาระดับสูง (ระดับ 3) (Pascal, C, ADA, Cobol), ภาษาทั่วไปบางอย่าง (เช่น C), บางภาษาเหมาะสำหรับการจัดการข้อมูล (Cobol), บางอย่างสำหรับการคำนวณ (Fortran)

หลังจากนั้นภาษาระดับที่ 4 ก็เกิดขึ้นเช่นภาษาลอจิก (เช่น Prolog) ภาษาที่พบมากที่สุดคือผู้สืบทอดของภาษาระดับที่สาม บางคนเป็น Java, C #

เรายังเห็นภาษาเฉพาะสำหรับอินเทอร์เน็ต / เว็บเช่น ASP.NET, PHP

และภาษาสำหรับโดเมนเฉพาะ (DSL) ซึ่งส่วนใหญ่ทำงานร่วมกับภาษาทั่วไป

จากนั้นมีภาษาสำหรับเด็กที่จะเรียนรู้การเขียนโปรแกรมเช่นโลโก้

นอกจากนี้ภาษาสำหรับการเขียนโค้ดอย่างรวดเร็วเช่น Python, Ruby ฯลฯ ภาษาสำหรับการจัดการ XML (XSLT)

และฉันอาจลืมภาษาจำนวนมากและแม้แต่ภาษาหมวดหมู่


1
เหตุการณ์ของคุณสับสน อารัมภบทมาจากปี 1972 ซึ่งมีอายุน้อยกว่า Ada (1983) ฉันไม่รู้ว่าคุณหมายถึงอะไรโดย "ผู้สืบทอดของภาษาระดับที่สาม"; บางภาษาไม่ใช่ทายาทของ Fortran รวมถึง C และ Pascal (ซึ่งให้กำเนิด Ada)
58

1
@prosfilaes สับสนทาง FORTRAN เป็นภาษาแรกที่ยังใช้งานอยู่จากนั้น LISP และ COBOL อัลกอลถูกกำหนดไว้สำหรับการเผยแพร่อัลกอริธึมไม่ใช่การใช้เครื่องจักร (แต่คอมไพเลอร์ของการเรียงลำดับจะเป็นอย่างไร) ด้วย ofshots Pascal และต่อมา C. PL / 1 เป็นส่วนผสมที่แปลกประหลาดของ FORTRAN และ COBOL กับโครงสร้างการควบคุมของ Algol-ish
vonbrand

1

คำตอบอื่น ๆ ที่ดีจะเพิ่มมุมใหม่ไม่กี่ ในขณะที่ DC เขียนภาษาวิวัฒนาการเช่นเดียวกับภาษามนุษย์จริง! และพวกเขายืมแนวคิดและไวยากรณ์จากกันอีกครั้งเหมือนภาษามนุษย์จริง ในคำอื่น ๆ ยังมีการศึกษาจริงของนิรุกติศาสตร์ภาษาคอมพิวเตอร์

นี้ยังหมายถึงการเอาใจใส่รับประวัติศาสตร์อันยาวนานและระยะเวลาซึ่งส่วนใหญ่เริ่มต้นรอบปี 1930 ที่มีแลมบ์ดาแคลคูลัส

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

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

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

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

ดูเหมือนว่าจะมีแนวโน้มเพิ่มขึ้นในภาษาการเขียนโปรแกรมใหม่ ๆ ร่วมกับพลังการประมวลผลที่เพิ่มขึ้นอย่างมหาศาลของกฎหมาย Mooresซึ่งบางคนคิดว่าอาจชะลอตัวลง

แนวโน้ม longrange ในปัจจุบันในการเขียนโปรแกรมภาษาน่าจะเป็นไปยังข้อมูลขนาดใหญ่และแบบขนานเช่นกับMapReduce นอกจากนี้ยังมีความสนใจในปัจจุบันในการปิด

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

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

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


ดูรูปแบบการออกแบบซึ่งมักจะข้ามภาษาและนำมาใช้ในภาษา อีกแง่มุมสำคัญของการศึกษาภาษา / ฟังก์ชั่นการใช้งานคุณสมบัติในห้องสมุด
vzn

FORTRAN ไม่เคยมีคำอธิบายอย่างเป็นทางการน้อยกว่าความซับซ้อนของการแสดงออกที่อาจนำไปสู่ความกำกวมไวยากรณ์ (ใช่ฉันได้เริ่มเขียนโปรแกรมในสิ่งที่น่ารังเกียจที่เรียกว่า PDQ FORTRAN และ FORTRAN IV ภายหลัง) ภาษาที่มีความกำกวม ไวยากรณ์มาถึงจุดที่มี Algol, ภาษาแรกที่กำหนดด้วยไวยากรณ์
vonbrand

จุดที่นำ WRT ต้นฉบับ / FORTRAN ต้น แต่รุ่นที่ใหม่กว่าเป็นทางการมากขึ้นด้วยคำจำกัดความของไวยากรณ์ที่เข้มงวดมากขึ้น กรณีศึกษาเป็นการแสดงวิวัฒนาการของภาษาพร้อมกับทฤษฎีภาษา
vzn

FORTRAN ได้รับแรงทางไวยากรณ์ แต่ก็ไม่เคยถูกออกแบบมา อัลกอลเริ่มต้นเทรนด์ดังกล่าวซึ่งดำเนินต่อไปโดย Pascal ตระกูล Modula, Oberon, C และมันเป็นของรุ่นแรก, PL / 1, Ada และอื่น ๆ ด้วยเทคโนโลยีไวยากรณ์บริบทที่ไม่ซับซ้อนและมีความเข้าใจในการแยกวิเคราะห์วันนี้การกำหนดไวยากรณ์และการแปลที่เป็นตัวแยกวิเคราะห์ที่ปราศจากข้อผิดพลาดนั้นเป็นเรื่องเล็กน้อยแทบไม่มีภาษาใหม่ใดที่จะทำได้
vonbrand

ภาคผนวก, กรณีศึกษาในภาษาที่ใหม่ / ที่กำลังเกิดขึ้น: Google go , node.js , Apple swift
vzn

-3

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

บางอย่างที่ไม่มีอิทธิพล C เลย: SQL, Pascal, Delphi, FORTRAN, COBOL, Ada, PowerBuilder, HyperTalk, Lisp, Simula, FOCAL, BASIC, PL / I, Algol, Algol-68, SNOBOL, Modula, Visual Basic, ผู้สอน, โลโก้, Forth, DIBOL, Helix, AppleScript, Python, Erlang, Ruby, เลือก, อังกฤษ, สวมบทบาท, PL / SQL, ASP, Prolog, SmallTalk, Perl, ทุบตี, Wand BASIC, REXX, ภาษาชุด DOS

คนที่ดูคล้าย C แต่มีความเหมือนกันเล็กน้อย: JavaScript, Java, C #, (เนื้อหา) Objective-C

การตลาดทั้งหมด, Java, C ++ และ JavaScript ดูเหมือนจะเป็น C แต่แทบจะไม่แตกต่างกันมากนักภายใต้หน้าปก


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

2
"บางคนที่ไม่มีอิทธิพล C เลย: ... Algol, Algol-68, ... " - ตลกที่คุณควรพูดอย่างนั้นเนื่องจาก C เกิดขึ้นจาก Algol "ถ้าคุณทำให้ภาษาดูเหมือนว่า" C "แล้วก็ลดอุปสรรคที่ชัดเจนในการเข้า" - iirc สิ่งนี้ได้รับการพิสูจน์แล้วว่าผิด นักเรียนที่ไม่ได้สัมผัสกับการเขียนโปรแกรมก่อนเรียนรู้เร็วขึ้นด้วยภาษาอื่น ๆ (ฉันคิดว่าพวกเขาใช้ Haskell ในการศึกษานั้น)
Raphael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.