프로그래밍 언어를 결합 할 수 있습니까?


27

나는 한동안 프로그래밍을 해왔고, 기초적인 프로그램을 작성했으며, 계속 배우고 싶습니다. 다음에 무엇을 배울 지 모르는 시점에 이르렀으며, 내 자신의 호기심에 대해 질문하고 싶습니다.

간단히 말해서, 여러 프로그래밍 언어를 하나의 결과로 결합 할 수 있다면? 예를 들어이 코드가 가능합니까?

<html>
cout << "Hello world!";
</html>

또는

import java.util.Scanner;
cout << "Insert a number from 1 to 10";
Scanner n = new Scanner(System.in);
System.out.println("The value you entered was" +n.newLine());

이것은 어리석은 질문처럼 느껴지지만 가능한지 여부를 알 수 없으므로 질문합니다. 년 내 위의 예는 수없는 경우 질문 나는, 그가 HTML 코드에서 파이썬 코드를 사용주의, 그가 무슨 짓을 한거야?


12
이것이 (사람들을 미치게하지 않고) 작동시키기 위해서는, 그들이 어떻게 상호 작용하고 어떤 부분이 어떤 언어로 처리되어야하는지에 관한 최소한의 규칙이 필요하다 .

6
하나의 hellova lexer / parser가 필요합니다.
채드 해리슨

2
@Brian Lua는 인터프리터가 일부 C 또는 C ++ 코드에 연결되어 문자열 또는 외부 파일에 저장된 Lua 코드를 실행하여 C / C ++ 객체를 Lua 코드에 노출시키는 데 사용됩니다. 루아 ( Lua)는 이 질문의 의미에서 "전혀 자주 는 아니지만 " "포함"되지 않습니다.

2
마치 26 개의 문자에 대해 서로 다른 기호를 가진 5 개의 알파벳을 만들어서 한 권의 책에서 섞는 것과 같습니다. 무의미하고 자극적이며 중복 적입니다.
ThomasX

7
나는 사람들이 일반적으로 성능상의 이유로 C / C ++ 프로그램의 ASM 프래그먼트 인 "결합 언어"의 사례 (내가 생각할 수있는 유효한 실제 생활)를 잊어 버리고 있다고 생각한다 .
TC1

답변:


43

첫 번째 예는 일종의 가능합니다. 일반적으로 이러한 것은 PHP (및 기타 관련 웹 프로그래밍 언어)에서 다음과 같이 발생합니다.

<HTML>
<?PHP
call_some_php_function(1,2,"a","b"); /* This is may return nothing, a text string, or actual HTML markup code */
?>
</HTML>

이 예제에서주의해야 할 몇 가지 중요한 사항 :

  • HTML은 프로그래밍 언어가 아니며 마크 업 언어입니다.
  • PHP와 HTML은 같은 장소에서 실행 / 통역되지 않습니다. PHP 코드는 서버에서 실행되는 PHP 인터프리터에 의해 실행되며 결과는 주변 HTML에 "주입"됩니다. 그런 다음 해당 전체 Blob이 완전한 HTML을 렌더링하는 클라이언트 / 브라우저로 전송됩니다.

두 번째 예제는 일종의 C ++ 및 Java 매시업처럼 보입니다. 서로 다른 언어로 작성된 컴파일 된 모듈이 서로 대화하는 것이 가능하지만, 동일한 소스 파일에서 Java와 C ++를 결합하는 것은 매우 혼란스럽고 어려울 것입니다.

이론적으로 다음과 같은 "언어"표시기가있는 특수 컴파일러 / 전처리기를 작성할 수 있다고 가정합니다.

Java
{
    import java.util.Scanner;
}
C++
{
   cout << "Insert a number from 1 to 10";
}
Java
{
    Scanner n = new Scanner(System.in); //Actually, this line *could* be a C++ line - it's hard for me to tell just by looking at it.
    System.out.println("The value you entered was" +n.newLine());
}

그러나 나는 이것을함으로써 당신이 유용한 것을 얻을 것이라고 확신하지 않습니다.

또한이 하이브리드 언어 환경은 두 언어간에 호환되지 않는 언어 기능을 어떻게 처리합니까?


모두가 잊어 버린 예 (나 자신을 포함하여)를 자유롭게 답에 추가하십시오 : CUDA. 두 개의 매우 다른 C 언어가 혼합되어 있으며 일부 기능은 장치 (GPU) 용으로 컴파일되고 일부는 호스트에 남아 있으며 통신 계층이 유추됩니다.
SK-logic

7
한 페이지에 JavaScript와 HTML 및 PHP가있는 것은 드문 일이 아닙니다. 끔찍하지만 드문 일이 아닙니다.
Michael Borgwardt

1
PHP에는 익숙하지 않지만 ASP.NET (C # 또는 VB.NET) 코드는 HTML 및 JavaScript를 생성하며 JavaScript는 종종 .aspx 페이지에 포함됩니다. 전체 분리는 종종 이상적인 것으로 인용되지만 SO 태그 ASP.NET에 대한 질문에 대한 간략한 개요는 얼마나 복잡한 지에 대한 아이디어를 제공합니다.
sq33G

@ sq33G-ASP.NET은 HTML 코드를 생성합니다. 원하는 경우 자바 스크립트를 포함 할 수 있습니다. 확실히 ASP.NET은 저자가 원하는 바가 아닙니다.
Ramhound 2012

다른 사람이 없다면 PHP / HTML / JS를 하나의 문서로 가져올 것입니다.
벤 Brocka

19

짧은 답변

실제로는 아닙니다.


긴 답변

임베딩

일반적으로 단일 소스 파일에는 정확히 하나의 프로그래밍 언어에 대한 코드가 포함됩니다. 다음 두 가지 이유로 여러 언어가 단일 파일로 결합되는 경우는 드 un니다.

  • 구문 적으로 다른 여러 언어를 한 번에 파싱하는 것은 매우 어렵습니다 (완전히 불가능하지 않은 경우).
  • 다른 언어 는 프로그래밍을 다르게 취급합니다 . Haskell의 함수 개념은 C ++과 다릅니다.

연결

공통 응용 프로그램 이진 인터페이스 를 공유하는 다른 프로그래밍 언어가 결합되어 단일 실행 파일 또는 라이브러리를 형성 할 수 있습니다. 두 언어의 서명을 서로 사용할 수있게하려면 약간의 작업이 필요하지만 프로세스를 쉽게하기위한 도구가 있습니다.

폴리 글 로트

폴리 글롯 코드 는 유효하며 둘 이상의 언어로 동일합니다. Stack Overflow의 404 페이지 에는 다음과 같은 프로그램이 있습니다.

스택 오버플로 404 폴리 글롯

Python, Perl, Ruby, C, Brainfuck 및 Befunge에서 "404"인쇄합니다 .

결론

언어는 파일 내에서 거의 섞이지 않으며,있을 때는 웃음 입니다. 사람들은 프로젝트의 추가 번거 로움으로 인해 프로젝트 내에서 언어 혼합을 피하려고합니다. 따라서 기술적으로 가능하지만 다른 언어를 혼합하는 것은 일반적이거나 실용적이지 않습니다.


여기에는 루비 ... 볼
제이슨 루이스

내가 루비를 모르는 @JasonLewis하지만, 포스트는 라인 # 4를 평가 있다고 말한다.
Maxpm 2019

9
언어가 항상 웃음을 위해 혼합되는 것은 아닙니다. 대부분의 C 컴파일러를 사용하면 Assembly와 C를 혼합 할 수 있으며 많은 Forth도 마찬가지입니다. 80 년대로 돌아가서, 게임에서 가장 기본적인 방언 중 하나 인 Acorn의 BBC Basic은 6502 어셈블리를 믹스 할 수있게 해주 었으며, 이는 매우 바람직한 기능이었습니다. 그것은 확실히 BBC 사용자를 웃게 만들었지 만, 다른 모든 사람들, 특히 6502 기계 코드를 직접 손으로 조립하고 원시 opcode를 DATA성명서에 붙여야하는 사람들은 거의 울었습니다 . 내가 쓴 것 아니에요. 안돼
Alexios 2012

1
@ SK-logic SQL은 프로그래밍 언어가 아닌 구조적 쿼리 언어입니다.
Maxpm

1
현대 소프트웨어 개발의 슬픈 점 중 하나는 현재 여러 언어 앱이 훨씬 더 어렵다는 것입니다. DOS 시절에는 거의 모든 것이 동일한 객체 파일로 컴파일되어 동일한 매개 변수 전달 규칙을 사용했습니다. 그것들을 서로 연결하는 것은 정말 쉽습니다. 요즘 그렇게 많지 않은 ...
Brian Knoblauch

7

네, 가능합니다. 물론 당신이 상상했던 방식이 아닙니다. 이 목적을 위해 특별히 만들어진 언어 가 있습니다 .

실제로는 여러 도메인 별 언어 를 단일 호스트 언어로 혼합하는 것이 매우 유용 할 수 있습니다. VB.NET과 C #으로 작성된 프로젝트를 다른 언어 구성 요소와 함께 개별적으로 컴파일하는 경우가 많지만 두 개 이상의 "일반적인 목적"언어를 단일 소스 코드 파일로 함께 혼합 할 필요는 거의 없습니다.

HTML은 마크 업 언어 일뿐입니다. 서버 측 코드 (예 : VB.NET), HTML 마크 업 및 클라이언트 측 Javascript 코드가 단일 소스 파일에 혼합되어있는 경우가 많지만 많은 경우 나쁜 습관으로 간주됩니다.


7

이것을 폴리 글롯 코드 라고도 합니다. 링크를 따라 가거나 웹의 다른 여러 곳에서 재미 있고 미친듯한 예가 있습니다. 이것들의 대부분은 단지 재미를위한 것입니다 / 그것이 가능하다는 것을 증명하는 것입니다.

더 심각하게는 두 개 이상의 다른 언어를 유용하게 결합 할 수있는 다양한 실제 사례가 있습니다.

  • 웹 템플릿 -PHP 또는 JSP 파일과 같은 언어는 코드를 HTML로 혼합합니다. 이것이 좋은 생각인지 아닌지에 대한 의견은 크게 다릅니다.
  • 매크로 언어 -종종 매크로 언어는 C / C ++ 전 처리기 매크로와 같은 소스 파일에 혼합됩니다. 매크로 언어 자체가 Lisp 인 Lisp와 같은 흥미로운 사례도 있습니다 (단, 차이점은 코드가 컴파일 타임에 실행되는지 런타임인지에 달려 있습니다)
  • DSL- 종종 도메인 특정 언어는 특정 문제를 효과적으로 해결하기 위해 정의되며 다른 언어의 소스 코드에 포함됩니다. 다음 은 Clojure 코드에 포함될 수 있는 아름다운 DSL for SQL 의 예입니다 .
  • 스크립팅 -일부 동적 언어는 특히 짧은 스크립트에 유용하며 다른 언어로 작성된 소프트웨어에 포함되도록 설계되었습니다. 예를 들어 Groovy 스크립트는 Java 응용 프로그램에 포함하기가 매우 쉽습니다.
  • Polyglot 프로젝트 -때로는 여러 언어를 사용하여 각각의 다른 기능을 활용하는 것이 좋습니다. 예를 들어, JVM 은 상당히 투명하게 상호 운영 할 수있는 여러 언어를 지원하므로 Java (속도 및 정적 형식 OOP 용)와 Clojure (대화식 개발, 동시성 및 기능적 프로그래밍 용)를 혼합 할 수 있습니다. 이러한 프로젝트는 일반적으로 다른 언어를 별도의 소스 파일 / 폴더로 분리하지만 동시에 단일 응용 프로그램을 만들기 위해 컴파일됩니다.

6

펄 스크립트를 작성하고 다른 언어로 작성된 코드 섹션을 삽입 할 수있는 펄 인라인 을 사용하여 일부 언어 조합을 수행 할 수 있습니다.

인라인은 C, C ++, Java, Python, Ruby, Tcl, Assembler, Basic, Guile, Befunge, Octave, Awk, BC, TT (템플릿 툴킷), WebChat 및 PERL을 지원합니다.


나는 Perl Inline에 대해 들어 본 적이 없다. 흥미로운 아이디어이지만 비 PERL 코드에 대해 별도의 모듈을 사용하는 일반적인 접근 방식에 비해 어떤 이점이 있습니까?
FrustratedWithFormsDesigner

1
@FrustratedWithFormsDesigner : 인라인 펄은 훌륭한 모듈이지만 몇 가지 결함이 있습니다. 잘 작동하지만 상당히 기본적인 코드 범위까지만 작동합니다. 한동안 작업했지만, 나는 어떤 종류의 생산에도 사용하지 않을 것입니다.
동적

3

Embedded SQL 은 다른 언어의 프로그램에 SQL 문을 포함시키는 일반적인 방법입니다.

요즘에는 호스트 언어를 수정할 필요는 없지만 일반적인 기능을 대신 사용하는 컴파일하기 쉬운 API 기반 데이터베이스 액세스로 거의 대체되었습니다.


1
요즘 임베디드 SQL은 LINQ의 형태로 다시 돌아 왔으며 계속 남아 있습니다.
SK-logic

@ SK-logic : LINQ는 어떻게 Embedded SQL과 같은가? 다른 언어가 아니며 단순히 호스트 언어로 추가 언어 구성을 적용하는 것입니다.
Joachim Sauer

LINQ는 매우 전형적인 임베디드 DSL로서 의미 적으로 호스트 언어와는 별개입니다. 그리고 LINQ2SQL의 경우 이전 내장 SQL과 동일한 방식으로 작동하며 문자 그대로 SQL로 변환됩니다.
SK-logic

그러나 Embedded SQL은 "SQL로 변환되지 않습니다". C 코드 안에 리터럴 SQL을 작성합니다 (일반적으로 문자열 상수도 포함하지 않음). 심지어 LINQ는 LINQ를 위해 특별히 개발 된 언어 기능을 사용하지만 호스트 언어 내에서 API 일뿐입니다.
Joachim Sauer 2012

1
Pro C와 Pro Fortran은 SQL 문을 약간 번역했습니다. 그리고 LINQ는 단지 API 일뿐 아니라 구문 슈가와 상호 교환 가능한 컴파일러 백엔드를 가진 API입니다. 이는 완전한 임베디드 DSL의 완벽한 예입니다.
SK-logic

2

1 개의 exe를 형성하기 위해 여러 프로그래밍 언어가 사용될 수 있습니다. 한 가지 방법은 DLL을 사용하는 것입니다. 물론 이것에 대한 다양한 우려가 있습니다. 예를 들어 매개 변수 호환성, COM 호환성 등 실제로, 작업을 위해 데이터베이스 시스템을 호출하는 방법을 생각하면 DBMS가 항상 사용자가 알고있는 언어로 작성된 것은 아님을 알 수 있습니다. 인터페이스가 알려진 한 신경 쓰지 않아도됩니다.

이 개념은 솔루션이 웹 서비스를 활용하는 경우 더욱 발전하여 여러 소프트웨어 구성 요소를보다 깔끔하게 결합 할 수 있습니다.

.NET 세계에서는 위의 모든 사항이 XAML 및 HTML 인터페이스 인터페이스 수준에서 Silverlight에서 함께 사용할 수 있습니다.

UNIX 세계에서는 한 번에 KShell 스크립트를 사용하여 솔루션이 작동 할 수 있도록 C ++ 및 COBOL 프로그램을 시작했습니다.


2

Cython을 언급 할 가치가 있다고 생각합니다 . C 확장을 작성하기위한 Python의 수퍼 세트이며 실제로는 고유 한 언어이지만 Cython의 Python 스타일 구문을 준수하면 Python 코드에서 C 코드를 사용할 수 있습니다.


0

언어 결합의 예 : 자이 썬 (Java의 파이썬), 코그 (거의 모든 것에서 임베디드 코드 생성기로 사용되는 파이썬). 코드 생성을 계산하는 경우 종종 Perl 코드를 사용하여 C ++을 생성했습니다.


0

.NET 프레임 워크는 여러 언어가 하나의 솔루션에 참여할 수 있도록 만들어졌습니다. 언어가 CLR 호환 바이트 코드를 생성 할 수있는 한 작동합니다.

http://www.geekinterview.com/question_details/1047


나는 그것이 원래 포스터가 의미 한 것이라고 생각하지 않습니다. 결과 바이트 코드는 컴파일 된 언어로 작성된 방식과 거의 관련이 없습니다.
perdian

나는 당신이 그 질문을 이해하지 않았다고 생각합니다. 저자는 하나의 모호한 파일로 여러 언어를 결합하는 것에 대해 이야기하고 있습니다.
Craige

0

여러 프로그래밍 언어를 하나의 파일로 결합하는 것은 매우 어렵고 추악하며 종종 쓸모가 없습니다.

그러나 1 개 이상의 언어로 작성된 큰 프로젝트를 가질 수 있습니다. 예를 들어, Mozilla Firefox와 MySQL에는 C 및 C ++ 코드가 있습니다. 큰 프로젝트에서는 특정 언어가 다른 언어에는없는 일부 기능을 제공하기 때문에이 방법이 자주 사용됩니다. 예를 들어, PHP에서는 바이너리 실행 파일의 실행을 요청하고 결과를 가져 와서 그 시점부터 PHP 코드에서 사용할 수 있습니다.

세계에서 가장 중요한 오픈 소스 프로젝트에 어떤 언어가 사용되는지 궁금한 경우을 확인하십시오 Ohloh.net. 많은 프로젝트의 소스 코드에 대한 통계는 여기에서 찾을 수 있습니다.


-1

HTML에서 언어를 "혼합"할 수 있습니다. 실제로 자바 스크립트를 html에 포함시킬 수있는 많은 웹 사이트가 작동하는 것이 중요합니다. 물론 HTML은 프로그래밍 언어가 아닌 마크 업입니다.

어쨌든 새로운 언어를 쓰는 것을 제안한다고 생각합니다. 해당 언어를 모두 사용하고 일관된 언어를 구사할 수있는 인터프리터 / 컴파일러를 만들어야하거나 메타 언어가 될 언어를 한 줄씩 평가하는 방법이 필요합니다. 이 두 옵션은 언어가 함께 작동하도록 프로그래머가해야하는 것을 제외하고는 기본적으로 동일합니다.


HTML에서 언어를 혼합하는 데는 +1이지만 HTML / CSS와 JS를 분리하여 유지하는 것이 더 깨끗하다고 ​​생각합니다. 웹 디자이너는 사이트 전체에 포함 된 엄격한 JavaScript를 거치지 않고도 자신의 작업을 수행 할 수 있습니다.
jmort253

HTML로 언어를 혼합 할 수는 있지만 프로그래밍 언어 인 언어 는 많지 않습니다 .
Alexios

뭐라고? 자바 스크립트는 프로그래밍 언어가 아닙니까? PHP? 나는 또한 아파치 모듈에서 펄과 파이썬 주입을 보았습니다.
markw

-1

언어는 도구입니다. 도구를 선택하기 전에 (또한 이상한 험머 -PC- 분광기 조합 만들기) 스스로에게 물어봐야합니다. 정확히 내가하고 싶은 것은 무엇입니까? 일단 대답이 주어지면, 그런 종류의 언어 혼합이 거의 필요하지 않다는 것을 알게 될 것입니다.


-3

예, 통역사 / 컴파일러가 이해할 수있는 한 프로그래밍 언어를 혼합 할 수 있습니다. 예를 들어, 자바 스크립트, PHP, python을 HTML로 또는 C ++를 C #으로 혼합합니다.

언어를 혼합하면 코드를 읽고 수정하기가 더 어려워 질 수 있으므로주의해서 수행해야합니다. 이 문제를 해결하는 한 가지 방법은 호출해야하는 언어로 코드에 대한 별도의 파일을 작성하고 포함하지 않고 가져 오는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.