W jakim języku powstają języki?

0

Witam... mam dosyć śmieszne pytanie. W jakim języku powstają języki takie jak java, c++ etc..?

Pewnie się teraz wydurniłem przez to pytanie :P Po prostu ciekawi mnie to.

0

Chyba w asemblerze ale nie jestem pewien :)

1

Języki nie powstają w żadnym języku. Może masz na myśli kompilatory języków? Jeżeli tak to większość obecnie pisze się w C i C++ (w tym kompilatory języków C i C++).

0

@_13th_Dragon - dokładnie; Dany język jako tako nie istnieje; Za to kompilatory analizujące instrukcję zgodną ze składnią danego języka oraz całe środowiska (IDE) już w jakimś języku powstają; Prócz C/C++ na pewno dochodzi domieszka asemlbera.

3

Śmiechem żartem IDE do C++ można napisać nawet w... C++.

O co w tym wszystkim chodzi.
Na początku był kod maszynowy (noo były jeszcze programowanie "mechaniczne", ale to możemy zignorować), gdzie program wyglądał tak jak wygląda po otwarciu pliku *.exe edytorem hexowym (też nie do końca, bo w pliku *.3xe są jeszcze nagłówki i importy, ale dla uproszczenia można to zignorować), czyli coś w rodzaju 329A9F9E79A7C9A65. No, ale na tym się nie dało pracować, toć to nieludzkie i masochistyczne traktowanie programistów (tak, tak - teraz to mamy dobrze...). Więc postanowiono to uprościć. Każdej funkcji przyporządkowano słowo kluczowe. mov, add, inc etc. Za pomocą (ekhem...) kodu maszynowego napisano tłumacza do tego "nowego", "wyjątkowo ułatwiającego życie" języka, który zwie się assembler.

Później zaczęto tworzyć funkcje w asemblerze, pojawiły się powszechnie stosowane konstrukcje aż w końcu ktoś mądry (John Backus) uznał, ze to trochę bez sensu pisać to wszystko za każdym razem i zebrał to do kupy (brzydkie słowo) tworząc pierwszy język programowania wysokiego poziomu - FORTRAN).

Teraz tak. Jakoś trzeba zmusić komputer, żeby tego FORTRAN'a zrozumiał. Trzeba było więc napisać program tłumaczący = kompilator (w asm ofc). Skoro komputer rozumie już asm i FORTRAN'a wszystkie następne programy (zarówno tłumacze(kompilatory) jak i resztę softu) można spokojnie pisać w jednym z tych dwóch języków. Nawet IDE do FORTRAN'a można było napisać w FORTRAN'ie (no bo, przecież komputer już go zrozumie).

3

Kompilator dowolnego języka można napisać w dowolnym innym języku (kompletnym w sensie Turinga), ale cały myk w tym jak do tego podejść algorytmicznie. Poza tym pytanie było o to w jakim języku powstają języki (czyli chodzi o jakiś meta-język), a nie o to w jakim języku powstają kompilatory.

Typowo kompilator składa się z leksera ( http://pl.wikipedia.org/wiki/Lekser ) i parsera ( http://pl.wikipedia.org/wiki/Parser ) oraz szeregu algorytmów optymalizujących oraz tłumaczących kod z jednej postaci na inną. Języki często opisuje się gramatykami formalnymi ( http://pl.wikipedia.org/wiki/Gramatyka_formalna ) a konkretnie ich wersjami dla konkretnego leksera/ parsera. Dla przykładu gramatyka Javy dla ANTLR: https://github.com/antlr/grammars-v4/blob/master/java/Java.g4

Tu jest kurs kompilatorów na Ważniaku: http://wazniak.mimuw.edu.pl/index.php?title=Podstawy_kompilator%C3%B3w Opiera się na dość starych programach, bo Lex i YACC, no ale to i tak dobre wprowadzenie.

1

W różnych.
Kompilator Visual C++ powstał w Visual C++.
Kompilator C# powstał również w Visual C++.
Kompilator GCC (C/C++) napisany jest w C (kompilowany GCC)
Kompilator Clang (C/C++) napisany jest w C++ (kompilowany GCC lub Clangiem)

Kompilator Free Pascala napisany jest we Free Pascalu.

Większość generalnie pisze się albo w C, albo w C++, albo w tym samym języku co kompilator kompiluje, tak aby kompilator kompilować tym kompilatorem :-)

W skrócie: kompilatory nie są czymś magicznym, i choć są bardzo skomplikowane, to pisane są jak każdy normalny program.

3

Podam też przykład z tym Free Pascalem. Pierwsze wersje pisane były w borlandowskim Turbo Pascalu. Gdy kompilator FPC był już na tyle stabilny i rozbudowany że potrafił skompilować sam siebie, zarzucono TP i od tej pory kompilowano Free Pascala Free Pascalem. Po jakimś czasie kod FPC przestał się nawet kompilować pod TP, ze względu na nowe elementy języka dodawane do FPC i użyte w samym kodzie źródłowym FPC.

Cykl kompilacji nowej wersji wygląda tak, że nowa wersja kompilowana jest poprzednią, następnie jeszcze raz nowa wersja kompilowana exekiem otrzymanym w poprzednim kroku, i tak 3-4 razy, aż exek przestanie się zmieniać. W efekcie otrzymujemy plik wykonywalny który jest skompilowany tymże plikiem wykonywalnym.

0

Ja kiedyś na studiach pisałem kompilator pascala w Javie (używając ANTlr jako leksera i parsera)

0

@Patryk27 może mieć coś do powiedzenia w tym temacie w końcu jest autorem SScript http://4programmers.net/Forum/920775

0

W sumie chyba niewiele zostało do dodania w tym temacie - język programowania to jedynie zbiór pewnych zasad/reguł i nie jest jako-tako tworzony w żadnym innym języku (no, chyba że ktoś ma na myśli polski/angielski lub jakiś język opisu/notację tychże reguł :P).
Natomiast kompilator danego języka może już być napisany w praktycznie każdym języku kompletnym w sensie Turinga (o czym wspomniał @Wibowit), np.w C, C++, Javie, Pascalu itd.
Istnieje nawet kompilator Brainfucka napisany w Brainfucku: https://code.google.com/p/awib/ - czy może znajdować się coś piękniejszego? :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1