Rust 프로그램을 짜는데 디버깅하다가 vscode 디버거가 오류를 발생시키면서 동작하지 않았다. 도저히 나 혼자의 힘으로는 고치지 못할 것 같아서 질문을 해야 겠다는 생각이 들었다. Facebook 그룹에 글을 올릴까 하닥 이건 한국사람중에 아는 사람이 없을 것 같아서, stackoverflow 에 문의를 올렸다. 

구글 번역기의 힘을 이용했는데, 내 의견이 제대로 전달될지 모르겠다. 너무 희귀한 문제라 보는 사람이 있는지 조차 좀 의심스럽긴 하다. 만일 답변이 달리지 않는다면 다시는 stackoverflow 에 질문하지 않을 것 같다. 

stackoverflow.com/questions/66764603/error-occurs-when-debugging-rust-program-with-vscode-windows-only

 

 

 예전부터 만든던 프로그램을 rust 로 만들기 위해 rust를 공부하고 있다. 

예전부터 만들고 싶었던 프로그램이란 간단한 형태의 cvs viewer 와 약간의 함수를 지원하는 프로그램인데, 이 프로그램이 처음에는 nodejs 을 이용해서 electron 으로 만들려고 했는데, 성능이 생각대로 나오지 않아서 golang으로 만들려고 했는데, 그것도 내가 원하는 속도가 나오지 않아서 rust 로 만들려고 한다. 아마 이것도 내가 원하는 만큼의 속도가 안나온다면  cuda 를 이용해 가속을 하는 방법밖에 없는 것 같다.

첫 며칠은 그래도 공부할만 하다가 뒤로 갈 수로 많이 어렵다. 소유권까지는 이해 할 것 같은데, 라이프타임이라는 개념이 나오자, 내 머리가 너무 복잡해졌다. rust는 메모리관리가 없는 줄 알았는데, 라이프타임개념은 완전 반자동 메모리 관리 개념이 들어 가는것 같더라.

첫 회사에서 C++ 으로 프로그램을 만들었는데, 그 때 메모리 관리를 addRef 함수와 release 함수로 했다. 이 함수를 호출하면 내부적인 counter 가 +1 또는 -1 이 되었다. 이 값이 0이 되면 delete this; 가 호출되면서 메모리가 스스로 삭제되는 식으로 만들어져있다. 그래서 참조를 할 때 마다 addRef 해주고 참조가 사라진 때, release 함수를 꼭 해줘야 했다. 이게 참조라는 개념이 나도 모르게 되는 경우도 있는지라, 참 어려웠고 메모리 오류가 발생하는 버그도 참 많았다. 

 rust 의 라이프타임을 보자 옛날에 사용했던 addRef, release 함수가 생각난다. 이거 이렿게 까지 복잡하게 메모리를 관리하진 않길 바란다. 

내가 느낌 rust 의 인상은 그래도 C나 C++ 보다는 개발환경이 편리한 것 같다. vscode 가 꽤 편하고 platform 에 따라 코드가 엄청 달라지지 않는 것 같다. 이것만 해도 그런대로 할만한 것 같다. 

 

 전에 kaggle 대회에 첨가한다고 했는데, 오늘 첫 결과를 올렸다. LGBMClassifier 을 이용하는 코드인데, 참가하게 되면서 배운것들이 많다. 회사업무에서 생긴 의문도 해소되었다. 정확도를 측정하는 방법이 여러가지가 있었다. 나는 accuracy 만을 생각했는데, f1 socre 를 이용하는 방법도 있었다. yiunsr.tistory.com/849 에서 모든 계약을 실패로 처리하면 accuracy 는 높아지지만 f1 score 는 낮을 것이다. 이 경우에는 모델의 정확도를 f1 score 로 평가하는게 좋았을 것이다. 

 아직 개선해야 할 방법이 많지만 눈에 보이는 목표가 있고, 경쟁이 있으니 뭔가 더 재미있는 것 같다. 이번 기회에 확실히 level up 해야겠다.