'공부/오픈소스 분석'에 해당하는 글 2건

최근 마이크로소프트에서 새로운 브라우저 Edge의 자바스크립트 엔진인 ChakraCore의 엔진을 공개했는데 공개한 이유가 좀 재미있다.
보통 node js를 돌릴 때 크롬의 v8엔진을 사용하는데 마소가 Chakra를 오픈소스로 공개하고 Chakra를 이용해서 nodejs를 돌리게 해서 edge와 uwp를 이용해서 앱개발을 유도하려고 한다.
api도 추가되고 디버거도 공개하고 심지어 우분투15.10 x64에서 컴파일 가능하도록 준비하고 있다.
최근 edge사용해 보면서 나름 성능 괜찮다고 생각하고 있고 벤치마크 점수도 잘 나오고 있어서 앞으로 어떻게 될지 기대된다.
https://github.com/Microsoft/ChakraCore
http://www.infoq.com/news/2016/01/chakracore

신고
Creative Commons License
Creative Commons License

'공부 > 오픈소스 분석' 카테고리의 다른 글

마이크로소프트의 ChakraCore과 node js  (1) 2016.01.19
Crow 분석  (0) 2015.04.08

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글 하나 달렸습니다.
  1. 에.....엣지 우분투! 만세!!!!!! 2016.02.16 13:43 신고
    리눅스 데스크톱 사용잔데 우분투 컴파일 가능해지게 된다면.......

    엣지의 빠른 인터넷 속도를 활용하여 엄청난 속도의 웹서핑이 가능하겠순요

    과거 플레시 플레이어 지원 중단, 최근 크롬브라우저 64bit리눅스지원중단 이슈를 보며 리눅스 입지가 점점 좁아지는구나....했는데,
    오랫만에 좋은 소식입니다.
secret

crow

현재 수정 진행중인 문서입니다!

목차

  • routing
    • Compile time
    • Run time
  • Middleware
  • 서버구조
  • black_magic

https://www.youtube.com/watch?v=MixS9c3mE6U 참고 자료


Routing

Sample Code about rout

int main()
{
    CROW_ROUTE(app, "/");
    //이런식으로 폴더를 지정
    //python의 플라스크에 영향을 받음, 컴파일 시간에 핸들러 타입 체크
}
  • crow_route구조
    app.route<get_parameter_tag(url)>(url);
    
    핸들러 형태 체크 -> 컴파일 타임 -> 템플릿 인자
    실행 중에 url체크 -> 런타임 -> 함수 인자
  • Url->Routing Rule
    get_parameter_tag("/<int>/<int>") //인자를 받고
    -> arguments<11>                  //인자 타입에 맞는 6진수로 변환
    -> S<int, int>                    //6진수에서 다시 타입으로 변환
    -> TaggedRule<int, int>           //S에서 TaggedRule로 rebind
    
  • get_parameter_tag
    URL 스트링을 받아 인자 정보를 가지는 6진수로 표현
    0 : <>(empty), 1 : int, 3 : double, 4 : string , 5 : string(path)
    E.g.
      13 -> <double, int>
      4  -> <string>
      5  -> <string>
    

black_magic

black_maginc::S<T..>
tuple자료형을 쓸 수도 있었지만 variadic templates으로 타입 리스트 구현
S<int, double, string> 같은 자료형이 가능하다
S<a, b>::push(c) === S&<c, a, b> 자료형에 새로운 타입 추가,
S<a>::push_back<b> === S<a,b> push_back을 이용해 맨 뒤에 타입추가,
S<a, b, c>::rebind<Rule> === Rule<a,b,c> S를 이용해 Rule을 리바인드 시켜줌
다음과 같은 구현이 가능함
crow_all.h in line 5515

  • push 구현
    S<a, b>::push(c) === S<c, a, b>와 같은 상황 일 때
      template<typename ... T> //여러개의 인자를 받는 T(여기서는 a, b)
      struct S{
          template<typename U>
          using push = S<U, T...>;    
          //variadic tempalte인자 T...앞에 U를 넣음
      }
    
  • rebind 구현
    S<a, b, c>::rebind<Rule> == Rule<a,b,c>와 같은 상황 일 때

      template
      <template <typename ...> class U> //
      using rebind = U<T...>;
    
      //S<...>같은 템플릿을 U<...>으로 바꾸고 싶을 때
      //variaic template인 class U는 typename ...을 받고
      //S의 T...을 U<T...>으로 바인드 시킨다
    

black_magic::argument<uint64_t>

  • argument 구현

    template<uint64_t Tag> struct arguments {
    using subarg = typename arguments<Tag/6>::type;
    using type = 
    typename subargs::template push<typename single_tag_to_type<Tag%6>::type>;
    };
    //들어오는 인자에 대해
    
  • single_tag_to_type 구현

    template<int N>
    struct single_tag_to_type{};
    template<>
    struct single_tag_to_type<1>{
      using type = int64_t;
    };
    //type이 1로 들어올 때에 대한 특수화
    template<>
    struct argument<0> {
      using type = s<>;
    }
    //type이 0으로 들어올 때에 대한 특수화
    //not c++11 but usefull
    

    Partial template specialization
    해석하면 부분적 템플릿 특수화 정도? 특정한 경우(template인자로 특정 값이 들어올 경우) 특수화를 별도로 시켜줌


사용된 C++11

  • Const expr example

    constexpr int fact(int n)
    {
      return (n < =1)            
      ? 1 : fact(n-1)*n;
    }
    //c++11 new feature constexpr 컴파일 타임에 계산할 수 있는걸 계산함
    int main()
    {
      char arr[fact(5)];
      //5! 개의 배열이 만들어진다.
      //컴파일 타임에 알 수 있음
    }
    
  • using이 많이 나와서 EMC++ 참조

    //in c++98 use typedef
    typedef
    std::unique_ptr<std::unordered_map<std::string, std::string>>
    UPtrMapSS;
    //alias declarations in EMC++ item9
    //in c++11 use using
    using UPtrMapSS =
    std::unique_ptr<std::unordered_map<std::string, std::string>>;
    //거의 같은거라고 보면 되지만 typedef는 templatization을 지원을 안한다
    //하지만 alias declatation을 이용할 경우 templatization은 지원한다
    


저작자 표시 비영리 동일 조건 변경 허락
신고
Creative Commons License
Creative Commons License

'공부 > 오픈소스 분석' 카테고리의 다른 글

마이크로소프트의 ChakraCore과 node js  (1) 2016.01.19
Crow 분석  (0) 2015.04.08

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글이 없습니다.
secret