2016년 7월 7일 목요일

Linux에서의 Swift 시작

Swift 2.x 까지는 Linux에서 Swift 언어 자체를 테스트하고 활용하는데에는 괜찮지만,  C binding을 제대로 지원하지 않아, 본격적인 프로젝트에 활용하기에는 문제가 많았다.

그러나, C binding이 Swift 3.0부터, Swift package manager를 활용하여 지원하기 때문에, Linux에서도 어느 정도 재미있는 프로젝트를 진행할 수 있는 기반이 된 것으로 보인다.

나는 Swift development snapshot을 이용하여 테스트를 진행하였다. swift.org에서 ubuntu용 이미지는 배포를 하고 있지만, 나는 arch linux를 사용하기 때문에, swift-development-bin 패키지를 설치하여 테스트를 진행하였다.

정상적인 설치여부 확인

$ swift --version
Swift version 3.0-dev (LLVM c191431197, Clang c6195325c5, Swift add621a959)
Target: x86_64-unknown-linux-gnu

$ swift package --version
Swift Package Manager – Swift 3.0

개발 시작, 빌드 및 실행


$ mkdir sample

$ cd sample

$ swift package init --type executable
Creating executable package: sample
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/

$ swift build
Compile Swift Module 'sample' (1 sources)
Linking .build/debug/sample

$ .build/debug/sample
Hello, world!

어떤가? 간단하지 않은가?

Golang에 대한 소회

최근 반년간 golang을 스터디 목적으로 관심을 가지고 테스트를 해왔다.

여러가지 장점이 있는 반면, 시간이 갈수록 단점이 점점 더 부각되어, 더이상의 시간 투자는 하지 않으니라 생각하며, 이 글을 정리한다.

뭐, 단순히 말하면, 나와 맞지 않는 언어라는 결론...

장점이야 여러 사이트에 잘 정리되어 있으니, 그쪽을 참조하면 될거 같고,

점점 부각되는 단점으로는...


  • GC
    • 개인적으로 시간이 갈 수록 GC의 특성이 나에게 점점와 닫는거 같다. 최근에 가장 곤란한 상황은 C와의 binding에서 golang object에 대한 포인터를 C에서 관리하기 힘든 문제 때문이었다. Java의 경우 이러한 문제를 이미 해결한 상황으로 보이고, golang도 시간이 지나면 해결할 수 있을 것으로 보이긴 하지만, 지금의 상황에서는 나에게 큰 불편함으로 다가 온다.
  • Namespace 지원 관련
    • golang이 namespace를 지원하지 않는 것은 아니다, 다만, 다른 언어 만큼 자유롭게 namespace를 쓸 수 있는 것은 아니다. 이로 인해 singleton instance 관련 함수 이름 선정에 우아함을 부여하기 힘들다.
  • Object creator의 일관성
    • new operator 있다. 그러나, interface를 기반으로 하는 object를 생성하는 방법에 대한 일관성이 부족하다. 즉, 언어적 지원 사항이 없다. 
  • OOP
    • golang은 공식적으로 oop를 지원하지 않는다. 그러나, 다양한 방안을 이용하여 oop를 구현 활용할 수 있다.
    • 하지만, 이러한 구현 방법은 결국 일관성을 해치게 될 것이다. 각 개발자 마다 서로 다른 방법을 사용할 수 있고, 이것은 코드의 일관성과 가독성을 해치게 될 것이다.
    • 단기적으로는 큰 문제가 되지 않을 수도 있지만, 장기적으로는 golang 자체를 해치게 될 가능성이 많다.
프로그램 언어를 사용만 했지, 그 자체에 대한 전문적인 지식이 일천하여, 멋진 말로 설명하는 재주는 없다.
그러나, golang이 현 상황에서 여러 좋은 장점이 충분히 부각되는 서버쪽에서는 유용할지 모르나, 다른 분야에서까지 활용되기에는 아직 부족한 점이 많다.

물론, 똑똑한 사람들이 개발에 참여하고 있으니, 이러한 부족한 점들이 점점 개선되겠지만, 시간이 많이 필요할 것으로 예상된다. 최소한 2.0 이상 버전에서나 어느정도 개선될것으로 보임.

그러나, 언어 개발자들의 특성이 내가 원하는 바가 반영되려면 더 많은 시간들이 걸릴 것으로 예상되어, swift 로 전환하고자 한다.