# Basic Computer Language (LV.1)

## Bit และ Byte

คอมพิวเตอร์ถูกออกแบบมาให้ทำงานบนระบบเลขฐานสอง ซึ่งเป็นเลขฐานที่เล็กที่สุด เพื่อง่ายต่อการออกแบบวงจรไฟฟ้า เช่น\
มีแรงดันไฟฟ้า = 1\
ไม่มีแรงดันไฟฟ้า = 0

เลขฐานสองเพียงหลักเดียว เราเรียกว่า Bit\
แต่เลขฐานสองเพียงหลักเดียว ไม่เพียงพอต่อการแทนที่ตัวอักษรที่เราใช้กันได้ทั้งหมด จึงมีการใช้เลขฐานสองหนึ่งชุด ซึ่งมีจำนวน 8 หลัก มาแทนแต่ละตัวอักษร\
$$2^8 = 256$$ \
ความเป็นไปได้ทั้งหมด 256 แบบ สามารถแทนที่อักษร 0-9, a-z, A-Z และเครื่องหมายอื่นๆ ได้เพียงพอ\
เราเรียกเลขฐานสองจำนวน 1 ชุดนี้ เราเรียกว่า Byte

![Bit และ Byte](/files/-Mhb_VyAwTh8nogT3_Oa)

## Interpreter และ Compiler

คอมพิวเตอร์ทำงานด้วยเลขฐานสอง จึงต้องมีการแปลชุดคำสั่งที่เราเขียนเป็นภาษาที่คอมพิวเตอร์เข้าใจ (Computer Language) ก่อน\
ภาษาที่เราเขียนอาจจะเป็น BASIC, PASCAL, C/C++, Ada, COBOL, Java หรืออื่นๆ\
แต่ละภาษาอาจจะมีรูปแบบการแปลที่แตกต่างกัน ซึ่งรูปแบบการแปล แบ่งได้เป็น

* Interpreter - มีการแปลทีละคำสั่ง และคอมพิวเตอร์นำไปทำงานทันที
* Compiler - จะแปลทุกคำสั่งให้เสร็จก่อน เก็บเป็นไฟล์ แล้วจึงนำไฟล์ไปทำงาน

พฤติกรรมดังกล่าวทำให้ Compiler ใช้เวลาในการแปลคำสั่งนานกว่า เพราะต้องแปลให้เสร็จทั้งหมดก่อน จึงจะนำไปทำงานได้ แต่ในขณะที่โปรแกรมทำงาน Compiler จะทำงานได้ไวกว่า เพราะไม่ต้องนำไปแปลอีกต่อไป ในเชิงความเร็วแล้ว จึงสรุปได้ว่า Compiler มีความเร็วมากกว่า Interpreter

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

ในด้านการแสดงข้อผิดพลาดของโปรแกรมนั้น Compiler จะแปลทั้งโปรแกรมจนหมดก่อน แล้วจึงแสดงข้อผิดพลาดทั้งหมดออกมา ในขณะที่ Interpreter จะทำงานทีละบรรทัด และหยุดทันทีที่เจอบรรทัดที่ผิดพลาด

## Just-In-Time Compilation

เนื่องจากทั้ง Compiler และ Interpreter ต่างก็มีจุดเด่นในตัวเอง เพื่อลดจุดด้อยในแบบต่างๆ จึงเกิดรูปแบบการแปลภาษาแบบใหม่ ที่เรียกว่า Just-in-time compilation

เป็นการแปลภาษาที่คล้าย Interpreter โดยจะอ่านโปรแกรมมาแปลก่อนเริ่มทำงาน โดยจะแปลเป็นภาษาซึ่งเรียกว่า Bytecode ก่อน และ Bytecode จะถูก Runtime Engine บนระบบนำไปแปลเป็น Machine Language และทำงานตาม CPU Architecture ของตนเอง\
หากมีการทำงานที่เรียกส่วนเดิมซ้ำ เช่นเรียก function เดิมซ้ำ (โดยอาจมี argument ที่ต่างออกไป) โปรแกรมจะใช้ Bytecode ที่แปลไว้แล้ว ทำให้ขั้นตอนการแปลลดลง จึงไวกว่า Interpreter

ตัวอย่างของ Runtime ที่ใช้ JIT คือ

* JVM - รองรับภาษา Java และ JavaScript
* CLR - รองรับพวก .NET
* Node JS - JavaScript
* PHP8


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.novice.solutions/com-lang/basic-computer-language-lv1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
