웹 컴파일러 만드려면?....예) codepad.org

ggochang의 이미지

안녕하세요

웹 컴파일러를 아시는지요..?

대표적인 사이트는 아래의 사이트입니다.
http://codepad.org

제가 이번에 이런 웹컴파일러를 만들어야 합니다만

codepad에서 지원하는 언어는
c, c++, D, Haskell, Lua, OCaml, PHP, Perl, Plain Text,
Python, Ruby, Scheme, Tcl 이렇게 있습니다

저는 c, c++ 이것 두개만 지원가능하도록 만들생각입니다만

어떻게 만들어야 하는지 감이 안잡히네요

php에 c 컴파일러 라이브러리가 있다고 들었습니다만

!!!! 제가 생각한 방법은 !!!!!!

웹에서 작성한 코드를 서버로 보내면
서버에서 컴파일하고 결과값을 클라이언트(웹)으로 보내주는 방식으로 할려 했습니다

이게..가능할런지요..?

서버가 코드를 받아서 그것을 다시 컴파일 할수 있나요..?

---정리---

1) 클라이언트(웹) -> 서버로 코드전송
2) 서버(WAS) 코드를 받아서 컴파일
3) 결과값을 클라이언트(웹)으로 전송
4) 클라이언트(웹)에서 결과값을 받은뒤 출력

참 오묘......합니다. 여러분 도와주십시요.

익명 사용자의 이미지

익명 사용자의 이미지

그런 부분보다...
시스템 망가트리는 코드가 실행되지 않도록 하는 부분에 더 고민해야 할 겁니다.

익명 사용자의 이미지

> 서버에서 컴파일하고 결과값을 클라이언트(웹)으로 보내주는 방식으로 할려 했습니다

결과값이라는 것이...? 컴파일된 바이너리를 말하는 것이라면 그냥 컴파일된 파일을 응답으로 주면 되지요.
어려울 것 전혀 없어보이는데요. PHP라면 exec 이나 system 함수를 쓰시면 되겠네요.

컴파일후 컴파일된 코드를 실행하고 그 결과를 보내주는 것이라면
위에 분이 쓰셨듯이 서버에서 위험한 작업이 실행되는 것을 막는 것에 신경을 써야지요.
사용할 수 있는 CPU 시간, 메모리양, 디스크 접근, 네트워크 접근 등등 리소스에 제한을 둬야지요.
웹프로그래밍 언어에서 직접 구현하기보다는 OS가 제공하는 권한/보안 기능을 잘 활용하셔야할겁니다.

익명 사용자의 이미지

일부 기능을 막아버리기보다는 chroot등을 써서 지워져도 쉽게 복구가능 하도록 하면 재밌겠네요.

sql2의 이미지

제가 말씀하신 내용과 비쓰무레한...기보다 동일한 내용으로 대학 졸업작품을 하고, 교수님들이 좋아라해서 1등도 하고...등등

네. 가능합니다.

ICPC Judge System 이나, MOSS 와 같은 Plagiarism Detection 소프트웨어나 툴 등을 찾아보세요.

( CloneChecker 는 비추!! 관리안되고 있고 버그도 꽤 있고, ML 도 알아야 하고... )

고민해볼 사항!!

1. 잡학다식하지 않으면 매우 힘듬!! ( 위의 내용을 고민하시는 것을 보아서 포기할 것을 권장함. )
2. VM 환경구축으로 시스템 안정성과 멀티플랫폼 지원
3. 컴파일을 서버사이드에서 할지, 클라이언트사이드(크로스컴파일)에서 할지...
4. 정적분석을 해서 런타임시 나타날 수 있는 사이드이팩트, 메모리릭.. 등을 사전 검증. 최소한 splint 정도라도...
5. 컴파일은 컴퓨팅파워가 많이 필요함. distgcc, ccache 와 같은 분산&캐싱 컴파일을 고려해 봄.
6. 컴파일러 종류, 옵션, 버전, target .. 등은 사용자로부터 받을건지, 말건지...
7. 그외 기타등등

snowall의 이미지

http://kldp.org/node/123301

여기에 gcc를 올리시면 될듯

피할 수 있을때 즐겨라! http://melotopia.net/b

익명 사용자의 이미지

거기서는 이미 gcc가 됩니다. gcc가 아니라 아마 tcc일듯.

cleansugar의 이미지

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.