Rust에서 vim plugen(with deno)

(기사의 내용으로 비엠의 이야기에서wasm과deno,rust를 조합한 것에 불과하다. 차라리 그곳에 꽉 찬 사람이 더 유용할 수도 있다.)
demo is here

개시하다


최근vim/Neovim 두 가지 대응하는 플러그인의 기초denops.vim가 실현되고 있다.
내가 이 프로젝트를 기대하는 이유 중 하나는 덴오를 이용하여wasm을 읽을 수 있다는 것이다.
이 프로젝트의 판매 포인트는 "Deno(Type script)"입니다.
개인적으로는 "데노뿐만 아니라 wasm을 통해 원하는 언어로 플러그인을 써서 데노를 간단한 처리와 기초가 되는 IF로 만들 수 있다"고 말했다.
이것은 내가 이 때를 보았을 때의 최초의 소감이다.
최근 coc.nvim 이 플러그인은'vscode 플러그인을vim에 이식하기'가 유행입니다.
마찬가지로'vscode,denops 양대응'과'vim,shell 양대응 도구'를 더욱 간단하게 실현할 수 있기를 기대하고 있다.
(저는viml의 함수와 최선의 실천에 대한 지식이 거의 없기 때문에 그중의 일부를rust와ts에 던져도 괜찮을 것 같습니다. 결과적으로viml도 함께 공부해야 한다는 점은 변함이 없습니다.)
그래서 몇 군데 매달린 곳에 발을 잡혀도 무사히 "rust->wasm->deno->vim와 연결해 처리할 수 있어 여기서 공유하고 싶었다.

rust to wasm


rust->wasm의 컴파일은 보통wasm-pack을 사용하는데저희가 아직 데노를 상대하지 못했어요. ssvmup을 사용해야 할지 고민입니다.
결과적으로 ssvmup의 컴파일링이라도 deno의 읽기에 많은 시간이 걸렸고 ssvmup은 wasm-bindgen 버전이 고정되어 있기 때문에wasm-pack으로 힘껏 누르는 방법을 선택했다.

데노를wasm-pack의build로 읽는 방법


데노와 nodejs가 다르기 때문에 직접 사용할 수 없습니다tutorial 방법.
주요 문제는 다음과 같습니다.
deno는 API가 브라우저 API와 호환되기 때문에 웹의build가 필요합니다.(https://github.com/rustwasm/wasm-pack/issues/672#issuecomment-652296745(1패)
  • alart도 console.log로 정의했다.
  • deno는 local file의fetch를 지원하지 않습니다. 그 부분을 바꿔야 합니다.(1패)그래?
    각각 wasm-Ppack의 매개 변수, wasm의attribute, 잡색sed로 변환하면 deno에서 읽을 수 있습니다.
  • wasm-pack build의 매개 변수에 --target web
    + wasm-pack build
    - wasm-pack build --target web
    
    추가
  • #[wasm_bindgen(js_namespace = console, js_name = log)]의attribute로 stdout에 출력
    src/main.rs
    + #[wasm_bindgen(js_namespace = console, js_name = log)]
      fn alart(s: &str);
    
  • fetch(input)로 바꾸기new WebAssembly.Module(await Deno.readFile(new URL(input).pathname));pkg/index.ts
    + input = fetch(input);
    - new WebAssembly.Module(await Deno.readFile(new URL(input).pathname));
    
  • 성과물


    here denops와 마찬가지로vimruntimepath에 추가
      cargo run --manifest-path=utils/denops-builder/Cargo.toml
    
    build를 통해vim부터 실행할 수 있음:DenopsRustEcho.
    꼬일 때.
  • 카고, sed,wasm-Ppack 사용 가능 여부
  • build의 cargo 명령을 실행할 때의current dir
  • (runtimepath에 프로젝트 루트에 해당하는 등급을 추가하십시오. 일반git clone에 cd를 추가하면 됩니다.)
  • rust 버전은 최신일 거예요. (stable로 이동해야 하지만 안 되면 nightly를 사용하세요.)
  • denops의 다른 플러그인이 작동하는지,runtimepath가 올바른지 여부(2음)
  • 확인하세요.
    그나저나 vimmer가 아닌 사람도 build을 시도할 수 있기 때문에 "deno에서rust의wasm을 사용하고 싶은데 잘 쓰지 못한다"는 사람도 시도해 볼 수 있다.

    좋은 웹페이지 즐겨찾기