Piękny język programowania

Piękny język programowania
MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Warszawa
  • Postów:1454
0

aplenos,nikt poza zatwardziałymi javowcami nie będzie tu twierdził,że java jest (tak generalnie,w każdym przypadku) szybsza od C++.
Ale,nie w tym tkwi jej moc,tylko w pełnej przenośności i niezależności od architektury


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 16 godzin
0

@up:
Stara wersja Javy. Weź pod uwagę to, że gdy pierwsze JVMy powstawały to popularne kompilatory C już były w miarę dojrzałe.

Nowszy benchmark: http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php
Różnica jest generalnie znacznie mniejsza.

Owszem Java wykonuje się średnio kilkadziesiąt procent dłużej, ale czy to takie strasznie ważne? W C/C++ programuje się znacznie wolniej i trudniej, łatwiej też popełnić błędy. A czas programistów jest ograniczony. Być może np mając ten sam czas na napisanie programu, w Javie da się w średnim przypadku napisać program o mniejszej złożoności obliczeniowej. I wtedy ta niewielka różnica w stałej (w złożoności obliczeniowej) nie robi już na nikim wrażenia.

Poza tym weź poprawkę na to, że popularne JVMy kompilują kod w locie (do kodu natywnego) za każdym odpaleniem VMki. Do czasu wykonania musisz w takim razie dorzucić czas kompilacji, aby porównanie było całkowicie fair.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Zobacz pozostałe 7 komentarzy
Spine
Jakby to było moje hobby to pewnie bym przeznaczył i całe życie :P Ale jako, że mam inne hobby to na nie przeznaczam mój czas na tym świecie :P
Wibowit
No widzisz. Dlatego ja omijam Pythona szerokim łukiem, bo nie chcę spędzać 10x więcej czasu na testowaniu własnych programów. Byłby to totalny bezsens.
Spine
Zabawne, bo ja właśnie dzięki Pythonowi tracę mniej czasu na testowanie moich gier :D Zwłaszcza jak szukałem silnika graficznego do pracy inżynierskiej, to wybrałem Pandę3D w Pythonie, zamiast jakichś silników pod C++, bo w nich (Ogre, Irlicht, Lightfeather, CrystalSpace) zawsze trzeba było dość długo czekać na kompilację, zanim zobaczę coś na ekranie. W Pythonie z Pandą 3D natychmiastowo po uruchomieniu skryptu widziałem efekty swojej pracy. Nie ma języka idealnego do wszystkiego, pewnie Twoje hobbystyczne kompresory wymagają dużo więcej obliczeń,...
Spine
...więc używaj sobie wydajniejszych rozwiązań. Przy części produkcji wydajność nie odgrywa kluczowej roli i zamierzony efekt jest taki sam osiągnięty niższym nakładem pracy. Nie każdy pisze kompresory...
Wibowit
Pod OpenGL też pisałem. W Javie. Wydajność na pewno niższa niż w C++, ale nie wydaje mi się, aby była drastycznie niższa jeżeli użyje się buforowania po stronie GPU i shaderów do większości rzeczy. Czas kompilacji do bajtkodu niski, co nie jest żadnym zaskoczeniem. Nota bene: OpenCLowy kod też wywoływałem z kodu Javowego.
0

@alpenos23

Benchamrk:
http://shootout.alioth.debian.org/u64/performance.php?test=chameneosredux

Total execution time for C++: 6.57 seconds

Total execution time for Java Server VM: 3.28 seconds

02
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 8 lat
  • Postów:1176
0

Mały przykład jak wygląda development w C++. Kolega miał do rozwiązania problem, który nie da się rozwiązać standardowymi metodami. Tak więc wymyślił, że zrobi to sobie algorytmem genetycznym. Zaklepał to w tydzień oczywiście w C++ bo to jest C++ hardcore. Algorytm jest dosyć skomplikowany i działa w chu* wolno (jeden dzień obliczeń) pomimo tego że go zoptymalizował i zrównoleglił.
Ja rozwiązywałem ten sam problem w tym samym czasie. Przetestowałem w tydzień kilka algorytmów w Matlabie, wybrałem najlepszy. Algorytm daje lepsze wyniki i w wykonuje się w 20 minut (w Matlabie) na znacznie większych danych. Teraz to mogę sobie spokojnie zaklepać w C++, żeby był jeszcze szybszy (i przynajmniej będę wiedział czy to dobrze zrobiłem bo mam do porównania wersję w Matlabie). Pisząc od początku w C++ w życiu bym tego nie osiągnął. Po prostu C++ przerzuca uwagę programisty na niskopoziomowe optymalizacje (bo to w C++ łatwo zrobić), a nie na problem który faktycznie rozwiązujesz.
A i programista o którym wspomniałem bynajmniej nie jest słabym programistą - w zasadzie uważam go za lepszego od siebie.

edytowany 1x, ostatnio: 0x200x20
hauleth
Bo to prawda. Ja też testuję algorytmy w innych językach i dopiero przerzucam je na C++. Testuję w językach, które są prostsze, ale nie koniecznie szybsze, jednak jeśli algo jest dobre to język schodzi na dalszy plan. Ogólnie do testowania używam Ruby, Octave, R, etc. Tego co akurat pod ręką i najbardziej nadaje się do rozwiązania danego problemu (jak będzie trzeba to użyję i funkcyjnych (Haskell czy OCaml), ale to raczej rzadko jest potrzebne).
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)