다른 프로그램 언어들을 섞어서 사용하는게 가능한가요?

Ehter의 이미지

프로그램 언어를 배우고 있는 초보입니다. 공부하는 중에 궁금점이 생겨서 이곳에 질문을 해보려합니다.

제목대로 다른 프로그램의 언어를 적재적소로? 사용해서, 어떤 파트마다 언어를 효율적으로 배합해서 프로그램을 만들 수 있나요? GUI는 다른언어로 하고, 내부는 C++ 으로 하는 등. 이런 이야기를 얼핏 들은 것 같습니다. 언어마다 호환성이 있어서 어느 언어는 어떤 언어랑만 호환되고 그런건가요? 궁금하네요.

P.S C/C++ 하다, WinAPI에 들어가니 머리가 아파서 잠깐 쉬었다가 Python을 하고 있습니다.
Python은 WinAPI같이 API? GUI?, 윈도우 창을 구현하는 라이브러리가 없는건가요? 아니면 만드는 방법같은게 있나요?

allinux의 이미지

1. 언어의 호환성이라는 것이 있다기 보다는 지원을 해준다쪽이 더 맞지 않나 싶습니다. 어셈블러로 obj를 만들어서 c 로 만든 obj와 함께 링크를 할 수도 있고 c안에서 인라인 어셈블리 코드를 이용할 수도 있습니다.
또한 c에서 jvm을 내장하여 자바 클래스를 호출할 수도 있고 자바에서 JNI을 이용하여 C로 작성된 라이브러리(so, dll)을 호출 할 수 있습니다.(https://en.wikipedia.org/wiki/Foreign_function_interface)

2. 파이썬에서 기본적으로 지원하는 툴킷으로는 tkinter 가 있습니다.
또한 Qt 파이썬 래퍼인 pyside도 있고 wxpython 같은 래퍼도 있습니다.
윈도우상에서는 윈도우의 api도 호출(ctypes로 dll호출)가능합니다.

Ehter의 이미지

그렇군요. 자세히 알려주셔서 감사합니다.

vivisection의 이미지

1. 제목대로 다른 프로그램의 언어를 적재적소로? 사용해서, 어떤 파트마다 언어를 효율적으로 배합해서 프로그램을 만들 수 있나요? GUI는 다른언어로 하고, 내부는 C++ 으로 하는 등. 이런 이야기를 얼핏 들은 것 같습니다. 언어마다 호환성이 있어서 어느 언어는 어떤 언어랑만 호환되고 그런건가요? 궁금하네요.

라이브러리에서 호환은 제약도 있고, 한글문서도 없고 winapi 시작하는시점에서 복잡합니다
python, .net, java, lisp 짬뽕인 언어들 몇개 나왔는데 실제 사용하는 사람은 본적이 없습니다
각각 다른언어로 실행파일 만든다음에 소켓통신하면 간단하게 해결됩니다
예를들면 실제 기능을 하는 모듈은 c++을 사용해서 유닉스 데몬이나 윈도우 서비스로 만들고 gui는 다른언어로 만들어서 소켓통신

2. P.S C/C++ 하다, WinAPI에 들어가니 머리가 아파서 잠깐 쉬었다가 Python을 하고 있습니다.
Python은 WinAPI같이 API? GUI?, 윈도우 창을 구현하는 라이브러리가 없는건가요? 아니면 만드는 방법같은게 있나요?

python 에 기본으로 들어있는 tkinter 라는 gui 라이브러리가 있습니다
그리고 사람들이 가장 많이 쓰는게 wxpython 일겁니다
개인적으로 python 으로 gui 만들라고 하는사람들 이해가 안됩니다
지가 python으로 gui를 한번이라도 만들어보고 만들라고 하는건지, 아니면 아는게 그거밖에 없는건지...

python 한 김에 pypy랑 lua도 알아두면 좋습니다

yeonpil_net의 이미지

다음 문서가 일반론을 이해하는데 도움이 되실겁니다.

https://en.wikipedia.org/wiki/Application_binary_interface

https://en.wikipedia.org/wiki/Foreign_function_interface

너무 지엽적으로 생각할 필요는 없습니다.
용어의 범주는 정확하게 구분시킬 필요는 있습니다.

C++에서 extern "C" 를 통해 네임맹글링하지 않도록 하는 것도 C/C++ 간의 (명백하게 다른 언어이죠) 호출이 가능하도록 하는 일입니다. 흔하디 흔한 일이죠.

Win32 Api도 C로 작성된 프레임웍 아니던가요? C++에서 사용하잖아요...?

Fortran 에서도 불러서 Gui프로그래밍 할 수 있습니다.
https://software.intel.com/en-us/node/535300

당연히 Linux시스템 등에서 Gtk루틴을 호출할 수도 있습니다. 윈도에서도..

바이너리 인터페이스를 일치시는 일이지요. 컴파일러에게 어떻게 할 지 지시하는 방법도 있고, 프로그래밍 언어 레벨에서 타 프로그래밍 언어에 대한 호출을 지원하기도 합니다. (결국 같은 일을 하는 거지만..)

!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.

댓글 달기

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