요즘 힙하면서도 거드럭거릴 수 있는, 일반 프로그래밍과 통계 딥러닝이 다같이 가능한 그런 언어를 찾는 중에
줄리아하고 러스트를 맛봤는데 문법이 너무 장황해보여서 원래 하던 하스켈로 무엇까지 가능한가 쭉 찾아봤음.
그런데 multiple linear regression이 가능한 패키지가 없더라고.
유니콘이 없다면 FFI 프랑켄슈타인이라도 있는게 낫다는 생각으로 gsl하고 줄리아-GLM의 바인딩을 해봤음
C나 줄리아나 그냥 타입 만들어서 붙여주면 됨.
연속성이 보장되고 포인터를 제공해주는 Data.Vector.Storable 이 있어서 어렵게 해줄건 없고 그냥 노가다.
jl_main_module처럼 줄리아 공식 문서에 없는게 있었는데 찾아보면 discourse.julialang.org에 다 있긴 했음.
그래도 결국엔 소스 까보면서 하게됨.
처음에는 lm(@formula(Y~X +...), DataFrame(Y=[...],X=[...])) 이걸 Text로 만들어서 통째로 eval했는데
너무 주먹구구식 구현인데다가 데이터가 길어지면 퍼포먼스 문제가 있는 것 같아서 함수 인자 하나하나 바인딩했음.
결과값은 똑같이 나오는 것 확인했는데 복사 없이 reshape이 되는지는 모르겠네.
이제 벤치마크 돌려봐야지.
한 4일 걸렸는데 만들면서 보니 multiple linear regression도 걍 Statistics.Regression.ols를 쓰면 되는거더라 ㅡㅡㅋㅋ
이걸 발견한게 이미 작동되는 시점이어서 그냥 계속 만들기로 했음,,,,
이거 하면서 GHC의 capi FFI, Data.Vector.Generic의 Vector v a 에 대해 많이 익숙해졌다.
PackageCompiler.jl도 처음 써봤는데 괜찮더라. 줄리아 쓰면 진짜 필수인듯.
리소스 관리하는 bracket pattern은 처음 써봤는데 중첩되는 경우에 너무 구려서 그냥 raw 포인터 들고다닌 부분도 있음.
이건 Cont 모나드 가지고 RAII비슷하게 보이도록 바꿀 수 있다고 해서 바꿔볼 예정
ForignPtr이나 Ptr은 사실 잘 모르겠어서 일단 타입 맞춰서 써줬음. UB인데 터지지 않는건지 맞게 쓴건지는 모르겠음.
중간에 jl_ptr_to_array에 차원 넘겨주는 부분도 eval하지 않고 튜플 직접 만들어 넣어주면 좋겠다 싶은데 언젠가 하지 머.
십 하스켈에서 줄리아 바인딩ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 힙스터 끝판왕이네
ㄹㅇ 이 정도는 되야 힙스터소리 듣지 ㅋㅋ
네 이제 RIIR 해주세요