หากสามารถสร้างบางสิ่งได้สิ่งนั้นก็คือข้อมูลไม่ใช่รหัส
ในขณะที่คุณกำหนดรหัสในภายหลังว่าเป็นข้อมูลข้อเสนอของคุณจะลดลงเป็น "หากบางสิ่งสามารถสร้างขึ้นได้สิ่งนั้นก็ไม่ใช่รหัส" คุณจะพูดว่ารหัสการประกอบที่สร้างโดยคอมไพเลอร์ C ไม่ใช่รหัสหรือไม่ เกิดอะไรขึ้นถ้ามันตรงกับรหัสการประกอบที่ฉันเขียนด้วยมือ คุณยินดีที่จะไปที่นั่นหากคุณต้องการ แต่ฉันจะไม่มากับคุณ
มาเริ่มกันแทนด้วยนิยามของ "code" คำจำกัดความที่ดีงามสำหรับวัตถุประสงค์ของการสนทนานี้คือ "คำแนะนำที่ใช้กับเครื่องได้สำหรับการคำนวณ"
ระบุว่าแนวคิดการสร้างซอร์สโค้ดทั้งหมดนี้ไม่ใช่ความเข้าใจผิดหรือ
ใช่แล้วข้อเสนอเริ่มต้นของคุณก็คือไม่สามารถสร้างรหัสได้ แต่ฉันปฏิเสธข้อเสนอนั้น หากคุณยอมรับคำจำกัดความของ "รหัส" ก็ไม่น่าจะมีปัญหาทางความคิดเกี่ยวกับการสร้างรหัสโดยทั่วไป
นั่นคือถ้ามีตัวสร้างโค้ดสำหรับบางอย่างแล้วทำไมไม่ทำสิ่งนั้นเป็นฟังก์ชั่นที่เหมาะสมซึ่งสามารถรับพารามิเตอร์ที่ต้องการและทำสิ่งที่ถูกต้องที่โค้ด "จะสร้าง" จะต้องทำ?
นั่นเป็นคำถามที่แตกต่างกันอย่างสิ้นเชิงเกี่ยวกับเหตุผลในการจ้างงานการสร้างรหัสแทนที่จะเกี่ยวกับธรรมชาติของมัน คุณกำลังเสนอทางเลือกแทนการเขียนหรือการใช้ตัวสร้างรหัสหนึ่งจะเขียนฟังก์ชันที่คำนวณผลลัพธ์โดยตรง แต่ในภาษาอะไร? ไปเป็นวันที่ทุกคนเขียนในรหัสเครื่องโดยตรงและถ้าคุณเขียนรหัสของคุณในภาษาอื่นคุณก็ต้องพึ่งพาตัวสร้างรหัสในรูปแบบของคอมไพเลอร์และ / หรือแอสเซมเบลอร์เพื่อสร้างโปรแกรมที่ทำงานจริง
ทำไมคุณถึงชอบที่จะเขียนใน Java หรือ C หรือ Lisp หรืออะไรก็ตาม? แม้แต่ผู้ประกอบ ฉันขอยืนยันว่าอย่างน้อยก็บางส่วนเพราะภาษาเหล่านั้นมีบทคัดย่อสำหรับข้อมูลและการดำเนินงานที่ทำให้การแสดงรายละเอียดการคำนวณที่คุณต้องการทำได้ง่ายขึ้น
เช่นเดียวกับเครื่องกำเนิดรหัสระดับสูงที่สุดเช่นกัน กรณีแม่บทอาจจะเป็นสแกนเนอร์และเครื่องกำเนิดไฟฟ้า parser เช่นและlex
yacc
ใช่คุณสามารถเขียนสแกนเนอร์และ parser โดยตรงใน C หรือในภาษาการเขียนโปรแกรมอื่น ๆ ที่คุณเลือก (แม้แต่รหัสเครื่องดิบ) และบางครั้งก็ทำได้ แต่สำหรับปัญหาของความซับซ้อนที่สำคัญใด ๆ การใช้ภาษาระดับสูงพิเศษสำหรับวัตถุประสงค์พิเศษเช่น lex's หรือ yacc's ทำให้โค้ดที่เขียนด้วยมือง่ายต่อการเขียนอ่านและบำรุงรักษา ปกติแล้วจะเล็กกว่ามากเช่นกัน
คุณควรพิจารณาสิ่งที่คุณหมายถึงอย่างแท้จริงโดย "ตัวสร้างรหัส" ฉันจะพิจารณาการประมวลผลล่วงหน้า C และการสร้างอินสแตนซ์ของเทมเพลต C ++ ให้เป็นแบบฝึกหัดในการสร้างรหัส คุณคัดค้านหรือไม่ ถ้าไม่เช่นนั้นฉันคิดว่าคุณจะต้องแสดงยิมนาสติกจิตเพื่อหาเหตุผลเข้าข้างตนเอง แต่ยอมรับการสร้างรหัสอื่น ๆ
หากกำลังดำเนินการด้วยเหตุผลด้านประสิทธิภาพแสดงว่าดูเหมือนว่าเป็นข้อบกพร่องของคอมไพเลอร์
ทำไม? โดยพื้นฐานแล้วคุณกำลังวางตัวว่าควรมีโปรแกรมสากลที่ผู้ใช้ป้อนข้อมูลบางประเภทจัดเป็น "คำแนะนำ" และอื่น ๆ เป็น "อินพุต" และที่ดำเนินการคำนวณและปล่อยข้อมูลเพิ่มเติมที่เราเรียกว่า "เอาท์พุท" (จากมุมมองหนึ่งเราอาจเรียกโปรแกรมสากลนี้ว่า "ระบบปฏิบัติการ") แต่ทำไมคุณคิดว่าคอมไพเลอร์ควรจะมีประสิทธิภาพในการเพิ่มประสิทธิภาพของโปรแกรมวัตถุประสงค์ทั่วไป โปรแกรม? โปรแกรมสองโปรแกรมนั้นมีคุณสมบัติที่แตกต่างกัน
หากกำลังทำการเชื่อมต่อสองภาษาแสดงว่าฟังดูเหมือนขาดส่วนต่อประสานไลบรารี
คุณบอกว่าถ้ามีห้องสมุดอินเตอร์เฟซที่เป็นสากลในระดับหนึ่งจะต้องเป็นสิ่งที่ดี อาจเป็นไปได้ แต่ในหลาย ๆ กรณีห้องสมุดจะใหญ่และยากที่จะเขียนและบำรุงรักษาและอาจช้า และถ้าในความจริงแล้วสัตว์ร้ายนั้นไม่มีอยู่จริงเพื่อที่จะแก้ปัญหาเฉพาะหน้าคุณจะเป็นใครในการยืนยันว่าใครถูกสร้างขึ้นเมื่อแนวทางการสร้างรหัสสามารถแก้ปัญหาได้รวดเร็วและง่ายดายมากขึ้น?
ฉันทำอะไรบางอย่างหายไปหรือเปล่า
ฉันคิดว่าหลายสิ่งหลายอย่าง
ฉันรู้ว่ารหัสนั้นเป็นข้อมูลเช่นกัน สิ่งที่ฉันไม่เข้าใจคือทำไมสร้างรหัสต้นฉบับ ทำไมไม่ทำให้มันเป็นฟังก์ชั่นที่สามารถยอมรับพารามิเตอร์และดำเนินการกับพวกเขา?
เครื่องกำเนิดรหัสจะแปลงรหัสที่เขียนในภาษาหนึ่งเป็นรหัสในภาษาอื่นซึ่งมักจะเป็นภาษาระดับต่ำกว่า คุณถามว่าเพราะเหตุใดผู้คนจึงต้องการเขียนโปรแกรมโดยใช้หลายภาษาและโดยเฉพาะอย่างยิ่งพวกเขาอาจต้องการผสมผสานภาษาในระดับที่แตกต่างกัน
แต่ฉันสัมผัสสิ่งนั้นแล้ว คนหนึ่งเลือกภาษาสำหรับงานเฉพาะโดยอิงจากความชัดเจนและความหมายของงานนั้น ๆ แม้ว่ารหัสขนาดเล็กจะมีข้อบกพร่องโดยเฉลี่ยน้อยกว่าและง่ายต่อการบำรุงรักษานอกจากนี้ยังมีอคติต่อภาษาระดับสูงกว่าอย่างน้อยสำหรับงานขนาดใหญ่ แต่โปรแกรมที่ซับซ้อนเกี่ยวข้องกับงานหลายอย่างและบ่อยครั้งที่บางคนสามารถพูดได้อย่างมีประสิทธิภาพมากขึ้นในภาษาหนึ่งในขณะที่คนอื่น ๆ จะมีประสิทธิภาพมากขึ้น บางครั้งการใช้เครื่องมือที่เหมาะสมสำหรับงานหมายถึงการสร้างรหัส