ตัวแปลภาษาและเครื่องมือพัฒนาซอฟต์แวร์ (IDEs)
แนะนำใหม่| English | ความหมาย |
|---|---|
| compiler/kəmˈpaɪlə/ | คอมไพลเลอร์ |
| source code/sɔːs kəʊd/ | ซอร์สโค้ด |
| translator/trænˈsleɪtə/ | ทรานส์เลเตอร์ |
| machine code/məˈʃiːn kəʊd/ | โค้ดเครื่อง |
| assembler/əˈsemblə/ | อสมบิลเลอร์ |
| assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ | ภาษาอสมบิล |
| object code/ˈɒbdʒekt kəʊd/ | ออบเจกต์โค้ด |
| executable/ɪɡˈzekjʊtəbl/ | ไฟล์ที่รันได้ |
| interpreter/ɪnˈtɜːprɪtə/ | อินเทอร์พรีเตอร์ |
| bytecode/ˈbaɪtkəʊd/ | 字节码 |
| portable/ˈpɔːtəbl/ | แบบพกพา |
| virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ | เครื่องเสมือน |
| just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ | การคอมไพล์แบบทันที |
| integrated development environment/ˈɪntɪɡreɪtɪd dɪˈveləpmənt enˈvaɪrənmənt/ | สภาพแวดล้อมการพัฒนาแบบบูรณาการ |
| context-sensitive prompts/ˈkɒntekst ˈsensɪtɪv prɒmpts/ | คำแนะนำที่ขึ้นกับบริบท |
| auto-complete/ˈɔːtəʊ kəmˈpliːt/ | เติมอัตโนมัติ |
| dynamic syntax checks/daɪˈnæmɪk ˈsɪntæks tʃeks/ | การตรวจสอบไวยากรณ์แบบไดนามิก |
| prettyprint/ˈpretɪprɪnt/ | การจัดรูปแบบโค้ด |
| breakpoints/ˈbreɪkpɔɪnts/ | จุดหยุด |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | การดำเนินการทีละขั้นตอน |
| report window/rɪˈpɔːt ˈwɪndəʊ/ | หน้าต่างรายงาน |
ไม่มีใครเชื่อ ότιคอมพิวเตอร์จะเขียนโปรแกรมตัวเองได้
- ในปี 1952 Grace Hopper สร้าง compiler ตัวแรก ซึ่งเป็นโปรแกรมที่แปลงProgramming notation ของนักพัฒนาให้เป็นคำสั่งเครื่อง "ไม่มีใครเชื่อเรื่องนั้น" เธอกล่าวในภายหลัง "ฉันมีcompiler ที่ทำงานได้ แต่ไม่มีใครกล้าสัมผัส มันบอกฉันว่าคอมพิวเตอร์ทำได้แค่เลขคณิตเท่านั้น"
- ภาษาที่คุณใช้ตั้งแต่ตอนนี้ล้วนตั้งอยู่บนแนวคิดนี้: คุณเขียน source code สำหรับมนุษย์ และตัวแปลจะผลิต machine code ที่โปรเซสเซอร์จะรัน
- มีตัวแปล 3 ประเภทและไฮบริดชื่อดัง 1 ตัว และการสอบต้องการให้คุณบอกว่าควรใช้ کدامเมื่อไร และทำไม
- บทเรียนนี้เกี่ยวกับตัวแปล ผลดี-ผลเสียระหว่างการคอมไพล์และการตีความ Java ที่ผสมผสานทั้งสองอย่าง และเครื่องมือต่างๆ ที่ IDE จัดเตรียมไว้รอบๆ它们
Source code, machine code และ Assembler
- โปรเซสเซอร์รันได้เฉพาะ machine code เท่านั้น ตัวแปลจะแปลงโปรแกรมที่เขียนโดยมนุษย์ให้เป็นมัน
- Assembler แปล assembly language เป็น machine code: คำสั่ง mnemonics แต่ละตัว,
LDD,ADD,JMP, จะกลายเป็นคำสั่ง machine code พอดี และป้ายชื่อ (labels) กับที่อยู่เชิงสัญลักษณ์จะถูกแทนที่ด้วยที่อยู่จริง - Assembly ถูกใช้ในกรณีที่นักพัฒนาต้องการควบคุมฮาร์ดแวร์โดยตรง: Device drivers, Embedded systems, Looms ภายในสุดของเกม
จับคู่ตัวแปลแต่ละชนิดกับหน้าที่ของมัน
Difficulty 2/5 · 140 coins + a small bonus on first completion today
อัสเซมเบิลเลอร์: อัสเซมบลี→adow code; คอมไพล์: แปลทั้งหมดพร้อมกันเป็นไฟล์ اجرایی; อินเทอร์พรีเตอร์: บรรทัดละบรรทัดในช่วง运行的
ตัวแปลภาษา (Compiler)
- ตัวแปลภาษา ทำการแปลโปรแกรมระดับสูงทั้ง ทั้งหมด เป็นรหัสเครื่อง หรือ โค้ดเป้าหมาย (object code) ก่อนที่จะนำไปรัน会产生一个可执行文件,并在翻译结束时一次性报告所有语法错误。
- มันไม่ได้นำโปรแกรมไปรัน เมื่อโค้ดสะอาดแล้ว ไฟล์ที่สร้างได้จะรันโดยไม่ต้องมีตัวแปลภาษาติดตั้งอยู่ รันได้เท่าที่ต้องการ
- รันได้เร็ว เพราะไม่มีการแปลระหว่างรัน แต่รหัสเครื่องจะผูกติดกับโปรเซสเซอร์และระบบปฏิบัติการเฉพาะหนึ่งเท่านั้น
เส้นทางของคอมไพล์: จากซอร์สโค้ดไปสู่โปรแกรมที่运行的ได้
ติดตามขั้นตอนการทำงานของคอมไพล์ — การแปลทั้งโปรแกรมครั้งเดียว ก่อนที่จะ运行的 เปรียบเทียบกับอินเทอร์พรีเตอร์ซึ่งจะแปลและ运行的บรรทัดละบรรทัด
คอมไพล์แตกต่างจากอินเทอร์พรีเตอร์เพราะมัน:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คอมไพล์จะแปลทั้งหมดพร้อมกันเป็นไฟล์ اجراییที่运行机制ได้โดยไม่ต้องมีคอมไพล์ ส่วนอินเทอร์พรีเตอร์运行机制บรรทัดละบรรทัด
เรียงลำดับเส้นทางของคอมไพล์ ตั้งแต่การเขียนโค้ดจนถึงการ运行机制
Difficulty 3/5 · 200 coins + a small bonus on first completion today
คอมไพล์จะแปลทั้งโปรแกรมครั้งเดียวเป็นไฟล์ اجرایی; ไฟล์นั้นจึง运行机制ได้โดยไม่ต้องมีคอมไพล์
ตัวตีความ (Interpreter)
- ตัวตีความ จะแปล语句ของโปรแกรมระดับสูงทีละ statement และ ดำเนินการ ทันที ก่อนจะย้ายไปยังบรรทัดถัดไป
- ไม่产生ไฟล์ที่รันได้它将หยุดที่ข้อผิดพลาดแรก遇到的并报告它,包括行号,以便你修复后重新运行。
- ทั้งโค้ดต้นฉบับและตัวตีความต้องมีอยู่ทุกครั้งที่รันโปรแกรม และการรันแต่ละครั้งจะทำการแปลใหม่ ทำให้ Execution ช้าลง;แต่ source code เดียวกันสามารถรันได้ทุกที่ที่มีตัวตีความ

翻译一次后发布,或边用边翻译
อินเทอร์พรีเตอร์จะรายงานข้อผิดพลาดเมื่อใด?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
อินเทอร์พรีเตอร์运行机制บรรทัดละบรรทัด ดังนั้นมันจึงรายงานข้อผิดพลาดทันทีที่ถึงบรรทัดนั้น — มีประโยชน์ระหว่างการพัฒนา
อินเทอร์พรีเตอร์ไม่ได้สร้างไฟล์ اجراییแบบอิสระ ดังนั้นอินเทอร์พรีเตอร์เองต้องถูกติดตั้งเพื่อ运行机制โปรแกรม
Difficulty 1/5 · 100 coins + a small bonus on first completion today
อินเทอร์พรีเตอร์จะแปลและ运行机制บรรทัดละบรรทัดทุกครั้ง — ไม่มีไฟล์ اجراییแยกต่างหากให้ส่งมอบ ต่างจากคอมไพล์
优点和缺点,按评分方案列出
| Compiler | Interpreter | |
|---|---|---|
| ความเร็วในการรัน | เร็ว เพราะเป็นรหัสเครื่องอยู่แล้ว | ช้ากว่า เพราะต้องแปลในทุกครั้งที่รัน |
| สิ่งที่ผู้ใช้ต้องการ | ต้องมีแค่ไฟล์ที่รันได้;source code kept private | ต้องมีทั้ง source code และตัวตีความ |
| การหาข้อผิดพลาด | รายงานทั้งหมดพร้อมกันหลังการแปล | รายงานทีละบรรทัดตามจุดที่พัฒนา |
| การแก้ไขโค้ด | Recompile ทั้งหมด | แก้ไขและรันทันที |
| Portability | ใช้ได้กับ platform เดียว;ต้อง recompile ใหม่สำหรับแต่ละ platform | รันได้ทุกที่ที่มีตัวตีความ |
คุณควรเลือกใช้คอมไพล์เมื่อ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไฟล์ اجراییที่คอมไพล์แล้วจะเร็วและเป็นอิสระ ส่วนอินเทอร์พรีเตอร์เหมาะสำหรับการพัฒนาอย่างรวดเร็วและสคริปต์ที่พกพาได้
ข้อใดสนับสนุนการใช้ インターพรีเตอร์ ระหว่างการพัฒนา โปรแกรม? เลือก ทั้งหมด ที่ถูกต้อง
Difficulty 2/5 · 140 coins + a small bonus on first completion today
รอบ edit-run ที่รวดเร็วและการรายงานข้อผิดพลาดที่บรรทัดเดิมคือจุดแข็งของอินเทอร์พรีเตอร์ ส่วนความเร็วในช่วง运行的คือของคอมไพล์
ตัวอย่างวิธีทำ: ใช้ Interpreter ขณะเขียน ใช้ Compiler เมื่อเสร็จสิ้น
- นักพัฒนาใช้ Interpreter ขณะเขียนโปรแกรม และใช้ Compiler เมื่อโปรแกรมเสร็จ อธิบายวิธีการใช้งานของแต่ละเครื่องมือ [4]
- ระหว่างการพัฒนา Interpreter จะรันโปรแกรมที่ยังเขียนไม่เสร็จทันที โดยไม่ต้องรอให้แปลครบถ้วน เมื่อเจอ error จะรายงานบรรทัด ทำให้ผู้พัฒนาสามารถแก้แล้วรันใหม่ได้ทันที:เป็น cycle การแก้ไข-รันที่รวดเร็ว ช่วยให้ง่ายต่อการ debug
- เมื่อโปรแกรมเสร็จสมบูรณ์ Compiler จะแปลโปรแกรมทั้งหมดให้เป็นไฟล์ที่รันได้ซึ่งรันได้เร็วกว่า ไม่ต้องมี translator บนคอมพิวเตอร์ของผู้ใช้ และรักษา source code ให้เป็นความลับ
- ได้คะแนน 2 สำหรับแต่ละเครื่องมือ:สิ่งที่มันทำได้ และเหตุผลที่เหมาะสมกับขั้นตอนนี้
Java: แปลบางส่วน ตีความบางส่วน
- Source ของ Java ถูก compile เป็น bytecode ซึ่งเป็นรูปแบบกลางที่กะทัดรัดและมี portability ไม่ใช่รหัสเครื่องของโปรเซสเซอร์จริงใดๆ
- Virtual machine หรือ JVM จะตีความ bytecode นั้นบนเครื่องwhatever ที่มันรันอยู่ หรือใช้ just-in-time compilation เพื่อเปลี่ยนส่วนที่ใช้หนักให้เป็น native code mientras el programa se ejecuta.
- Stage การ compile จะจับ syntax errors ได้ตั้งแต่ต้น;stage การ interpret อนุญาตให้ไฟล์ bytecode ไฟล์เดียวรันได้ทุกที่ที่มี JVM;Java ใน console mode หรือโปรแกรมข้อความที่รันจาก command line เป็นตัวอย่างในหลักสูตร

一次编写,到处运行:一个字节码文件,每个平台一个JVM
Java 컴ไลส์เป็น字节码 which运行机制บน JVM. ประโยชน์หลักคือ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
字节码 เป็นกลางต่อแพลตฟอร์ม; JVM ใดๆ ก็运行机制ได้ (โดย JIT ให้ความเร็วใกล้เคียง native สำหรับ hot code)
คอมไพล์ของ Java จะผลิต ____ ที่เป็นกลางต่อแพลตฟอร์ม ซึ่ง随后会被虚拟机翻译
Difficulty 1/5 · 100 coins + a small bonus on first completion today
字节码 เป็นรูปแบบกลาง: компайล์ครั้งเดียว แล้ว运行机制โดย JVM บนทุกแพลตฟอร์ม นั่นคือเหตุผลที่ทำให้ Java มีการ компайล์บางส่วนและ interpreter บางส่วน
ตัวอย่างวิธีทำ: ทำไมต้อง compile เป็น bytecode แล้วจึงตีความ?
- อธิบายว่าทำไม Java จึงถูก compile เป็น bytecode แทนที่จะ compile เป็นรหัสเครื่องโดยตรง
- Compiler ผลิตรหัสเครื่องสำหรับ หนึ่ง processor และ operating system ดังนั้นโปรแกรมที่ compile บนเครื่องหนึ่งจะไม่รันบนอีกเครื่องหนึ่งได้
- Compiler ของ Java瞄准的是一个虚拟机器而非具体硬件,因此bytecode everywhere identical。Each platform supplies its own JVM to interpret it.
- ค่าที่ต้องจ่ายคือความเร็ว:การตีความ bytecode ช้ากว่าการรัน native code นี่คือเหตุผลที่ JVM เพิ่ม just-in-time compilation สำหรับส่วนที่เป็น 'hot' (ส่วนที่ถูกเรียกใช้บ่อย)
IDE และกลุ่มคุณสมบัติสี่ประเภท
- Environment สำหรับพัฒนาแบบบูรณาการ (IDE) คือแอปพลิเคชันเดียวสำหรับการเขียน แปล รัน และ debug โปรแกรม หลักสูตรแบ่งคุณสมบัติออกเป็นสี่กลุ่ม
- สำหรับการเขียนโค้ด: context-sensitive prompts จะเด้งขึ้นมาแสดง identifiers, keywords หรือ parameters ที่เหมาะสมกับจุดนั้น;auto-complete จะช่วยเติมชื่อให้
- สำหรับการตรวจจับข้อผิดพลาดเบื้องต้น: dynamic syntax checks จะขีดเส้นใต้ความผิดพลาดขณะพิมพ์ ก่อนการแปล;สำหรับการจัดรูปแบบ: prettyprint แสดง keywords, identifiers, strings และ comments ด้วยสีต่างๆ พร้อมการจัดย่อที่สม่ำเสมอ;expand and collapse ซ่อน body ของ block เพื่อให้เห็นโครงสร้างหลัก
- สำหรับการ debug: breakpoints จะหยุดโปรแกรมที่บรรทัดที่กำหนด;single stepping จะรันทีละบรรทัด;window แสดงค่าของ variables และ expressions;report window รายการข้อผิดพลาด คำเตือน และ output

Coding, error detection, presentation, debugging
คุณสมบัติใดเป็นส่วนหนึ่งของ debugger ใน IDE?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
debugger ช่วยให้คุณตั้ง breakpoints, เดินผ่านโค้ดบรรทัดละบรรทัด และตรวจสอบค่าตัวแปร
จับคู่คุณสมบัติแต่ละอย่างของ IDE กับกลุ่มหลักสูตร
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Coding, initial error detection, presentation, debugging: สี่กลุ่มที่หลักสูตรระบุมา โดยแต่ละกลุ่มมีคุณสมบัติหนึ่งตัวนี้
ตัวอย่างวิธีทำ: หา bug ใน Calculate()
- 函数
Calculate()返回了意外值。描述IDE的调试功能如何帮助找出原因。 [4] - ตั้ง breakpoint ที่บรรทัดแรกของ
Calculate()เพื่อให้โปรแกรมหยุดที่นั่นแทนที่จะรันผ่าน - ใช้ Single-step ผ่านฟังก์ชันทีละบรรทัด หลังแต่ละ step อ่านค่าของ variables และของ expression ที่คุณตั้งค่าให้ IDE monitor เปรียบเทียบกับค่าที่คุณคาดหวัง
- บรรทัดแรกหลังจากที่ค่าผิดคือจุดที่มี logic error. The report window แสดงข้อความ runtime error และ output ระหว่างทาง

หยุดชั่วคราว, ข้ามขั้นตอน, ตรวจสอบ
เรียงลำดับขั้นตอนการหา logic error ด้วย debugger
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Pause, step, inspect, compare, locate. แต่ละข้อเป็นหนึ่งในคุณสมบัติ debug ที่หลักสูตรระบุมา
คะแนนที่หลุดหายไป
- คอมไพเลอร์ ไม่รัน โปรแกรม แต่จะแปลทั้งส่วนแล้วสร้างไฟล์ที่รันได้
- อินเทอร์เตอร์จะหยุดที่ ข้อผิดพลาดแรก; คอมไพเลอร์จะแสดงข้อผิดพลาด ทั้งหมด อย่าสลับกัน
- คำว่า "เร็วขึ้น" ต้องใช้คู่กับ "during run time", และคำว่า "พกพาได้" ต้องใช้คู่กับ "ซอร์สโค้ดเดียวกันรันได้ทุกที่ที่มีอินเทอร์เตอร์"
- จัดกลุ่มคุณสมบัติของ IDE เข้าเป็น สี่กลุ่ม ตามหลักสูตร: จุดหยุดชั่วคราวคือระบบดีบัก, การจัดรูปแบบข้อความคือการนำเสนอ, การเรียกคำแนะนำแบบเฉพาะบริบทคือการเขียนโค้ด บายต์โค้ด ไม่ใช่ โค้ดเครื่อง
คุณเข้าใจแล้ว
- แอสเซมเบลเลอร์: คำสั่งแอสเซมบลีหนึ่งคำสั่ง ↔ คำสั่งโค้ดเครื่องหนึ่งคำสั่ง · คอมไพเลอร์: ทั้งโปรแกรมทั้งหมด ก่อนรัน, ไฟล์ที่รันได้, แสดงข้อผิดพลาดทั้งหมด · อินเทอร์เตอร์: คำสั่งทีละบรรทัด, รันทันที, หยุดที่ข้อผิดพลาดแรก, ไม่มีไฟล์ที่รันได้
- ใช้คอมไพเลอร์เพื่อความเร็ว การกระจายและการรักษาความลับของซอร์สโค้ด; ใช้อินเทอร์เตอร์เพื่อรอบการทำงานแก้ไข-รันที่รวดเร็ว ความสามารถในการพกพา และการใช้งานสำหรับผู้เริ่มต้น
- Java编译成 portable bytecode ที่ JVM จะทำ インเทอร์ปหรือ JIT-compile:部分组成 compile,部分组成 интерпретация
- คุณสมบัติของ IDE ในสี่กลุ่ม: การเขียนโค้ด (การแนะนำแบบเฉพาะบริบท), การตรวจจับข้อผิดพลาดเบื้องต้น (การตรวจสอบไวยากรณ์แบบไดนามิก), การนำเสนอ (การจัดรูปแบบข้อความ, ขยายและหด), การดีบัก (จุดหยุดชั่วคราว, การข้ามขั้นตอน, ตัวแปร, หน้าต่างรายงาน)