자바 코드를 자신의 응용프로그램에 임베딩하는 VM 구현?

체스맨의 이미지

질문이 두 개 입니다.

파이썬이나,
http://docs.python.org/ext/ext.html

EiC 같은 인터프리터 C 인 경우,
http://eic.sourceforge.net/overview/#SECTION00060000000000000000

각자의 소스 코드를 C로 만든 응용프로그램에서 실행할 수 있는 함수들을 제공하는데요.

첫번째 질문은,

이런것을 지원하는 자바 VM 이 있을까요? kaffe 는 잠깐 훑어봤습니다만, 지원된다는 문서를 읽지 못했습니다.

실은 이런 자바 VM 이 필요하다기 보다는, 특정 언어 (일단, C 를 생각하고 있습니다.) 를 인터프리트 (또는 자바 바이트 코드나, 새로 정의한 바이트코드로 변환해서 실행) 하는 기능들을 필요에 의해 구현해보려는데,일단 사전 조사 중이구요.

두번째 질문은,

자바 말고 다른 언어들 중에서 이런 임베딩 기능을 지원하는 것들은 어떤 것이 있을 까요? 일단 위에 제시한 파이썬과 EiC 말구요. 운영체제에 구애받지 않고 말씀해주셨으면 합니다. 참고 링크를 알려주시면 더욱 좋겠습니다.

eminency의 이미지

음, JNI를 말씀하시는 건가요? -_-;;

C에서 Java Native Interface를 이용해 프로그래밍 하면 자바에서 메쏘드 호출하듯이 불러 쓸 수 있습니다.

ruby도 가능한 것으로 알고...
C와의 연동은 가능한 언어가 많은 것으로 아는데 자세히는 모르겠군요.

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

cdpark의 이미지

임베딩 기능에 TCL을 빼 놓으면 TCL이 섭섭해할겁니다. if마저 임베딩으로 구현한 언어인데...

saxboy의 이미지

guile도 빼놓을 수 없겠지요. ;-)

체스맨의 이미지

eminency wrote:
음, JNI를 말씀하시는 건가요? -_-;;

C에서 Java Native Interface를 이용해 프로그래밍 하면 자바에서 메쏘드 호출하듯이 불러 쓸 수 있습니다..

그런게 있었군요. 자바 공부한지가 오래돼서... -_-;;;;
찾아보니 자바 1.1 부터 C 에서 자바 메소드를 호출할 수 있었던 것 같은데, 제가 공부한 책은 1.0 이군요. 제가 해봤던 건 자바에서 C 함수를 호출하는 것이었습니다. 이 책엔 JNI 라고 나와있지도 않고 그냥 native 메소드라고 돼 있네요.

일단 원하는 기능 중 하나는 된 것 같은데, 다른 하나는, 파이썬 메뉴얼에 "Very High Level Embedding" 이라고 나와있는 소스 문자열을 입력받아 그대로 실행하는 것입니다. JNI 는 소스 문자열이 아니라 컴파일된 바이트 코드를 실행하는 것 같네요.

파이썬은
PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n");

EiC 에서는
EiC_parseString("#include <stdio.h>");
EiC_parseString("int a = 10,i;");
EiC_parseString("for(i=0;i<a;i++)"
" printf(\"%%d\\n\",i);");

이런 식으로 하는군요. 아마도 JNI 가 Invoking Java "Virtual Machine" 이라는 제목으로 되어있는 것으로 보아 위와 같이 소스 라인을 입력받지는 못할 것 같고, 그렇다면 현재로서는 Interactive 모드로 자바 명령을 실행하기는 어려운 것 아닌가요?

말씀해주신 언어들이 이러한 High Level Embedding 이 가능한지 모르겠네요.

Orion Project : http://orionids.org

voider의 이미지

인터렉티브 하게 실행도 가능합니다
jsp 가 그러한 방식이 아닙니까?

그러한 특별한 인터페이스가 없으니까

따로 만들어야 겠죠

-- 아쉬운 하루 되세요 --

체스맨의 이미지

voider wrote:
인터렉티브 하게 실행도 가능합니다
jsp 가 그러한 방식이 아닙니까?

그러한 특별한 인터페이스가 없으니까

따로 만들어야 겠죠

방식이야 그렇다지만, 그것을 일반적인 응용 프로그램에서 실행한다는데에는 감이 잘 안오는데 (일단, 제가 jsp 를 잘 알지 못합니다. ) 일례로 다음과 같은 기능을 만드는 경우에 힌트를 주실 수 있나요?

Quote:

명령행에서 자바 명령을 입력 받아 실행하고, 자바 명령 중 일부는 필요한 경우 native 메소드를 호출할 수도 있다.

Orion Project : http://orionids.org

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.