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
Jawaban:
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
subprocess
modul 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.sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber