Bagaimana agar dua program berbeda dengan dua bahasa berbeda berinteraksi?


26

Saya tidak tahu apakah ini terlalu luas atau tidak, tapi saya seorang programmer muda masih di perguruan tinggi, ini adalah tahun SMP saya. Saya merasa memiliki pegangan yang cukup baik untuk berbagai bahasa dan memiliki basis yang cukup bagus. Tapi saya tersandung untuk berpikir bagaimana jika misalnya, saya mencoba membuat program dan mengatakan saya menulis satu bagian dalam python hanya karena mudah, dan melakukan pekerjaan, tetapi program ini perlu mendapatkan output dari program lain yang saya tulis di C dan saya menggunakan C karena kecepatannya. Saya tidak yakin bagaimana kedua program dan bahasa yang berbeda berinteraksi satu sama lain untuk membuat keseluruhan satu program. Saya berpikir seperti yakin Anda dapat menulis ke file, tetapi kemudian bagaimana jika program python dan C keduanya mengakses file saya perlu memikirkan kunci.

Sering kali saya melakukan ini dengan mengimpor file ke dalam sebuah program, tetapi dalam hal itu mereka adalah bahasa yang sama sehingga mudah saya hanya menggunakan fungsi impor, tetapi dengan dua bahasa / program yang berinteraksi untuk membuat satu output kohesif saya mengalami masalah .

Saya sedang memikirkan pertanyaan ini karena saya berpikir untuk terjun ke menciptakan beberapa aplikasi web dasar hanya untuk belajar, tetapi saya tidak tahu bagaimana mengatakan file javascript interaktif dengan sesuatu yang saya tulis dalam python atau sebaliknya.

Saya merasa kehilangan sesuatu yang sangat mudah di sini dan tidak mengerti. Maaf jika pertanyaan ini terlalu luas tetapi saya tidak dapat menemukan jawaban online yang jelas, saya mencoba melihat melalui aplikasi web opensource, tetapi tidak dapat benar-benar memahami jawaban darinya, sekali lagi maafkan saya jika pertanyaannya tampak bodoh, saya pikir ini menjadi tempat yang bagus untuk bertanya Saya suka membaca di stackexchange.

Terima kasih atas balasan


Saya tahu ada Swig , sepertinya melakukan hal yang Anda inginkan, tetapi saya belum menggunakannya. Jadi Anda mencobanya dan lihat :).
user712092

1
Harap perhatikan pertanyaan Anda berisi dua subjek yang sama sekali tidak terkait, satu adalah komunikasi umum antara 2 proses / aplikasi pada host yang sama, yang lain adalah server web / arsitektur klien yang biasa, menggunakan JS pada klien dan python pada server.
João Pinto

Sudahkah Anda meninjau konsep LAMP? Anda dapat melakukan banyak komunikasi melalui basis data.
SDsolar

Jawaban:


28

Kode yang ditulis dalam berbagai bahasa dapat berinteraksi dalam sejumlah cara.

Pada tingkat sumber, kompilasi silang dari satu bahasa ke bahasa lain dapat dilakukan untuk beberapa kombinasi bahasa (misalnya, Google GWT menyertakan kompiler java-ke-javascript; kompiler Glasgow Haskell dapat dikompilasi ke C; versi awal C ++ dikompilasi ke C). Sebagian besar waktu, namun ini tidak benar-benar layak.

Bahasa yang berbagi platform virtual, seperti JVM atau .NET runtime, biasanya dapat berinteraksi melalui mekanisme yang diekspos oleh platform - misalnya semua bahasa JVM dapat mengakses perpustakaan Java dan menggunakannya untuk berkomunikasi antara satu sama lain, dan mereka dapat memanggil metode dan gunakan kelas yang dibuat dalam bahasa JVM lainnya.

Banyak bahasa pemrograman, termasuk Python, menawarkan mekanisme untuk berinteraksi dengan pustaka asli, biasanya ditulis dalam C. Menggunakan mekanisme semacam itu, dimungkinkan untuk memanggil fungsi asli dari bahasa lain yang lebih tinggi. Perpustakaan populer sering memiliki binding tersedia. Teknik ini biasanya disebut sebagai "Antarmuka Fungsi Asing" . Antarmuka Python-ke-C adalah CFFI .

Pilihan lain adalah membuat dua program yang benar-benar terpisah dan membuatnya berinteraksi saat runtime. Ada berbagai mekanisme untuk mencapai ini; cara termudah adalah melalui pipa (lihat subprocessmodul untuk python): pada dasarnya, satu program memanggil yang lain, mengirimkan input ke stdin-nya dan membaca hasilnya kembali dari stdout-nya. Ini membuat satu program menjadi bagian dari yang lain; jika Anda perlu berumur panjang dan mulai secara independen, data dapat diteruskan bolak-balik melalui pipa bernama, soket jaringan (lokal), file bersama, dan (tergantung pada platform) cara lain. Mana yang terbaik tergantung.


Jawaban yang bagus Kemungkinan lain adalah bagi seorang juru bahasa untuk disematkan dalam program utama, umumnya dilakukan antara katakanlah C ++ dan Lua untuk pengembangan game. Atau, lihat aturan kesepuluh Greenspun: en.wikipedia.org/wiki/Greenspun%27s_tenth_rule
Andrew

11

Ada beberapa cara mapan yang berbeda untuk dua program untuk berkomunikasi satu sama lain. Anda sudah mengidentifikasi satu yang jelas, dengan berbagi file, dan satu kesulitan yang jelas dengannya. Tetapi ada cara lain.

Sebagian besar sistem operasi modern mengandung mekanisme yang disebut pipa bernama , yang pada dasarnya adalah aliran data dengan ujung inputnya dalam satu program dan outputnya berakhir pada program yang berbeda. Jika Anda perlu mengirim data dari satu program ke program lain yang berjalan di komputer yang sama, itu bisa menjadi metode yang baik untuk digunakan.

Jika Anda perlu mengatur API untuk satu program untuk digunakan untuk memanggil program lain, Anda mungkin ingin melihat ke dalam RPC, (panggilan prosedur jarak jauh,) yang lagi-lagi biasanya didukung di tingkat OS.

Jika Anda ingin berkomunikasi antara dua program di dua komputer yang berbeda, segalanya menjadi lebih rumit. Maka Anda perlu bekerja dengan jaringan dan protokol. Anda memerlukan salah satu program untuk dapat membuka soket dan mendengarkan pesan yang masuk, mendekodekannya menjadi panggilan metode internal, memprosesnya dan mengembalikan respons. Ada banyak perpustakaan yang tersedia untuk menyediakan fungsionalitas ini dalam berbagai bahasa yang berbeda, termasuk C dan Python.

Pada dasarnya, metode apa yang harus Anda gunakan tergantung pada spesifikasi dari apa yang Anda coba lakukan. Lakukan riset tentang berbagai bentuk komunikasi antar proses dan olahpesan jaringan, dan Anda harus bisa mengetahui apa yang paling sesuai dengan kebutuhan Anda.


2

Pesan lewat tampaknya akan menjadi konsep umum di sini karena ada berbagai contoh di mana orang dapat memiliki bahasa yang berbeda berinteraksi, misalnya orang dapat menggunakan ASP klasik dengan komponen COM dan beberapa JavaScript untuk mendapatkan campuran 3 bahasa berbeda yang digunakan dalam aplikasi yang sama.

Dalam contoh yang Anda sebutkan, bukankah kunci akan menjadi sesuatu yang dapat ditangani oleh Sistem Operasi pada sistem file? Setiap program tidak tahu tentang yang lain harus diingat.


0

Sebagian besar komponen perangkat lunak tidak boleh berkomunikasi dalam hal instruksi tetapi mengirim dan menerima data: berinteraksi dengan database, mengirim / menerima permintaan JSON / XML, dll.


0

Tergantung pada jenis masalah Anda, penggunaan shell standar dari pipa mungkin cukup (ketik shell Anda):

program1 | program2

Dengan cara ini, output dari program1 langsung ke input dari program2. Tentu saja ini tidak bekerja untuk setiap masalah, tetapi banyak masalah (non-interaktif) dapat diselesaikan dengan baik menggunakan pendekatan ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.