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


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

はじめに

まずハイブリッドソースコードという用語はないはずです。(一応記事を書く前に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/C++からのソースコードの見え方は以下のようになっています。

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/C++からのソースコードの見え方は以下になっています。

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からのソースコードの見え方は以下になっています。

おしまい。