https://docs.modular.com/mojo/


Mojo는 파이썬 구문의 장점과 시스템 프로그래밍 및 메타프로그래밍을 결합하여 연구와 프로덕션 간의 격차를 해소하는 새로운 프로그래밍 언어입니다.  Mojo를 사용하면 C보다 빠른 이식 가능한 코드를 작성하고 Python 에코시스템과 원활하게 상호 운용할 수 있습니다.


파이썬의 생태계 (PyPi에 등록된 수많은 패키지들) 를 활용하고, 비슷한 문법체계를 가지면서도 빠른 성능을 내기 위한 몇가지 문법을 추가한 새로운 언어. 


Mojo 프로젝트가 기대가 되는 가장 큰 이유는, 이걸 만드는 팀의 리드가 Chris Lattner 라는 사람이라는 점. Lattner 는 LLVM 프로젝트 (LLVM 은 Clang, Rust, Swift 등 다양한 프로그래밍 언어 컴파일러의 backend 를 담당하는 라이브러리임)와 Swift 프로그래밍 언어를 성공적으로 개발한 리드임. 


swift 는 objective-c 라는 과거 프로그래밍 언어의 생태계를 이어받으면서도 현대적인 문법과 성능을 낼 수 있었던 성공적인 시도였기에, 파이썬에서도 swift 같은 성공사례가 나올 것으로 기대됨.


기존 파이썬의 단점, 한계점들

 - 스크립팅용으로 시작되었기에 시스템 프로그래밍에 적합하지 않음

 - 파이썬 패키지의 많은 부분들은 성능을 위해 c 언어로 만들었기 때문에 디버깅을 하면서 자연스럽게 라이브러리 안쪽으로 들어가는 것이 불가능함.

 - 모바일이나 서버용으로 배포하는 것이 깔끔하지 못함



Mojo 가 새롭게 선보이는 점들

 - int, struct, fn 같은 요소들을 도입. 메모리 크기에 딱 맞게 값을 할당할 수 있어야 최적화를 할 수 있음.

 - let, var 같은 선언 (선택적임) 을 통해 immutable binding 과 mutable binding 을 선언

 - 강한 타입체킹. 안정적인 라이브러리를 만드는데 매우 중요한 요소. 정적 분석기가 강화되어 개발 환경 (자동완성, 리팩터링 기능) 도 좋아질 수 있음

 - 컴파일타임에 수행할 수 있는 메타 프로그래밍. 

 - 함수를 호출할때 파이썬은 모든게 참조로 처리되지만, Mojo 에서는 참조 기반과 값 기반을 구분할 수 있음. 큰 덩어리는 참조로, int 같이 간단한건 값 기반으로.

 - 그 외등등 rust 와 파이썬이 혼합된 느낌을 많이 보여줌. rust 같은 borrow-checker 를 사용할것인데, 쓰기는 더 쉬울 것이라고 함. 

 - CPU쪽 최적화에 있어서 필수적인 SIMD 관련 오퍼레이션을 간결하고 효율적으로 할 수 있는 기능들 제공




https://www.youtube.com/watch?v=6GvB5lZJqcE


[추가] 제레미 하워드가 mojo 를 이용해서 간단한 데모를 선보임. 처음에는 그냥 python 을 이용해서 행렬 연산을 수행하는 코드를 만들어보고 (물론 아무도 이렇게 쓰진 않고 numpy 같은걸 쓰긴 함) 그걸 mojo 를 이용해서 단계별로 튜닝을 해서 최종적으로는 원래 코드보다 무려 4000배 빠른 (!) 행렬 연산 코드를 주피터 노트북을 떠나지 않고 작성함. 덤으로 복소수 클래스도 하나 만들어서 망델브로 프랙탈을 그려내고 matplotlib 같은 파이썬 라이브러리를 이용해서 화면상에 표시하는 데모로 마무리.


아직 개발중인 언어이긴 하지만 위의 목표대로 잘 만들어진다면 꽤 괜찮은 물건이 나올 수 있을 것으로 기대됨. 래트너 형님 화이팅