อะไรคือสิ่งแรกที่คอมไพเลอร์หรือแหล่งที่มา?


17

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


5
คำถามที่คล้ายกันคือใครสร้างความคิดของการสร้างลูปแรก . ซึ่งจะรวมถึงคำตอบที่ดีเกี่ยวกับประวัติความเป็นมาของคอมพิวเตอร์
mouviciel

1
หนึ่งในคำถามย่อยคือคำถามที่ถูกต้อง: ภาษาโปรแกรมแรกที่เขียนสำหรับคอมพิวเตอร์คืออะไร .
Mark Booth

แน่นอนนี่คือสิ่งที่คุณสามารถค้นหาได้ ?
Caleb

@Caleb อ่านความคิดเห็นในคำตอบของ SkyDan ..
David Cowden

2
@Brian สมมติฐานที่ถูกต้อง แต่กลายเป็นผิด มันไม่ใช่ปัญหาไก่ไข่เลยมีคำตอบที่ชัดเจนมาก (คำใบ้: การโหวตมากที่สุดด้านล่างผิด) ซอร์สโค้ดคอมไพเลอร์ยาวลงวันที่ล่วงหน้า
Konrad Rudolph

คำตอบ:


30

นี่เป็นคำตอบที่ชัดเจนมากจริง ๆ แล้ว: ซอร์สโค้ดมาก่อน - ด้วยกำไรขั้นต้นที่มาก

ก่อนที่จะให้รายละเอียดทางเทคนิคมุมมองเล็กน้อย:

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

พิจารณาข้อความอ้างอิงของบทความ Wikipedia เกี่ยวกับFORTRANซึ่งแสดงให้เห็นว่าคอมไพเลอร์ฝืนต้องเผชิญ:

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

=> เมื่อถึงเวลาที่คอมไพเลอร์ FORTRAN บุกตลาด (1957) ผู้คนกำลังเขียนโปรแกรมอย่างมีความสุขทั้งในภาษาแอสเซมบลีและฟอร์แทรน

กรณีนี้คล้ายคลึงกับLISP (จากแฮกเกอร์และจิตรกร ):

Steve Russell พูดดูสิทำไมฉันไม่ตั้งโปรแกรม eval นี้…และฉันก็บอกเขาว่า ho, ho, คุณกำลังสับสนกับการฝึกฝนทฤษฎี eval นี้มีไว้สำหรับการอ่านไม่ใช่สำหรับการคำนวณ แต่เขาไปข้างหน้าและทำมัน นั่นคือเขารวบรวม eval ในกระดาษของฉันเป็นรหัสเครื่อง IBM 704, แก้ไขข้อผิดพลาดและจากนั้นโฆษณาสิ่งนี้เป็นล่าม Lisp ซึ่งมันแน่นอน เมื่อถึงจุดนั้น Lisp ก็มีรูปแบบที่เป็นอยู่ในปัจจุบัน ...

อีกครั้งไม่เพียง แต่ซอร์สโค้ด (ใน LISP) ลงวันที่ก่อนวันล่ามเท่านั้นแต่ทว่าหลังไม่ได้มีความหมายโดยนัยในอดีต

แต่การพัฒนาเหล่านี้ค่อนข้างล่าช้า แม้ว่าจะไม่ได้พิจารณาโปรแกรมการวิเคราะห์ของ Charles Babbage และโปรแกรมแรกที่เกี่ยวข้องกับ Ada Lovelace แต่ก็มีภาษาโปรแกรมในศตวรรษที่ 20 ซึ่งรวบรวมคอมไพเลอร์ไว้ล่วงหน้า:

Plankalkülของ Konrad Zuse และโครงสร้างทางคณิตศาสตร์ของcalcul-แคลคูลัสแนะนำโดย Alonzo Church ทั้งสองนี้เป็นภาษาการเขียนโปรแกรมที่ระบุอย่างไม่เป็นทางการ แต่ไม่มีคอมไพเลอร์ในเวลานั้น

เพื่อนำสิ่งนี้ไปสู่มุมมอง calcul-แคลคูลัสมาจากช่วงทศวรรษที่ 1930 และPlankalkülได้รับการพัฒนารอบปี 1945 ในทางตรงกันข้ามคอมไพเลอร์ FORTRAN ตัวแรกออกมาในปี 1957 (แต่อีกสามปีหลังจากระบุ FORTRAN)


คำตอบที่ดี! ฉันไม่รู้รหัสที่ใช้ในการรวบรวมด้วยมือ แต่มันก็สมเหตุสมผล
ckb

10

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

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

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

นอกจากนี้คอมไพเลอร์ไม่จำเป็นต้องสะดวกสบาย

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

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

ถ้าเครื่องมือวิเคราะห์ของ Babbage สร้างขึ้นมาฉันแน่ใจว่าคงมีsteampunk Melเขียนโปรแกรมที่ดีที่สุดลงบนการ์ดทอโดยตรง


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

@MarkBooth ผมคิดว่า MIPS และ AVR เป็นได้ง่าย ..
เดวิด Cowden

4
@occulus - ภาษาแอสเซมบลีไม่ใช่ซอร์สโค้ดในทางใด ภาษาแอสเซมบลีแมปคำสั่งภาษาแอสเซมบลีหนึ่งคำสั่งกับรหัสเครื่องเดียวและสามารถประกอบในหัวของคุณได้เล็กน้อยหากคุณรู้ตารางรหัส op ของคุณ จริงๆแล้วเด็ก ๆ ทุกวันนี้ ... * 8 ')
Mark Booth

1
สำหรับฉันภาษาแอสเซมบลีคือmovl $0, -20(%rbp)ในขณะที่รหัสเครื่องคือC745EC00000000และเป็นสิ่งหลัง (ดีอะไรอย่างนั้น) ที่ถูกป้อนหรืออ่านด้วยตนเองจากเทปกระดาษเป็นครั้งแรก ว่ารหัสเครื่องนับเป็นซอร์สโค้ดหรือไม่ฉันก็อยากจะพูดว่า "อะไรก็ตามที่ลอยอยู่ในเรือของคุณ" ถ้าคุณสลับมันด้วยตนเองใช่แล้วฉันจะบอกว่ามันนับ
John Bode

@ JohnBode - โอ้ฉันเห็นด้วย แต่เนื่องจากการโต้ตอบ 1: 1 ระหว่างคำแนะนำการประกอบและคำแนะนำในรหัสเครื่องการประกอบเป็นเพียงเรื่องของการแปลเชิงกล (การประกอบ) ตรรกะนั้นเหมือนกัน การคอมไพล์หมายถึงความซับซ้อนที่มากขึ้น: การแปลจำนวนมาก (แม้ว่าOccamเป็นภาษาระดับสูงและคำสั่ง Occam จำนวนมากที่แมป 1: 1 ไปยังคำแนะนำของTransputerเนื่องจากสถาปัตยกรรมMISC * 8 ')
Mark Booth

6

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

บทความ Wikipedia เช่นนี้เกี่ยวกับภาษาคอมพิวเตอร์สามารถตอบคำถามส่วนใหญ่ได้ ถ้าไม่ใช่เพียงเลือกหนังสือเล่มใดเล่มหนึ่งจาก Tanenbaum เช่นStructured Computer Organizationซึ่งสามารถตอบคำถามได้มากกว่าที่คุณจะถาม :)

ฉันไม่สามารถพูดอะไรที่เฉพาะเจาะจงมากขึ้นสำหรับคำถามของคุณกว้างเกินไป


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

5
@Joachim ตามนิยามซอร์สโค้ดเป็นข้อความที่มนุษย์สามารถอ่านได้ซึ่งแปลโดยคอมไพเลอร์เป็นรหัสเครื่อง รหัสเครื่องเองจึงไม่ใช่ซอร์สโค้ด
hellodanylo

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

8
ทำไมคะแนนนี้จึงสูงมาก? มันผิด. ซอร์สโค้ดในภาษาระดับสูง (โดยเฉพาะอย่างยิ่ง calcul-แคลคูลัส, Plankalkülและ LISP) จะมีทั้งคอมไพเลอร์และล่ามมาก่อน นี่ไม่ได้คำนึงถึงโปรแกรมกึ่งทางการของ Ada Lovelace ที่เขียน
Konrad Rudolph

4
@SkyDan แล้วความหมายของคุณคืออะไร? ฉันรู้ว่าไม่มีคำจำกัดความที่สมเหตุสมผลซึ่งคำตอบของคุณถูกต้อง (ทั้งสำหรับ“ คอมไพเลอร์” และ“ ซอร์สโค้ดในภาษาระดับสูง” - นับ แต่ระดับต่ำ)
Konrad Rudolph

4

มีล่ามอยู่ก่อนคอมไพเลอร์ดังนั้นจึงมีซอร์สโค้ดต่อหน้าคอมไพเลอร์

มีบางเอกสารที่น่าสนใจมากในประวัติศาสตร์ของการคำนวณที่มีที่นี่ ซอร์สโค้ดสำหรับคอมไพเลอร์ FORTRAN II น่าจะพร้อมใช้งาน แต่ลิงก์เหล่านั้นไม่ทำงาน

เอกสารนี้จากปี 1954 อธิบายล่าม Whirlwhind


1

คำถามนี้เป็นสาระสำคัญอย่างยิ่งในการตีความความหมายของ 'รหัสต้นฉบับ' ของเรา หากเรากำหนดว่า 'คำสั่งคอมพิวเตอร์ตามข้อความที่รวบรวม' แปลว่าน่าจะเป็นคอมไพเลอร์มาก่อน

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

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

และฉันคิดว่าคำตอบของคุณมีความหมายโดยนัยในคำนิยามนั้น - ซอร์สโค้ดส่วนใหญ่มาก่อนแน่นอน


“ สมมุติว่าคอมไพเลอร์มาก่อน” - เฉพาะเมื่อคุณกำหนด“ คอมไพล์” เป็น“ แปลโดยเครื่องมืออัตโนมัติ” แทนที่จะ“ แปลเป็นรหัสเครื่องด้วยมือ”
Konrad Rudolph

กระดาษที่น่าสนใจมาก ผมชอบความหมายของรหัสแหล่งที่มา - แม้ว่ามันจะทำให้คำถามของฉันไม่ใช่คำถามจริงๆ ..
เดวิด Cowden

@ KonradRudolph ไม่ใช่หน่วยที่ทำการรวบรวมไม่ว่าจะเป็นเครื่องการแทรกแซงของมนุษย์หรือพระเจ้าที่เรียกว่า 'คอมไพเลอร์'
Kirk Broadhurst

0

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

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

ภาษาแรกไม่ใช่ภาษาหลังจากนั้นภาษาแรกเป็นภาษาแอสเซมบลี สำหรับโปรเซสเซอร์ทุกภาษาภาษาแรกคือภาษาแอสเซมบลี (มาจากรหัสเครื่อง) ชุดการเรียนการสอนได้รับการออกแบบก่อนจากนั้นฮาร์ดแวร์ที่จะใช้มันจากนั้นประกอบแล้วคอมไพเลอร์

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