(..) i dlaczego Python?
Jaki jest [naj] wszechstronniejszy jezyk programowania i dlaczego?
Wątek przeniesiony 2022-04-27 21:00 z Off-Topic przez somekind.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8536
C++, bo w tym wszystko można pisać...
...na szczęście nie trzeba XD
dlaczego Python?
Python ma swoje zastosowania, ale JavaScript jest bardziej wszechstronny, bo można robić stronki internetowe w nim.
- Rejestracja: dni
- Ostatnio: dni
assembler oczywiscie
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Silesia/Marki
- Postów: 5674
LukeJL napisał(a):
C++, bo w tym wszystko można pisać...
Chyba Rust :P
...na szczęście nie trzeba XD
Bo często lepiej w Waskellu niż w Ruscie :D
stivens napisał(a):
assembler oczywiscie
Chyba WebAssembly :P
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1134
C, Rust i JS. C, bo wspiera egzotyczne platformy nie wspierane przez inne języki. Rust bo można w tym pisać absolutnie wszystko na większość platform. JS bo jest bardzo popularny + ma ogromny monopol w najpopularniejszej platformie, czyli webie.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 152
stivens napisał(a):
assembler oczywiscie
Popieram wniosek.
Chyba, że chcemy zejść jeszcze niżej, to do pisania mikrokodu CPU mamy mikroasembler.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10307
Wszystko się sprowadza do tematu jak rozumiesz "najwszechstronniejszy"?
- Najbardziej popularny? Czyli ile osób w nim pisze?
- Najbardziej popularny? Czyli ile osób go zna pośród innych?
- Mający rozwiązania dla największej ilości dziedzin?
- Mający najwięcej rozwiązań w danej dziedzinie?
- Wspierający najwięcej platform?
- Mający najwięcej runnerów/compilatorów/środowisk uruchomieniowych?
- Najniżej poziomowy?
- Mający najwięcej gotowych rozwiązań?
- Wspierający najwięcej architektur?
- Mający najwięcej wsparcia w swoim ekosystemie?
- Wspierający najwięcej paradygmatów?
Bez doprecyzowania pytania odpowiedź nie ma sensu.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2964
C++ i Rust.
W obu możesz zejść ekstremalnie nisko, pisać oprogramowanie działające na bare-metal, bez runtime'u, bez OSa.
W obu też można wejść na bardzo wysoki poziom abstrakcji, pisać kod tak zwięzły jak w Pythonie albo bardziej.
Oba pozwalają napisać każdy typ aplikacji: webowe, mobilne, w przeglądarce, cli, okienkowe, wbudowane itp.
Oba kompilują się na praktycznie wszystkie możliwe architektury (C++ na razie na wiecej, ale Rust jest już bardzo bardzo blisko, frontend do GCC jest prawie gotowy).
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: U krasnoludów - pod górą
- Postów: 4730
Odniosę się do
W JS chyba nie napiszesz systemu operacyjnego ani innych rzeczy, które muszą być pisane niskopoziomowo?
Otóż mało kto wie, ale jednym z języków, w których na pewno nie da się napisać systemu operacyjnego jest C. ( ͡° ͜ʖ ͡°)
Zaskakujące, ale tylko na pozór.
Poszukajcie w standardzie C ( np C99) rzeczy niezbędnych przy pisaniu systemu operacyjnego takich jak:
- przejście w tryb nadzorcy (czy tam jakikolwiek ring),
- zarządzanie pamięcią wirtualną,
- podpinanie się pod przerwania - wysyłanie danych na porty IO itp.,
- napisanie kodu
rozruchowego(dawniej mbr)
Z tego co kojarze, to nawet tak oczywista sprawa jak calling convention jest zupełnie poza standardem C. (Jest "standaryzowana" dla konkretnych architektur)
Jak to się dzieje, że jednak jakies tam "niszowe" systemy w C napisano?
Po prostu: część kompilatorów/linkerów ma odpowiednie narzędzie pozwalające na to: #pragma, wstawki asm, binarne itd.
Dlatego, mimo, że w C systemu operacyjnego napisać się nie da to da się w konkretnych kompilatorach (np. w gcc ), z wykorzystaniem dodatkowych narzędzi.
Tak jak poprzez dodanie odpowiednich rozszerzeń i narzędzi możemy umożliwić napisanie systemu w C tak można to zrobić do prawie każdego innego języka.
W niektórych (większości) będzie to po prostu niezła akrobacja i prawie zawsze totalnie niepraktyczna i nieekonomiczna. Ale nie ma, że się nie da.
(Ktoś kiedyś zrobił nawet Real time java :-) )
- Rejestracja: dni
- Ostatnio: dni
- Postów: 152
jarekr000000 napisał(a):
Otóż mało kto wie, ale jednym z języków, w których na pewno nie da się napisać systemu operacyjnego jest
C. ( ͡° ͜ʖ ͡°)
Da się. Sprawdzone w praktyce :-)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 152
Pochwal się swoim dokonaniem zatem! — somekind 33 minuty temu
Można przenieść fragmenty ściśle powiązane ze sprzętem do HALa/BIOSu/firmware i zadeklarować, że HAL/BIOS/firmware nie jest częścią systemu operacyjnego lecz platformy, na której uruchamiamy system :-D
Stworzyłem kiedyś taki port mojego systemu Vanadium OS (https://github.com/p-durlej/newsys).
Po prostu zdefiniowałem API HALa w języku C.
HAL zajmował się obsługą sprzętu na niskim poziomie, ładował i uruchamiał kernel, przekazując kernelowi odpowiednią strukturę (w sensie C), gdzie były różne pola z informacjami o sprzęcie i między innymi wskaźniki na callbacki HALa, które były wołane przez kernel.
System działał w ten sposób na procesorach i386 i arm. Efektem była możliwość uruchomienia Vanadium OS pod kontrolą innego systemu operacyjnego - system działał jako proces użytkownika w systemie Linux oraz jako aplikacja na PalmOS - procesem Linuksowym był HAL, aplikacją PalmOS był inny HAL.
Był też np. HAL pozwalający systemowi teoretycznie działać na ARM Integrator CP - ale nigdy nie przetestowałem go na rzeczywistym sprzęcie, bo nie miałem - tylko wewnątrz QEMU.
Samym kodem niestety w tej chwili się nie pochwalę. Na GitHubie tej wersji nie ma, backupy się zachowały, ale są zaszyfrowane, a ja kompletnie nie pamiętam hasła xD