▲GN⁺ 2024-08-20 | parent | ★ favorite | on: 2GB/s 이상의 속도로 protobuf 파싱하기: C 언어에서 tail calls를 사랑하게 된 이유 (2021)(blog.reverberate.org)Hacker News 의견 C 표준 제안서에는 "return goto (expression);" 형태로 꼬리 호출을 포함하고 있음 [[musttail]]을 표준화하는 것보다 로컬 객체의 수명이 보장되어 광범위한 탈출 분석이 필요하지 않음 Rust 애호가들을 위해 "become" 키워드를 추가하는 오래된 RFC가 있었음 2018년 에디션 목표에 집중하기 위해 연기되었으나 최근 다시 논의되고 있음 다시 등장할 가능성이 있음 C++에서 해석기가 속도를 높이는 방법은 주로 계산된 goto를 사용하는 것임 호출 규약 문제를 피할 수 있음 계산된 goto 스타일이나 꼬리 스타일을 사용하면 분기 예측기 압력을 줄일 수 있음 꼬리 호출을 사용하여 컨텍스트를 전환하는 문제는 호출 규약을 사용하는 함수가 필요함 함수 종료 시 상태를 복원하기 위해 레지스터를 낭비함 luajit 리메이크 블로그에서 대안과 분석을 제공함 [[musttail]] 속성이 GCC, Visual C++, 다른 인기 있는 컴파일러로 확산되기를 희망함 [[musttail]] 속성이 GCC에 추가되는 과정에 있음 C++ 지원을 언급하며, C++에는 꼬리 호출이 거의 없음을 지적함 예를 들어, 소멸자가 있는 클래스의 객체를 반환하는 경우 꼬리 호출이 아님 C++ [[musttail]] 함수에서 예외를 던지면 어떻게 되는지 궁금해함 예외 스택이 완전히 분리되는지 질문함 단순한 예제는 좋은 코드 생성을 위해 __attribute__((musttail))이 필요하지 않음을 언급함 오류 처리 함수 호출 속도에 크게 신경 쓰지 않을 것임 특정 구조가 신뢰할 수 있는 점프 테이블을 생성함 트램폴린을 사용하여 반환하는 함수 포인터를 외부 루프에서 호출하는 방식의 속도를 궁금해함 이 방식은 이식 가능한 C의 장점을 가짐 [[musttail]]로 래핑된 예외 경로의 예를 명확히 해달라는 요청이 있음 [[musttail]]이 스택 프레임 구성과 레지스터 스필링을 방지하는 이유를 설명함 예외 경로가 실제로 호출될 때만 스택 프레임 구성과 레지스터 스필링이 발생함 예외 경로가 드물게 호출되므로 성능에 큰 영향을 미치지 않음 분기 예측 효과로 인해 추가 작업 가능성이 빠른 경로를 느리게 만들 수 있음
Hacker News 의견
C 표준 제안서에는 "return goto (expression);" 형태로 꼬리 호출을 포함하고 있음
Rust 애호가들을 위해 "become" 키워드를 추가하는 오래된 RFC가 있었음
C++에서 해석기가 속도를 높이는 방법은 주로 계산된 goto를 사용하는 것임
꼬리 호출을 사용하여 컨텍스트를 전환하는 문제는 호출 규약을 사용하는 함수가 필요함
[[musttail]] 속성이 GCC, Visual C++, 다른 인기 있는 컴파일러로 확산되기를 희망함
C++ 지원을 언급하며, C++에는 꼬리 호출이 거의 없음을 지적함
C++ [[musttail]] 함수에서 예외를 던지면 어떻게 되는지 궁금해함
단순한 예제는 좋은 코드 생성을 위해
__attribute__((musttail))이 필요하지 않음을 언급함트램폴린을 사용하여 반환하는 함수 포인터를 외부 루프에서 호출하는 방식의 속도를 궁금해함
[[musttail]]로 래핑된 예외 경로의 예를 명확히 해달라는 요청이 있음