Architectural musing and ideas - minsuk-jang/teamproject GitHub Wiki

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž

neovim์€ PR #2415์ดํ›„ defaublt์—์„œ jemalloc์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. jemalloc์€ ์ž ๊ธˆ ๊ฒฝํ•ฉ(thread pool ๋‹น ์ž‘์€ ํ• ๋‹น์— ์‚ฌ์šฉ๋จ)๊ณผ ๋‚ฎ์€ ๋ถ„์—ด์„ ํฌํ•จํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ malloc์„ ํšจ์œจ์ ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” USE_JEMALLOC = off ์˜ต์…˜์„ CMake์— ์ „๋‹ฌํ•˜์—ฌ ์ปดํŒŒ์ผ์‹œ jemalloc์„ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ / ๋ฒ„ํผ ํ‘œํ˜„

๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ํ…์ŠคํŠธ๋ฅผ ๋…ผ์Ÿํ•˜๊ณ  ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. Vim์€ ํ…์ŠคํŠธ๋ฅผ ์ผ๋ จ์˜ line์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค (mem {line, file}. {c, h}์ฐธ์กฐ).

line์—์„œ์˜ ์ž‘์—…์€ ์‰ฝ๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. Vim์ด ์ง€์›ํ•˜๋Š” ๋งŽ์€ ์ž‘์—… (์‹คํ–‰ ์ทจ์†Œ / ๋‹ค์‹œ ์‹คํ–‰, ํ…์ŠคํŠธ ์šด์˜์ž ๋“ฑ)์— ์ ํ•ฉํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ธ”๋ก ๋ชจ๋“œ ์ž‘์—…๊ณผ ๊ฐ™์ด ๋ฐ˜๋“œ์‹œ line ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ ์ž‘์—…์กฐ์ฐจ๋„ line ๊ธฐ๋ฐ˜ API๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋Š”์ง€์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ผ์ธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ๋ฒ•์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋น”์ด ์ค„์ด ์—†๋Š” ํŒŒ์ผ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€ ๊ฐœํ–‰ ๋ฌธ์ž๊ฐ€ ์—†๋Š” ํฐ XML ํŒŒ์ผ์„ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ข…์ข… ๋А๋ฆฝ๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ๊ฐ•์กฐ๋Š” ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋น„๋‚œ ๋ฐ›๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด line ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ ๋‚ด์—์„œ ํ•ด๊ฒฐ ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋˜๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ์ง€๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋งŽ์€ ์—ฐ๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋Œ€์ฒด ๋ฐฉ๋ฒ• :

piece ๋ฒ„ํผ

"ํ…์ŠคํŠธ ์ˆœ์„œ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ" ์˜๊ฒฌ, [pdf](https://www.cs.unm.edu/~crowley/ papers / sds.pdf). ํŠนํžˆ Vim๊ณผ ์œ ์‚ฌํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•˜๋Š” vis ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์— ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์žฅ์  :

  • file into memory์— mmap() ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ํŽธ์ง‘์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ํŽ˜์ด์ง• ์š”๊ตฌ๋ฅผ ํ•˜๋Š” OS (ํŠนํžˆ Neovim์ด ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค)์—์„œ ํŠนํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

๋‹จ์  :

  • ** vis ** ์ž‘์„ฑ์ž๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ํ…์ŠคํŠธ ์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ mmap ()์ด์ ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๊ตฌํ˜„์ด ๋ณต์žก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. overlay๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ neovim/#1767์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Rope

wikipedia๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. TODO : Neovim์— ์ ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋…ผ์˜.

Gap Buffer

wikipedia๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. TODO : Neovim์— ์ ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋…ผ์˜.