실제 논문은 여기임, Rust에서 정적으로 체크되는 back-reference에 대해 오랜 시간 동안 고민 중임, C/C++ 사용자들이 Rust에서 불만을 가지는 큰 이유 중 하나가 A가 B를 참조할 때 B에서 A로 다시 포인터를 갖기 어렵다는 점임, 그래서 대부분 위험한 우회법이 쓰이곤 함
Rust에서 Rc, RefCell, Weak, borrow(), borrow_mut(), upgrade(), downgrade() 등을 쓰면 안전하게 구현 가능하지만, 코드가 장황해지고 런타임 오버헤드가 생기며, 이중 borrow에서 패닉이 발생하는 경우도 있음, 그래도 표현력은 충분함, 현재 진행 중인 작업에 노트를 정리해둠
정적 체크가 어려운 부분은 차용(borrowed) 범위가 겹치지 않는지를 확인하는 것인데, 라이프타임 스코프가 겹치지 않으면 충돌 없음, 함수 호출이나 제네릭 함수 호출 시 스코프 체크가 더 까다로움, Flowistry의 접근법이 도움이 될 수 있음
Flowistry가 interior mutability(RefCell 등의 내부 변경)를 완전히 다루지 않는다는 점이 신경 쓰임
실전에서는 1) sound함, 2) 컴파일 타임에서 비용 적게 체크 가능함, 3) 트리의 부모 노드 참조 등 대부분 사람들이 필요한 back pointer 사용 가능함, 4) 문제 발생 시 유용한 진단 메시지 제공함 같은 조건을 만족하는 제약 조건을 찾는 것이 핵심임
다른 언어에서 함수 본문 내 좀 더 크거나 비공식적인 의존 관계를 체크하는 기능이 있는지 궁금함
예를 들어 파라미터나 변수 foo를 하이라이트하면 foo 자체 사용뿐 아니라 foo로부터 만들어진 모든 변수의 사용까지 한 번에 볼 수 있는지 알고 싶음
Rust의 borrow 사용은 이런 종류의 추적을 완벽하게 하지만, 이런 시각화는 다른 언어 코드에도 매우 유용할 듯함
Flowistry는 servo의 flexbox 레이아웃 코드처럼 유지 보수가 어려운 현대 코드베이스 파일에 매우 필요할 거라 생각함, 참고로 이 함수는 400라인이 넘는 가장 난감한 코드 파일 중 하나임
(제가 틀릴 수 있지만) 일반적으로 이런 걸 "flow analysis"라고 부르며, TypeScript는 이걸 백그라운드에서 실행해서 타입을 세분화함
근데 시각화 기능은 없음
이런 기능은 일반적으로 "program slicing"이라고 부름
인간이 읽기 쉽게 최적화한 스타일로 코딩하지 않을 때, 이를 보완해주는 매우 유용한 도구라 생각함
베이스 코드가 항상 읽기 좋게 작성된 게 아니기 때문에 이런 툴이 큰 도움이 된다고 느끼는 중임
정말 멋진 기능이라 생각함, Rust가 이런 기능에 적합한 이유가 소유권 시스템 덕분에 부수효과가 제한되어 있음임
Python 등에 이런 걸 붙여도 런타임에서 언제든 콜스택을 올라가 메모리 조작이 가능하니 100% 신뢰할 수 없음
그래도 대부분의 경우 올바르니 이런 기능이 추가되는 걸 희망함
(작성자임) 그래서 Rust를 선택해 만들었고, 다른 언어에서 이렇게 구현하기 어려운 이유임
TypeScript나 JavaScript에서 이와 비슷한 도구가 있는지 궁금함
멋있어 보이지만 굳이 'IDE'라고 하지 말고 그냥 VSCode 플러그인이라 하면 좋았을 것 같음
아마 "Visual Studio Code"가 마이크로소프트 상표이기 때문임, 플러그인은 VSCodium, Cursor 등 오픈소스 기반 IDE 전반에서 동작함
문서에도 IDE 플러그인이라고 명시되어 있음
코드의 중요한 부분으로 초점을 맞추는 아이디어가 정말 좋은 듯함
JS/TS에도 이와 비슷한게 있는지 궁금함
rust-analyzer의 documentHighlight LSP 메서드에 기여하는 방법은 어땠는지 궁금함
GIF에서 보여주는 기능과 상당히 비슷하게 동작함
플러그인으로 만들기엔 너무 구체적 기능인 것 같음 관련 LSP 명세 링크
Hacker News 의견
실제 논문은 여기임, Rust에서 정적으로 체크되는 back-reference에 대해 오랜 시간 동안 고민 중임, C/C++ 사용자들이 Rust에서 불만을 가지는 큰 이유 중 하나가 A가 B를 참조할 때 B에서 A로 다시 포인터를 갖기 어렵다는 점임, 그래서 대부분 위험한 우회법이 쓰이곤 함
Rust에서 Rc, RefCell, Weak, borrow(), borrow_mut(), upgrade(), downgrade() 등을 쓰면 안전하게 구현 가능하지만, 코드가 장황해지고 런타임 오버헤드가 생기며, 이중 borrow에서 패닉이 발생하는 경우도 있음, 그래도 표현력은 충분함, 현재 진행 중인 작업에 노트를 정리해둠
정적 체크가 어려운 부분은 차용(borrowed) 범위가 겹치지 않는지를 확인하는 것인데, 라이프타임 스코프가 겹치지 않으면 충돌 없음, 함수 호출이나 제네릭 함수 호출 시 스코프 체크가 더 까다로움, Flowistry의 접근법이 도움이 될 수 있음
Flowistry가 interior mutability(RefCell 등의 내부 변경)를 완전히 다루지 않는다는 점이 신경 쓰임
실전에서는 1) sound함, 2) 컴파일 타임에서 비용 적게 체크 가능함, 3) 트리의 부모 노드 참조 등 대부분 사람들이 필요한 back pointer 사용 가능함, 4) 문제 발생 시 유용한 진단 메시지 제공함 같은 조건을 만족하는 제약 조건을 찾는 것이 핵심임
다른 언어에서 함수 본문 내 좀 더 크거나 비공식적인 의존 관계를 체크하는 기능이 있는지 궁금함
예를 들어 파라미터나 변수 foo를 하이라이트하면 foo 자체 사용뿐 아니라 foo로부터 만들어진 모든 변수의 사용까지 한 번에 볼 수 있는지 알고 싶음
Rust의 borrow 사용은 이런 종류의 추적을 완벽하게 하지만, 이런 시각화는 다른 언어 코드에도 매우 유용할 듯함
Flowistry는 servo의 flexbox 레이아웃 코드처럼 유지 보수가 어려운 현대 코드베이스 파일에 매우 필요할 거라 생각함, 참고로 이 함수는 400라인이 넘는 가장 난감한 코드 파일 중 하나임
(제가 틀릴 수 있지만) 일반적으로 이런 걸 "flow analysis"라고 부르며, TypeScript는 이걸 백그라운드에서 실행해서 타입을 세분화함
근데 시각화 기능은 없음
이런 기능은 일반적으로 "program slicing"이라고 부름
인간이 읽기 쉽게 최적화한 스타일로 코딩하지 않을 때, 이를 보완해주는 매우 유용한 도구라 생각함
베이스 코드가 항상 읽기 좋게 작성된 게 아니기 때문에 이런 툴이 큰 도움이 된다고 느끼는 중임
저자가 Rust East Coast에서 플러그인과 루틴 연구에 대해 깊게 다룬 발표 영상을 선보였음
정말 멋진 기능이라 생각함, Rust가 이런 기능에 적합한 이유가 소유권 시스템 덕분에 부수효과가 제한되어 있음임
Python 등에 이런 걸 붙여도 런타임에서 언제든 콜스택을 올라가 메모리 조작이 가능하니 100% 신뢰할 수 없음
그래도 대부분의 경우 올바르니 이런 기능이 추가되는 걸 희망함
TypeScript나 JavaScript에서 이와 비슷한 도구가 있는지 궁금함
멋있어 보이지만 굳이 'IDE'라고 하지 말고 그냥 VSCode 플러그인이라 하면 좋았을 것 같음
아마 "Visual Studio Code"가 마이크로소프트 상표이기 때문임, 플러그인은 VSCodium, Cursor 등 오픈소스 기반 IDE 전반에서 동작함
문서에도 IDE 플러그인이라고 명시되어 있음
코드의 중요한 부분으로 초점을 맞추는 아이디어가 정말 좋은 듯함
JS/TS에도 이와 비슷한게 있는지 궁금함
rust-analyzer의 documentHighlight LSP 메서드에 기여하는 방법은 어땠는지 궁금함
GIF에서 보여주는 기능과 상당히 비슷하게 동작함
플러그인으로 만들기엔 너무 구체적 기능인 것 같음
관련 LSP 명세 링크
README에서 설명됨, 자세한 내용은 여기서 볼 수 있음
MIR(Mid-level Intermediate Representation)이 필요함
항상 이런 기능을 꿈꿨고, 함수 외부(이 함수를 누가 호출하는지)에서 데이터가 흘러오는 경로까지 보여주는 기능이 있었으면 했음
컴파일러의 데이터를 재사용해서 이런 걸 도울 수 있지 않을까 생각함