GSoC 2018 Ideas - minsuk-jang/teamproject GitHub Wiki
์ด ๋ชฉ๋ก์ ๊ธฐ์ฌ :
์๊ฐ
๋ค์์ GSoC 2018์ ๋ํ ํ๋ก์ ํธ ์์ด๋์ด ๋ชฉ๋ก์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ค์ C, Makefiles, Python, Lua ๋๋ vimscript์ ์ต์ํด์ผ ํ ์๋ ์์ต๋๋ค.
Neovim์ Vim์ ํ์ฅ ํ ๊ฒ์ ๋๋ค. Neovim์ vision์ Projects ๋ชฉํ์ Non-goals์ ํฌํจ๋ฉ๋๋ค. ๋ชฉํ ์ค ํ๋๋ "ํดํน"๊ณผ ํ์ ์ ์กฐ์ฅํ๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ๊ธฐ์ฌ์์ ์ฅ๋ฒฝ์ ์ ๊ฑฐํ๊ณ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ค๋ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค. ์ํค์๋ Neovim ์์ ์ ์์ํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฐ๋ฐ ๋ฐ ๊ณตํ์ ๊ดํ ๋ถ๋ถ์ด ์์ต๋๋ค.
Neovim ์์ค๋ 1987 ๋ ์ผ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋๋ค. ์ฆ, ๊ทธ ๋น์์๋ libuv์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ธฐ๋ฐ์ ์ ์งํ๊ณ ์ดํดํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ํ๋ก์ ํธ ์์ด๋์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ก์ด ๊ธฐ๋ฅ์ ๋จ์ํ ์ถ๊ฐํ๋ ํ๋ก์ ํธ ์์ด๋์ด๋ณด๋ค ์ด๋ ค์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ๋ ์ค๋๋๊ณ ๋ณต์กํ ๋ถ๋ถ์ ๋ค๋ฃจ๋ ๊ฒ์ ๋ ๊ฐ๋จํ๊ณ ์ ์ง ๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ค์ํ ํ์ต ํผ๋๋ฐฑ์ ์ ๊ณต ํ ์ ์์ต๋๋ค. ๋ฐฐ์ธ ์ ์๊ณ ํ๊ณผ ํ๋ ฅํ์ฌ ๊ฐ์ฅ ๋ง์ ๋์์ ๋ฐ์ ์์๋ ํ๋ก์ ํธ๋ฅผ ์ฐพ์ ์์๋ ๊ด๋ฒ์ํ ๊ธฐ์ ์ด ์์ต๋๋ค.
#neovim IRC ๋๋ gitter channel์ ๊ฐ์ ํ์ฌ ์ด ํ๋ก์ ํธ๋ฅผ ์ง์ญ ์ฌํ ๋ฐ ๋ฉํ ์ ๋ ผ์ ํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ํต์ ์ ์คํ ์์ค ๊ฐ๋ฐ์ ์ค์ํ ๋ถ๋ถ์ด๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ ์ ์ฐ๋ฝ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์ ํ๋ก์ ํธ ๋ชฉ๋ก์ ๋ช ๊ฐ์ง ์์ด๋์ด ์ผ ๋ฟ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทํ๊ฐ ๊ฐ์ง ์ ์๋ ์ ์์ ๊ธฐ์ ๋ง์์ผ๋ก ๋ฃ์ต๋๋ค.
ํ
- Vim ๊ฐ๋
(์ : "textlock")์ด ์ธ๊ธ ๋ ๊ณณ์ด๋ฉด neovim (
: help textlock
) ๋ด์์ ": help" ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์๋ฏธ๋ฅผ ์ ์ ์์ต๋๋ค. - ์ง๋ฌธ์ํ๊ณ ๋ถ๋ถ ์ ๋ฌด๋ฅผ ์์ฃผ ๊ฒ์ํ์ญ์์ค (๊ฐ๋ฅํ ํ ๋งค์ผ ๋๋ 2 ๋ฒ). ์ผ์ด ์ง์ ๋ถํด๋ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฅ "[WIP]"๋ฅผ pull ์์ฒญ (PR) ์ ๋ชฉ์ ๋ฃ์ผ์ญ์์ค.
- ํ ์์ฒญ์ ๋ํด ์๋์ผ๋ก ์คํ๋๋ CI(Continuous Integration) ์์คํ ์ ํ์ฉํ์ญ์์ค. PR์ ์์ ์ ๋ณด๋ด๋ฉด ๊ณ์ํด์ ๋ก์ปฌ์์ ์์ ํ๋ ๋์ ์ ์ฒด ํ ์คํธ ์ค์ํธ๊ฐ PR์์ ์คํ๋ฉ๋๋ค.
- [wiki] (https://github.com/neovim/neovim/wiki)์๋ ๋น๋, ๋๋ฒ๊น ๋ฐ ๊ฐ๋ฐ ํ์ ๋ํ ์ต์ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- Neovim์ ๊ฐ๋ฐํ๋ ค๋ฉด ํ ์คํธ ํธ์ง๊ธฐ, cmake ๋ฐ ์ปดํ์ผ๋ฌ๋ง ํ์ํฉ๋๋ค. ctags๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- contributing guidelines๋ ๋์์ด ๋ฉ๋๋ค.
Projects
๋ชฉ์ฐจ
Refactoring
์ธ๋ถ UI API ๊ฐ์
๋ฐ๋์งํ ๊ธฐ์ : C ์ธ์ด
๊ธฐ์ : Neovim์ msgpack rpc api๋ฅผ ํตํด ํฌํจ ๋ ์ ์์ต๋๋ค. ์ด๋ฏธ ๋ง์ ์ธ์ด์์์ด ์์ ์ ์ํํ๊ณ ์๋ project๊ฐ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ API ๋ค์์ ์ ๋ฐ์ดํธ ํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ด๋ถ ํํ์ ๋ณด์ ํฉ๋๋ค. ๊ณ ๊ธ ์ธ์ด์ ํด๋ผ์ด์ธํธ๋ ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ต์ ํ๋ฅผ ์ ์ฉ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ธ์ด์ ์ฃผ์ ์ฑ๋ฅ bottle neck์ boxed values์ ์ํด ๋ฐฉํด๋ฐ๋ ์ด๋น ๋ง์ ๊ฐ ์กฐํ๊ฐ ํ์ํ ์คํฌ๋กค๋ง์ด๋ฉฐ boxed values์ ์ํด ๋ฐฉํด๋ฐ์ ์ ์์ต๋๋ค.
API๋ฅผ ๊ฐ์ ํ ์์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
screen.c
์์ ํ๋ฉด ๊ทธ๋ฆฌ๊ธฐ ๋ช ๋ น์ ์ต์ ํํ์ญ์์ค.- frontend gui's ๊ฐ๋ฐ์ ์ํ SDK
- Api๊ฐ ๋ฏธ๋์ improvements์ ๊ณ ๋ ค
์์ ๊ฒฐ๊ณผ: ์ธ๋ถ API๋ก ๊ตฌํ ๋ ์ธํฐํ์ด์ค๋ ๋ ๋น ๋ฅด๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค.
์ด๋ ค์: ... ์ค๊ฐ~์ด๋ ค์
๋ฉํ : Justin M Keyes (@justinmk)
์๋ก์ด ๊ธฐ๋ฅ
"๋ฉํฐ ํ๋ก์ธ์ฑ" ๊ธฐ๋ฅ
๋ฐ๋์งํ ๊ธฐ์ : ๋์์ฑ ์ ํ ๋ฌธ์ ๋ฐ ๋คํธ์ํน ๊ฒฝํ
๊ธฐ์ :
์ฌ๋ฌ nvim ์ฅ์น๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ์ํ p2p ๊ธฐ์ . ํ์ด์ฌ์ "๋ฉํฐ ํ๋ก์ธ์ฑ" ๋ชจ๋๊ณผ ๋น์ทํ๊ฒ, ์์ด๋์ด๋ Nvim ๊ณ์ฐ (VimL ๋ฐ / ๋๋ Lua)์ ํ์ Nvim ํ๋ก์ธ์ค๋ก offloadํ๋ ๊ฒ์ ๋๋ค.
์ด๋ ค์: ์ค๊ฐ~์ด๋ ค์
๋ฉํ : Justin M Keyes (@justinmk)
if_perl ํธํ์ฑ layer
๋ฐ๋์งํ ๊ธฐ์ : any(lua, perl, python)
๊ธฐ์ : Vim์ legacy perl API๋ฅผ ๊ตฌํํ์ญ์์ค. ์๋ฅผ ๋ค์ด ruby layer๋ฅผ ์ฐธ์กฐํ์ญ์์ค. Vim์ python / lua / ruby โโ/ perl ํ๋ฌ๊ทธ์ธ์ ์ง์ํ๋๋ก ์ปดํ์ผ ํ ์ ์์ต๋๋ค. Neovim์ ์ด๋ค ์ธ์ด๋ก๋ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ ์์๋ rpc ํ๋ฌ๊ทธ์ธ ๊ธฐ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. perl API ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ์กด์ฌํ์ง๋ง, ๋น ์ง ์ ์ผํ ๋ถ๋ถ์ vim perl ์ง์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํ๋ neovim ํ๋ฌ๊ทธ์ธ์ ๋๋ค.
์ด๋ ค์: ์ค๊ฐ~์ด๋ ค์
์์ ๊ฒฐ๊ณผ: Vim perl ํ๋ฌ๊ทธ์ธ์ neovim์์ ์คํ๋ ์ ์์ต๋๋ค.
๋ฉํ : Justin M Keyes (@justinmk)
Haxe ํด๋ผ์ด์ธํธ
๋ฐ๋์งํ ๊ธฐ์ : Haxe ๋๋ ๊ฐ์ฒด ์งํฅ Java / C # / Python / JS
๊ธฐ์ : haxe๋ก ์์ฑ๋ api ํด๋ผ์ด์ธํธ๋ ๋ ๋ง์ ์ธ์ด๊ฐ ์ ์ง ๊ด๋ฆฌ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ์ง ์์๊ฒํฉ๋๋ค.
์์ ๊ฒฐ๊ณผ: ํ์ฌ python-client์ ๋๋ถ๋ถ์ ํ ์คํธ๋ haxe python ํด๋ผ์ด์ธํธ๊ฐ ํ ์คํธ ํ ์ ์์ต๋๋ค.
์ด๋ ค์: ์ค๊ฐ
๋ฉํ : Justin M Keyes (@justinmk)
LSP ์ง์
๋ฐ๋์งํ ๊ธฐ์ : Lua์ Vim์ ๋ํ ์ง์ (๋๋ ๋ฌธ์ํ ๋ฅ๋ ฅ)
๊ธฐ์ : initial discussion continued here
์ด ์์ด๋์ด๋ Microsoft LSP์ ๋ํ ์ง์์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ ๋ฐฐ์ ํ๋ก์ ํธ์ ๋๋ค.
- ์ฒซ ๋ฒ์งธ๋ ์ฌ๋ฐ๋ฅธ ํ์์ ์ฌ๋ฐ๋ฅธ ์๊ฐ์ ์ฌ๋ฐ๋ฅธ ๋ฉ์์ง๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ธ์ด ์๋ฒ์ ๋ณด๋ผ ์ ์๋ ๊ธฐ๋ฅ์ ๋ง๋๋ ๊ฒ์
๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์๋ฃ๋ฅผ ์์ฒญํ๊ณ ๋ฉ์์ง๊ฐ ์์ฑ๋์ด ์ ์ก๋ฉ๋๋ค.
- ๋ ๋ฒ์งธ๋ neovim ํธ์ง๊ธฐ ๋ด์ ๋ฉ์์ง์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ตํ๊ณ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด ์๋ฃ ๊ฒฐ๊ณผ๊ฐ ์๋ ๋ฉ์์ง๋ ์๋ฃ ๋ฉ๋ด๋ฅผ ์ฑ์ฐ๊ณ ์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ํ์ํด์ผ ํฉ๋๋ค.
์์ ๊ฒฐ๊ณผ: neovim๊ณผ ํจ๊ป ์ ๊ณต ๋ ์ ์๋ ๊ธฐ๋ฅ์ LSP Client.
์ด๋ ค์: ์ค๊ฐ
๋ฉํ : Justin M Keyes (@justinmk)
์ง๋ฌธ์ TJ DeVries (@ tjdevries)๋ก ๋ณด๋ผ ์๋ ์์ต๋๋ค.
๋๊ตฌ ๋ฐ ์ธํ๋ผ
์ง์์ ์ธ ํตํฉ ํฅ์
๋ฐ๋์งํ ๊ธฐ์ : command line์์์ ์ต์ํจ
๊ธฐ์ : ๋น๋ ๋ฐ ๊ธฐํ ์์ ์ ์๋ํํ๋ฉด ์ฐธ์ฌ์์ ์ฅ์ ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์์ ์๋ ์๋์ผ๋ก ๋น๋ artifacts๋ฅผ github releases, html ๋ฌธ์ ์์ฑ, ์ผ๋ถ awk ์คํฌ๋ฆฝํธ๋ฅผ ํ์ด์ฌ์ผ๋ก ๋ค์ ์์ฑ, ๊น๋ํ ๋น๋ ๋ฑ์ผ๋ก pushํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. Neovim / bot-ci repo๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ด๋ ค์: ์ฝ๋ค.
๋ฉํ : Justin M Keyes (@justinmk)
ํ๋ฌ๊ทธ์ธ ๋๊ตฌ
๋ฐ๋์งํ ๊ธฐ์ : ์ข์ prototyping ์ธ์ด.
๊ธฐ์ :
Neovim ํ๋ฌ๊ทธ์ธ ๋๊ตฌ๋ ์ฌ๋ฌ ์ฌ์ฉ์ ์ ํ์ ๋ง๊ฒ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
์ผ๋ฐ ์ฌ์ฉ์์ ๊ฒฝ์ฐ : CheckHealth
๋ช
๋ น์ ๊ฐ์ ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์ถฉ๋ ๋๋ ๋๋ฝ๋ ์๊ตฌ ์ฌํญ์ ๊ฐ์ง ํ ์ ์์ต๋๋ค.
neovim์ ์์ฉ ํ๋ก๊ทธ๋จ์ ํฌํจํ๋ ค๋ ์ฌ์ฉ์๋ SDK๋ฅผ ์ฌ์ฉํ์ฌ Plugin Manager์ ๊ฐ์ Intellij๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด๋ ค์: ์ฝ๋ค.
๋ฉํ : Justin M Keyes (@justinmk)
Benchmarking
๋ฐ๋์งํ ๊ธฐ์ : benchmarking ๊ฒฝํ, ํ๋ ์น ์ฌ์ดํธ ์ ์ ๋ฅ๋ ฅ.
๊ธฐ์ : ๋์์์ด ๋ณํํ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ํตํด ์ฑ๋ฅ ์ ํ๋ฅผ ์ฝ๊ฒ ํผํ ์ ์์ต๋๋ค. ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๊ฐ CPU ์ฝ์ด ์ฌ์ฉ๋ฅ ๋๋ ์ปดํ์ผ ์๊ฐ์ ๋ํ ๋ฒค์น๋งํฌ๋ฅผ ์ฝ๊ฒ ์์ฑ ํ ์์๋ ๋๊ตฌ๋ ํฅ๋ฏธ๋ก์ด ํต๊ณ์ผ ์ ์์ต๋๋ค.
์ด๋ ค์: ๋์ฒด๋ก ์ฝ๋ค.
๋ฉํ : Justin M Keyes (@justinmk)
ํ๋ก์ ํธ ์์ด๋์ด๋ฅผ ๋ค์ ํ์์ผ๋ก ์ถ๊ฐํ์ญ์์ค.
ํ๋ก์ ํธ ์ฌ์
ํ์ ํ๋ก์ ํธ
์ ๋ชฉ
๋ฐ๋์งํ ๊ธฐ์ :
๊ธฐ์ :
์์ ๊ฒฐ๊ณผ:
์ด๋ ค์:
๋ฉํ : ๋ฉํ ์ด๋ฆ (@MentorName)