๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[tbd] ์ปดํ“จํ„ฐ ์–ธ์–ด Computer Language

by ๐“ƒ๐’ถ๐“ƒ๐’ถ๏ฝก 2015. 3. 3.

์ปดํ“จํ„ฐ์™€์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์— ์“ฐ์ด๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์–ธ์–ด๋“ค์„ ์ผ์ปซ๋Š” ๋ง.

์ปดํ“จํ„ฐ ์–ธ์–ด๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ €๊ธ‰ ์–ธ์–ด Low-Level Language

 

๊ธฐ๊ณ„์–ด์™€ ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด

ํ•˜๋“œ์›จ์–ด ์œ„์ฃผ์˜ ์–ธ์–ด๋กœ, ๊ฐ„๊ฒฐํ•˜๋ฉฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค.

 

 

๊ณ ๊ธ‰ ์–ธ์–ด High-Level Language

 

์ €๊ธ‰ ์–ธ์–ด๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์–ธ์–ด

์ €๊ธ‰ ์–ธ์–ด๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ๋” ์ถ”์ƒ์ ์ด๋ฉฐ, ๋” ์ด์‹ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ฒŒ ๋””์ž์ธ๋œ๋‹ค.

์‚ฌ์šฉ์ž ์œ„์ฃผ์˜ ์–ธ์–ด๋กœ, ๊ฐ„๊ฒฐ์„ฑ์€ ๋–จ์–ด์ง€๋‚˜ ๊ฐ€๋…์„ฑ์ด ๋” ๋†’๋‹ค.

 

 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด Programming Language

 

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์„ ๊ตฌ๋™์‹œํ‚ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด.

๊ณ ๊ธ‰ ์–ธ์–ด์ผ์ˆ˜๋ก ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์— ๊ฐ€๊น๋‹ค.

์ด๋“ค์€ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ ์–ธ์–ด์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ปดํŒŒ์ผ๋Ÿฌ Compiler


 

์ž‘์„ฑ๋œ ์ฝ”๋“œ ๊ทธ๋Œ€๋กœ๋ฅผ ์ฝ์–ด๋“ค์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋œ ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ถœ๋ ฅํ•˜์—ฌ ์ฃผ๋Š” ์–ธ์–ด์ฒ˜๋ฆฌ๊ธฐ.

๊ณ ๊ธ‰ ์–ธ์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ ๋ฌธ์žฅ์„ ์‹คํ–‰ ์ „์— ํ•œ๊บผ๋ฒˆ์— ์ ๋‹นํ•œ ์ผ๋ จ์˜ ๊ธฐ๊ณ„์–ด ๋ช…๋ น์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ์ด ์‰ฝ๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉด์„œ ๊ธฐ์–ต ์žฅ์†Œ๋ฅผ ๋งŽ์ด ์š”๊ตฌํ•˜์ง€ ์•Š๊ณ , ์‹œํ–‰ ์‹œ๊ฐ„์„ ์ค‘์‹œํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ.

 

์žฅ์ : ํ•œ๋ฒˆ ์ปดํŒŒ์ผ ํ•˜๋ฉด ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ˜๋ณต ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฅด๋‹ค.

๋‹จ์ : ์ฝ”๋“œ ํ•œ์ค„์ด ๋•Œ๋กœ๋Š” ๋ช‡๋ฐฑ๊ฐœ์˜ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๊ธฐ์–ต์šฉ๋Ÿ‰์„ ์š”๊ตฌํ•œ๋‹ค. 

 

 

์ธํ„ฐํ”„๋ฆฌํ„ฐ Interpreter


 

๊ณ ๊ธ‰ ์–ธ์–ด ์ž์ฒด๋ฅผ ๊ธฐ๊ณ„์—์„œ ์‹œํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•.

ํ”„๋กœ๊ทธ๋žจ์ด ์งง๊ณ  ๋ณต์žกํ•˜์ง€ ์•Š์•„ ์งˆ๋ฌธ์— ์‘๋‹ตํ•˜๋Š” ์ƒ์‘์‹ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ.

๋‚ด์žฅ ์‚ฌ์ „์„ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

JIT(just-in-time) compiler๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

์žฅ์ ํ”„๋กœ๊ทธ๋žจ์ด ๋  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์–ต ์žฅ์†Œ๋Š” ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

๋‹จ์ : ๋ฐ˜๋ณต ์‹คํ–‰ ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค ์ƒ๋Œ€์ ์œผ๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

 

 

Compile 

 


*compile - link - native code

 

๋‹ค์–‘ํ•œ ์–ธ์–ด์ฝ”๋“œ -> ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ (๊ธฐ๊ณ„์–ด) -> CPU

complier: ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด/ CPU ํ™˜๊ฒฝ์— ๋”ฐ๋ผ์„œ๋„ ๋‹ฌ๋ผ์ง

link: ๋ณ€์—ญ/์‹คํ–‰. *.exe ํŒŒ์ผ ์–ป์Œ. ์ปดํŒŒ์ผ ํ›„ *.obj ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ ์ƒ์„ฑ -> ๋ง์ปค ํ†ตํ•ด exe

 

 

*compile ๋ฐ link์˜ ์›๋ฆฌ


object file /static library / dynamic library

*.lib -> ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ: ์—ฌ๋Ÿฌ obj ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ๊ธฐ๋ก.

๋ง์ปค์— library ์ง€์ •ํ•˜๋ฉด ๊ทธ ์ค‘ ํ•„์š”ํ•œ obj๋งŒ ์ถ”์ถœ ํ›„ ๋‹ค๋ฅธ obj ํŒŒ์ผ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ exe ๋งŒ๋“ค์–ด์คŒ.

ํ‘œ์ค€ํ•จ์ˆ˜ (sprintf() ๋“ฑ) library ํ˜•ํƒœ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ•จ๊ป˜ ์ œ๊ณต

 

์œˆ๋„์šฐ. API(Application PRogramming Interface) ์ œ๊ณต - ํ•จ์ˆ˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ธฐ๋Šฅ ์ œ๊ณต. MessageBox()

DLL ํŠน์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ exe์— ํ•ฉ์ณ์ง

import.lib (์ž„ํฌํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) -> user.dll์— ์†ํ•ด ์žˆ์œผ๋ฉฐ dll ํŒŒ์ผ ์ €์žฅ ํด๋” ์ •๋ณด๋งŒ ๊ธฐ๋ก. ์‹ค์ œ obj ํŒŒ์ผ X

 

static: ์‹ค์ œ obj ๋‚ด์šฉ ๋‹ด๊ณ  ์žˆ๊ณ , exe ํŒŒ์ผ์— ์ง์ ‘ ๊ฒฐํ•ฉ

link ~ assemble