Як взаємодіють два різних програмування з двома різними мовами?


26

Я не знаю, чи це занадто широко, чи ні, але я молодий програміст ще в коледжі, його молодший рік. Я відчуваю, що у мене досить добре розуміється для різних мов і є досить гарна база. Але я спіткнувся з думкою, як, якщо, наприклад, я намагаюся створити програму і скажу, що я написав одну частину в python тільки тому, що це легко і робить роботу, але для цієї програми потрібно отримати вихід з іншої програми, яку я написав в C, і я використовую C через його швидкість. Я не впевнений, як дві різні програми та мови взаємодіють між собою, щоб створити загальну загальну програму. Я думаю про те, щоб переконатися, що ви можете записати у файл, але що робити, якщо програми python і C мають доступ до файлу, мені потрібно було б подумати про замки.

У більшості випадків я це робив із імпортом файлів у програму, але в цьому випадку вони є однією і тією ж мовою, що легко, я просто використовую функцію імпорту, але з двома мовами / програмами взаємодіють, щоб створити один згуртований вихід, у мене виникають проблеми .

Я думав над цим питанням, бо думав зануритися у створення деяких основних веб-додатків просто для того, щоб навчитися, але поняття не маю, як сказати, що файл JavaScript JavaScript інтерактивним із тим, що я написав у python чи навпаки.

Я відчуваю, що пропускаю тут щось по-справжньому просто і просто не розумію. Вибачте, якщо це запитання занадто широке, але я не зміг знайти чіткої відповіді в Інтернеті, я намагався переглянути веб-сторінку з відкритим джерелом, але реально не зміг зрозуміти відповідь, знову ж пробачте мене, якщо питання здається німим, я думав це буде гарне місце, щоб запитати, я люблю читати на stackexchange.

Дякую за будь-яку відповідь.


Я знаю, що є Свіг , він, здається, робить те, що ти хочеш, але я цього не використовував. Так ви спробуйте і подивіться :).
користувач712092

1
Зверніть увагу, що ваше запитання містить дві абсолютно не пов'язані між собою теми, одна - загальна комунікація між двома процесами / програмами на одному хості, інша - звичайна архітектура веб-сервера / клієнта, використовуючи JS на клієнті та python на сервері.
Жоао Пінто

Ви переглянули концепцію LAMP? Можна багато спілкуватися за допомогою баз даних.
SDsolar

Відповіді:


28

Код, написаний різними мовами, може взаємодіяти різними способами.

На рівні джерела перехресна компіляція з однієї мови на іншу може здійснюватися для деяких комбінацій мов (наприклад, GWT Google включає компілятор java-javascript; компілятор Glasgow Haskell може компілювати до C; ранні версії C ++ складено до С). Однак більшу частину часу, однак, це не реально.

Мови, які мають спільну віртуальну платформу, таку як JVM або .NET виконання, зазвичай можуть взаємодіяти через механізми, відкриті платформою - наприклад, усі мови JVM можуть отримати доступ до бібліотек Java та використовувати їх для спілкування між собою, і вони можуть викликати методи і використовувати класи, створені будь-якою іншою мовою JVM.

Багато мов програмування, включаючи Python, пропонують механізм взаємодії з нативними бібліотеками, як правило, написаними на C. Використовуючи такий механізм, можна викликати нативні функції з іншої, більш високої, мови. У популярних бібліотеках часто доступні палітурки. Цей прийом зазвичай називають "інтерфейсом зовнішньої функції" . Інтерфейсом Python- in -C є CFFI .

Ще один варіант полягає в тому, щоб створити дві повністю окремі програми та взаємодіяти їх під час виконання. Існують різні механізми для досягнення цього; найпростіше це через трубу (загляньте в subprocessмодуль для python): в основному одна програма викликає іншу, надсилаючи вхід до свого stdin і читаючи результат назад зі свого stdout. Це робить одну програму підпроцесом іншої; якщо вам потрібно тривати і незалежно запускатись, дані можна передавати вперед і назад через названі канали, (локальні) мережеві розетки, спільні файли та (залежно від платформи) інші засоби. Хто з них найкращий, залежить.


Чудова відповідь. Інша можливість полягає в тому, щоб перекладач був вбудований в основну програму, зазвичай це робиться між скажімо C ++ та Lua для розробки ігор. Або дивіться десяте правило Грінспуна
Ендрю

11

Існує кілька різних налагоджених способів спілкування двох програм між двома програмами. Ви вже визначили один очевидний, поділившись файлами, і одну очевидну складність з ним. Але є й інші способи.

Більшість сучасних операційних систем містять механізм під назвою "pipe" , який в основному являє собою потік даних з його вхідним кінцем в одній програмі, а його вихідним кінцем в іншій програмі. Якщо вам потрібно надіслати дані з однієї програми до іншої програми, що працює на тому ж комп’ютері, це може бути хорошим методом використання.

Якщо вам потрібно налаштувати API для однієї програми для використання для виклику іншої програми, ви можете заглянути в RPC (виклики віддалених процедур), який знову ж таки підтримується на рівні ОС.

Якщо ви хочете спілкуватися між двома програмами на двох різних комп’ютерах, все ускладнюється. Тоді вам потрібно працювати з мережами та протоколами. Вам потрібна одна з програм, щоб мати можливість відкривати сокет і слухати вхідні повідомлення, декодувати їх у внутрішній виклик методу, обробляти їх та повертати відповідь. Існує багато бібліотек, які надають цю функціональність на різних різних мовах, включаючи C і Python.

В основному, який метод ви повинні використовувати, залежить від специфіки того, що ви намагаєтеся зробити. Проведіть декілька досліджень різних форм міжпроцесового спілкування та мережевих повідомлень, і ви зможете зрозуміти, що найкраще відповідає вашим потребам.


2

Тут , здавалося б, загальною концепцією є передача повідомлень, оскільки існують різні приклади, коли можна взаємодіяти різними мовами, наприклад, можна використовувати класичний ASP з компонентами COM та деякий JavaScript, щоб отримати суміш з 3 різних мов, що використовуються в одному додатку.

У прикладі, який ви заявляєте, чи не блокування було б чимось для обробки операційної системи у файловій системі? Кожна програма не знає про іншу, обов'язково пам'ятайте.


0

Більшість програмних компонентів не повинні спілкуватися з точки зору інструкцій, але надсилати та отримувати дані: взаємодія з базою даних, надсилання / отримання запитів JSON / XML тощо.


0

Залежно від типу проблеми, стандартне використання оболонок труб може бути достатнім (введіть свою оболонку):

програма1 | програма2

Таким чином, вихід program1 переходить безпосередньо на вхід програми2. Звичайно, це працює не для кожної проблеми, але багато (неінтерактивних) проблем можна вирішити прекрасно за допомогою цього підходу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.