Java vs C++

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:10 minut
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/


"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.
edytowany 3x, ostatnio: Wibowit
vpiotr
Akurat lambdy i domknięcia są w C++: https://www.cprogramming.com/c++11/c++11-lambda-closures.html ale może czegoś nie rozumiem.
Wibowit
No są. Ale to jeszcze nie robi z C++ języka funkcyjnego.
lion137
Tak to jest, drugim takim przykładem (obok javascriptu) jest Python, który ma wszystkie narzędzia do programownia funkcyjnego (First Class Functions, HOF, Lambdy), ale struktury danych sa paskudnie mutowalne, co uniemożliwia programowanie funkcyjne.
heillos
  • Rejestracja:około 13 lat
  • Ostatnio:3 miesiące
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”

0

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

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:10 minut
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'


"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.
edytowany 1x, ostatnio: Wibowit
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:ponad 21 lat
  • Ostatnio:3 minuty
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++.

edytowany 1x, ostatnio: Azarien
Burdzi0
W sumie to coś tam o C2 już krąży - nie jestem na bieżąco, ale jakieś usprawnienia mają wprowadzić
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:10 minut
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).


"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.
edytowany 1x, ostatnio: Wibowit
FE
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 3 lata
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.


0

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

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:10 minut
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.


"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.

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.