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์ ์ ์ฉ ํ ์์๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ ผ์.