Od dłuższego czasu programuję, napisałem kilka podstawowych programów i chcę się uczyć. Dotarłem do punktu, w którym po prostu nie wiesz, czego się uczyć dalej i chciałbym zadać pytanie o moją ciekawość.
Krótko mówiąc, pytanie brzmi, czy można połączyć wiele języków programowania w jeden wynik? Na przykład, czy ten kod jest możliwy?
<html>
cout << "Hello world!";
</html>
lub
import java.util.Scanner;
cout << "Insert a number from 1 to 10";
Scanner n = new Scanner(System.in);
System.out.println("The value you entered was" +n.newLine());
To głupie pytanie, ale nie mogę wiedzieć, czy to możliwe, czy nie, dlatego zadaję to pytanie. W tym pytaniu zauważam, że używa kodu Python w kodzie HTML, jeśli mój powyższy przykład nie jest możliwy, co zrobił?
programming-languages
Bugster
źródło
źródło
Odpowiedzi:
Twój pierwszy przykład jest w pewnym sensie możliwy. Zwykle takie rzeczy zdarzają się w PHP (i innych powiązanych językach programowania):
Kilka ważnych uwag na temat tego przykładu:
Drugi przykład wygląda jak połączenie C ++ i Java. Możliwe, że skompilowane moduły napisane w różnych językach będą ze sobą rozmawiać, ale połączenie Java i C ++ w tym samym pliku źródłowym byłoby niezwykle mylące i trudne: skąd kompilator wiedziałby, które instrukcje to Java, a które C ++?
Teoretycznie można by napisać specjalny kompilator / preprocesor ze wskaźnikami „języka”, takimi jak:
Ale nie jestem pewien, czy robiąc to, zyskasz coś przydatnego.
W jaki sposób to hybrydowe środowisko językowe poradzi sobie z funkcjami językowymi, które są ze sobą niezgodne?
źródło
CUDA
. Jest to połączenie dwóch bardzo różnych języków C, z niektórymi funkcjami skompilowanymi dla urządzenia (GPU), a niektóre pozostają na hoście, z wnioskiem o warstwie komunikacyjnej.Krótka odpowiedź
Nie całkiem.
Długa odpowiedź
Osadzanie
Zasadniczo pojedynczy plik źródłowy zawiera kod dla dokładnie jednego języka programowania. Zdarza się, że wiele języków jest łączonych w jednym pliku z kilku powodów:
Łączenie
Różne języki programowania, które mają wspólny interfejs binarny aplikacji, mogą być łączone w jeden plik wykonywalny lub bibliotekę. Udostępnienie podpisów dwóch języków często wymaga trochę pracy, ale istnieją narzędzia ułatwiające ten proces.
Poligloty
Kod Polyglot jest prawidłowy i równoważny w więcej niż jednym języku. Strona 404 Stack Overflow zawiera jeden taki program:
Wypisuje „404” w Pythonie, Perlu, Ruby, C, Brainfuck i Befunge.
Wniosek
Języki rzadko mieszają się w plikach, a kiedy już są, to śmieje się . Ludzie starają się nawet unikać mieszania języków w projektach ze względu na dodatkowe problemy, które wprowadza. Tak więc, chociaż jest to technicznie możliwe, mieszanie różnych języków nie jest ani powszechne, ani pragmatyczne.
źródło
DATA
. Nie to, że jestem zgorzkniały czy coś takiego. NieeeeTak, to jest rzeczywiście możliwe. Oczywiście nie tak, jak sobie wyobrażałeś. Istnieje kilka języków stworzonych specjalnie do tego celu.
W praktyce bardzo przydatne może być mieszanie wielu języków specyficznych dla domeny w jednym języku hosta. Rzadko zachodzi potrzeba mieszania dwóch lub więcej języków „ogólnego przeznaczenia” razem w jednym pliku kodu źródłowego, chociaż często można znaleźć projekty napisane w obu, powiedzmy, VB.NET i C #, z różnymi komponentami językowymi skompilowanymi osobno.
Jeśli chodzi o HTML, to tylko język znaczników. Często możesz znaleźć kod po stronie serwera (np. W VB.NET), znacznikach HTML i kodzie JavaScript po stronie klienta zmieszanych w jednym pliku źródłowym, choć wielu uważa to za złą praktykę.
źródło
Jest to często nazywane kodem polyglot - istnieje kilka zabawnych / szalonych przykładów, jeśli podążasz za linkiem lub w różnych innych miejscach w sieci. Większość z nich jest po prostu dla zabawy / aby udowodnić, że jest to możliwe.
Mówiąc poważniej, istnieją różne przykłady z życia, w których można połączyć dwa lub więcej różnych języków:
źródło
Możliwe jest wykonanie kombinacji języków za pomocą Perla Inline, co pozwala napisać skrypt Perla i wstawić sekcje kodu napisane w innym języku:
źródło
Wbudowany SQL był powszechnym sposobem osadzania instrukcji SQL w programach innych języków.
Obecnie został prawie całkowicie zastąpiony przez łatwiejszy do skompilowania dostęp do bazy danych oparty na API, który nie musi modyfikować języka hosta, ale zamiast tego korzystać z jego normalnych umiejętności.
źródło
Do utworzenia 1 exe można użyć kilku języków programowania. Jednym ze sposobów jest użycie bibliotek DLL. Oczywiście istnieją różne obawy dotyczące tego. Na przykład zgodność parametrów, zgodność COM i tym podobne. W rzeczywistości, jeśli pomyślisz o tym, jak wywołać system bazy danych w celu wykonywania pracy, może się okazać, że DBMS nie zawsze jest napisany w języku, który znasz. Prawdopodobnie nie obchodzi Cię to, dopóki interfejs jest znany.
Ta koncepcja jest kontynuowana, gdy twoje rozwiązanie korzysta z usług sieciowych, co jest jeszcze czystszym sposobem łączenia wielu składników oprogramowania.
W świecie .NET wszystkie powyższe zasady obowiązują na poziomie interfejsu. Interfejsy XAML i HTML mogą żyć razem w Silverlight.
W świecie UNIX używaliśmy kiedyś skryptów KShell do uruchamiania programów C ++ i COBOL, aby rozwiązanie mogło działać.
źródło
Myślę, że warto tu wspomnieć o Cython . Jest to nadzbiór Pythona do pisania rozszerzeń C i chociaż jest to naprawdę unikalny język sam w sobie, w zasadzie pozwala ci używać kodu C w kodzie Pythona, jeśli jesteś zgodny ze składnią stylu Pythona
źródło
Przykłady łączenia języków: Jython (python w Javie), Cog (python używany jako generator kodu osadzonego w prawie wszystkim). Często używałem kodu Perla do generowania C ++, jeśli liczyć generowanie kodu.
źródło
Struktura .NET została stworzona, aby umożliwić udział kilku języków w jednym rozwiązaniu. Działa tak długo, jak długo język może wygenerować kod bajtowy zgodny z CLR.
http://www.geekinterview.com/question_details/1047
źródło
Łączenie wielu języków programowania w jednym pliku jest bardzo trudne, bardzo brzydkie i często bezużyteczne.
Można jednak mieć duży projekt napisany w więcej niż 1 języku. Na przykład zarówno Mozilla Firefox, jak i MySQL mają w sobie kod C i C ++. W przypadku dużych projektów praktyka ta jest często stosowana, ponieważ określony język zapewnia pewne funkcje, których inny nie. Na przykład w PHP możesz poprosić o wykonanie binarnego pliku wykonywalnego, pobrać jego wynik i użyć go w kodzie PHP od tego momentu.
Jeśli jesteś ciekawy, jakie języki są używane w najważniejszych projektach typu open source na świecie, możesz to sprawdzić
Ohloh.net
. Można tam znaleźć statystyki dotyczące kodu źródłowego wielu projektów.źródło
Możesz „mieszać” języki w HTML. W rzeczywistości ważne jest, jak wiele witryn działa, dzięki czemu można osadzić JavaScript w HTML. Ale oczywiście HTML to znaczniki, a nie język programowania.
Myślę, że zrobienie tego, co proponujesz, i tak pociągałoby za sobą napisanie nowego języka. Albo będziesz musiał stworzyć interpretera / kompilatora, który mówiłby we wszystkich tych językach i mógłby konsekwentnie je obramować, albo potrzebowałbyś jakiegoś sposobu oceny linii po linii, wyraźnie w jakimś meta-języku. Te dwie opcje są w zasadzie takie same, z wyjątkiem tego, co programista musi zrobić, aby języki współpracowały ze sobą.
źródło
Język to narzędzie. Przed wybraniem narzędzia (co więcej, stworzenia dziwnej kombinacji hummer-PC-spektroskop) należy zadać sobie pytanie - co dokładnie chcę zrobić? Po udzieleniu odpowiedzi przekonasz się, że taka mieszanka języków rzadko jest konieczna.
źródło
Tak, można mieszać języki programowania, o ile Twój interpreter / kompilator może to zrozumieć. Na przykład mieszanie javascript, PHP, python w HTML lub C ++ w C #.
Mieszanie języków może jednak utrudniać czytanie i modyfikowanie kodu, dlatego należy to robić ostrożnie. Jednym ze sposobów jest utworzenie osobnych plików dla kodu w języku, do którego chcesz zadzwonić, i zaimportowanie go zamiast osadzenia.
źródło