Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

dejot44

Pisanie własnego języka - od czego zacząć?

Rekomendowane odpowiedzi

Witam! Mam 14 lat i wpadłem nie dawno na pomysł, aby napisać własny język programistyczny. Projekt języka(a dokładniej podstaw), mam już opracowany. Chciałbym dodatkowo napisać do tego języka, prosty edytor w Qt(to raczej nie stanowi dużego problemu). Kolejną rzeczą jest fakt, że chciałbym tam dołączyć bibliotekę SFML. Teraz do rzeczy:

-czy dołączenie SFML do własnego kompilatora jako jedna z bibliotek, jest legalne?

-w jakim języku ten kompilator napisać? W javie raczej nie, w pythonie tym bardziej, chyba zostaje tylko C/C++(mówię o językach, która ja w miarę znam, może się okazać, że jakiś inny język będzie do tego lepszy).

-jak pisałem mam 14 lat. Czy napisanie takiego języka, to będzie coś, co będę mógł w przyszłości dopisać do cv? Chcę zostać w przyszłości programistą(najlepiej C++ i aplikacje komputerowe; aplikacje mobilne, nie przypadły mi zbytnio do gustu(głównie przez ro specyficzne pisanie na androida))

-Język, jak i kompilator, chciałbym cały czas rozwijać, więc przydałby się język pozwalający na pisanie obiektowe i dziedziczenie.

To na razie tyle ;)

Z góry dziękuję za pomoc :)

PS: Nie wiem, czy odpowiedni dział. W razie czego proszę o przeniesienie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Od przemyślenia na jaką platformę chcesz kompilator napisać. Zarówno systemową jak i sprzętową.

Jeżeli zdecydujesz się już na jakiś system, to musisz go całkiem nieźle poznać, jak obsługuje pamięć, procesy, jaka musi być struktura pliku wykonywalnego, dostęp do api systemu, bibliotek.

Sprzęt, to znajomość instrukcji procesora i jego działania, więc pewnie nauka assemblera będzie konieczna, żeby zrozumieć działanie.

 

Język do napisania kompilatora IMO dowolny, bo to w zasadzie tłumaczenie kodu źródłowego na kod maszynowy. Można go napisać od asemblera, przez basica, języki proceduralne, obiektowe, skrypty. Nie mam w tym doświadczenia, ale nie wiem czy na początek nie byłoby łatwiej pisać w językach skryptowych, bo mają rozbudowane funkcje operowania na tekście (np. wyrażenia regularne).

 

W CV można wpisać wszystko, pytanie czy ktokolwiek będzie zainteresowany informacją o stworzonym języku. Dużo zależy gdzie będziesz aplikował o pracę, czy bardziej się liczy wiedza i umiejętności, czy kreatywność. Jak będzie wszystko działało i w miarę z sensem, to zawsze można się pochwalić.

 

 

Nie chciałbym zniechęcać, ale to jest kawał roboty do wykonania. Jako wprawkę czy już pisałeś kalkulator ale bardziej zaawansowany niż pojedyncze działanie?

Wydaje mi się, że interpretacja działania matematycznego jest podobna do interpretacji kodu. Są argumenty, operacje, nawiasy.

 

Być może są jakieś narzędzia ułatwiające, ale to nie moja działka.

 

 

Warianty ciut na łatwiznę.

Można pobawić się w tworzenie maszyny wirtualnej, czyli kompilacja nie idzie w kod maszynowy, a w jakiś język pośredni lub po prostu analiza skryptu na bieżąco. Taki interpreter można spokojnie oprzeć o C/C++, które znasz.

Ewentualnie kompilować w dwóch krokach, najpierw na znany sobie język (np. C/C++), a potem jego kompilatorem do pliku wykonywalnego.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kalkulator już pisałem, jeden na androida, drugi w Qt na linux(bo na nim pracuję). Oba dosyć dopracowane, nie ograniczające się do dzielenia, mnożenia, dodawania i odejmowania.

Wiem, że dużo z tym roboty, spodziewam się tego. Ale jestem w 2 klasie gimnazjum dopiero i podobno mam bardzo dużo wolnego czasu(ok. 6h dziennie(nie licząc snu)) :E

Na początek myślałem właśnie nad tą "maszyną wirtualną", która byłaby napisana w C++ i SFML. Jeśli własny język bardzo mnie zmotywuje, do jego rozwijania i poprawiania w nim błędów, to popracuję nad wersją kompilatora napisaną w kodzie maszynowym. Jednak co z kwestią wydajności? Czy takie coś będzie mogło działać pod odpowiedniej optymalizacji przynajmniej jak java, czy jak python, czy może jeszcze gorzej?

PS: już jeden taki "kompilator" w C zrobiłem. Ale to było do BF, więc chyba się nie liczy :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze jedno pytanie: duża różnica wydajności jest między C, a C++? Bo z tego co wiem, przykładowe strumienie, są dosyć wolne w stosunku do printf() itp. :/

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To jak szybko będzie działała maszyna wirtualna zależy od ciebie, jak dobrze ją zoptymalizujesz. Na początek nie ma co się łudzić, że zbliżysz się do wydajności ( ;) ) javy czy języków skryptowych. Te środowiska powstawały wiele lat i są rozwijane przez spore zespoły.

 

Masz czas i możliwości, czemu sam nie sprawdzisz jak ma się wydajność C do C++?

Obiekty na pewno mają swój narzut, ale dają większą swobodę tworzenia, nowe mechanizmy działania. Coś za coś.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Podejdź do zagadnienia inaczej po co od razu język nie lepiej pisać soft najpierw a później coś poważniejszego.

Ja podszedł bym do tego też inaczej patrz na arduino to tak na prawdę C/C++ gdzie ichniejsze komendy(np. loop) zmieniają się w czyste c++.

Ba framework Qt jak dobrze pamiętam po przepuszczeniu przez MOC zmienia się w czyste c++.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

popracuję nad wersją kompilatora napisaną w kodzie maszynowym

 

NIE NIE NIE - 3x NIE

 

dlaczego?

1. większość ludzi myśli, że są w stanie napisać lepszy kod maszynowy niż ten wygenerowany z kompilatora C/C++ - w 99% nie są (tylko eksperci siedzący w asm od lat i śledzący na bieżąco manuale procesorów w pewnych przypadkach mogą napisać coś lepszego)

2. szukanie błędów w asm to mega ból w d...e

3. przy zmianie procka na inną generacją kod może być wolniejszy/nieoptymalny

 

Jeszcze jedno pytanie: duża różnica wydajności jest między C, a C++? Bo z tego co wiem, przykładowe strumienie, są dosyć wolne w stosunku do printf() itp. :/

 

strumienie nie są wolne - tak twierdzą ci co tak naprawdę nie znają możliwości języka do końca (czyli nie wyłączają synchronizacji strumieni z stdout)

do poczytania:

Mój link 1

Mój link 2

Mój link 3

 

dodatkowo nie musisz korzystać z gcliba - jest wiele bibliotek standardowych (różnych implementacji)

Mój link 4

 

o różnej wydajności

Mój link 5

 

jak myślisz na poważnie o pisaniu kompilatora to obczaj temat

Lex & Yacc

Flex & Bison

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zastanów się też nad napisaniem własnego języka, ale kompilowaniem go na platformę JVM. Dzięki temu będziesz mógł zostawić część zarządzania środowiskiem natywnym, wątkami, IO itp komuś innemu, a jak ci się będzie nudzić w 3 klasie, to przepiszesz i tą część.

 

Tym tropem poszły Scala, JRuby, Groovy, Clojure i parę innych.

Dokumentacja: https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pierwsze pytanie to dlaczego chcesz pisac wlasny jezyk ? Wiadomo ze dla zabawy, ale dokladnie dlaczego wlasny jezyk, zamiast jakies aplikacji internetowej ???

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...