Lyn
조회 수 16601 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

sudo apt-get install libssh2-php


이름이 좀 애매하다. 보통 php가 앞에붙지않나

TAG •
?

Lyn
조회 수 5556 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

우분투 14.04 에서 apt-get 으로 libssh2-php만 나중에 따로 설치시 php5-mysql 모듈이 날라가버리는 버그가 있다 (....)

어이없지만 조심해야할부분.


다시설치하면 되긴한다

TAG •
?

Lyn
조회 수 29732 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Trac, Mantis, Redmine 은 기본적으로 UTF-8을 사용한다.

그러나 VC++은 소스를 ascii로 저장하기 때문에 저장소 연동을 하면 소스에서 한글이 다 박살난 채로 보이게 된다.

이것을 해결하기위해서는 소스를 UTF-8로 저장 해야 되는데, 저장시 자동으로 UTF-8로 변환을 하는 매크로가 있다



MacroIDE -> EnviromentEvents에


Imports System.IO


추가 한다. 그 아래에


Sub MakeUTF8File(ByVal path As String)

    Dim input As New FileStream(path, FileMode.Open)


    'Check BOM

    Dim isUTF8 As Boolean = (input.ReadByte = &HEF And input.ReadByte = &HBB And input.ReadByte = &HBF)

    input.Close()


    If (Not isUTF8) Then

        Dim s As String

        s = File.ReadAllText(path, System.Text.Encoding.Default)

        File.WriteAllText(path, s, System.Text.Encoding.UTF8)

    End If

End Sub


Public Sub DocumentEvents_DocumentSaved(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved

    Dim path As String = Document.FullName

    MakeUTF8File(path)

End Sub


를 추가한다.



PS. trac은 지금 안 쓰고있어 확인이 안되는데 redmine 은 그냥 소스 인코딩을 추가해주면 간단히 해결된다 (...) 걍 euc-kr 등록해두자



?

Lyn
조회 수 113 추천 수 0 댓글 0

"비밀글입니다."


Lyn
조회 수 3154 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

https://www.jetbrains.com/resharper-cpp/

구매 해서 사용해보고 후기 한번 올려 보겠습니다.

 

과연 Visual Assist 를 대체할수 있을까?

?

2015.04.20 22:38

Resharper C++ 사용기 - 1

Lyn
조회 수 5030 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

코드의 네이밍 스타일을 지정하는 옵션입니다.
 

1.png2.png

 

더블클릭하면 스타일을 지정 할 수 있게 되어있습니다.
기본은 C++표준에서 자주 쓰이는 전부소문자 형태이네요. 전 Windows API 에서 주로 쓰는 Pascal 스타일을 주로 쓰니 본격적으로 쓰기 시작하면 바꿔놔야 할 것 같습니다

 

 

아래는 특정 코드 패턴에 대해 색으로 표시를 해 주는 기능입니다(보통 정적분석이라고들 부르죠)
목록을 보면 boost를 사실상 표준 라이브러리 취급을 해줘 버리는 느낌이네요. boost 라이브러리 관련 기능도 들어 있습니다.
사실 저도 굉장히 많이 씁니다. 특히 boost::format 같은건. stringstream 은 정말 극혐이라서요.


어쨋든 잘못된 패턴의 코드에 눈에 띄게 색을 입혀준다는것은 코딩 실수를 방지하기 위해 아주 좋은 방법이지요. 몇가지만 테스트 해 보겠습니다.

5.png

 

아래처럼 구형 C스타일의 캐스팅을 사용하면 녹색으로 밑줄이 그어지면서 전구 모양의 아이콘이 생깁니다.
어떤 문제로 전구가 떳는지 알려며, 아래같은 경우는 Use static_cast 를 클릭하면 자동적으로 C++ 스타일의 캐스팅 연산자를 쓰도록 변환됩니다

6.png

 

 

아래처럼 printf(위 메뉴목록을 보시면  알겠지만 boost::format 도 지원 합니다) 의 파라메터가 잘못된것은 빨간줄로 나타납니다.
이 줄 색은 등급을 어떤것으로 해 놓았냐의 문제인데, 기본 옵션에서 format string이 잘못된 것은 error 취급하게 되어 있으므로 빨간줄입니다.11.png

 

잘못된 format string에 커서를 갖다 대면 빨간 전구 아이콘이 뜨고, 클릭하면 %s를 %d로 자동으로 변환 해 줍니다.

12.png

 

의외로 모르는 사람이 많은 부분인데 64bit 정수의 경우 %d로 출력할 수 없고 %lld 를 사용해야 합니다.(gcc의 경우 %I64d를 사용합니다)
이 부분에 대해서도 정확히 처리를 해 주고 있습니다.

20.png

 

한가지 아쉬운것은 error로 세팅을 하더라도 빌드 자체는 문제 없이 진행됩니다.
오류 메세지를 띄워서 빌드를 막아줫으면 좀더 좋지 않았을까 하는 아쉬움이 있습니다

13.png

 

하지만 처음부터 하는게 아니라 프로젝트 중간에 툴을 도입하여 코드를 정리하려고 하면 눈으로 일일히 찾으려면 고생좀 해야 할텐데요...

Next Issue in File 을 클릭하면 이슈를 하나 하나 추적해서 고쳐나갈 수 있습니다.

14.png

아래는 코드를 ReFormatting 할때 사용할 옵션들입니다.
거의 모든 경우의 옵션을 다 지원 합니다... 만 이미 VS2013의 Format 옵션도 충분히 다양해져서 그리 큰 의미가 있어 보이진 않습니다.
 

코드가 어떻게 바뀌는지 미리보기 하는 기능도 VS 자체에서 이미 제공되는 기능입니다.

 

3.png

 

그나마 장점이라면 VS에 내장된 옵션의 불성실한(....) 미리보기 화면과 달리 유저가 실제로 보게 되는것과 같은 코드 색을 입혀준 정도의 장점이 있겠습니다.
옵션도 아주 쬐금 더 다양하구요. 유명한 프리셋을 몇 종류 제공한다는것도 일단 장점이라면 장점입니다(애초에 편의성때문에 사용하는 툴이니까)

21.png

 

Source Reformat 은 영역 선택으로도 가능하고, 파일 전체 역시 가능합니다.
이 역시 원래 VS 내장 기능으로도 제공되던 부분입니다.

10.png

뭐 별로 눈에 띄지 않는 헤더 자동완성입니다.

8.png

 

만약 헤더를 못찾을 경우 붉은 밑줄을 그어 주며, 자신이 어디에서 include를 시도했는지 알려줍니다.

7.png

 

이거 굉장히 맘에 들었던 기능인데... 사용 하지 않는 헤더를 어둡게 처리 해 줍니다.
다른 언어에선 많이들 지원되는 기능인데(주로 VM 언어들에서...) C++ 에서는 쓰는지 안쓰는지 잘 몰라서 그냥 냅둔 경우가 많았습니다.
안그래도 다른 언어에 비해 거지같이 컴파일 느린 C++인데 쓸데없는 헤더를 제거하는것으로 조금이나마 컴파일 속도를 올릴 수 있다면 그것만으로도 유용하겟죠 

9.png

 

제가 굉장히 많이 쓰는 기능중 하나인, 헤더 선언하고 구현부 자동생성하는 기능입니다.

15.png

 

이부분이 Visual Assist 대비 장점이 있는데, VA 는 여러번 클릭하면 컴파일이 되던말던 중복생성 (....) 해 주는 무식한 짓을 하는데 비해, Resharper 의 경우 즉시 아이콘이 navigate 로 바뀝니다.

16.png

 

흔히 사용하는 Extract Method 기능입니다.
뭐 대부분의 툴과 비슷해서 별로 설명할게 없습니다.

17.png

 

Refactoring 기능은 좀 많이 아쉽습니다.
코드가 어떻게 바뀌는지 전혀 미리 보여주지 않습니다. 실수하기전에 체크할수 없고 바뀐 뒤에 한번 더 코드를 눈으로 확인해야합니다.

18.png

 

 

아래 기능은 코드 자동생성 기능인데... 뜬금없이 닷넷용 소스 생성 기능이 들어 있습니다.
문제는 이 글을 쓰기 위해 새로 세팅한 VM위에 달랑 VS2013과 Resharper C++만 설치해 놓은 상태인데도 이게 뜹니다 (....) 절대로 닷넷용 Resharper 가 설치되어 있는 상황이 아닙니다. 심지어 C++/CLI 는 없고 vb.net 과 C#만 있습니다;

4.png

 

 

 

PS. Resharper 는 생각하는 중입니다 (....)

19.png

 

PS2. 가격은 Visual Assist 279달러 Resharper C++ 229달러로 50달러 쌉니다.
가격을 생각하면 선택 해 볼만한 툴중 하나입니다.

 

PS3. 전체적으로 Visual Assist 는 결과가 좀 이상하더라도 일단 빨리 보여주는 쪽으로 개발이 되어있는-0-;; 느낌이 강하게 나는데(코드 분석하는 동안엔 정말 말도 안되는 결과도 가끔 보여주죠....) 이쪽은 확실히 정확한 결과를 보여줍니다. 단지 분석이 좀 느리네요

 

PS4. 사실 치명적인문제는... 베타시절보단 많이 빨라 졋지만 그래도 느립니다.
제가 예전에 작업하던 중대형 프로젝트(프로젝트 크기가 약 25만라인)를 열어 봤는데... 이건 머 코딩이 불가능할 정도입니다. 정말 심각하게 느려요.
사실 전 툴이 느리다고 불평하는 사람한텐 똥컴쓰지 말고 장비좀 좋은거 쓰라고 하는데(특히 맥북에어 쓰면서 느리다고 징징대는놈들한테....) 이건 뭐 답이 안나옵니다.

이클립스랑 IntelliJ 느린건 뭐 애교로 보이는 수준으로 툴이 느려집니다.
컴퓨터를 업그레이드 하려고 해도 제가 저 프로젝틀을 열어봣던 장비가 Intel i7 4770K이 달려있어서.. 더이상 딱히 올릴 방법도 없는 상태구요

 

가장 골때리는건 Visaul Assist 처럼 Enable/Disable 전환이 그리 쉽지 않아서 필요할때만 켜는것도 좀 애매하단 겁니다... 차기 버전에서 속도 개선이 필수적으로 이루어 져야 겠네요. 뭐 중규모 정도의 프로젝트라면 별 문제 없어 보입니다만...

 

일단 어차피 생겼으니 더 써보면서 두번째 글 올려보겠습니다.

TAG •
?

Lyn
조회 수 2619 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

가장 큰게 512bit 인증서를 더이상 받아들이지 않는다.

인증서 사이즈 오류라고 그냥 뱉어 버리고 HandShake 오류 남.

 

1024bit 나 2048bit 인증서 써야함.

?

Lyn
조회 수 5462 추천 수 0 댓글 0
Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

After Update VS2015 Update 2, nuget has problem.

 

fix that

 

0. Visualstudio 2015 Run As Administrator(Importent!)

1. Open TOOLS -> Options -> Nuget Package Manager -> Package Source

 

01.PNG

 

2. Click Plus Button

 

3. Change Name to any name, and Source to https://api.nuget.org/v3/index.json

02.png

and Click Update

03.PNG

 

4. Retry use nuget package

 

5. Profit!

 

TAG •
?

Lyn
조회 수 5422 추천 수 0 댓글 0
Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

예전 x86 시절에는 다양한 calling convention 이 있었습니다.

MS가 OS API 의 디폴트로 사용한 pascal 식 호출방식(__stdcall) 막상 언어로 파스칼을 쓰는 델파이가 파스칼식을 사용 하지 않고 사용하고 있던 fastcall, 그리고 c에서 사용하는 cdecl

 

이 각각의 호출 방식은 각각 장단점이 있었는데, pascal 식은 바이너리의 크기가 작아진다, fastcall 은 인자 전달에 레지스터를 사용 하므로 속도에 유리하다, cdecl 은 최적화 단계에서 스택 push ,pop 을 생략할 수 있으므로, 최적화에 유리하고 가변인지를 지원 할 수 있다는 장점이 있었습니다.

 

그러나 바야흐로 x64 시대, 컴파일러를 설계하는 사람들은 각각의 장점을 통합한 새로운 호출 방식을 만들게 되었습니다. 그 이후 calling convention 을 지정하는 모든 키워드는 x64 컴파일시에 무시되며, 그런거 신경 안써도 되는 평화로운 세월이 이어져 왔습니다.

 

그러나 시간이 흘러 CPU는 클럭경쟁의 시대가 막이 내리고, SMID 와 멀티코어의 시대로 넘어 왔는데... 당연히 CPU 제조사들은 새 SIMD 명령어를 추가 하기 시작 했고, 그에 맞춰 새 명령어용 레지스터가 추가 되었습니다. 그 시점에서 컴파일러 개발자들은 이렇게 생각 햇나 봅니다 "어? 레지스터가 놀고있네?" 라고. 그리하여 VS2013 이후부터는 __vectorcall 이라는 키워드가 추가되어, 더이상 x64 바이너리에서도 calling convention 을 무시 할 수 없게 되었습니다.

 

간단한 예제를 보겠습니다.

 

#include <cstdio>
#include <intrin.h>

__m256i func(double d1, double d2, double d3, double d4, __m256i f)
{
    printf("%f %f %f %f\n", d1, d2, d3, d4);

    printf("%lld %lld %lld %lld\n", 
        f.m256i_u64[0], f.m256i_u64[1], f.m256i_u64[2], f.m256i_u64[3]);

    return f;
}

int __cdecl main()
{
    __m256i f;

    for (int i = 0; i < 4; ++i)
    {
        f.m256i_u64[i] = i;
    }
    
    f = func(0.1, 0.2, 0.3, 0.4, f);

    return 0;
}

 

이코드를 빌드해서 실행 해 보면 다음과 같은 코드를 볼 수 있습니다.

vc1.PNG

 

 

그리고 함수의 프로토타입에 __vectorcall 을 추가하여

__m256i __vectorcall func(double d1, double d2, double d3, double d4, __m256i f)

와 같이 만든 후 다시 빌드 해 보겠습니다

 

 

 

vc2.PNG

 

차이가 보이시나요? 첫 줄에서 ymm4 라는 avx 레지스터가 추가적으로 함수 전달에 쓰이는 것을 볼 수 있습니다.
매번 __vectorcall 을 붙이기 싫다면 

vc3.PNG

 

옵션에서 조정 하거나, /Gv 플래그를 추가하여 사용 할 수도 있습니다.
단 /Gv 플래그를 켤 경우, main 은 항상 __cdecl 이어야 한다는 조건이 있으므로, 위 코드처럼 __cdecl 을 붙여주지 않으면 경고가 발생 할 것이니 조심하세요.

TAG •
?

2011.03.31 08:21

Mysql 툴

Lyn
조회 수 37445 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

2015년 7월 현재 상황이 많이 바뀌었다.

HeidiSQL 은 발전이 없고, Mysql Workbench 는 엄청 좋아졋다. 특히 DB가 클 경우 HeidiSQL 은 테이블 목록 불러오는데만도 세월을 느낄 수 있을 정도이다.

HeidiSQL 을 쓸 경우는 그저 MariaDB 10.x 를 사용할 때 뿐이다(MariaDB와 같이 배포되며, Workbench 는 MariaDB 10.x를 지원하지 않는다)

 

HeidiSQL

 

MysqlFront 이제 구버전이다

 

TAG •
?

Lyn
조회 수 28109 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

멀티미디어 타이머를 시작하기 위해 timeSetEvent 를 호출하면



1.png

2.png


결과적으로 timeBeginPeriod 가 호출된다.

멀티미디어 타이머 해상도의 비밀은 timeBeginPeriod 이었던것!

?

Lyn
조회 수 35600 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

Lyn
조회 수 14443 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

SSMS에서 replication publish 삭제시 dbo 에 권한이 없다고 오류가 나는 경우가 있습니다.


이때 sp_removedbreplication 프로시저를 해당 db에서 강제로 날려주면 깔끔하게 제거 가능합니다.

?

Lyn
조회 수 20526 추천 수 0 댓글 1
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

111111.png

SQL Server 2014를 제외한 거의 모든 제품이 정식 으로 등록되었네요.
개인적으론 Hyper-V + WIndows 2012R2에 큰 기대중입니다. VMWare 보며 부러워 했던 기능들이 많이 추가되었네요.

TAG •
?

Lyn
조회 수 19187 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

MS 애저 온라인 세미나가 있습니다

무료개발툴을 이용한 애저 개발, 애저에서의 빅데이터 이용을 주제로 진행된다고 합니다.

아래 링크에서 원하시는 세션을 등록 하실 수 있습니다

남정현 MVP 세션정보 및 등록 – http://bit.ly/OfCSMd
정홍주 MVP 세션정보 및 등록 – http://bit.ly/1ivjRmQ
마이크로소프트 MVP 커뮤니티 캠프 2014 안내 -http://bit.ly/MVPComCamp2014


01.jpg

?

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

관리자 권한을 가진 상태에서 MsiExec.exe /I{A0F05048-7653-4FCD-9F3A-C740E4052ACE}


를 실행하면 Rsfx Driver 언인스톨러를 띄울 수 있습니다. 이걸 먼저 언인스톨 한 후,  2012 Uninstall 을 하면 삭제 가능합니다.

TAG •
?

Lyn
조회 수 15122 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

MS빠 인증 (...) 이라고 생각해도 될까요.

역시 개발툴은 MS가 최고죠..

1.png

?

Lyn
조회 수 51040 추천 수 0 댓글 3
Atachment
첨부 '4'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

네.. 제가 얼마전에 감격스럽게도 C++ MVP로 선정 되었는데요... 드디어 까 보았습니다.

2.jpg


페덱스로 배달이 왔습니다. 겉포장엔 MVP KIT 라고 씌여 있네요



3.png


열어보니 이런 박스가 나옵니다.

가운데에 있는 박스는 뭐라그러나 상패? 그런게 있고위에는 일종의 인증서가 들어 있습니다. C++이라는 글자와 함께 제 이름이 박혀있네요.
앞쪽에는 카드와 뱃지, 그리고 비밀유지서약 관련 팜플렛이 있습니다


4.png


카드에는 기간과 MVP ID, 이름, 분야가 씌여 있습니다. ID는 가렸습니다.그림판으로 지웠더니 다 보이네요 ;


1.jpg



상패에는 2013년 디스크를 끼울수 있게 되어 있습니다.  아마 나중에 또 된다면 그땐 디스크만 주지 않을까 싶네요.



이것 외에 제공되는 것 중엔 역시 Visual Studio Ultimate MSDN 라이센스가 제공되는것이 가장 크네요. MS의 거의 전제품을 자유롭게 테스트해볼 수 있습니다 : )

TAG •
?

Lyn
조회 수 4244 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Devpia 에 질문 올라온김에 정리 해 두는데


크게 특별한 것이 아니라 ... 

http://www.jiniya.net/tt/788 여기 있는 내용 그대로다.
혹시 링크 깨졋으면 http://lunapiece.net/Article/27343 여길 봐라


하면안되는짓이 같은 이유는 InitInstance / ExitInstance  는 결국 DllMain 의 Reason 에 따라 분기하는 함수이기 때문


관련 자료는 아래 링크에서 찾을 수 있다 
https://msdn.microsoft.com/ko-kr/library/66f127e5.aspx


"MFC에서 제공하는 DllMain 함수는 DLL이 로드될 때 InitInstance를 호출하고, DLL이 언로드되기 전에 ExitInstance를 호출합니다"

TAG •
?

2018.02.07 11:20

Kotlin 공부 후기

Lyn
조회 수 1160 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

코틀린 혼자서 사용해 본 지 한달이 좀 넘은거 같아서 일단 느낀점 정리..

 

1. property 는 자바 Bean과 호환성이 있는건 좋다. 문제는 자바에서 만든 property 를 코틀린쪽에서 부를 때인데 setFoo / getFoo 를 호출 하는 것도 가능하고, 대입도 가능하다 보니 혼란이 온다...

 

1-2. 대체 안드로이드 API가 왜 이딴식으로 만들어져 있는지는 모르겠지만 ... set / get 이 아니라 set / is 로 매칭되는 애들이 많은데 이런 경우에는 코틀린에서 property 취급을 해주지 않아서 setFoo 를 호출해야 한다..

 

2. 이유는 모르겠지만 JVM 이 delegate를 지원하지 않고 (자바보다 먼저 나온 언어들도 되는건데 ㅡㅡ;) 인터페이스를 구현해서 넘기는 식으로 구현해 오니 생긴 사이드이펙트인데 자바의 lambda 와 마찬가지로 kotlin의 lambda 도 매소드가 하나인 interface 구현의 syntax suger 라서 여러개의 함수를 가진 인터페이스를 구현해서 넘겨야 하는 라이브러리들을 사용할때 별 도움이 안된다. (Ex : 안드로이드의 ViewPager.OnPageChangeListener 같은거...) 

 

3. Java는 기본이 상속가능 / 오버라이딩 가능인데 코틀린은 반대라서 기존 리플렉션을 이용하는 라이브러리를 사용하려면 기껏 언어의 안정성을 위해 설계한 기본을 무시하고 일일히 다 open 해줘야 한다. 특히 Spring 같은 유명 프레임워크를 사용할때 치명적이다.. (뭐 몽땅 open 해주는 후처리용 도구가 있다고 하는데 난 개인적으로 컴파일 끝난 다음에 바이너리를 수정하는 식의 도구 별로 안좋아한다..)

 

4. Java는 기본이 Nullable 인데 코틀린은 기본이 NotNull이라서 기존 라이브러리를 호출할 때 foo?.boo?.zoo 처럼 ?!의 향연이 되거나 foo!! 와 같은 연산자로 언어가 도배가 되기 시작한다.

 

5. 이름으로 Parameter 호출하는 기능이 Java로 만든 코드에서는 동작하지 않는다. (IntelliJ 에서는 예쁘게 이름 띄워 주는데 내가 쓰는건 안된다 =_=)

 

6. 아직 kapt 가 불안정한듯. clean 하고 나면 잘 되는경우가 많다

 

7. 내가 서버프로그래머라서 그럴지 모르겠는데 NotNull이 막상 써보니 그다지 메리트가 없다. 무의미한 값이 나타나는 것 보다는 차라리 죽어주는게 버그를 빨리 찾아주는 것 같다

 

7-2. NotNull이 코틀린의 스펙일뿐 VM 에서 전혀 지원 하지 않다보니 리플렉션을 통해서 Null을 넣어버리면 NullPointerException 이 뜬다 (심지어 코틀린 입장에선 익셉션 발생 하기 전에 체크도 못한다... 어쩌라고) 문제는 데이터를 다루는 많은 라이브러리들이 그렇게 한다는거다

 

8. 확장 함수는 정말 편하다... Delphi 쓰던 시절부터 C#을 쓰는 지금까지 애용하던 기능. C++에서도 Mixin 같은 기법을 이용해서 많이들 썼었는데..

 

9. TypeSafety는 JVM의 한계 때문인지 별로 나아진게 없다

 

https://realm.io/products/realm-database/ 와 https://realm.io/blog/realm-4-3-0-released-w-first-class-support-for-kotlin/ 

에서 가져온 예제코드를 언어별로 보면

 

C#의 경우 Name 이라는 변수명을 컴파일타임에 체크 할 수 있다.(사실 linq 를 지원해도 되는데 relam 이 안하는거같다... 사실 앱스토어의 제약때문에 linq의 기능중 일부가 먹통이라 일부러 뺐을수도 있지만... iOS 지원할 안할경우엔 편한데)

var dogs = realm.All<Dog>().Where(d => d.Name.Contains("Fido"));

 

자바의 경우는 

RealmResults dogs = realm.where(Dog.class).in("name", new String[] {"Larry","Curly","Moe"}).findAll();

 

코틀린의 경우도 

val dogs = realm.where<Dog>().in("name", arrayOf("Larry", "Curly", "Moe"))

 

처럼 "name" 이라는 변수가 문자열로 넘어가게 되어 오타와 같은 실수에서 자유롭지 못하다

 

10. 자바쪽 라이브러리에서 type을 사용해야 할때 Foo::class.java 처럼 추가적인 키워드를 넘겨줘야 하는건 귀찮다... java라는 이름을 볼 때 마다 커피가 땡긴다.

 

11. var, val 은 편하다. 일단 type 추론을 해줘서 길고 긴 클래스명 안써도 된다는건 기본이고, mutable 과 immutable 을 구별 해 놓은것은 실수를 방지하는데 큰 도움이 된다. 문제는 이것도 Reflection을 사용하는 라이브러리에 변수가 넘어가면 사실상 무의미하다는거다 =_=;

 

결론 : 코틀린 언어 자체는 괜찮다. 난 C#이 최고의 언어라고 생각하고 있는데 만약 JVM 위에서 개발 해야 하는데 java는 병신같아서 못쓰겠다면 scala 보다는 kotlin 이 좀 더 나은선택이라고 생각한다. 일단 제작사가 개발툴회사다보니 지원이 빵빵하고, 안드로이드의 공식 언어이기도 하니 확실하게 써먹을만한 플랫폼도 있다.

 

하지만 현실적으론 안드로이드가 아닌 다른 용도로 쓸 거라면 좀 더 고민을 해야할 것 같다. ORM도 아직 JetBrain 에서 만드는 Exposed 조차 알파버전 수준이고 웹프레임워크인 ktor 역시 마찬가지다. java 와의 차이점 때문에 기존 java 라이브러리나 프레임워크를 쓰려면 불편함이 많은 상태에서(scala 보단 낫지만) kotlin 으로 만들어진 베이스 코드가 없다는건 치명적이다. play framework 라는 걸출한 킬러어플리케이션이 있는 scala와는 차이가 심하다. 물론 모든 코드를 밑바닥부터 직접 다 만들어서 쓸 거라면 아무 상관 없겠다.

 

fin

 
TAG •
?

Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8