Java vs C++

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
1

No to ja się teraz wtrącę i po raz kolejny powtórzę o co chodzi w programowaniu funkcyjnym :)

Proszę bardzo; nie masz racji. :) A poważnie -- co uznasz za nieraczkujące programowanie funkcyjne?

Programowanie funkcyjne opiera się na niemutowalnych danych. Ale nie takich co rzucają exception przy próbie dodawania elementu, tylko zwracają nową kolekcję. Przykład jest np tutaj (Mapa z vavr.io): http://static.javadoc.io/io.vavr/vavr/0.9.2/io/vavr/collection/Map.html - metody albo zwracają dane z mapy albo zwracają nową mapę.

Funkcje wyższych rzędów i domknięcia są obecne w językach funkcyjnych, ale te funkcjonalności nie są sednem programowania funkcyjnego. Za wikipedią ( https://en.wikipedia.org/wiki/Functional_programming ):

In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions[1] or declarations[2] instead of statements. In functional code, the output value of a function depends only on the arguments that are passed to the function, so calling a function f twice with the same value for an argument x produces the same result f(x) each time; this is in contrast to procedures depending on a local or global state, which may produce different results at different times when called with the same arguments but a different program state. Eliminating side effects, i.e., changes in state that do not depend on the function inputs, can make it much easier to understand and predict the behavior of a program, which is one of the key motivations for the development of functional programming.

Jeżeli macie na myśli tylko funkcje wyższych rzędów albo domknięcia to napiszcie o tym wprost, zamiast wprowadzać własne kulawe definicje programowania funkcyjnego za każdym razem.

Dodam jeszcze, że funkcje wyższych rzędów to można mieć nawet i w C, bo co za problem przyjąć wskaźnik do funkcji i zwrócić wskaźnik do innej? Nie ma problemu. Z drugiej strony nie ma to wielkiego sensu jeśli nie ma domknięć. A w takiej Javie domknięcia istnieją od chyba Javy 1.1, czyli momentu w którym wprowadzono klasy anonimowe. W Javie 8 wprowadzono cukier składniowy dla klas anonimowych implementujących jedną metodę abstrakcyjną (SAM - single abstract method) - nazywa się go lambdami.

JavaScript miał funkcje wyższych rzędów i domknięcia od samego początku, ale jakoś nikt nie podniecał się że jest funkcyjny. Dopiero jak zaczęły wchodzić lambdy do Javy to nagle ludzie dostali owczego pędu, by nazywać przekazywanie funkcji programowaniem funkcyjnym. A JavaScript nadal potrzebuje dodatkowych bibliotek by móc programować funkcyjnie, jak np: https://facebook.github.io/immutable-js/

heillos
  • Rejestracja: dni
  • Ostatnio: dni
1
Wesoły Mleczarz napisał(a):

W Javie nie napiszesz systemu komputerowego, kompilatorów, przeglądarek i sterowników, czy wydajnych gier na PC i Konsole, a w C++ już tak. Jest więcej zastosowań C++.

A najwięcej w asemblerze, bo wszystko sprowadza się do asemblera

Nawet nie ma książki do Javy która nie wymaga znajomości C++.

zjadłeś m. „Nawet nie mam książki”

  • Rejestracja: dni
  • Ostatnio: dni
0

Lepiej porównać Jave do Rust. Niektórzy twierdzą, że Rust to następca C++.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Nawet jeśli Rust faktycznie zastąpi C++, to przecież już dziś C++ i Javę używa się w różnych zastosowaniach. Wątpię by Rust zawojował rynek wielkich biznesowych projektów. Na stronie rust-lang.org jest taki opis:

Rust is a systems programming language

'systems programming' brzmi zdecydowanie inaczej niż 'business web applications'

  • Rejestracja: dni
  • Ostatnio: dni
0

A C++ jest teraz w projektach biznesowych, skoro dominuje JVM? W C++ napisany jest w całości system HaikuOS, czy nawet Linux mógł być napisany w C++ gdyby Linus tak postanowił.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Wesoły Maciek napisał(a):

A czy te wersje C89, C99, C11 są kompatybilne wstecz?

Prawie są.

Czy twórcy C już ustalili z góry, że C nigdy nie doda programowania obiektowego jak C++ i Objective-C w przyszłych nowych standardach?

Raczej tak.

można by było trochę ulepszyć ten język kopiując do niego bardziej nowoczesne rozwiązania, to czemu nie.

Nie jest ambicją C zostanie drugim C++em.

nawet Linux mógł być napisany w C++ gdyby Linus tak postanowił.

Pewnie że mógłby, ale nie jest. Z tego co czytałem, Linus nie lubi C++.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
1
Chory Kot napisał(a):

A C++ jest teraz w projektach biznesowych, skoro dominuje JVM? W C++ napisany jest w całości system HaikuOS, czy nawet Linux mógł być napisany w C++ gdyby Linus tak postanowił.

Nie słyszałem o biznesowych aplikacjach webowych pisanych w C++. A tego typu aplikacje to 90%+ roboty w Javie (chociaż może i mniej, bo przecież Android to spora część rynku Javowego).

FE
  • Rejestracja: dni
  • Ostatnio: dni
0
Chory Kot napisał(a):

Lepiej porównać Jave do Rust. Niektórzy twierdzą, że Rust to następca C++.

Ta wypowiedź nie ma sensu. Skoro Rust ma zastąpić C++ to raczej nie ma po co go porównywać z Javą bo ich główne zastosowania to generalnie zupełnie różne domeny.

  • Rejestracja: dni
  • Ostatnio: dni
0

Ponieważ Rust ma więcej ułatwień jak Java.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Na razie nie ma nawet co porównywać. Rust w dużych aplikacjach biznesowych jest nieobecny. Można więc co najwyżej teoretyzować. A w teorii to wiele rzeczy jest wspaniałych.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.