อะไรทำให้ภาษาเป็นภาษาสคริปต์? ฉันเคยได้ยินบางคนพูดว่า "เมื่อถูกตีความแทนที่จะรวบรวม" นั่นจะทำให้ PHP (ตัวอย่าง) เป็นภาษาสคริปต์ เป็นเกณฑ์เดียวหรือไม่? หรือมีหลักเกณฑ์อื่นอีกหรือไม่?
อะไรทำให้ภาษาเป็นภาษาสคริปต์? ฉันเคยได้ยินบางคนพูดว่า "เมื่อถูกตีความแทนที่จะรวบรวม" นั่นจะทำให้ PHP (ตัวอย่าง) เป็นภาษาสคริปต์ เป็นเกณฑ์เดียวหรือไม่? หรือมีหลักเกณฑ์อื่นอีกหรือไม่?
คำตอบ:
ภาษาสคริปต์คือภาษาที่ "สคริปต์" ใช้ทำสิ่งต่างๆ จุดสนใจหลักไม่ได้สร้างแอปของคุณเองเป็นหลักมากเท่ากับการทำให้แอปที่มีอยู่ทำงานในแบบที่คุณต้องการเช่น JavaScript สำหรับเบราว์เซอร์ VBA สำหรับ MS Office
เรียบง่าย เมื่อฉันใช้มันเป็นภาษาไดนามิกสมัยใหม่เมื่อคุณใช้มันเป็นเพียงภาษาสคริปต์เท่านั้น!
ตามเนื้อผ้าเมื่อพูดถึงความแตกต่างเกี่ยวกับการเขียนสคริปต์และการเขียนโปรแกรมสคริปต์จะถูกตีความและรวบรวมโปรแกรม ภาษาสามารถดำเนินการได้หลายวิธี - ตีความหรือคอมไพล์ (เป็น bytecode หรือรหัสเครื่อง) สิ่งนี้ไม่ได้ทำให้ภาษาหนึ่งหรืออีกภาษาหนึ่ง
ในสายตาของบางคนวิธีที่คุณใช้ภาษาทำให้เป็นภาษาสคริปต์ (ตัวอย่างเช่นนักพัฒนาเกมที่พัฒนาภาษา C ++ เป็นหลักจะเขียนสคริปต์ออบเจ็กต์ใน Lua) อีกครั้งเส้นจะเบลอ - ภาษาสามารถใช้สำหรับการเขียนโปรแกรมโดยบุคคลหนึ่งและอีกคนหนึ่งสามารถใช้ภาษาเดียวกันสำหรับภาษาสคริปต์ได้
นี่มาจากบทความวิกิพีเดียเกี่ยวกับภาษาสคริปต์:
ภาษาสคริปต์ภาษาสคริปต์หรือภาษาส่วนขยายคือภาษาโปรแกรมที่อนุญาตให้ควบคุมแอปพลิเคชันซอฟต์แวร์ตั้งแต่หนึ่งรายการขึ้นไป "สคริปต์" แตกต่างจากโค้ดหลักของแอปพลิเคชันเนื่องจากมักจะเขียนด้วยภาษาอื่นและมักจะสร้างขึ้นหรืออย่างน้อยก็แก้ไขโดยผู้ใช้ปลายทาง สคริปต์มักถูกตีความจากซอร์สโค้ดหรือ bytecode ในขณะที่แอปพลิเคชันที่ควบคุมจะถูกคอมไพล์เป็นรหัสเครื่องดั้งเดิม ภาษาสคริปต์มักจะฝังอยู่ในแอปพลิเคชันที่ควบคุม
คุณจะสังเกตเห็นการใช้ "ปกติ" "บ่อย" "ตามประเพณี" และ "เกือบตลอดเวลา" ซึ่งทั้งหมดนี้บอกคุณว่าไม่มีชุดของคุณลักษณะที่แตกต่างกันที่ทำให้ภาษาใดภาษาหนึ่งเป็น "ภาษาสคริปต์"
"สคริปต์คือสิ่งที่คุณมอบให้กับนักแสดงโปรแกรมคือสิ่งที่คุณมอบให้กับผู้ชม" - กำแพงแลร์รี่
ฉันไม่คิดว่าจะมีความแตกต่างอะไรอีกแล้ว ภาษาที่เรียกว่า "สคริปต์" มักจะถูกรวบรวม - เร็วมากและในขณะรันไทม์ และบางส่วนของภาษา "การเขียนโปรแกรม" จะถูกรวบรวมเพิ่มเติมที่รันไทม์ด้วยเช่นกัน (นึกถึง JIT) และขั้นตอนแรกของการ "คอมไพล์" คือการตรวจสอบไวยากรณ์และการแก้ปัญหาทรัพยากร
อย่าเพิ่งวางสายมันไม่สำคัญจริงๆ
คำจำกัดความของฉันจะเป็นภาษาที่มักจะกระจายเป็นแหล่งที่มาแทนที่จะเป็นไบนารี
มีคำตอบที่เป็นไปได้มากมายสำหรับสิ่งนี้
ประการแรก: ไม่ใช่คำถามเกี่ยวกับความแตกต่างระหว่างภาษาสคริปต์และภาษาโปรแกรมเนื่องจากภาษาสคริปต์เป็นภาษาโปรแกรม เป็นคำถามเพิ่มเติมว่าลักษณะใดที่ทำให้ภาษาโปรแกรมบางภาษาเป็นภาษาสคริปต์ในขณะที่ภาษาโปรแกรมอื่นไม่ใช่ภาษาสคริปต์
ประการที่สอง: เป็นการยากที่จะบอกว่าภาษา XYZ คืออะไรไม่ว่า XYZ นั้นจะเป็น "สคริปต์" "การเขียนโปรแกรมเชิงฟังก์ชัน" "การเขียนโปรแกรมเชิงวัตถุ" หรือสิ่งที่คุณมี คำจำกัดความของคำว่า "functional programming" นั้นค่อนข้างชัดเจน แต่ไม่มีใครรู้ว่า "ภาษาการเขียนโปรแกรมเชิงฟังก์ชัน" คืออะไร
โปรแกรมการทำงานหรือการเขียนโปรแกรมเชิงวัตถุเขียนโปรแกรมรูปแบบ ; คุณสามารถเขียนในรูปแบบการใช้งานหรือสไตล์เชิงวัตถุในภาษาใดก็ได้ ยกตัวอย่างเช่นลินุกซ์เสมือนแฟ้มระบบสวิทช์และลินุกซ์ไดร์เวอร์รุ่นหนักเชิงวัตถุแม้จะเขียนใน C ในขณะที่จำนวนมากของ Java หรือ C # รหัสที่คุณเห็นบนเว็บเป็นอย่างมากในการดำเนินการและไม่เชิงวัตถุที่ทั้งหมด OTOH ฉันเคยเห็นโค้ด Java ที่ใช้งานได้ดี
ดังนั้นหากการเขียนโปรแกรมเชิงฟังก์ชันและการเขียนโปรแกรมเชิงวัตถุเป็นเพียงรูปแบบที่สามารถทำได้ในภาษาใด ๆแล้วคุณจะกำหนด "ภาษาโปรแกรมเชิงวัตถุ" ได้อย่างไร? คุณสามารถพูดได้ว่าภาษาโปรแกรมเชิงวัตถุเป็นภาษาที่อนุญาตให้เขียนโปรแกรมเชิงวัตถุได้ แต่นั่นไม่ใช่คำจำกัดความมากนัก: ทุกภาษาอนุญาตให้เขียนโปรแกรมเชิงวัตถุได้ดังนั้นทุกภาษาจึงเป็นภาษาเชิงวัตถุ? ดังนั้นคุณพูดได้ว่าภาษาเป็นเชิงวัตถุถ้ามันบังคับให้คุณเขียนโปรแกรมในลักษณะเชิงวัตถุ แต่นั่นไม่ใช่คำจำกัดความมากนักเช่นกัน: ทุกภาษาอนุญาตให้มีการเขียนโปรแกรมเชิงฟังก์ชันดังนั้นจึงไม่มีภาษาใดที่เป็นเชิงวัตถุ?
ดังนั้นสำหรับฉันฉันพบคำจำกัดความต่อไปนี้:
ภาษาคือภาษาสคริปต์ (ภาษาเชิงวัตถุ / ภาษาที่ใช้งานได้) หากเป็นทั้งสองอย่าง
- อำนวยความสะดวกในสคริปต์ (เขียนโปรแกรมเชิงวัตถุ / โปรแกรมการทำงาน) คือมันไม่เพียง แต่ช่วยให้ได้ แต่จะทำให้มันง่ายและเป็นธรรมชาติและมีคุณสมบัติที่ช่วยเหลือกับมันและ
- สนับสนุนและแนะนำคุณในการเขียนสคริปต์ (การเขียนโปรแกรมเชิงวัตถุ / การเขียนโปรแกรมเชิงฟังก์ชัน)
หลังจากห้าย่อหน้าฉันก็มาถึง: "ภาษาสคริปต์คือภาษาสำหรับการเขียนสคริปต์" ช่างเป็นคำจำกัดความที่ยอดเยี่ยม ไม่.
เห็นได้ชัดว่าตอนนี้เราต้องดูคำจำกัดความของ "การเขียนสคริปต์"
นี่คือที่มาของปัญหาที่สาม: ในขณะที่คำว่า "functional programming" มีการกำหนดไว้อย่างชัดเจนและเป็นเพียงคำว่า "functional programming language" ที่เป็นปัญหา แต่น่าเสียดายที่การเขียนสคริปต์ทั้งคำว่า "scripting" และคำว่า "ภาษาสคริปต์ "ถูกกำหนดไว้ไม่ดี
ประการแรกการเขียนสคริปต์คือการเขียนโปรแกรม มันเป็นเพียงการเขียนโปรแกรมชนิดพิเศษ IOW: ทุกสคริปต์เป็นโปรแกรม แต่ไม่ใช่ทุกโปรแกรมที่เป็นสคริปต์ ชุดของสคริปต์ทั้งหมดเป็นชุดย่อยที่เหมาะสมของชุดโปรแกรมทั้งหมด
ในความเห็นส่วนตัวสิ่งที่ทำให้การเขียนสคริปต์และแตกต่างจากการเขียนโปรแกรมประเภทอื่น ๆ ก็คือ ...
สคริปต์ส่วนใหญ่จัดการกับวัตถุที่
- ไม่ได้สร้างโดยสคริปต์
- มีชีวิตที่เป็นอิสระจากสคริปต์และ
- อยู่นอกโดเมนของสคริปต์
นอกจากนี้ประเภทข้อมูลและอัลกอริทึมที่ใช้โดยทั่วไปไม่ได้กำหนดโดยสคริปต์ แต่เป็นไปตามสภาพแวดล้อมภายนอก
ลองนึกถึงเชลล์สคริปต์: โดยปกติแล้วเชลล์สคริปต์จะจัดการไฟล์ไดเร็กทอรีและกระบวนการต่างๆ ไฟล์ไดเร็กทอรีและกระบวนการส่วนใหญ่บนระบบของคุณอาจไม่ได้ถูกสร้างขึ้นโดยสคริปต์ที่กำลังรันอยู่ และจะไม่หายไปเมื่อสคริปต์ออก: ชีวิตของพวกเขาไม่ขึ้นอยู่กับสคริปต์ และพวกเขาไม่ได้เป็นส่วนหนึ่งของสคริปต์จริงๆด้วยเช่นกันพวกเขาเป็นส่วนหนึ่งของระบบ คุณไม่ได้เริ่มสคริปต์ของคุณด้วยการเขียนFile
และDirectory
คลาสประเภทข้อมูลเหล่านั้นไม่ใช่เรื่องน่ากังวลของคุณคุณแค่คิดว่าพวกเขาอยู่ที่นั่นและคุณไม่รู้ด้วยซ้ำ (หรือคุณไม่จำเป็นต้องรู้) ว่ามันทำงานอย่างไร และคุณไม่ได้ใช้อัลกอริทึมของคุณเองเช่นสำหรับการส่งผ่านไดเร็กทอรีที่คุณใช้find
แทนที่จะใช้การค้นหาแบบกว้างเป็นอันดับแรกของคุณเอง
กล่าวโดยย่อ: สคริปต์เชื่อมโยงตัวเองกับระบบขนาดใหญ่ที่มีอยู่โดยไม่ขึ้นกับสคริปต์จัดการกับส่วนเล็ก ๆ ของระบบแล้วออก
ระบบที่ใหญ่กว่านั้นอาจเป็นระบบปฏิบัติการในกรณีของเชลล์สคริปต์เบราว์เซอร์ DOM ในกรณีของสคริปต์เบราว์เซอร์เกม (เช่น World of Warcraft ที่มี Lua หรือ Second Life ด้วยภาษาสคริปต์ Linden) แอปพลิเคชัน (เช่น AutoLisp ภาษาสำหรับแมโคร AutoCAD หรือ Excel / Word / Office) เว็บเซิร์ฟเวอร์ชุดหุ่นยนต์หรืออย่างอื่นทั้งหมด
โปรดทราบว่าลักษณะการเขียนสคริปต์นั้นมีมุมฉากอย่างสมบูรณ์กับด้านอื่น ๆ ทั้งหมดของภาษาโปรแกรม: ภาษาสคริปต์สามารถพิมพ์ได้อย่างรุนแรงหรือไม่ชัดเจนพิมพ์อย่างเคร่งครัดหรือหลวมพิมพ์แบบคงที่หรือแบบไดนามิกพิมพ์ในนามโครงสร้างหรือแบบเป็ด แต่ก็ยังสามารถไม่พิมพ์ได้ . อาจเป็นความจำเป็นหรือใช้งานได้เชิงวัตถุขั้นตอนหรือการทำงานเข้มงวดหรือขี้เกียจ การใช้งานสามารถตีความรวบรวมหรือผสม
ตัวอย่างเช่นมอนเดรียนเป็นภาษาสคริปต์ที่ใช้งานได้โดยใช้การคอมไพล์
แต่ทั้งหมดนี้เป็นที่สงสัยเพราะวิธีการคำภาษาสคริปต์ที่เป็นจริงที่ใช้ในโลกแห่งความจริงมีอะไรจะทำอย่างไรกับการใด ๆ ข้างต้น ส่วนใหญ่มักใช้เป็นการดูถูกและคำจำกัดความนั้นค่อนข้างเรียบง่ายแม้จะง่าย:
- ภาษาโปรแกรมจริง : ภาษาโปรแกรมของฉัน
- ภาษาสคริปต์: ภาษาโปรแกรมของคุณ
นี่ดูเหมือนจะเป็นวิธีที่ใช้คำนี้บ่อยที่สุด
มันเหมือนหนังโป๊คุณจะรู้เมื่อคุณเห็นมัน คำจำกัดความเดียวที่เป็นไปได้ของภาษาสคริปต์คือ:
A language which is described as a scripting language.
เป็นวงกลมหน่อยไม่ใช่เหรอ? (ฉันไม่ได้ล้อเล่น)
โดยพื้นฐานแล้วไม่มีสิ่งใดที่ทำให้ภาษาเป็นภาษาสคริปต์ยกเว้นว่าภาษานั้นถูกเรียกโดยเฉพาะโดยผู้สร้าง ชุดภาษาสคริปต์สมัยใหม่ที่สำคัญ ได้แก่ PHP, Perl, JavaScript, Python, Ruby และ Lua Tcl เป็นภาษาสคริปต์สมัยใหม่ที่สำคัญตัวแรก (ไม่ใช่ภาษาสคริปต์แรก แต่ฉันลืมว่ามันคืออะไร แต่ฉันรู้สึกประหลาดใจที่ได้รู้ว่ามันมาก่อน Tcl)
ฉันอธิบายคุณลักษณะของภาษาสคริปต์หลักในเอกสารของฉัน :
A Practical Solution for Scripting Language Compilers
Paul Biggar, Edsko de Vries and David Gregg
SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)
ส่วนใหญ่จะพิมพ์และตีความแบบไดนามิกและส่วนใหญ่ไม่มีความหมายที่กำหนดไว้นอกเหนือจากการนำไปใช้อ้างอิง อย่างไรก็ตามแม้ว่าการนำไปใช้งานหลักจะกลายเป็นคอมไพล์หรือ JITed แต่ก็ไม่ได้เปลี่ยน "ธรรมชาติ" ของภาษา
คำถามที่เหลือเพียงอย่างเดียวคือคุณจะทราบได้อย่างไรว่าภาษาใหม่เป็นภาษาสคริปต์ ถ้าเรียกว่าภาษาสคริปต์ก็เป็นอย่างหนึ่ง ดังนั้นFactorจึงเป็นภาษาสคริปต์ (หรืออย่างน้อยก็คือตอนที่เขียน) แต่พูดว่า Java ไม่ใช่
"ภาษาสคริปต์" เป็นหนึ่งในแนวคิดที่คลุมเครือซึ่งอาจหมายถึงหลายสิ่ง โดยปกติแล้วจะหมายถึงความจริงที่ว่ามีกระบวนการขั้นตอนเดียวที่นำคุณจากซอร์สโค้ดไปสู่การดำเนินการ
ตัวอย่างเช่นใน Perl คุณทำ: perl my_source.pl
ตามเกณฑ์ข้างต้น PHP เป็นภาษาสคริปต์ (แม้ว่าคุณจะมีกระบวนการ "คอมไพล์" ได้เช่นเมื่อใช้ Zend Encoder เพื่อ "ป้องกัน" ซอร์สโค้ด)
ปล. มักจะตีความภาษาสคริปต์ (แต่ไม่เสมอไป) บ่อยครั้ง (แต่ไม่เสมอไป) ภาษาสคริปต์จะถูกพิมพ์แบบไดนามิก
ภาษาสคริปต์ทั้งหมดเป็นภาษาโปรแกรม พูดอย่างเคร่งครัดไม่มีความแตกต่าง
คำนี้ไม่ได้อ้างถึงคุณสมบัติพื้นฐานใด ๆ ของภาษา แต่หมายถึงการใช้ภาษาโดยทั่วไป หากการใช้งานทั่วไปคือการเขียนโปรแกรมสั้น ๆ ซึ่งส่วนใหญ่จะเรียกโค้ดที่มีอยู่แล้วและการประมวลผลแบบง่ายๆกับผลลัพธ์ (นั่นคือถ้าการใช้งานทั่วไปคือการเขียนสคริปต์ ) แสดงว่าเป็นภาษาสคริปต์
ฉันคิดว่า Mr Roberto Ierusalimschy มีคำตอบที่ดีมากหรือคำถามใน 'Programming in Lua':
อย่างไรก็ตามคุณลักษณะที่แตกต่างของภาษาที่ตีความไม่ใช่ว่าไม่ได้รวบรวม แต่คอมไพเลอร์ใด ๆ เป็นส่วนหนึ่งของรันไทม์ของภาษาดังนั้นจึงเป็นไปได้ (และง่าย) ที่จะรันโค้ดที่สร้างขึ้นทันที
eval
ฟังก์ชั่นเต็มรูปแบบ
กองหนึ่งคือ
ภาษาที่ตีความแบบไดนามิกจะถูกตีความที่รันไทม์ในขณะที่ภาษาคอมไพล์จะถูกคอมไพล์ก่อนที่จะดำเนินการ
ฉันควรเพิ่มว่าดังที่Jörgได้ชี้ให้เห็นความแตกต่างที่ตีความ / เรียบเรียงไม่ใช่คุณลักษณะของภาษา แต่เป็นของกลไกการดำเนินการ
นอกจากนี้คุณอาจสนใจคำอธิบายเกี่ยวกับระบบ Typeซึ่งเกี่ยวข้องและมุ่งเน้นไปที่แง่มุมของภาษามากกว่าเครื่องมือดำเนินการ ภาษาสคริปต์ส่วนใหญ่จะพิมพ์แบบไดนามิกในขณะที่ภาษา "ปกติ" ส่วนใหญ่จะพิมพ์แบบคงที่
โดยทั่วไปการแบ่งภาษาที่พิมพ์แบบคงที่เทียบกับแบบไดนามิกนั้นมีการกำหนดที่ดีกว่าและมีผลต่อการใช้งานของภาษามากกว่า
โดยทั่วไปภาษาสคริปต์คือ:
ในขณะที่ภาษาที่ไม่ใช่สคริปต์มักจะ : 1. พิมพ์แบบคงที่ 2. คอมไพล์โดยเน้นที่ประสิทธิภาพ 3. ต้องใช้โค้ดสำเร็จรูปมากขึ้นซึ่งนำไปสู่การสร้างต้นแบบที่ช้าลง แต่สามารถอ่านได้มากขึ้นและการบำรุงรักษาในระยะยาว 4. ใช้สำหรับโครงการขนาดใหญ่ปรับให้เข้ากับหลาย ๆ รูปแบบการออกแบบ
แต่มันเป็นความแตกต่างทางประวัติศาสตร์ในปัจจุบันมากกว่าในความคิดของฉัน Javascript และ Perl ถูกเขียนขึ้นโดยใช้สคริปต์ขนาดเล็กและเรียบง่ายในขณะที่ C ++ เขียนขึ้นโดยคำนึงถึงแอปพลิเคชันที่ซับซ้อน แต่สามารถใช้ได้ทั้งสองวิธี และภาษาการเขียนโปรแกรมหลายภาษาทั้งสมัยใหม่และสมัยเก่าก็เบลอบรรทัดอยู่ดี (และมันก็เลือนลางในตอนแรก!)
สิ่งที่น่าเศร้าคือฉันรู้จักนักพัฒนาบางคนที่เกลียดสิ่งที่พวกเขามองว่าเป็น "ภาษาสคริปต์" โดยคิดว่ามันง่ายกว่าและไม่มีประสิทธิภาพเท่า ความคิดเห็นของฉันคือความคิดโบราณเก่า ๆ - ใช้เครื่องมือที่เหมาะสมกับงาน
ภาษาสคริปต์เดิมคิดว่าเป็นกลไกควบคุมสำหรับแอปพลิเคชันที่เขียนด้วยภาษาโปรแกรมยาก โปรแกรมที่คอมไพล์แล้วไม่สามารถแก้ไขได้ในขณะรันไทม์ดังนั้นการเขียนสคริปต์จึงทำให้ผู้คนมีความยืดหยุ่น
โดยเฉพาะอย่างยิ่งเชลล์สคริปต์คือกระบวนการอัตโนมัติในเคอร์เนล OS (ตามปกติแล้ว AppleScript บน Macs) บทบาทที่ส่งผ่านเข้าไปในมือของ Perl มากขึ้นเรื่อย ๆ และจากนั้นก็เข้าสู่ Python เมื่อเร็ว ๆ นี้ ฉันเคยเห็น Scheme (โดยเฉพาะอย่างยิ่งในการใช้งาน Guile) ที่ใช้ในการประกาศฉาก raytracing และเมื่อเร็ว ๆ นี้ Lua ได้รับความนิยมอย่างมากในฐานะภาษาการเขียนโปรแกรมสำหรับเกมสคริปต์จนถึงจุดที่สิ่งเดียวที่เข้ารหัสยากในเกมใหม่ ๆ คือเอ็นจิ้นกราฟิก / ฟิสิกส์ในขณะที่ตรรกะของเกมทั้งหมดถูกเข้ารหัสเป็น Lua ในทำนองเดียวกัน JavaScript ถูกคิดว่าจะเขียนสคริปต์พฤติกรรมของเว็บเบราว์เซอร์
ภาษาปลดปล่อย; ตอนนี้ไม่มีใครคิดเกี่ยวกับระบบปฏิบัติการว่าเป็นแอปพลิเคชัน (หรือคิดเกี่ยวกับเรื่องนี้มากนัก) และภาษาสคริปต์เดิมหลายภาษาเริ่มใช้เพื่อเขียนแอปพลิเคชันเต็มรูปแบบของตนเอง ชื่อนี้ไม่มีความหมายและแพร่กระจายไปยังภาษาที่มีการตีความหลายภาษาที่ใช้อยู่ในปัจจุบันไม่ว่าจะได้รับการออกแบบมาให้ตีความจากระบบอื่นหรือไม่ก็ตาม
อย่างไรก็ตาม "ภาษาสคริปต์" ไม่ได้มีความหมายเหมือนกันกับ "ภาษาที่ตีความ" - ตัวอย่างเช่น BASIC ถูกตีความมาเกือบตลอดชีวิต (กล่าวคือก่อนที่มันจะสูญเสียความย่อและกลายเป็น Visual Basic) แต่ก็ไม่มีใครคิดว่ามันเป็น การเขียนสคริปต์
ประการแรกภาษาโปรแกรมไม่ใช่ "ภาษาสคริปต์" หรืออย่างอื่น อาจเป็น "ภาษาสคริปต์" และอย่างอื่นก็ได้
จุดที่สองผู้ใช้ภาษาจะบอกคุณว่าเป็นภาษาสคริปต์หรือไม่
คำถามของคุณควรอ่าน "ในการนำไปใช้งานภาษาโปรแกรมจะถือเป็นภาษาสคริปต์ได้อย่างไร" ไม่ใช่ "อะไรคือความแตกต่างระหว่างภาษาสคริปต์และภาษาโปรแกรม" ไม่มีระหว่าง
อย่างไรก็ตามฉันจะพิจารณาภาษาหนึ่งเป็นภาษาสคริปต์หากใช้เพื่อจัดหาเครื่องกลางบางประเภท ตัวอย่างเช่นฉันจะถือว่าการใช้ JavaScript ส่วนใหญ่เป็นภาษาสคริปต์ หาก JavaScript ถูกเรียกใช้ในระบบปฏิบัติการไม่ใช่เบราว์เซอร์แสดงว่าไม่ใช่ภาษาสคริปต์ หาก PHP ทำงานภายใน Apache แสดงว่าเป็นภาษาสคริปต์ หากเรียกใช้จากบรรทัดคำสั่งจะไม่ใช่
ฉันเห็นว่าภาษาสคริปต์เป็นอะไรก็ได้ที่ไม่ต้องใช้ขั้นตอน 'รวบรวม' ที่ให้ความรู้สึกหนักเกินไป คุณสมบัติหลักจากมุมมองของโปรแกรมเมอร์คือคุณแก้ไขโค้ดและเรียกใช้งานได้ทันที
ดังนั้นฉันจึงถือว่า JavaScript และ PHP เป็นภาษาสคริปต์ในขณะที่ActionScript 3 / Flexไม่ได้เป็นเช่นนั้น
เพื่อนของฉันและฉันเพิ่งมีข้อโต้แย้งนี้: อะไรคือความแตกต่างระหว่างภาษาโปรแกรมและภาษาสคริปต์
ข้อโต้แย้งที่ได้รับความนิยมคือภาษาโปรแกรมถูกรวบรวมและตีความภาษาสคริปต์ - อย่างไรก็ตามฉันเชื่อว่าข้อโต้แย้งนี้เป็นเท็จทั้งหมด ... ทำไม?
บนพื้นฐานนั้นนี่คือข้อโต้แย้งของฉันสำหรับความแตกต่างระหว่างภาษาโปรแกรมและภาษาสคริปต์:
ภาษาโปรแกรมทำงานที่ระดับเครื่องและสามารถเข้าถึงเครื่องได้เอง (หน่วยความจำกราฟิกเสียง ฯลฯ )
ภาษาสคริปต์เป็นแบบแซนด์บ็อกซ์และสามารถเข้าถึงได้เฉพาะวัตถุที่สัมผัสกับแซนด์บ็อกซ์ ไม่มีการเข้าถึงโดยตรงไปยังเครื่องต้นแบบ
ในความคิดเห็นของฉันฉันจะบอกว่าภาษาที่ตีความแบบไดนามิกเช่น PHP, Ruby ฯลฯ ... ยังคงเป็นภาษา "ปกติ" ฉันจะบอกว่าตัวอย่างของภาษา "สคริปต์" คือสิ่งต่างๆเช่น bash (หรือ ksh หรือ tcsh หรืออะไรก็ตาม) หรือ sqlplus ภาษาเหล่านี้มักใช้เพื่อรวมโปรแกรมที่มีอยู่บนระบบเข้าด้วยกันเป็นชุดคำสั่งที่สอดคล้องกันและเกี่ยวข้องกันเช่น:
ดังนั้นฉันจะบอกว่าความแตกต่าง (สำหรับฉันแล้ว) อยู่ที่วิธีการใช้ภาษาของคุณมากกว่า ภาษาเช่น PHP, Perl, Ruby สามารถใช้เป็น "ภาษาสคริปต์" ได้ แต่โดยปกติแล้วฉันจะเห็นว่าภาษาเหล่านี้ใช้เป็น "ภาษาปกติ" (ยกเว้นภาษา Perl ซึ่งดูเหมือนจะใช้ได้ทั้งสองแบบ
ฉันจะดำเนินการต่อและย้ายคำตอบของฉันจากคำถามที่ซ้ำกัน
ชื่อ "ภาษาสคริปต์" ใช้กับบทบาทเฉพาะ: ภาษาที่คุณเขียนคำสั่งเพื่อส่งไปยังแอปพลิเคชันซอฟต์แวร์ที่มีอยู่ (เช่น "สคริปต์" ทางทีวีหรือภาพยนตร์แบบดั้งเดิม)
ตัวอย่างเช่นกาลครั้งหนึ่งหน้าเว็บ HTML น่าเบื่อ พวกเขานิ่งเสมอ แล้ววันหนึ่ง Netscape ก็คิดว่า "เฮ้ถ้าเราปล่อยให้เบราว์เซอร์อ่านและดำเนินการกับคำสั่งเล็ก ๆ น้อย ๆ ในหน้าเว็บล่ะ" และเช่นนั้น Javascript ก็ถูกสร้างขึ้น
คำสั่ง javascript อย่างง่ายคือalert()
คำสั่งที่สั่ง / สั่งเบราว์เซอร์ (แอพซอฟต์แวร์) ที่กำลังอ่านเว็บเพจเพื่อแสดงการแจ้งเตือน
ตอนนี้alert()
เกี่ยวข้องกับ C ++ หรือภาษารหัสใด ๆ ที่เบราว์เซอร์ใช้เพื่อแสดงการแจ้งเตือนหรือไม่? ไม่แน่นอน ผู้ที่เขียน "alert ()" ในหน้า. html ไม่เข้าใจว่าเบราว์เซอร์แสดงการแจ้งเตือนจริงอย่างไร เขาแค่เขียนคำสั่งที่เบราว์เซอร์จะตีความ
มาดูโค้ดจาวาสคริปต์ง่ายๆ
<script>
var x = 4
alert(x)
</script>
คำสั่งเหล่านี้ถูกส่งไปยังเบราว์เซอร์เพื่อให้เบราว์เซอร์ตีความในตัวเอง ภาษาการเขียนโปรแกรมที่เบราว์เซอร์ใช้เพื่อตั้งค่าตัวแปรเป็น 4 จริงและใส่ไว้ในการแจ้งเตือน ... มันไม่เกี่ยวข้องกับจาวาสคริปต์
เราเรียกชุดคำสั่งสุดท้ายนั้นว่า "สคริปต์" (ซึ่งเป็นสาเหตุว่าทำไมจึงอยู่ใน<script>
แท็ก) เพียงแค่คำนิยามของ "สคริปต์" ในความหมายดั้งเดิม: ชุดของคำแนะนำและคำสั่งที่ส่งไปยังนักแสดง ทุกคนรู้ดีว่าบทภาพยนตร์ (สคริปต์ภาพยนตร์) คือสคริปต์
บทภาพยนตร์ (สคริปต์) ไม่ใช่ตัวแสดงหรือกล้องถ่ายรูปหรือเอฟเฟกต์พิเศษ บทภาพยนตร์บอกพวกเขาว่าต้องทำอะไร
ตอนนี้ภาษาสคริปต์คืออะไรกันแน่?
มีภาษาการเขียนโปรแกรมมากมายที่เหมือนกับเครื่องมือต่างๆในกล่องเครื่องมือ บางภาษาได้รับการออกแบบมาโดยเฉพาะเพื่อใช้เป็นสคริปต์
Javasript เป็นตัวอย่างที่ชัดเจน มีแอปพลิเคชั่น Javascript จำนวนน้อยมากที่ไม่อยู่ในขอบเขตของการเขียนสคริปต์
ActionScript (ภาษาสำหรับภาพเคลื่อนไหว Flash) และอนุพันธ์เป็นภาษาสคริปต์โดยที่พวกเขาเพียงแค่ออกคำสั่งไปยังโปรแกรมเล่น / ล่าม Flash แน่นอนว่ามีสิ่งที่เป็นนามธรรมเช่นการเขียนโปรแกรมเชิงวัตถุ แต่ทั้งหมดนี้เป็นเพียงวิธีการสุดท้าย: ส่งคำสั่งไปยังโปรแกรมเล่นแฟลช
Python และ Ruby มักใช้เป็นภาษาสคริปต์ ตัวอย่างเช่นครั้งหนึ่งฉันเคยทำงานให้กับ บริษัท ที่ใช้คำสั่ง Ruby to script เพื่อส่งไปยังเบราว์เซอร์ที่อยู่ในแนว "ไปที่ไซต์นี้คลิกลิงก์นี้ ... " เพื่อทำการทดสอบอัตโนมัติขั้นพื้นฐาน ฉันไม่ได้เป็น "นักพัฒนาซอฟต์แวร์" แต่อย่างใดในงานนั้น ฉันเพิ่งเขียนสคริปต์ที่ส่งคำสั่งไปยังคอมพิวเตอร์เพื่อส่งคำสั่งไปยังเบราว์เซอร์
เนื่องจากโดยธรรมชาติแล้วภาษาสคริปต์จึงไม่ค่อย 'รวบรวม' นั่นคือแปลเป็นรหัสเครื่องและอ่านโดยตรงจากคอมพิวเตอร์
แม้แต่แอปพลิเคชัน GUI ที่สร้างจาก Python และ Ruby ก็เป็นสคริปต์ที่ส่งไปยัง API ที่เขียนด้วย C ++ หรือ C ซึ่งจะบอกแอป C ว่าต้องทำอย่างไร
มีเส้นคลุมเครือแน่นอน ทำไมคุณถึงบอกไม่ได้ว่าภาษาเครื่อง / C เป็นภาษาสคริปต์เพราะเป็นสคริปต์ที่คอมพิวเตอร์ใช้เพื่อเชื่อมต่อกับเมนบอร์ด / กราฟิกการ์ด / ชิปพื้นฐาน
มีบางบรรทัดที่เราสามารถวาดเพื่อชี้แจง:
เมื่อคุณสามารถเขียนภาษาสคริปต์และเรียกใช้งานได้โดยไม่ต้อง "คอมไพล์" จะเป็นการจัดเรียงสคริปต์โดยตรงมากกว่า ตัวอย่างเช่นคุณไม่จำเป็นต้องทำอะไรกับบทภาพยนตร์เพื่อที่จะบอกนักแสดงว่าต้องทำอะไรกับมัน มีอยู่แล้วใช้ตามที่เป็นอยู่ ด้วยเหตุนี้เราจึงไม่รวมภาษาที่คอมไพล์ไว้ไม่ให้เรียกว่าภาษาสคริปต์แม้ว่าจะสามารถใช้เพื่อวัตถุประสงค์ในการเขียนสคริปต์ได้ในบางโอกาสก็ตาม
ภาษาสคริปต์หมายถึงคำสั่งที่ส่งไปยังแอปพลิเคชันซอฟต์แวร์ที่ซับซ้อน นั่นเป็นเหตุผลทั้งหมดที่เราเขียนสคริปต์ตั้งแต่แรกดังนั้นคุณไม่จำเป็นต้องรู้ถึงความซับซ้อนของการทำงานของซอฟต์แวร์ในการส่งคำสั่งไป ดังนั้นภาษาสคริปต์มักจะเป็นภาษาที่ส่งคำสั่งง่ายๆ (ค่อนข้าง) ไปยังแอปพลิเคชันซอฟต์แวร์ที่ซับซ้อน ... ในกรณีนี้ภาษาเครื่องและรหัสแอสเซมบลีจะไม่ตัดออก
ฉันขอแนะนำว่าภาษาสคริปต์เป็นคำที่ผู้คนจำนวนมากย้ายออกไป ฉันจะบอกว่าส่วนใหญ่เป็นภาษาคอมไพล์และภาษาไดนามิกในปัจจุบัน
ฉันหมายความว่าคุณไม่สามารถพูดอะไรบางอย่างได้เช่น Python หรือ Ruby เป็นภาษา "สคริปต์" ในยุคนี้ (คุณยังมีสิ่งต่างๆเช่นIronPythonและJIT ซึ่งเป็นภาษาที่คุณชื่นชอบความแตกต่างนั้นเบลอมากยิ่งขึ้น)
พูดตามตรงโดยส่วนตัวแล้วฉันไม่รู้สึกว่า PHP เป็นภาษาสคริปต์อีกต่อไป ฉันไม่คาดหวังว่าผู้คนจะชอบจัดหมวดหมู่ PHP ให้แตกต่างจากการพูด Java ในประวัติย่อของพวกเขา
ภาษาสคริปต์มักจะทำงานภายในโปรแกรมเขียนสคริปต์ซึ่งเป็นส่วนหนึ่งของแอปพลิเคชันขนาดใหญ่ ตัวอย่างเช่น JavaScript ทำงานภายในเครื่องมือเขียนสคริปต์ของเบราว์เซอร์ของคุณ
ภาษาสคริปต์เป็นภาษาที่ตีความทุกครั้งที่มีการเรียกใช้สคริปต์ซึ่งหมายความว่ามีล่ามและส่วนใหญ่เป็นภาษาที่มนุษย์สามารถอ่านได้เพื่อให้เป็นประโยชน์ภาษาสคริปต์นั้นง่ายต่อการเรียนรู้และใช้งาน
ทุกภาษาที่คอมไพล์สามารถสร้างเป็นภาษาสคริปต์และในทางกลับกันทุกอย่างขึ้นอยู่กับการใช้งานล่ามหรือคอมไพเลอร์เนื่องจากตัวอย่าง C ++ มีล่ามดังนั้นจึงสามารถเรียกว่าภาษาสคริปต์ได้หากใช้เช่นนั้น (โดยทั่วไปไม่ได้เป็นภาษา C ++ เป็นภาษาที่ซับซ้อนมาก) หนึ่งในภาษาสคริปต์ที่มีประโยชน์ที่สุดในปัจจุบันคือ Python ...
ดังนั้นเพื่อตอบคำถามของคุณคำจำกัดความคือการใช้ล่ามเพื่อเรียกใช้โปรแกรมสคริปต์ที่ง่ายและรวดเร็วเพื่อจัดการกับงานง่ายๆหรือแอปพลิเคชันต้นแบบการใช้ภาษาสคริปต์ที่ทรงพลังที่สุดคือการรวมความเป็นไปได้สำหรับการใช้งานทุกครั้งเพื่อขยาย แอปพลิเคชันที่รวบรวม
ฉันไม่ชอบให้คนอื่นใช้คำว่า "ภาษาสคริปต์" เพราะฉันคิดว่ามันทำให้ความพยายามลดน้อยลง ใช้ภาษาอย่าง Perl ซึ่งมักเรียกว่า "ภาษาสคริปต์"
ทำไมเราถึงต้องแยกความแตกต่างระหว่างภาษาเช่น Java ที่คอมไพล์กับ Ruby ที่ไม่ใช่ มูลค่าในการติดฉลากคืออะไร?
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ดูhttp://xoa.petdance.com/Stop_saying_script
ความแตกต่างที่สำคัญคือพิมพ์ strong (เมื่อเทียบกับการพิมพ์ที่อ่อนแอ ) ภาษาสคริปต์มักจะพิมพ์ผิดทำให้สามารถเขียนโปรแกรมขนาดเล็กได้รวดเร็วขึ้น สำหรับโปรแกรมขนาดใหญ่นี่เป็นข้อเสียเนื่องจากมันขัดขวางคอมไพเลอร์ / ล่ามเพื่อค้นหาจุดบกพร่องบางอย่างโดยอัตโนมัติทำให้ยากที่จะ refactor code
ภาษาสคริปต์เขียนโปรแกรมภาษาที่โปรแกรมจะถูกส่งมักจะไปยังผู้ใช้ในรูปแบบที่เป็นข้อความที่อ่านได้และที่มีเป็นโปรแกรมที่ที่สามารถเห็นได้ชัดว่ารันโปรแกรมที่โดยตรง (โปรแกรมอาจรวบรวมสคริปต์ภายในได้ดีไม่เกี่ยวข้องที่นี่เพราะผู้ใช้มองไม่เห็น)
เป็นเรื่องปกติที่ภาษาสคริปต์จะสามารถรองรับเซสชันแบบโต้ตอบซึ่งผู้ใช้สามารถพิมพ์โปรแกรมของตนและดำเนินการได้ทันที เนื่องจากนี่เป็นส่วนขยายเล็กน้อยของข้อกำหนดที่จำเป็นจากย่อหน้าแรก ข้อกำหนดพิเศษหลักคือการเพิ่มกลไกในการค้นหาว่าเมื่อคำสั่งพิมพ์เสร็จสมบูรณ์เพื่อให้สามารถส่งไปยังเครื่องเรียกใช้งานได้
สำหรับคำถามที่แตกต่างกันเล็กน้อย ภาษาสคริปต์เป็นภาษาโปรแกรม แต่ภาษาโปรแกรมไม่จำเป็นต้องเป็นภาษาสคริปต์ ภาษาสคริปต์ใช้เพื่อควบคุมหรือเขียนสคริปต์ระบบ ระบบนั้นอาจเป็นระบบปฏิบัติการที่ภาษาสคริปต์จะทุบตี ระบบอาจเป็นเว็บเซิร์ฟเวอร์ที่มีภาษาสคริปต์ PHP ภาษาสคริปต์ถูกออกแบบมาเพื่อเติมเต็มช่องเฉพาะ เป็นภาษาเฉพาะโดเมน ระบบอินเทอร์แอคทีฟได้ตีความภาษาสคริปต์ทำให้เกิดความคิดที่ว่าภาษาสคริปต์ถูกตีความ อย่างไรก็ตามนี่เป็นผลมาจากระบบไม่ใช่ภาษาสคริปต์เอง
ภาษาสคริปต์คือภาษาที่กำหนดค่าหรือขยายโปรแกรมที่มีอยู่
ภาษาสคริปต์เป็นภาษาโปรแกรม
คำจำกัดความของ "ภาษาสคริปต์" ค่อนข้างคลุมเครือ ฉันจะพิจารณาตามข้อควรพิจารณาต่อไปนี้:
ภาษาสคริปต์มักไม่มีขั้นตอนการคอมไพล์ที่ผู้ใช้มองเห็นได้ โดยปกติผู้ใช้สามารถเรียกใช้โปรแกรมด้วยคำสั่งง่ายๆเพียงคำสั่งเดียว
โดยปกติโปรแกรมในภาษาสคริปต์จะถูกส่งผ่านในรูปแบบซอร์ส
โดยปกติภาษาสคริปต์จะมีรันไทม์ที่มีอยู่ในระบบจำนวนมากและสามารถติดตั้งรันไทม์บนระบบส่วนใหญ่ได้อย่างง่ายดาย
ภาษาสคริปต์มีแนวโน้มที่จะข้ามแพลตฟอร์มและไม่ใช่เฉพาะเครื่อง
ภาษาสคริปต์ทำให้ง่ายต่อการเรียกโปรแกรมอื่น ๆ และอินเทอร์เฟซกับระบบปฏิบัติการ
ภาษาสคริปต์มักจะสามารถฝังลงในระบบขนาดใหญ่ที่เขียนด้วยภาษาโปรแกรมทั่วไปได้อย่างง่ายดาย
โดยปกติภาษาสคริปต์ได้รับการออกแบบมาเพื่อความสะดวกในการเขียนโปรแกรมและโดยคำนึงถึงความเร็วในการดำเนินการน้อยกว่ามาก (หากคุณต้องการการดำเนินการที่รวดเร็วคำแนะนำตามปกติคือการเขียนโค้ดส่วนที่ใช้เวลานานในบางอย่างเช่น C และฝังภาษาลงใน C หรือเรียกบิต C จากภาษา)
คุณลักษณะบางอย่างที่ฉันระบุไว้ข้างต้นเป็นความจริงในการใช้งานซึ่งในกรณีนี้ฉันหมายถึงการใช้งานทั่วไป มีล่าม C โดยที่ (AFAIK) ไม่มีขั้นตอนการคอมไพล์ที่ชัดเจน แต่นั่นไม่เป็นความจริงสำหรับการใช้งาน C ส่วนใหญ่ คุณสามารถคอมไพล์โปรแกรม Perl กับโค้ดเนทีฟได้อย่างแน่นอน แต่นั่นไม่ใช่วิธีการใช้งานตามปกติ ลักษณะอื่น ๆ บางประการเป็นลักษณะทางสังคม เกณฑ์บางประการข้างต้นทับซ้อนกันบ้าง อย่างที่บอกคำจำกัดความมันเลือนลาง
ฉันจะบอกว่าภาษาสคริปต์เป็นสิ่งที่จัดการกับเอนทิตีที่ไม่ได้กำหนดเอง ตัวอย่างเช่น JavaScript จัดการอ็อบเจ็กต์ DOM ที่เบราว์เซอร์จัดหาให้ PHP ดำเนินการไลบรารีฟังก์ชันที่ใช้ C เป็นจำนวนมากและอื่น ๆ แน่นอนว่าไม่ใช่คำจำกัดความที่แม่นยำมีวิธีคิดมากกว่านี้
ถ้ามันไม่ / ไม่ทำงานบน CPU มันเป็นสคริปต์สำหรับฉัน หากล่ามจำเป็นต้องทำงานบน CPU ด้านล่างโปรแกรมแสดงว่าเป็นสคริปต์และภาษาสคริปต์
ไม่มีเหตุผลที่จะทำให้มันซับซ้อนมากไปกว่านี้?
แน่นอนในกรณีส่วนใหญ่ (99%) ชัดเจนว่าภาษาเป็นภาษาสคริปต์หรือไม่ แต่ให้พิจารณาว่า VM สามารถจำลองชุดคำสั่ง x86 ได้เช่น สิ่งนี้จะไม่ทำให้ x86 bytecode เป็นภาษาสคริปต์เมื่อรันบน VM หรือไม่? จะเกิดอะไรขึ้นถ้ามีคนเขียนคอมไพเลอร์ที่จะเปลี่ยนรหัส perl ให้เป็นไฟล์ปฏิบัติการดั้งเดิม? ในกรณีนี้ฉันไม่รู้ว่าจะเรียกภาษาตัวเองว่าอะไรอีกต่อไป มันเป็นผลลัพธ์ที่สำคัญไม่ใช่ภาษา
จากนั้นอีกครั้งฉันไม่ทราบว่ามีอะไรเกิดขึ้นบ้างดังนั้นตอนนี้ฉันยังคงสบายใจที่จะเรียกภาษาสคริปต์ภาษาที่ตีความหมาย
สคริปต์เป็นค่อนข้างเล็กโปรแกรม ระบบเป็นที่ค่อนข้างใหญ่โปรแกรมหรือการเก็บรวบรวมของโปรแกรมที่ค่อนข้างใหญ่
ภาษาโปรแกรมบางภาษาได้รับการออกแบบด้วยคุณสมบัติที่นักออกแบบภาษาและชุมชนการเขียนโปรแกรมพิจารณาว่ามีประโยชน์เมื่อเขียนโปรแกรมที่มีขนาดค่อนข้างเล็ก ภาษาโปรแกรมเหล่านี้เรียกว่าภาษาสคริปต์เช่น PHP
ในทำนองเดียวกันภาษาโปรแกรมอื่น ๆ ได้รับการออกแบบด้วยคุณสมบัติที่นักออกแบบภาษาและชุมชนการเขียนโปรแกรมพิจารณาว่ามีประโยชน์เมื่อเขียนโปรแกรมที่มีขนาดค่อนข้างใหญ่ ภาษาโปรแกรมเหล่านี้เรียกว่าภาษาระบบเช่น Java
ปัจจุบันโปรแกรมขนาดเล็กและขนาดใหญ่สามารถเขียนในภาษาใดก็ได้ โปรแกรม Java ขนาดเล็กคือสคริปต์ ตัวอย่างเช่นโปรแกรม Java "Hello World" เป็นสคริปต์ไม่ใช่ระบบ โปรแกรมขนาดใหญ่หรือชุดของโปรแกรมที่เขียนด้วย PHP คือระบบ ตัวอย่างเช่น Facebook ที่เขียนด้วย PHP เป็นระบบไม่ใช่สคริปต์
การพิจารณาคุณสมบัติภาษาเดียวเป็น "การทดสอบสารสีน้ำเงิน" เพื่อตัดสินใจว่าภาษานั้นเหมาะสมที่สุดสำหรับการเขียนสคริปต์หรือการเขียนโปรแกรมระบบเป็นเรื่องที่น่าสงสัย ตัวอย่างเช่นสคริปต์อาจถูกคอมไพล์เป็นรหัสไบต์หรือรหัสเครื่องหรืออาจดำเนินการโดยการตีความโครงสร้างไวยากรณ์แบบนามธรรมโดยตรง (AST)
ดังนั้นภาษาที่เป็นภาษาสคริปต์ถ้ามันมักจะใช้ในการเขียนสคริปต์ อาจมีการใช้ภาษาสคริปต์ในการเขียนระบบ แต่แอปพลิเคชันดังกล่าวมีแนวโน้มที่จะถูกพิจารณาว่าไม่ชอบมาพากล