logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak stworzyć własny język programowania i system operacyjny od podstaw?

jarr25 21 Cze 2014 22:47 3237 14
REKLAMA
  • #1 13728911
    jarr25
    Poziom 12  
    Posty: 114
    Ocena: 5
    Witajcie,
    Proszę osoby które mają wiedzę na temat programowania i inżynierii informatycznej na odpowiedzenie na te pytania:

    1. Jaki jest na dzień dzisiejszy najbardziej zaawansowany język programowania? Czy dalej jest to C++? Jeśli tak to jaki system programowania jest lub będzie tworzony który będzie najbardziej zaawansowanym który można wykorzystać?
    2. Chcę mieć język programowania w którym sam będę mógł tworzyć komendy takie jak mi się podoba bez nauki pierdyliarda innych języków - po prostu chcę stworzyć od zera to jak ma działać taki język programowania a w konsekwencji postawiony na nim system operacyjny.
    Weźmy na tapetę Windows - bebechy tego systemu są w czymś zapewne napisane, co to za język? Idąc dalej, załóżmy że to C++ - z czego się składa?, idąc dalej jak taki język został stworzony?

    Porównując moje pytanie do budowy samochodu - Gotowe języki programowania to tak jakbym kupił lotus superseven albo inną replikę do składania w której mam gotowe elementy. Ja chcę takie elementy sam zaprojektować (kształt ramy, osie itp.) i chcę to wyprodukować. Mówię tu nawet o poziomie szczepów metalu, rozebrania czynników pierwszych części składowych samochodu i sprawdzenie czy są zrobione z jak najlepszych materiałów. Odniesienie do programowania byłoby takie że chcę mieć najlepsze możliwości by stworzyć taki kod programowania żeby system na nim postawiony mi odpowiadał.

    3.Słyszałem o różnych terminach assambler, kompilator itp. Poproszę o przedstawienie co się dzieje od momentu dotarcia prądu do komputera do tego że startuje na nim windows. Chodzi mi m.in. o jednostki bitowe składające się z 0 i 1 - skąd się biorą (oczywiście wiem skąd się biorą - chodzi mi raczej o to jak się je tworzy, tzn. jak to się dzieje że piszę w jakimś języku programowania polecenie, potem jakoś magicznie jest ono wykonywane, i jak ten skrypt na poziomie binarnym jest zmieniany w wł/wył prądu?)

    4. To co powstrzymuje mnie przed wykorzystaniem gotowego języka to to że muszę się poruszać wg. określonego przez kogoś ram. Ja chcę swoje zasady stworzyć samodzielnie. Rozumiem jednak że na początek powinienem stworzyć model w mikroskali, a więc jeszcze nie tak zaawansowany jak zamierzam. Nie interesują mnie żadne dzisiejsze języki programowania, natomiast rozumiem że mam wiedzieć jak w regule działają. Najprościej umiem to wytłumaczyć tak, że jeśli chcesz zbudować samochód i chcesz zaprojektować dla niego silnik elektryczny, nie będziesz zainteresowany budową silnika mechanicznego aż w takim stopniu jak wtedy gdy budowałbyś samochód spalinowy. Tak przynajmniej wydaje mi się z tą wiedzą którą mam teraz. W moim odczuciu wszystko co bazuje na tekście jako programowaniu jest właśnie takim silnikiem spalinowym od którego przydało by się odejść. Każdy program który istnieje ma pod spodem miliony linijek kodu. Chodzi mi o coś takiego na tym przykładzie - jeżeli jest osoba chcąca zbudować silnik spalinowy a druga elektryczny, w pewnym momencie prac i rozwoju tych projektów te drogi się rozchodzą i chodzi mi dokładnie o to który to jest moment i gdzie występuje? Które elementy są wspólne i do którego momentu (prąd idzie do komputera, co dalej, co dalej) a od którego momentu zaczyna się tekst który jest wpisywany w komputerze.

    Jeżeli doczytałeś to tego miejsca - Dziękuję. Jestem świadomy że to zawiłe, starałem się to wyjaśnić najlepiej jak umiałem i z góry dziękuje za Twoją odpowiedź ;)

    edit: już nie będę zmieniał ale tak: może źle się wyraziłem na temat tekstu. To jest odnosząc się do silnika bardziej forma w jakiej przekazywane jest paliwo czyli prąd -przekładnie, dźwignie itp, itd. bardziej chodzi mi o to że tą energię trzeba przekazać - tzn. jakoś muszą być polecenia wydawane odpowiednim tekstem żeby coś się działo w efekcie czego leci paliwo. (coś musi zasilać silnik) - to o co mi chodzi w tym punkcie to to że ja chcę poznać różnicę pomiędzy tym obrazowym wykorzystaniem benzyny w silniku spalinowym a wykorzystaniem prądu w silniku elektrycznym, a przenosząc to na grunt programowania - żeby się dowiedzieć co jest częścią wspólną tego że energia(jakiegoś rodzaju paliwo) leci w tym i tym typie silnika i od którego momentu zacząć programować mój własny.

    "Żeby język giętki powiedział to co pomyśli głowa"
    Ano właśnie, może rano : )
  • REKLAMA
  • #2 13728994
    QuantumXXX
    Poziom 19  
    Posty: 301
    Pomógł: 18
    Ocena: 50
    jarr25 napisał:


    3.Słyszałem o różnych terminach assambler, kompilator itp. Poproszę o przedstawienie co się dzieje od momentu dotarcia prądu do komputera do tego że startuje na nim windows.


    Śmiały plany, zero wiedzy. Przy obecnej wiedzy przeceniasz swoje możliwości, poczytaj, postudiuj. Myślę, że nikomu nie będzie się chciało streszczać Ci kilkudziesięciu książek o programowaniu i systemach operacyjnych.
  • Pomocny post
    #3 13729121
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38690
    Pomógł: 3162
    Ocena: 6461
    Języków programowania jest cała masa i mają różne przeznaczenie. Najbardziej podstawowym jest język maszynowy, czyli język konkretnego procesora, przystępną dla człowieka formą reprezentacji tego języka jest assembler, dalej operuje się bezpośrednio na rozkazach procesora ale zamiast ich kodów binarnych można się posługiwać wygodniejszymi mnemonikami, są też inne ułatwienia. Dalej są języki kompilowane, czyli w których program jest przekształcany do postaci kodu maszynowego, do tych języków zalicza się C czy C++. Jeszcze wyżej w hierarchii abstrakcji są języki interpretowane - one wykonują się na innym programie, tzw. maszynie wirtualnej, co uniezależnia je od sprzętu (o ile na dany sprzęt istnieje maszyna wirtualna dla tego języka), takim językiem jest np. Java. Im język jest wyższego poziomu, tym łatwiej w nim robić typowe rzeczy ale bardziej ogranicza programistę i wprowadza większy narzut. Do tego dochodzi też to na czym ma działać program - czy działa samodzielnie na procesorze, czy podlega systemowi operacyjnemu. Języki programowania (a właściwie programy) mogą być imperatywne, proceduralne lub obiektowe (oraz funkcyjne, logiczne, deklaratywne i jeszcze kilka innych paradygmatów).
    Większość języków programowania jest językami tzw. kompletnym obliczeniowo (lub językiem zupełnym). W skrócie oznacza to, że można w nich zaimplementować dowolny algorytm.
    Języki takie jak ANSI-C czy C++ praktycznie nie ograniczają programisty, dają mu pełny dostęp do sprzętu na jakim programy będą uruchamiane, oczywiście językiem który daje programiście 100% kontrolę jest assembler. Czymś pośrednim pomiędzy językami kompilowanymi a assemblerami są makro assemblery, dające namiastkę mechanizmu proceduralności (można tworzyć własne polecenia z sekwencji instrukcji procesora). Języki kompilowane też często powalają na stosowanie wstawek assemblerowych.

    Systemy operacyjne zazwyczaj są pisane w C. Języki C-pochodne nie mają zbyt wielu instrukcji ale pisząc programy działające pod systemem operacyjnym trzeba korzystać z API lub bibliotek pośredniczących.

    Nie da się odpowiedzieć jaki jest najbardziej zaawansowany język, zależy jak określać poziom jego zaawansowania. Ciekawym językiem wysokiego poziomu, zdobywającym ostatnio popularność jest np. język Go. Są też inne bardzo zaawansowane (ale i dość specjalizowane) języki jak np. Wolfram. Wreszcie są zupełnie bezsensowne, jednak kompletne obliczeniowo języki programowania jak np. Brainfuck czy BeFunge.

    Odnośnie punktu 4 - ani assembler ani C czy nawet C++ nie narzucają Ci żadnych ram, jedyne co Cię ogranicza to sprzęt. W tych językach (formalnie assembler nie jest językiem) możesz robić co chcesz i jak chcesz.
  • REKLAMA
  • #4 13729140
    jarr25
    Poziom 12  
    Posty: 114
    Ocena: 5
    Cytat:
    Śmiały plany, zero wiedzy. Przy obecnej wiedzy przeceniasz swoje możliwości, poczytaj, postudiuj. Myślę, że nikomu nie będzie się chciało streszczać Ci kilkudziesięciu książek o programowaniu i systemach operacyjnych.

    heh, bardziej liczyłem na "jeżeli ktoś coś umie to potrafi to łatwo wyjaśnić". ;)
    Co do czytania i studiowania - bardzo chętnie, ale muszę wiedzieć w jakim kierunku z tym podążać, a jak mi się wydaje sam go sobie wyznaczę od momentu - który właśnie musze znaleźć :)

    tzok dziękuję! ;) , można wziąć u ciebie korki? :P
  • #5 13729169
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38690
    Pomógł: 3162
    Ocena: 6461
    jarr25 napisał:
    heh, bardziej liczyłem na "jeżeli ktoś coś umie to potrafi to łatwo wyjaśnić".
    Nie licz na to, odpowiedź pytanie obejmuje pokaźny dział informatyki, który do opanowania wymaga dobrych podstaw teoretycznych i kilku lat studiów na dobrej uczelni. Można potrafić programować nie znając odpowiedzi na zadane pytania. Ale sądząc po sposobie zadania pytania widzę, że nie zdaje sobie sprawy co to jest programowanie. Program to nie to co widać, to tylko interfejs użytkownika (warstwa prezentacji), który w systemach graficznych jest (a przynajmniej powinien być) oderwany od warstwy algorytmicznej programu.
  • REKLAMA
  • #6 13729181
    jarr25
    Poziom 12  
    Posty: 114
    Ocena: 5
    Z innej beczki. Załóżmy że jeśli sam nie umiem jeszcze dzisiaj tego zaprogramować co chce ale się ucze z dnia na dzień wiem więcej, i zlecam to co chce zrobić programiście - jak zrobić taki plan, architekturę, obraz tego chcę zrobić w profesjonalny sposób tak jak to programiści między sobą przedstawiają - no nie wiem jak to wyjaśnić :P Tak jak architekt/inżynier robi rysunek techniczny by przedstawić swoją wizję by inni go zrozumieli - jak zrobić architekturę takie systemu który jest w mojej głowy w ten "profesjonalny" sposób by używać tego wzorca gdy chcę pokazać o czym myślę?
  • #7 13729196
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38690
    Pomógł: 3162
    Ocena: 6461
    Są różne metody opisu algorytmów, chyba najpopularniejsze to schematy blokowe, "język" UML albo pseudo-kod. Problem w tym, że wszystko co chcesz zrobić jest już zrobione. Możesz sobie tworzyć własne typy danych, własne klasy i własne metody i operatory na nich działające. Często do dyspozycji jest taka masa mechanizmów, że nawet programując w jakimś języku który je posiada nigdy ich nie wykorzystasz (weźmy pierwszy z brzegu - mechanizm refleksji w C#).
  • #8 13729214
    QuantumXXX
    Poziom 19  
    Posty: 301
    Pomógł: 18
    Ocena: 50
    jarr25 napisał:
    Tak jak architekt/inżynier robi rysunek techniczny by przedstawić swoją wizję by inni go zrozumieli - jak zrobić architekturę takie systemu który jest w mojej głowy w ten "profesjonalny" sposób by używać tego wzorca gdy chcę pokazać o czym myślę?


    A czym się różni Twój system operacyjny i język programowania od tych istniejących, i co jest w nim lepszego?
  • #9 13729432
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Jestem jak najbardziej za!
    Jeżeli masz pomysł realizuj go.
    Ja od siebie życzę:
    1. Determinacji
    2. Odporności na krytykę
    3. Odporności na wąskie umysły i ich drwiny (czyli typu: o Jobs się znalazł, po co to skoro bez tego i tak życię się toczy itd., wymyślono juz wszystko)

    W tym miejscu szacunek dla kolegi tzok, który napisał
    Cytat:
    Problem w tym, że wszystko co chcesz zrobić jest już zrobione

    A to jest duza różnica między "wszystko jest już zrobione" a "wszystko jest już wymyślone".
    Dlatego życzę dalej:
    4. umiejętności wykorzystywania wszystkiego co jest już zrobione żeby wymyślić i zrobić coś nowego.

    Pójdę o krok dalej!
    Może lepiej nie ucz się programowania jak chcesz stworzyć nowy język programowania i OS
    Dlatego że:
    - stwierdzisz ze wszystko juz wymyślono
    - stwierdzisz ze "nie da się zrobić"
    - będziesz świadomy ogromu pracy
    - będziesz już stary i nie bedzie ci sie chciało :)

    Poszukuje sie jezyka nowej generacji.
    Nawet twierdzi sie że jezeli powstanie nowy jezyk programowania to programiści przestana być potrzebni.

    pozdr.
  • REKLAMA
  • #10 13729502
    jarr25
    Poziom 12  
    Posty: 114
    Ocena: 5
    Tzn. ja sobie zaprojektowałem ekrany wyświetlające obraz w okularach, to jest moja czysta ciekawość i tymczasowe rozwiązanie, taki 1 poziom tego co chce zrobić, natomiast potrzebne mi jest zarządzanie systemem sekwencji ruchów gałek ocznych by taki system operacyjny obsługiwać. W wyniku tego cały system musi być zaprojektowany pod wzrok i zrobiony od zera, pewnie też i język programowania, dlatego że będzie mi on pewnie potrzebny dalej i dlatego się właśnie staram wybadać w jakie rejony mam się w tym celu kierować. żaden z obecnych systemów się w tej roli nie sprawdza, jaki ja chce mieć efekt, to mi żaden go nie daje.

    To jest mniej więcej tak że mam normalną oponę opartą o powietrze i gumę i widzę jej wady w pewnych sytuacjach i wymyśliłem sobie że , o, zrobię to co jest używana w wojsku opartą o siatkę ścianek która się nei przebije itp.itd, i cały problem polega na tym, że ja sobie wymyśliłem rozwiązanie, tylko że moja wiedza techniczna jest w tym momencie mojego życia jeszcze za niska żeby biorąc z tego przykładu taką oponę w realu stworzyć. Natomiast jak sam widzisz abstrakcyjnie myśląc jesteś w stanie wyciągnąć punkty wspólne obu tych typów opon, mimo że są całkowicie różne i inaczej działają. I to co ja potrzebuję to właśnie takie abstrakcyjne myślenie na temat języków programowania i systemów operacyjnych, znalezienie początkowych punktów wspólnych - a obrazowo przy tych przykładowych oponach byłoby to m.in. to że muszą wchodzić na osie, muszą się kręcić, być okrągłę itp. natomiast sama budowa i właściwości fizyczne są totalnie inne. Mój problem polega na tym że jeżeli jestem w stanie określić przy normalnej oponie te 3 rzeczy: powiedzmy że to 1)zaplanowane wykorzystanie, 2)techniczna budowa, 3)efekt i u mnie jest dziura w głowie na poziomie 2. Jak pewnie da się odczytać nie jestem 30-latkiem z doświadczeniem i kilkoma latami studiów w tym kierunku, ja wiem że się tego muszę nauczyć, natomiast potrzebne mi jest wyznaczenie miejsca od jakiego miałbym w ogóle zacząć ewent. naukę i tworzenie tego co chcę zrobić.
  • #11 13729552
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Cytat:
    żaden z obecnych systemów się w tej roli nie sprawdza, jaki ja chce mieć efekt, to mi żaden go nie daje


    A jesteś tego pewien?

    pozdr.
  • #12 13729553
    yogi009
    Poziom 43  
    Posty: 14693
    Pomógł: 848
    Ocena: 2650
    Myślę, że optymalizując ścieżkę Twoich poszukiwań rozwiązania problemu, najpierw skupiłbym się na wyborze właściwego, już istniejącego języka programowania (języki, biblioteki). Tego rodzaju problematyka jest już rozwiązywana na świecie, sądzę że tworząc od podstaw nowy język (środowisko) programistyczne stracisz kilka lat pracy bez gwarancji sukcesu. Sądzę, że to może być temat nieco podobny metodycznie do pisania gier komputerowych, ich też raczej nie piszą w C.
  • #13 13729573
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Może warto by było najpierw sprawdzić czy to co wymyśliłeś nie jest już wymyślone
    (do tego nie potrzeba jest wiedza techniczna).
    Nie szukaj tylko w gotowych produktach ale też w patentach i w zgłoszeniach patentowych.
    Dalej jestem za wynalazczością ale gorzej jak popracujesz parę lat nad czymś co już jest wymyślone.
    pozdr.

    P.S. uprzedziłeś tego posta :)
  • #14 13729827
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38690
    Pomógł: 3162
    Ocena: 6461
    jarr25 napisał:
    Jak pewnie da się odczytać nie jestem 30-latkiem z doświadczeniem i kilkoma latami studiów w tym kierunku, ja wiem że się tego muszę nauczyć, natomiast potrzebne mi jest wyznaczenie miejsca od jakiego miałbym w ogóle zacząć ewent.
    Najlepszym miejscem do zaczynania nauki są podstawy teoretyczne, bez nich niczego nie da się stworzyć, bo one definiują realia i teoretyczne możliwości w jakich można się poruszać. Nie da się zacząć nauki fizyki od teorii kwantowej bez znajomości podstaw - przede wszystkim dlatego,że bez tych podstaw teoria ta będzie niezrozumiała.

    jarr25 napisał:
    Tzn. ja sobie zaprojektowałem ekrany wyświetlające obraz w okularach, to jest moja czysta ciekawość i tymczasowe rozwiązanie, taki 1 poziom tego co chce zrobić
    To tylko warstwa prezentacji i interakcji, praktycznie niezależna od architektury systemu czy języka programowania. Interfejs użytkownika nie jest najważniejszą ani nawet integralną częścią systemu (zazwyczaj można go zmienić).
  • #15 13731341
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    tzok autor usunął post, w którym napisał, że już znalazł gotowy produkt odpowiadający jego pomysłowi, trochę się zdenerwował (pare niecenzuralnych słów) że juz wymyślone ale tak jak powiedziałem post został skasowany.

Podsumowanie tematu

✨ W dyskusji poruszono temat tworzenia własnego języka programowania i systemu operacyjnego od podstaw. Użytkownik zadał pytania dotyczące najbardziej zaawansowanych języków programowania, wskazując na C++ oraz potrzebę stworzenia języka, który umożliwiłby mu samodzielne definiowanie komend. Odpowiedzi wskazują na konieczność posiadania solidnych podstaw teoretycznych w programowaniu oraz inżynierii informatycznej, a także na to, że wiele rozwiązań już istnieje. Uczestnicy podkreślają, że tworzenie nowego języka i systemu operacyjnego to złożony proces, który wymaga lat nauki i doświadczenia. Zasugerowano również, aby najpierw zbadać istniejące rozwiązania i patenty, zanim podejmie się próbę stworzenia czegoś nowego.
Wygenerowane przez model językowy.
REKLAMA