제 11 회공개 SW 개발자대회결과보고서 참가팀개요 구분 세부내용 팀명 TSTL 총인원 ( 1 명 ) 팀구성성명소속부서 / 학과직위 / 학년 팀장남정호아이지넷개발실대리급 부문 학생 일반 참가 지원 분야 학습용 SW 모바일 SW 클라우드 SW 빅데이터 SW 사물인터넷 SW 응용 SW 보안 SW 기타 SW 출품작결과보고서 출품작명 TSTL (TypeScript-STL) 프로그램등록 URL https://github.com/samchon/tstl TypeScript 의 STL (Standard Template Library) 구현체 출품작소개 ( 요약 ) - Containers: 컬렉션프레임워크 - Iterators: 이터레이터패턴 - Algorithms: 알고리즘함수들 - Functors: 유틸리티객체들 TSTL (TypeScript-STL) 은, C++ 표준화위원회 (C++ Standard Committee) 가정의한, 표준템플릿라이브러리 (Standard Template Library) 를 TypeScript 에구현한오픈소스프로젝트입니다. 무분별한하드코딩과무질서한자료구조사용에지친당신, 오늘부터 TSTL 하십시오. C++ 계열언어들만의전유물이었던체계화된자료구조, 제네릭 & 함수형프로그래밍, 이젠웹 ( 또는 NodeJS) 에서도가능합니다.
1. 개발배경및목적 저는알고리즘개발자입니다. 저는알고리즘을구현할때, Script 언어로빠르게 Prototype 을만들어보고, 차후 C++ 로최적화하는방법을선호합니다. 아래는저의단골개발프로세스 ( 스타일 ) 입니다. - Fast Development by JavaScript o Prototyping o Simulation in data level - Proof & Visualize by HTML o Production o Demonstration with visualization o High-level Simulation - Optimization by Migration to C++ o Migration Consider efficiency Partial or Full migration o Integration with TS/HTML 그리고이렇게알고리즘을개발하면서, 느꼈던두가지의불편사항들로인해 TSTL 을개발하게됩니다. 1.1. JS 는기저라이브러리가너무부실하더라 JS 는기저라이브러리가너무나도부실합니다. 제공되는 Containers 는달랑 Array 와 Object (dynamic object) 뿐이며, 알고리즘을구현하기위한기본제공함수들도너무적습니다. 또한, 유틸리티객체들도너무나도단조로우며알고리즘의경우와마찬가지로기본으로제공되는 features 가너무적습니다. STL 을 TypeScript 에구현해놓으면 JS 에서도, 다채로운라이브러리를사용할수있게됩니다. 단순라이브러리도아니고 C++ 표준화위원회가십수년에걸쳐고민하고또고민하여정립한표준라이브러리입니다. - Containers & Iterators - Algorithms - Functors
1.2. Migration 이너무번겁더라 저는앞서언급한바와같이, Script 언어 (JS) 로빠르게 Prototype 을만들어보고, 차후 C++ 로최적화하는방법을선호합니다. 하지만, Prototyping 을끝내고, JS 로작성한코드를 C++ 로마이그레이션을하는과정은언제나지루하고고단합니다. 특히 JS 와 C++ 은기저라이브러리레벨에서인터페이스가서로상이하니, 이게더더욱불편하고고단한작업이아니었나싶습니다. 만일 JS 와 C++ 이기저라이브러리수준에서인터페이스가같다면, 동일한자료구조와동일한패턴을지닌다면얼마나편리할까? 그런생각에서제작하게되었습니다 ; TSTL. 2. 개발환경및개발언어 - 개발환경 o 설계도구 : Visio o 코딩도구 : Visual Studio Code o 배포장소 : GitHub, NPM Modules https://github.com/samchon/tstl https://npmjs.com/tstl - 개발언어 : TypeScript - 매뉴얼 o Class Diagram: http://samchon.github.io/tstl/design/class_diagram.pdf o API Documents: http://samchon.github.io/tstl/api/ o Guide Documents: https://github.com/samchon/tstl/wiki
3. 시스템구성및아키텍처 TSTL 의모듈구성은아래와같습니다. - Containers & Iterators o C++ 의 Collection Framework o 다양한 Containers 와 o 정규화된 Iterator Pattern 을제공함 - Algorithms o 알고리즘함수들 o sorting, mathematics, partitions 등 o Iterator Pattern + Functional Programming - Functors o 기타유틸리티객체들
4. 프로젝트주요기능 4.1. Containers Java 의 Collection Framework 격에해당하는모듈로써, 다채로운 Containers 와정규화된 Iterator Pattern 을제공합니다. 개인적으로 STL 의 Containers 가 Java Collection Framework 보다다음세가지관점에서더우수하다고생각합니다. - 일관성 - 적절성 - 확장성현재 TSTL 에서제공되는컨테이너는크게세가지 (Linear, Adaptor & Associative) 카테고리로나눌수있으며, 그것들의종류는아래와같습니다. - Linear Containers o o o vector list deque
- Adaptor Containers o stack o queue o priority_queue - Associative Containers o Atomic Containers set Set multiset TreeMultiSet unordered_set HashSet unordered_multiset HashMultiSet o Dictionaries map TreeMap multimap TreeMultiMap unordered_map HashMap unordered_multimap HashMultiMap 4.2. Algorithms 다양한알고리즘함수들의모음입니다. STL 의알고리즘함수들은일관된패턴을지니며 ( 일관적이며 ), 용이성과확장성이매우우수합니다. 또한, STL 에서제공되는알고리즘함수들은크게다음두가지특성을지닙니다. - Iterator Pattern - Functional Programming 제공되는알고리즘함수들의카테고리는아래와같습니다. - iterations - modifiers - sortings - heaps - binary_searches - partitions - union_sets - mathmatics
4.3. Functors 다양한유틸리티성객체들의모음으로써, 다르게표현하면기타항목이라할수있겠습니다. 제공되는 Feature 들은아래와같습니다. - exceptions o 예외사항객체들 o JS 에는예외사항을발생시키는객체가 Error 타입뿐이니, 이를보완코자구현함 - functional o binary functions o hash functions - utility - (fake) thread o Asynchronous Critical Section Objects 비동기이벤트간임계영역제어 JS 나름의스레드를흉내내어구현할수있다. o 제공되는클래스들은다음과같다. condition_variable mutex timed_mutex shared_mutex shared_timed_mutex experiments::semaphore STL 이개정될때마다이 Functors 모듈의규모가기하급수적으로커지는경향이있지만, TSTL 역시 STL 의개정에발맞춰, 신규기능들을계속추가해나갈것입니다. 현재차후 STL 개정을통해추가될것으로예상되는기능들은아래와같습니다. - File System (17) - Standard UI Library (20) - Standard Network Library (20)
5. 기대효과및활용분야 5.1. 기대효과 1) JavaScript 에풍부한라이브러리제공 JS 는기저라이브러리가너무나도부실합니다. 제공되는 Containers 는달랑 Array 와 Object (dynamic object) 뿐이며, 알고리즘을구현하기위한기본제공함수들도너무적습니다. 또한, 유틸리티객체들도너무나도단조로우며알고리즘의경우와마찬가지로기본으로제공되는 features 가너무적습니다. TSTL 을사용하면 JS 에서도, 다채로운라이브러리를사용할수있습니다. 단순라이브러리도아니고 C++ 표준화위원회가십수년에걸쳐고민하고또고민하여정립한표준라이브러리입니다. 일관성과적절성, 그리고확장성까지두루두루갖춘표준템플릿라이브러리를 JS 에서사용하십시오. - Containers & Iterators - Algorithms - Functors 2) C++ 과의연동효율증대 TSTL 을사용함으로써, JS 와 C++ 은기저수준에서같은인터페이스를지니게됩니다. 이제부터 JS 와 C++ 은 STL 의이름아래에동일한자료구조, 동일한인터페이스의컨테이너와라이브러리함수들을지니게됩니다. TS C++ 로마이그레이션을행하던, 혹은 TS 와 C++ 시스템을각기연동하던, 여러분은설계수준에보다더집중할수있게됩니다.
5.2. 활용사례 TSTL 은지난 3 년간다양한상용프로젝트들에적용하면서안정화를시키고, 꾸준히개선해왔습니다. 때문에 TSTL 의품질에대해서는매우자신있고, 스스로도자부심을느끼고있습니다. TSTL. 안심하고쓰십시오. - Nam-Tree o 간이 A.I. 모형 o 고차원적인라이브러리의필요 o Web 시각화 & C++ Migration - Samchon Simulation o 주식시뮬레이션 & 시스템트레이딩 o 고차원적인라이브러리의필요 o Web 시각화 & C++ Integration - Samchon Framework o OON (Object Oriented Network) Framework o Integration with C++ - 3D Bin Packing o 공간배치최적화 o Web 을통한시각화 (3D Modeling) o C++ Migration - Folding o 접지단가최적화 o Containers & Algorithms 의필요 - Button Finder o 이미지검색기 o Integration with C++ 프론트 : JS + HTML 분산처리 : NodeJS 이미지프로세싱 : C++ - Kiosk Editor o Cloud Project o 고차원의 Container 와 o Asynchronous Critical Section 필요
- Auto HL o Cloud 장비관리 o Kiosk Editor 와동일한이유 - Package Retriever o 보험검색엔진 o Collection Framework 와 Algorithms 및 o Asynchronous Critical Section 의필요