<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <title type="html">김 용묵의 절대공간 - 블로그: 문자열에-담긴-자기-언어-코드를-실행할-수-있는-언어-외-1에 달린 최근 댓글/트랙백 목록</title>
  <id>http://moogi.new21.org/tc/</id>
  <link rel="alternate" type="text/html" hreflang="ko" href="http://moogi.new21.org/tc/" />
  <subtitle type="html">그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.</subtitle>
  <updated>2025-03-14T07:21:36+09:00</updated>
  <generator>Textcube 1.7.8 : Con moto</generator>
  <entry>
    <title type="html">Lyn님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1085#comment9853" />
    <author>
      <name>(Lyn)</name>
    </author>
    <id>http://moogi.new21.org/tc/1085#comment9853</id>
    <published>2015-04-18T21:46:28+09:00</published>
    <summary type="html">마인크래프트 안에 CPU 만들고 그걸로 마인크래프트 돌리겠다는 인간도 있는데요 뭐 ㅋㅋ</summary>
  </entry>
  <entry>
    <title type="html">사무엘님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1085#comment9845" />
    <author>
      <name>(사무엘)</name>
    </author>
    <id>http://moogi.new21.org/tc/1085#comment9845</id>
    <published>2015-04-17T20:30:33+09:00</published>
    <summary type="html">네, eval 자체는 js의 압축기들도 다 쓰는 테크닉이다 보니 전면 금지하기는 어렵겠고, 일단 외부 도메인에 있는 스크립트의 인클루드만 막는 게 대세인 듯합니다.
그리고 재주 님의 박학다식한 이 바닥 설명도 잘 들었습니다. ㅎㅎ 말씀대로 컴터계에는 무엇을 생각하든 그 이상 똘끼를 자랑하는 덕후들이 많네요!</summary>
  </entry>
  <entry>
    <title type="html">김재주님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1085#comment9840" />
    <author>
      <name>(김재주)</name>
    </author>
    <id>http://moogi.new21.org/tc/1085#comment9840</id>
    <published>2015-04-17T13:23:31+09:00</published>
    <summary type="html">실제로 현재 쓰이는 Javascript 구현체들은 VM이죠. 말씀하신대로 eval은 최적화에 있어서 상당한 장애물이고 Lyn님 말씀대로 동시에 보안에 취약하게 될 수 있는 문제를 가지고 있습니다. 이 때문에 최신 브라우저들은 제삼자 서버에 있는 js 파일은 로딩하지 않는 것이 기본 설정이지요.

참고로 C, C++도 LLVM이나 GCC 최신 버전은 런타임 코드 생성을 할 수 있기 때문에 비슷한 기능을 구현할 수 있습니다. LLVM VM 위에서 실행시킬 수도 있고, 동적 라이브러리로 컴파일해서 실행시간 링킹을 해서 호출할 수도 있지요. 물론 할 수 있다는 것이지, 동적 언어를 냅두고 C/C++으로 그런 변태적인 짓을 해야만 하는 경우가 많지는 않겠지요. (리눅스 커널 모듈 중에 있긴 합니다!) 

이런 개념이 사실 최근의 것은 아닙니다. 과거의(그리고 극히 최근에 나온 일부) DB는 연산을 최적화하기 위해서 SQL을 C 코드로 바꿔서 컴파일해서 실행하는 경우도 있었습니다.  이런 극도의 최적화가 필요하지 않다면 보통 python이나 lua, javascript 같은 동적 언어와 바인딩해서 쓰겠지요.


그런데... 런타임에 코드를 생성해서 실행하는 기능은 상당히 편리하기 때문에 보안상의 이유로 쓰지 않기에는 아쉽습니다.
그래서 나온 게 js.js( https://github.com/jterrace/js.js )인데요. emscripten이라는 LLVM frontend가 있습니다. 이건 C/C++ 코드를 javascript로 변환해 주는 것인데요.

이걸로 Javascript VM인 spidermonkey를 C++에서 Javascript로 변환해서(...) Javascript VM위에 또 다른 Javascript VM을 실행하는(...) 변태적인(...) 짓을 합니다. 안쪽 VM은 바깥쪽 VM의 코드 공간을 오염시킬 수 없기 때문에, eval을 이걸로 대체해버리면 안심하고 제3자 스크립트를 마구 불러다 쓸 수 있다는(...) 발상이죠.

컴퓨터 공학에는 좀 또라이같은(...) 발상을 하는 사람들이 조금, 아니 많이(...) 있는 것 같습니다(...)</summary>
  </entry>
  <entry>
    <title type="html">Lyn님의 댓글</title>
    <link rel="alternate" type="text/html" href="http://moogi.new21.org/tc/1085#comment9836" />
    <author>
      <name>(Lyn)</name>
    </author>
    <id>http://moogi.new21.org/tc/1085#comment9836</id>
    <published>2015-04-17T01:43:44+09:00</published>
    <summary type="html">eval 은 지원하는 언어에서 조차 보안문제로 봉인하는경우가 많아서... 실제로 쓰는경우를 보기가 좀 어렵죠 ㅎㅎ</summary>
  </entry>
</feed>
