회사에서 쓰는 라이브러리를 봤는데
토크나이징 단계부터 브랜치가 너무 많더라고
서버 CPU는 뭐 그런걸 아득히 뛰어넘는 성능이지만
내가 만일 표준C 범위 안에서 성능을 최대한 끌올 방법이 있을까 연구하면서
일단 토크나이져를 만들었음
이후 LALR 파서로 만들예정
기본적으로는 상태전이표를 만들었고 (https://www.json.org/json-ko.html 참고)
74개 상태로 압축했어
그를 위해 char 값에 대응하는 256개 배열을 만들었는데
각 상태별로 char 값에서 사용할 매핑된 값을 가져오는 방식이 저장되어 있음
부하는 do - while 문에서 걸리게 되는데,
그 안에서는 비트연산 및 더하기 빼기 산술연산밖에 없기 때문에
브랜치 프리딕션은 while 조건문 한군데만 있음
이는 마지막 탈출조건에서만 프리딕션이 발생하고
토크나이징이 진행될때는 항상 성공할것임
비트매스크, 쉬프트, 오버플로우 이용해서 존나 연구했다 진짜 쉬방 ㅠ
실은 파이썬으로 테이블을 생성해내는것을 만들어서 구현
파이썬은 그냥 막짜도 죄책감이 안들어서 좋다.
근데 내가 생각치 못한 예외사항이 있을것 같아 확신을 못하겠네
개천절 쉬는날 이거 궁리하고 만드느라 시간 다 갔네
이런걸 할 수 있는 회사라는게 존나부럽다, 신입안뽑음?
이미 ㅈㄴ 빠른라이브러리가 있을거같은데
c++ json11이랑 성능비교 궁금하네여 - dc App