Często słyszę termin, że język A jest napisany w języku B. Na przykład PHP zostało napisane C , C # jest napisane w C ++ .
Czy ktoś może wyjaśnić, co to znaczy i czy to w ogóle jest poprawne? Czy to ma coś wspólnego z kompilatorem tłumacza używanym przez język?
Ponadto na jakich czynnikach opiera się wybór języka implementacji?
s/written/implemented/
i jest o wiele wyraźniejsze.Odpowiedzi:
Większość języków programowania można podzielić na dwie kategorie: języki interpretowane i skompilowane.
Skompilowany język jest tłumaczony przez kompilator na kod maszynowy , język, który CPU wykonuje bezpośrednio krok po kroku. Z kolei język interpretowany korzysta z pośrednika, tłumacza , do uruchomienia kodu języka. Interpreter sam jest innym programem, zwykle sam skompilowanym do kodu maszynowego.
PHP jest językiem interpretowanym. Potrzebujesz osobnego programu do uruchomienia kodu PHP, komputer nie uruchamia programu bezpośrednio. Ten osobny program, interpreter PHP, jest napisany w C.
C # jest językiem skompilowanym, ale nie jest skompilowany do kodu maszynowego. Zamiast tego jest kompilowany do specjalistycznego języka, kodu bajtowego, do uruchomienia na maszynie wirtualnej. Java jest kolejnym przykładem takiej konfiguracji. Można to postrzegać jako hybrydę kompilacji i interpretacji, gdzie maszyna wirtualna jest tłumaczem. Maszyna wirtualna dla C # (CLI lub Common Language Infrastructure ) jest napisana w C ++.
Inne przykłady to:
źródło
Zasadniczo masz rację. Jeśli powiedziane jest, że Ruby jest napisane w C, oznacza to, że tłumacz języka i części podstawowej biblioteki są napisane w C.
Tak więc interpreter języka Ruby to program w języku C, który pobiera plik tekstowy jako dane wejściowe, przetwarza go, a następnie wywołuje funkcje znajdujące się w innym pliku tekstowym (jeśli jest napisany w języku Ruby) lub skompilowanym kodzie C, podobnie jak podstawowa funkcjonalność, która wymaga aby uzyskać bezpośredni dostęp do zasobów systemowych, takich jak pamięć, system plików i inne. I niektóre funkcje wymagające bardzo wysokiej wydajności.
Więc masz różne części języka, które mogą lub muszą być napisane w innych językach. Nic nie powstrzyma cię przed napisaniem interpretera w C i bibliotek w C ++ (choć może utrudni to kilka rzeczy). Możesz nawet mieć wiele kroków i użyć języka, który jest bardzo dobry w przetwarzaniu tekstu, aby wygenerować pewne dane pośrednie, które następnie są przetwarzane przez jakiś kod C.
Czynniki decyzji mogą być takie same jak w przypadku innych złożonych aplikacji. Wydajność jest jedna. Możliwość pisania kodu, który ma bezpośredni dostęp do zasobów systemowych. W większości przypadków musi to być język skompilowany (choć teoretycznie można napisać interpreter języka Ruby w Pythonie). Dostępność w różnych systemach jest ważna, jeśli chcesz, aby Twój język działał w systemach Linux, Win, OS X i innych.
źródło
Oznacza to po prostu, że większość rdzenia języka A jest napisana w języku B. Jaki „rdzeń języka A” może różnić się w zależności od języka, ale ogólnie rzecz biorąc, zgadujesz, to znaczy, że jest to kompilator lub tłumacz. Decydującym czynnikiem przy wyborze języka, w którym ma być napisany inny język, jest, jak w prawie każdym projekcie, w jakich językach programiści są bardziej zaznajomieni.
To powiedziawszy, „język A jest napisany w języku B” jest nadmiernym uproszczeniem dla większości współczesnych języków. Jeśli weźmiemy Python jako przykład, podczas gdy implementacja referencyjna, CPython , rzeczywiście została napisana w C, istnieją implementacje napisane w innych językach, takich jak Jython (napisany w Javie), IronPython (napisany w C #), PyPy (napisany w Python), CLPython (napisany w Common Lisp), Stackless Python (napisany w C i Python) i Unladen Swallow (napisany w C ++).
Język programowania jest definicją, a jak pokazuje przykład w Pythonie, tak naprawdę nie ma żadnych ograniczeń co do języków, w których można pisać jego kompilator, interpreter i biblioteki. Oczywiście język może być również napisany sam w sobie, poprzez proces o nazwie bootstrapping .
źródło
string.lower(s)
jest to funkcja python, która deleguje to doreturn s.lower()
, to jest poprawne. W CPython 3,3 strunowe przypadków operacje są realizowane w C.Z perspektywy używania języka programowania, język programowania jest tylko programem. Może to być kompilator, może to być interpreter lub maszyna wirtualna. Wszystkie te rzeczy są tylko programami komputerowymi i dlatego można je pisać w dowolnym języku.
Tak więc, jeśli chcesz stworzyć własną wersję PHP, możesz zacząć od dowolnego języka, w którym jesteś najbardziej biegły. Następnie napisałbyś program, który potrafi czytać kod sformatowany w PHP i robić wszystko, co mówi specyfikacja PHP . W ten sposób tworzysz język PHP w języku X.
źródło
explode
która pobieraString
i zwraca aArray
, jej implementacja (tj. Kod, który będzie działał na łańcuchu w celu wytworzenia tablicy) jest zapisana w C , prawda?Bardzo podobnym sformułowaniem o zupełnie innym znaczeniu jest „pisanie języka A w języku B”, np. „Pisanie C w Javie”.
Opisuje kod, który jest poprawny pod względem składniowym w jednym języku, ale używa struktur, idiomów i konwencji z innego języka. W przykładzie „pisania C w Javie” oznakami tego byłyby deklaracje wszystkich zmiennych lokalnych na górze każdej metody, przy użyciu stałych całkowitych zamiast wyliczeń, przy użyciu identyfikatorów_z_podpisami itp.
Zazwyczaj dzieje się tak, gdy ktoś długo pracował z jednym językiem (szczególnie, gdy pracował tylko z tym językiem) i jest zupełnie nowy w obecnym języku (lub nie jest zainteresowany pisaniem czystego kodu).
źródło
Technologia jest z natury iteracyjnym procesem. Zaczynamy od prostych narzędzi, a następnie używamy tych narzędzi do tworzenia lepszych. Językami pierwszego zestawu były prawie 1: 1 tłumaczenia znormalizowanych kodów bajtowych instrukcji dla układu; architektura 8086 i jej asembler stały się dominujące w stosunku do innych architektur, takich jak Z80, RISC itp., i dlatego zaczęliśmy opracowywać języki, które można trawić w zestawie 8086, takich jak FORTRAN, COBOL, Pascal i C. Program, który interpretuje kod źródłowy języki te muszą być napisane w coś bardziej prymitywnego, w przeciwnym razie skończysz na kłótni z kurczakiem i jajkiem; jeśli kod źródłowy pierwszego kompilatora C został napisany w C, to co skompilowało ten kod źródłowy C i czy z definicji nie byłby to pierwszy kompilator C?
Zasadniczo należy rozumieć, że „C # jest napisany w C ++”, co oznacza, że pierwszy i / lub najpopularniejszy kompilator oraz biblioteki wykonawcze / podstawowe, które są zgodne ze specyfikacją języka C # (te są Microsoft .NET Framework i kompilatorem wiersza poleceń program CSC.exe) są napisane w C ++.
źródło
„Język A jest napisany w języku B” oznacza, że jedyną implementacją języka A (lub jedynym powszechnie używanym) jest ten, który jest faktycznie projektem opracowanym w języku B i jedynym kompletnym, aktualnym specyfikacja A jest kodem źródłowym B, który implementuje go w taki sposób, że jeśli dokumentacja i program B nie zgadzają się, program B jest zwykle uważany za prawidłowy.
źródło