ภาษาใดถือว่าเป็นภาษาสคริปต์ [ปิด]


107

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

ดูสิ่งนี้ด้วย:


คุณอาจต้องการขยายความเกี่ยวกับคำถามของคุณเล็กน้อย ฉันรู้สึกว่านี่เป็นการหลอกลวงอย่างอื่น คนอื่นอาจไม่เห็นความแตกต่าง
Kent Fredric

หลอกลวงคำถามอื่นใด
Sietse

2
stackoverflow.com/questions/98268/…มีความคล้ายคลึงกันมาก ไม่เหมือนกัน แต่มีบริบท / ความคิดเห็นที่ใช้ร่วมกันมากมาย
Kent Fredric

7
... เมื่อภาษาทำลาย API และเปลี่ยนไวยากรณ์ทุก ๆ รุ่นย่อยเมื่อมันเป็น wrapper ประมาณ 100 ของไลบรารี buggy C ที่ไม่ได้รับการดูแลที่สกปรกก็จะเป็นภาษาสคริปต์ ;)
ivan_ivanovich_ivanoff

1
ใน "ที่เกี่ยวข้อง" แถบด้านข้างคุณจะพบstackoverflow.com/questions/1514206/...ที่ฉันเชื่อมโยงกองซ้ำกันที่มีอยู่แล้วที่จะกลับไปยังstackoverflow.com/questions/101055/...
dmckee --- อดีตผู้ดูแลลูกแมว

คำตอบ:


52

ภาษาสคริปต์คือภาษาที่ "สคริปต์" ใช้ทำสิ่งต่างๆ จุดสนใจหลักไม่ได้สร้างแอปของคุณเองเป็นหลักมากเท่ากับการทำให้แอปที่มีอยู่ทำงานในแบบที่คุณต้องการเช่น JavaScript สำหรับเบราว์เซอร์ VBA สำหรับ MS Office


แล้วภาษาอย่าง Python ล่ะ? ไม่ใช่เรื่องง่ายที่จะบอกว่าโฟกัสอยู่ที่ใด แต่อาจกล่าวได้ว่ากำลังมุ่งเน้นไปที่แอปพลิเคชันของตัวเองมากกว่า แต่ก็มักเรียกว่า "ภาษาสคริปต์" อาจเป็นเพราะการคอมไพล์ที่ซ่อนอยู่ใน bytecode ของ CPython อ้างอิง im ไม่เพิ่มข้อผิดพลาดในการรวบรวมเกี่ยวกับ "ความปลอดภัยของประเภท" บางทีคำตอบของ Oded อาจมีสิ่งเหล่านี้ ...
n611x007

ระบบ Bytecode และ type ไม่ได้เกี่ยวข้องอะไรกับมันเลย ตามคำจำกัดความข้างต้นหากแอปเปิดเผย API ไปยัง Python จะมีการกล่าวว่าใช้ Python เป็นภาษาสคริปต์ หากคุณสร้างแอปทั้งหมดใน Python แอปนั้นจะใช้เป็นภาษาโปรแกรม
bug

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

93

เรียบง่าย เมื่อฉันใช้มันเป็นภาษาไดนามิกสมัยใหม่เมื่อคุณใช้มันเป็นเพียงภาษาสคริปต์เท่านั้น!


19
ใช่. "ไม่ใช่" ภาษาของเล่น "แต่เป็น" ภาษาระดับสูง "": P
Roberto Bonvallet

6
ที่น่าเบื่อและไม่อยู่ในหัวข้อ -1
adf88

1
แม้จะมี - (1 + 1) ก็จะได้รับประมาณ 2x + 1s กว่าเครื่องหมายถูก : D
anatoly techtonik

ดีที่สุด. ตอบ. อีวาร์!
iconoclast

41

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

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

นี่มาจากบทความวิกิพีเดียเกี่ยวกับภาษาสคริปต์:

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

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


1
@Amr: มันเรียกว่า java script
sepp2k

1
@ รามภัท - มันสับสนเนื่องจากความแตกต่างเป็นสิ่งประดิษฐ์
Oded

11
@ แอนเดรย์: รวบรวมการใช้งาน JavaScript ที่ทันสมัยทั้งหมด และมีล่ามสำหรับ C.
Jörg W Mittag

27
นี่เป็นเพียงความผิดธรรมดา ที่จริงแล้วมันไม่ผิดแม้แต่ธรรมดาก็ไม่สมเหตุสมผล ไม่มีสิ่งที่เรียกว่าภาษาที่รวบรวมหรือตีความ ภาษาไม่ได้รวบรวมภาษาเพียงคือ มันเป็นกฎทางคณิตศาสตร์เชิงนามธรรมมากมาย การตีความและการคอมไพล์เป็นลักษณะของเอ็นจิ้นการประมวลผลไม่ใช่ภาษา ทุกภาษาสามารถใช้งานได้ด้วยคอมไพเลอร์หรือล่าม ในความเป็นจริงภาษาทั้งหมดที่ถูกอ้างถึงว่า "ตีความ" ในหน้านี้มีการใช้งานที่รวบรวมไว้เกือบทั้งหมดเช่น JavaScript, PHP, Python, Ruby
Jörg W Mittag

5
@Andrey: Chakra (IE9), TraceMonkey / JägerMonkey (Firefox), Nitro (Safari), Carakan (Opera) ทั้งหมดรวบรวม JavaScript เป็น bytecode จากนั้นจะมีการตีความ bytecode บางส่วนและบางส่วนรวบรวมเป็นโค้ดเนทีฟ V8 (Chrome) ข้าม bytecode และคอมไพล์ JavaScript ตรงไปยังโค้ดเนทีฟ IronJS รวบรวม JavaScript เป็น CIL bytecode Rhino คอมไพล์ JavaScript เป็น JVML bytecode BESEN (เอ็นจิ้น ECMAScript 5 เท่านั้น) คอมไพล์ JavaScript เป็น BESEN bytecode และขณะนี้กำลังเพิ่มคอมไพเลอร์เนทีฟ บางส่วนข้างต้นยังรวบรวมนิพจน์ทั่วไปกับรหัสเครื่องดั้งเดิม
Jörg W Mittag

31

"สคริปต์คือสิ่งที่คุณมอบให้กับนักแสดงโปรแกรมคือสิ่งที่คุณมอบให้กับผู้ชม" - กำแพงแลร์รี่

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

อย่าเพิ่งวางสายมันไม่สำคัญจริงๆ


อืม .. ฉันไม่ได้วางสาย แต่ผู้สัมภาษณ์และครูส่วนใหญ่เป็น และฉันไม่เคยมีคนเหล่านี้ให้คำตอบที่น่าพอใจเลย!
Laz

1
และถ้าคุณให้คำตอบอื่น ๆ ที่นี่ในฐานะผู้สัมภาษณ์ฉันคิดว่าคุณไม่มีส่วนเกี่ยวข้องกับคำถามจริงๆ ความแตกต่างนั้นพร่ามัวและไม่มีคำตอบที่ชัดเจน ถ้าคุณจะพูดว่า "ตามเนื้อผ้า ... " ฉันก็ยอมรับ แต่ฉันคาดหวังว่าคุณจะพูดคุยเกี่ยวกับเรื่องต่างๆเช่นการคอมไพล์รันไทม์และ JIT'ing ด้วย
Clinton Pierce

25

คำจำกัดความของฉันจะเป็นภาษาที่มักจะกระจายเป็นแหล่งที่มาแทนที่จะเป็นไบนารี


5
คุณคิดว่า php, python และอื่น ๆ เป็นภาษาสคริปต์หรือไม่?
Sietse

"Scripting" เป็นคำอธิบายทั่วไปสำหรับ Python และ PHP
ล็อต

22
php และ python - แน่นอนว่าเป็นภาษาสคริปต์!
Antony Carthy

นี่คือคำจำกัดความของฉันตั้งแต่เริ่มต้น

@Antony Carthy นี่ไม่ถูกต้อง Python ไม่ใช่ภาษาสคริปต์โดยทั่วไป แต่อาจเป็นได้เช่นเดียวกับภาษาอื่น ๆ ที่ใช้ภายในโปรแกรม (เช่น Word (VB) เบราว์เซอร์ (JS))
Joschua

16

มีคำตอบที่เป็นไปได้มากมายสำหรับสิ่งนี้

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

ประการที่สอง: เป็นการยากที่จะบอกว่าภาษา 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) เว็บเซิร์ฟเวอร์ชุดหุ่นยนต์หรืออย่างอื่นทั้งหมด

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

ตัวอย่างเช่นมอนเดรียนเป็นภาษาสคริปต์ที่ใช้งานได้โดยใช้การคอมไพล์

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

  • ภาษาโปรแกรมจริง : ภาษาโปรแกรมของฉัน
  • ภาษาสคริปต์: ภาษาโปรแกรมของคุณ

นี่ดูเหมือนจะเป็นวิธีที่ใช้คำนี้บ่อยที่สุด


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

16

มันเหมือนหนังโป๊คุณจะรู้เมื่อคุณเห็นมัน คำจำกัดความเดียวที่เป็นไปได้ของภาษาสคริปต์คือ:

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 ไม่ใช่


1
เป็นคำอธิบายที่ดีมาก แต่ฉันแน่ใจว่าบางคน
โหวตให้คะแนนโหวต

ลิงค์ไปยังกระดาษเสีย
Quazi Irfan

5

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

ตัวอย่างเช่นใน Perl คุณทำ: perl my_source.pl

ตามเกณฑ์ข้างต้น PHP เป็นภาษาสคริปต์ (แม้ว่าคุณจะมีกระบวนการ "คอมไพล์" ได้เช่นเมื่อใช้ Zend Encoder เพื่อ "ป้องกัน" ซอร์สโค้ด)

ปล. มักจะตีความภาษาสคริปต์ (แต่ไม่เสมอไป) บ่อยครั้ง (แต่ไม่เสมอไป) ภาษาสคริปต์จะถูกพิมพ์แบบไดนามิก


Perl คอมไพล์เป็นไบต์โค้ดก่อนที่จะทำงาน
Brad Gilbert

2
แล้ว Java ล่ะ? คุณต้องมี jvm เพื่อรันโปรแกรม java แต่ฉันจะไม่เรียกมันว่าภาษาสคริปต์
Eineki

5

ภาษาสคริปต์ทั้งหมดเป็นภาษาโปรแกรม พูดอย่างเคร่งครัดไม่มีความแตกต่าง

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


4

ฉันคิดว่า Mr Roberto Ierusalimschy มีคำตอบที่ดีมากหรือคำถามใน 'Programming in Lua':

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


สิ่งนี้ไม่ตอบคำถามเลย!
Paul Biggar

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

นั่นคือภาษาตีความ หากคุณพยายามบอกว่าภาษาที่ตีความเป็นภาษาสคริปต์ให้พูดเช่นนั้น
Paul Biggar

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

4
Common Lisp ไม่ใช่สิ่งที่ฉันมักคิดว่าเป็นภาษาสคริปต์ แต่มีevalฟังก์ชั่นเต็มรูปแบบ
David Thornley

4

กองหนึ่งคือ

  • scripting = ตีความแบบไดนามิก
  • ปกติ = คอมไพล์

ภาษาที่ตีความแบบไดนามิกจะถูกตีความที่รันไทม์ในขณะที่ภาษาคอมไพล์จะถูกคอมไพล์ก่อนที่จะดำเนินการ

ฉันควรเพิ่มว่าดังที่Jörgได้ชี้ให้เห็นความแตกต่างที่ตีความ / เรียบเรียงไม่ใช่คุณลักษณะของภาษา แต่เป็นของกลไกการดำเนินการ

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

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


แล้ว Objective-C ล่ะ?
mouviciel

1
รองรับการพิมพ์แบบไดนามิก แต่ฉันจะไม่เรียกมันว่าภาษาสคริปต์
Timo Westkämper

2
นี่เป็นเพียงความผิดธรรมดา ที่จริงแล้วมันไม่ผิดแม้แต่ธรรมดาก็ไม่สมเหตุสมผล ไม่มีสิ่งที่เรียกว่าภาษาที่รวบรวมหรือตีความ ภาษาไม่ได้รวบรวมภาษาเพียงคือ มันเป็นกฎทางคณิตศาสตร์เชิงนามธรรมมากมาย การตีความและการคอมไพล์เป็นลักษณะของเอ็นจิ้นการประมวลผลไม่ใช่ภาษา ทุกภาษาสามารถใช้งานได้ด้วยคอมไพเลอร์หรือล่าม ในความเป็นจริงภาษาทั้งหมดที่ถูกอ้างถึงว่า "ตีความ" ในหน้านี้มีการใช้งานที่รวบรวมไว้เกือบทั้งหมดเช่น JavaScript, PHP, Python, Ruby
Jörg W Mittag

@ jorg-w-mittag อย่าลังเลที่จะแก้ไขคำตอบของฉันเพื่อให้ถูกต้องมากขึ้น คะแนนของคุณถูกต้อง โดยปกติแล้วถ้าคุณพูดถึงภาษาคุณจะพูดถึงโปรแกรมเรียกใช้งานเริ่มต้นด้วย
Timo Westkämper

3

โดยทั่วไปภาษาสคริปต์คือ:

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

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

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

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


2
ไม่มีสิ่งที่เรียกว่าภาษาที่รวบรวมหรือตีความ ภาษาไม่ได้รวบรวมภาษาเพียงคือ มันเป็นกฎทางคณิตศาสตร์เชิงนามธรรมมากมาย การตีความและการคอมไพล์เป็นลักษณะของเอ็นจิ้นการประมวลผลไม่ใช่ภาษา ทุกภาษาสามารถใช้งานได้ด้วยคอมไพเลอร์หรือล่าม ในความเป็นจริงภาษาทั้งหมดที่ถูกอ้างถึงว่า "ตีความ" ในหน้านี้มีการใช้งานที่รวบรวมไว้เกือบทั้งหมดเช่น JavaScript, PHP, Python, Ruby
Jörg W Mittag

@Jorg: จุดดีฉันเห็นด้วย แต่ฉันไม่ได้บอกว่าไม่สามารถรวบรวมได้เพียงแค่บอกว่าภาษาประเภทนี้มักจะตีความมากกว่ารวบรวมในการใช้งานทั่วไป
โอ๊

ที่พวกเขา? การใช้งาน Python, PHP, Perl และ Lua ในปัจจุบันทั้งหมดได้รับการรวบรวม ยกเว้น MRI การใช้งาน Ruby ในปัจจุบันทั้งหมดจะถูกรวบรวม (และมีเป็นจริงไม่หนึ่ง แต่สองคอมไพเลอร์ JIT สำหรับ MRI.) ด้วยข้อยกเว้นของ JScript ที่การใช้งานจาวาสคริทั้งหมดในปัจจุบันเป็นข้อมูลที่รวบรวม โปรดทราบว่า Chakra ซึ่งเป็นผู้สืบทอดของ JScript ถูกรวบรวม มีการรวบรวมการใช้งานโครงการจำนวนมาก รวบรวม ELisp
Jörg W Mittag

3

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

โดยเฉพาะอย่างยิ่งเชลล์สคริปต์คือกระบวนการอัตโนมัติในเคอร์เนล OS (ตามปกติแล้ว AppleScript บน Macs) บทบาทที่ส่งผ่านเข้าไปในมือของ Perl มากขึ้นเรื่อย ๆ และจากนั้นก็เข้าสู่ Python เมื่อเร็ว ๆ นี้ ฉันเคยเห็น Scheme (โดยเฉพาะอย่างยิ่งในการใช้งาน Guile) ที่ใช้ในการประกาศฉาก raytracing และเมื่อเร็ว ๆ นี้ Lua ได้รับความนิยมอย่างมากในฐานะภาษาการเขียนโปรแกรมสำหรับเกมสคริปต์จนถึงจุดที่สิ่งเดียวที่เข้ารหัสยากในเกมใหม่ ๆ คือเอ็นจิ้นกราฟิก / ฟิสิกส์ในขณะที่ตรรกะของเกมทั้งหมดถูกเข้ารหัสเป็น Lua ในทำนองเดียวกัน JavaScript ถูกคิดว่าจะเขียนสคริปต์พฤติกรรมของเว็บเบราว์เซอร์

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

อย่างไรก็ตาม "ภาษาสคริปต์" ไม่ได้มีความหมายเหมือนกันกับ "ภาษาที่ตีความ" - ตัวอย่างเช่น BASIC ถูกตีความมาเกือบตลอดชีวิต (กล่าวคือก่อนที่มันจะสูญเสียความย่อและกลายเป็น Visual Basic) แต่ก็ไม่มีใครคิดว่ามันเป็น การเขียนสคริปต์

UPDATE:อ่านเนื้อหาตามปกติที่มีอยู่ในวิกิพีเดีย


จริงๆแล้วการใช้งาน BASIC ดั้งเดิมนั้นเป็นคอมไพเลอร์ หลังจากนั้นก็มีการเขียนโคลนพื้นฐานเป็นล่ามเพราะล่ามควรจะเขียนได้ง่ายกว่าคอมไพเลอร์
Jörg W Mittag

1
@ Jörg: ไม่ค่อยนะ ในขณะที่การใช้งานการทดสอบครั้งแรกของ Dartmouth BASIC ถูกรวบรวม (เรียกว่า Card BASIC) การใช้งานจริงคือล่าม ในความเป็นจริงคุณสมบัติใหม่ที่สำคัญที่สุดของ BASIC ก็คือมันเป็นแบบโต้ตอบ ไม่จำเป็นต้องเจาะซอร์สโค้ดลงในการ์ดและป้อนเข้าคอมไพเลอร์ ผู้ใช้สามารถนั่งที่โทรพิมพ์เขียนโปรแกรมแล้วเรียกใช้งาน
PauliL

เป็นที่น่าสนใจที่คำตอบนี้แนะนำแนวคิดของภาษาที่ 'ยาก' 'ยาก' ต้องการคำจำกัดความในบริบทนี้หรือไม่?
DA Vincent

@DavidVincent: ฉันน่าจะหมายถึง "ยากกว่า" ไม่จำเป็นต้องมีคำจำกัดความอย่างเป็นทางการความเข้าใจที่ใช้งานง่ายควรจะเพียงพอ: การเขียนโปรแกรมใน Assembly หรือ C นั้นยากกว่าใน Ruby หรือ Python เนื่องจากในอดีตมีระดับต่ำและละเอียดกว่ามาก
Amadan

3

ประการแรกภาษาโปรแกรมไม่ใช่ "ภาษาสคริปต์" หรืออย่างอื่น อาจเป็น "ภาษาสคริปต์" และอย่างอื่นก็ได้

จุดที่สองผู้ใช้ภาษาจะบอกคุณว่าเป็นภาษาสคริปต์หรือไม่

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

อย่างไรก็ตามฉันจะพิจารณาภาษาหนึ่งเป็นภาษาสคริปต์หากใช้เพื่อจัดหาเครื่องกลางบางประเภท ตัวอย่างเช่นฉันจะถือว่าการใช้ JavaScript ส่วนใหญ่เป็นภาษาสคริปต์ หาก JavaScript ถูกเรียกใช้ในระบบปฏิบัติการไม่ใช่เบราว์เซอร์แสดงว่าไม่ใช่ภาษาสคริปต์ หาก PHP ทำงานภายใน Apache แสดงว่าเป็นภาษาสคริปต์ หากเรียกใช้จากบรรทัดคำสั่งจะไม่ใช่


3

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

ดังนั้นฉันจึงถือว่า JavaScript และ PHP เป็นภาษาสคริปต์ในขณะที่ActionScript 3 / Flexไม่ได้เป็นเช่นนั้น


ฉันไม่ต้องการลบหลู่คำตอบของปีเตอร์ แต่เราสามารถเพิ่มมากกว่าความคิดเห็นได้หรือไม่?
DA Vincent

3

เพื่อนของฉันและฉันเพิ่งมีข้อโต้แย้งนี้: อะไรคือความแตกต่างระหว่างภาษาโปรแกรมและภาษาสคริปต์

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

  1. Chakra & V8 (เอ็นจิ้น JavaScript ของ Microsoft และ Google) คอมไพล์โค้ดก่อนดำเนินการ
  2. QBasic ถูกตีความ - สิ่งนี้ทำให้ Qbasic เป็นภาษา "สคริปต์" หรือไม่?

บนพื้นฐานนั้นนี่คือข้อโต้แย้งของฉันสำหรับความแตกต่างระหว่างภาษาโปรแกรมและภาษาสคริปต์:

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

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


2

ในความคิดเห็นของฉันฉันจะบอกว่าภาษาที่ตีความแบบไดนามิกเช่น PHP, Ruby ฯลฯ ... ยังคงเป็นภาษา "ปกติ" ฉันจะบอกว่าตัวอย่างของภาษา "สคริปต์" คือสิ่งต่างๆเช่น bash (หรือ ksh หรือ tcsh หรืออะไรก็ตาม) หรือ sqlplus ภาษาเหล่านี้มักใช้เพื่อรวมโปรแกรมที่มีอยู่บนระบบเข้าด้วยกันเป็นชุดคำสั่งที่สอดคล้องกันและเกี่ยวข้องกันเช่น:

  1. คัดลอก A.txt ไปยัง / tmp / work /
  2. รันกระบวนการล้างข้อมูลทุกคืนบนเซิร์ฟเวอร์ฐานข้อมูล
  3. บันทึกผลลัพธ์และส่งไปที่ sysdamin

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


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

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

@ จะ: ความแตกต่างใด ๆ จะเป็นสิ่งประดิษฐ์ นี่คือความแตกต่างของความเห็นของฉัน ;)
FrustratedWithFormsDesigner

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

2

ฉันจะดำเนินการต่อและย้ายคำตอบของฉันจากคำถามที่ซ้ำกัน


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

ตัวอย่างเช่นกาลครั้งหนึ่งหน้าเว็บ 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 เป็นภาษาสคริปต์เพราะเป็นสคริปต์ที่คอมพิวเตอร์ใช้เพื่อเชื่อมต่อกับเมนบอร์ด / กราฟิกการ์ด / ชิปพื้นฐาน

มีบางบรรทัดที่เราสามารถวาดเพื่อชี้แจง:

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

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


2

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

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

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


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

Static / Dynamic มีภาษาไดนามิกที่คอมไพล์
Brad Gilbert

ฉันพูดซ้ำ: ฉันหมายความว่าคุณไม่สามารถพูดอะไรบางอย่างได้เช่น Python หรือ Ruby เป็นภาษา "สคริปต์" ในยุคนี้ (คุณยังมีสิ่งต่างๆเช่น IronPython snd JitYourFavoriteLanguage ความแตกต่างได้ถูกเบลอมากยิ่งขึ้น)
Robert Gould

1

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


เฮฮาที่คำตอบที่ได้รับการยอมรับมีการโหวตสองครั้ง
Robert S.

1
ควรมีตราสัญลักษณ์บางอย่างสำหรับสิ่งนั้น "ไม่สามารถจัดการกับความจริง" ได้อย่างไร? ไม่พูดมากเกินไป ;-)
Joseph Ferris

3
Perl, Python, Ruby, Tcl / Tk - เพื่อตั้งชื่อ แต่ภาษาสคริปต์สี่ภาษา - ไม่ได้สร้างไว้ในแอปพลิเคชันขนาดใหญ่เป็นหลัก
Jonathan Leffler

3
Ergo - ไม่ใช่ภาษาสคริปต์
Milen A.Radev

3
ใช่คงจะดีไม่น้อยหากสามารถยกเลิกการทำเครื่องหมายว่าถูกต้องได้
เที่ยงผ้าไหม

1

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

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

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


1

ฉันไม่ชอบให้คนอื่นใช้คำว่า "ภาษาสคริปต์" เพราะฉันคิดว่ามันทำให้ความพยายามลดน้อยลง ใช้ภาษาอย่าง Perl ซึ่งมักเรียกว่า "ภาษาสคริปต์"

  • Perl เป็นภาษาโปรแกรม!
  • Perl รวบรวมเช่น Java และ C ++ มันรวบรวมได้เร็วขึ้นมาก!
  • Perl มีอ็อบเจ็กต์และเนมสเปซและการปิด
  • Perl มี IDE และ debuggers และ profilers
  • Perl มีการฝึกอบรมและการสนับสนุนและชุมชน
  • Perl ไม่ใช่แค่เว็บ Perl ไม่ได้เป็นเพียงแค่ผู้ดูแลระบบเท่านั้น Perl ไม่ใช่แค่เทปพันสายไฟของอินเทอร์เน็ต

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ดูhttp://xoa.petdance.com/Stop_saying_script


ไม่มีคอมพิวเตอร์ใดที่สามารถเรียกใช้ perl หรือ Ruby (หรือรูปแบบใด ๆ ที่สามารถรวบรวมได้) โดยกำเนิด ดังนั้น perl และ ruby ​​จึงเป็นภาษาสคริปต์ตีความโดย parser หรือ VM
anon6439

@psoul: ใช่ java ก็เช่นกัน
Stefano Borini

มีเทคนิคหลายอย่างในการรวบรวม Ruby เป็นรหัสเครื่องจักรแม้ว่าฉันจะไม่แน่ใจว่ามีวิธีใดบ้างที่ไม่เพียง แต่รวมตัวแปลด้วยสตริงที่แสดงรหัสทับทิม แต่ถึงแม้ว่าจะเป็นจริง แต่ก็สามารถสร้างตัวแปลรหัส Ruby to Machine ได้ ไปยังรหัสเครื่องจะไม่ทำให้มันใกล้เคียงกับความเร็ว c เนื่องจากการจัดส่งแบบไดนามิกและ gc เหนือสิ่งอื่นใด ฉันไม่คิดว่าจะมีโปรเซสเซอร์ Ruby แต่ได้รับการออกแบบมาเพื่อให้เข้ากับโมเดล lisp และโปรเซสเซอร์ที่รัน java bytecode ได้อย่างใกล้ชิดมากขึ้น
Roman A.Taycher

1

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


1

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

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


1

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


1

ภาษาสคริปต์คือภาษาที่กำหนดค่าหรือขยายโปรแกรมที่มีอยู่
ภาษาสคริปต์เป็นภาษาโปรแกรม


1

คำจำกัดความของ "ภาษาสคริปต์" ค่อนข้างคลุมเครือ ฉันจะพิจารณาตามข้อควรพิจารณาต่อไปนี้:

  1. ภาษาสคริปต์มักไม่มีขั้นตอนการคอมไพล์ที่ผู้ใช้มองเห็นได้ โดยปกติผู้ใช้สามารถเรียกใช้โปรแกรมด้วยคำสั่งง่ายๆเพียงคำสั่งเดียว

  2. โดยปกติโปรแกรมในภาษาสคริปต์จะถูกส่งผ่านในรูปแบบซอร์ส

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

  4. ภาษาสคริปต์มีแนวโน้มที่จะข้ามแพลตฟอร์มและไม่ใช่เฉพาะเครื่อง

  5. ภาษาสคริปต์ทำให้ง่ายต่อการเรียกโปรแกรมอื่น ๆ และอินเทอร์เฟซกับระบบปฏิบัติการ

  6. ภาษาสคริปต์มักจะสามารถฝังลงในระบบขนาดใหญ่ที่เขียนด้วยภาษาโปรแกรมทั่วไปได้อย่างง่ายดาย

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

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


0

ฉันจะบอกว่าภาษาสคริปต์เป็นสิ่งที่จัดการกับเอนทิตีที่ไม่ได้กำหนดเอง ตัวอย่างเช่น JavaScript จัดการอ็อบเจ็กต์ DOM ที่เบราว์เซอร์จัดหาให้ PHP ดำเนินการไลบรารีฟังก์ชันที่ใช้ C เป็นจำนวนมากและอื่น ๆ แน่นอนว่าไม่ใช่คำจำกัดความที่แม่นยำมีวิธีคิดมากกว่านี้


อืม PHP ใช้ไลบรารี C พื้นฐาน แต่เป็นกรณีสำหรับภาษาส่วนใหญ่รวมถึง Java (ที่ระดับต่ำสุด) และมันไม่ได้ปรับแต่งฟังก์ชั่นเหล่านี้ ...
PhiLho

0

ถ้ามันไม่ / ไม่ทำงานบน CPU มันเป็นสคริปต์สำหรับฉัน หากล่ามจำเป็นต้องทำงานบน CPU ด้านล่างโปรแกรมแสดงว่าเป็นสคริปต์และภาษาสคริปต์

ไม่มีเหตุผลที่จะทำให้มันซับซ้อนมากไปกว่านี้?

แน่นอนในกรณีส่วนใหญ่ (99%) ชัดเจนว่าภาษาเป็นภาษาสคริปต์หรือไม่ แต่ให้พิจารณาว่า VM สามารถจำลองชุดคำสั่ง x86 ได้เช่น สิ่งนี้จะไม่ทำให้ x86 bytecode เป็นภาษาสคริปต์เมื่อรันบน VM หรือไม่? จะเกิดอะไรขึ้นถ้ามีคนเขียนคอมไพเลอร์ที่จะเปลี่ยนรหัส perl ให้เป็นไฟล์ปฏิบัติการดั้งเดิม? ในกรณีนี้ฉันไม่รู้ว่าจะเรียกภาษาตัวเองว่าอะไรอีกต่อไป มันเป็นผลลัพธ์ที่สำคัญไม่ใช่ภาษา

จากนั้นอีกครั้งฉันไม่ทราบว่ามีอะไรเกิดขึ้นบ้างดังนั้นตอนนี้ฉันยังคงสบายใจที่จะเรียกภาษาสคริปต์ภาษาที่ตีความหมาย


1
คุณกำลังเรียกภาษาเกือบทั้งหมดยกเว้นผู้ที่รวบรวมเป็นไบนารีดั้งเดิมสำหรับภาษาสคริปต์? ฉันแน่ใจว่านักพัฒนา Java ยินดีที่จะถูกเรียกว่า scripters;)
truppo

1
พวกเขาเป็น. Scripters นั่นคือ
anon6439

0

สคริปต์เป็นค่อนข้างเล็กโปรแกรม ระบบเป็นที่ค่อนข้างใหญ่โปรแกรมหรือการเก็บรวบรวมของโปรแกรมที่ค่อนข้างใหญ่

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

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

ปัจจุบันโปรแกรมขนาดเล็กและขนาดใหญ่สามารถเขียนในภาษาใดก็ได้ โปรแกรม Java ขนาดเล็กคือสคริปต์ ตัวอย่างเช่นโปรแกรม Java "Hello World" เป็นสคริปต์ไม่ใช่ระบบ โปรแกรมขนาดใหญ่หรือชุดของโปรแกรมที่เขียนด้วย PHP คือระบบ ตัวอย่างเช่น Facebook ที่เขียนด้วย PHP เป็นระบบไม่ใช่สคริปต์

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

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

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