LoginSignup
87
28

More than 3 years have passed since last update.

ハイブリッドソースコード(笑)

Last updated at Posted at 2021-02-10

ハイブリッドソースコード(笑)

はじめに

まずハイブリッドソースコードという用語はないはずです。(一応記事を書く前にgoogleで検索して調べました)
追記:複数のプログラミング言語で書かれた1つのプログラムをPolygotと呼ぶそうです。(@twostarsmcoさん、教えていただきありがとうございます。)
1つのソースコードから複数のプラットフォームで動くハイブリッドアプリというのはあります。
ここでのハイブリッドソースコードとは1つのソースコードに2つのプログラミング言語を記述して、どちらのプログラムとしてでも動作させてしまうという遊びです。

原理

原理は簡単でプログラミング言語Aのコメント(もしくは実行に影響がない記述)にプログラミング言語Bのコードを記述して、プログラミング言語Bのコメントにプログラミング言語Aのコードを記述することで、お互いがコメントになるようにすることでどちらのプログラムとしても動作します。

実例

C/C++ソースコード×Rubyソースコード

test1.c
#/*
puts "Hello Ruby"
__END__
*/
#include <stdio.h>
int main()
{
  printf("Hello C/C++\n");
}
$ gcc test1.c
$ ./a.exe
Hello C/C++
$ ruby test1.c
Hello Ruby

Rubyからのソースコードの見え方は以下のようになっています。
c-ruby1.png
C/C++からのソースコードの見え方は以下のようになっています。
c-ruby2.png

C/C++ソースコード×Pythonソースコード

test2.c
#/*
print("Hello Python")
"""
*/
#include <stdio.h>
int main()
{
  printf("Hello C/C++\n");
}
/*
"""
#*/
$ gcc test2.c
$ ./a.exe
Hello C/C++
$ python test2.c
Hello Python

Pythonからのソースコードの見え方は以下になっています。
c-python1.png
C/C++からのソースコードの見え方は以下になっています。
c-python2.png

Rustソースコード×Pythonソースコード

test3.rs
#[doc()]/*
print("Hello Python")
"""
*/
fn main()
{
  println!("Hello Rust");
}
/*
"""
#*/
$ rustc test3.c
$ ./test3.exe
Hello Rust
$ python test3.c
Hello Python

Pythonからのソースコードの見え方は以下になっています。
rust-python1.png
Rustからのソースコードの見え方は以下になっています。
rust-python2.png

おしまい。

87
28
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
28