이전 글: https://gall.dcinside.com/mgallery/board/view?id=github&no=75421
열심히 만든 20MB짜리 정규식이 ErrorPatternTooLarge 라는 결과를 받고 슬퍼진 깃붕이는 에러를 고쳐보기로 해요
re2를 세팅하고, q=2,3,5,7,11,13 에 대해서 테스트를 했어요
a.cpp
q=7정도일 때부터 `DFA out of memory:` 로 실패하고 있어요
다행히도 RE2::Options::set_max_mem 함수로 메모리 상한을 늘려주면 될 것 같아요
평범한 깃붕이라면 2^60 byte 메모리 정도는 하나씩 가지고 있을테니 아래처럼 설정해주도록 해요
이제 q=11까지 넘어가지만, q=13부터 ErrorPatternTooLarge 오류를 받아요
정규식은 이미 오토마타 고수의 라이브러리를 사용했기때문에
정규식을 최적화하는쪽으로는 더이상 가망이 없어보여요
하지만 깃붕이는 포기하지 않고 오류메시지를 다시 살펴보았어요
E0000 00:00:1738089543.522041 1508448 simplify.cc:228] CoalesceWalker::ShortVisit called
E0000 00:00:1738089543.522047 1508448 re2.cc:262] Error compiling '((((((((((((0|65)|(7(2*(8|15))))|((62|(7(2*(5|12))))(1*4...'
pattern too large - compile failed
pattern too large로 실패하기 전에 CoalesceWalker::ShortVisit called라는 수상한 오류메시지가 출력되고 있어요
해당 함수를 찾아가보면 Should never be called 라는 주석이 달려있네요. 그래서 해당 함수가 어디서 호출되는지 찾아갔어요
walker-inl.h:178
ShortVisit 함수는 WalkInternal 단 한 곳에서만 사용되고 있었어요
이 코드의 위치로 max_visits_번 이상 오게 되면 ShortVisit을 호출해서 문제가 될 것 같아요
max_visits_ 값을 초기화하는 위치를 찾았어요
주석에 따르면 잘 처리하기 위해서 더 큰 값이 필요하지만, CPU시간을 너무 많이 잡아먹지 않도록 작은값을 사용하고 있다는듯 하네요.
이제 max_visits_ = 1<<30 정도로 설정하고 돌려보도록 해요
re2에서 긴 regex 컴파일에 실패하는 문제를 해결했어요
제출2: https://limewire.com/d/1dc793a5-ca93-45ca-8566-a416c5e9acfe#xOBcYteP-XZxS5ylsMGIWTi7DyDf8Au2lpGudAc9bgo
re2 뜯어본 소감: RIIR 해줄 멋진 깃붕이가 필요하다 ㅇㅅㅇ
(고수) 콘
이게 뭔데 걍 모든 정답 하드코딩으로 정규식에 때려박는거임?
정답이 무한해서 패턴을 잘 인코딩해야댐
어째서 이런 짓을 하는거야
설날에 심심하잖아
https://asciinema.org/a/NkHswZ6dgJZQFnUY4aLeGT1yB
https://asciinema.org/a/WW3aLQXDNjISBQrWD5EcA9oNp
1초는 너무 짧소
https://asciinema.org/a/JL3Pwu3CoW0MfBhNbiDd1CV8R
안녕하세요 "PS가 중요한 이유" 글 보고 찾아왔습니다 저도 PS 열심히 했었고 지금 코포 오렌지입니다 다만 다른 도메인지식이 부족하다고 요즘 느끼고 있습니다 그래서 간단한 진로상담을 요청드려도 괜찮을까요? 혹 괜찮으시다면, 오픈채팅 링크나 다른 연락수단을 공유해 드리겠습니다
그거 꽤 오래전에 썼던거같은데 어케 찾으셧대; 이미 잘 아시는것 같지만 그냥 가고싶은 분야의 도메인지식도 열심히 해야된다 뭐 그런 식상한 이야기밖에 해드릴게 없긴한데.. 제가 남 인생에 훈수둘만큼 안목이 있는것도 아니고 ㅇㅅㅇ 그래도 케이스스터디 한다 생각하시고 들으시겠다면야 답글도 괜찮고 오픈채팅도 좋고 편하신쪽으로 질문하고 싶은거 주시면 아는만큼 도와드릴게요