1aam2am1 |
» 2014-08-19 20:18:18 std::map < > tab;
for( auto i = tab.begin(); i != tab.end(); ++i ) { }
|
|
Monika90 |
» 2014-08-19 20:31:16 na przykład można zwrócić lambdę z funkcji. Nie znasz typu lambdy bo ten zna tylko kompilator, wiec jak go zadeklarujesz? Na przykład funkcja która zwraca generator ciągu Fibonacciego auto make_fib( int i0 = 0, int i1 = 1 ) { return[ i0, i1 ]() mutable { auto i = i0; i0 = i1; i1 = i1 + i; return i; }; }
int main() { auto fib1 = make_fib(); for( int i = 0; i < 10; ++i ) cout << fib1() << ' '; cout << endl; auto fib2 = make_fib( 11, 22 ); for( int i = 0; i < 10; ++i ) cout << fib2() << ' '; }
|
|
MrPoxipol |
» 2014-08-19 20:37:00 @1aam2am1 dla typów auto jest już od C++11. |
|
jcoder |
» 2014-11-26 12:16:05 Moim zdaniem to nic nie zmienia, C++ będzie tracić na popularności niezależnie od tego ile mechanizmów (nieudolnie) ściągną z innych języków.
Nadal podstawowe bolączki C++ pozostają nierozwiązane: - brak bezpieczeństwa pamięci, - mutowalne praktycznie wszystkie struktury w bibliotece standardowej, nawet stringi - nie da się pisać inaczej jak imperatywnie, - archaiczny system modularyzacji kodu oparty na nagłówkach, - słaba wydajność kodu OOP (brak dewirtualizacji, inline-caches, itp.); i ogólnie OOP jest brzydkie (dlatego "modern" C++ polega na unikaniu OOP na rzecz jeszcze brzydszych template'ów, ale przynajmniej wydajność lepsza) - brak porządnego wsparcia dla wielowątkowości (coś się ruszyło w C++11, ale nadal nawet do Javy daleko, a co dopiero do nowszych języków) - brak opcjonalnego, wydajnego GC, - ułomne metaprogramowanie oparte na naiwnym podstawianiu symboli (zwane "templates"), zamiast prawdziwego systemu makr - słaby system typów rozumiejący tylko typy konkretne (brak typów generycznych, brak wariancji itp). - poryta składnia - język przez to nie nadaje się jako podstawowy język do nauki programowania np. na uczelni - notoryczna nieortogonalność wszystkiego - np. C++ ma lambdy i rekurencję, ale rekurencyjnej lambdy napisać się nie da; - albo ma szablony metod i metody wirtualne, ale nie da się napisać szablonu metody wirtualnej, - albo język ma wbudowany operator && i możliwość przeciążania operatorów, ale nie da się przeciążyć operatora && tak aby działał identycznie jak wbudowany itp. - masakrycznie powolna kompilacja ....
Jeżeli by nie było konkurencji od innych języków, to C++ miałby się nawet nieźle (i stąd jego złote czasy w połowie lat 90-tych), ale w przypadku jak jest Rust, D, Scala, Java, C# to właściwie C++ staje się coraz mniej i mniej interesujące, a im więcej rzeczy do niego wrzucają, tym bardziej przypomina PHP. |
|
DejaVu |
» 2014-11-26 20:28:01 @jcoder: Sądzę, że jesteś w błędzie. Bolączką C++ jest przede wszystkim brak standardowych bibliotek, a nie jego wydajność czy też inne wady, które wymieniłeś. No ale w sumie ile osób tyle opinii, więc przyjmijmy, że mam odmienny pogląd na temat liczby ściągniętych mechanizmów z innych języków. Podzielam jednak opinię, że C++ będzie tracić na popularności, ale przyczyny doszukiwałbym się w braku standardowych bibliotek, które w mocnym stopniu rzutują na czas wytwarzania aplikacji, kłopoty wybraniem 'właściwej' biblioteki dodatkowej do realizacji konkretnego zadania oraz 'ograniczenia' licencyjne tych owych dodatkowych bibliotek. Sądzę, że gdyby Qt było wydane na licencji ZLIB, a nie LGPL to by C++ miałby szanse być w znacznie lepszej sytuacji (no ale to są tylko moje spekulacje).
Co do wydajności to raczej unikałbym tej 'niebezpiecznej' ścieżki dyskusji, bo jak popatrzysz sobie na SPOJ-a to i tak najszybsze programy są napisane w C i C++, a nie w Javie czy też innym języku programowania. |
|
Parapet Temat założony przez niniejszego użytkownika |
» 2014-11-26 20:41:26 Prawdą jest to że łatwiej zbudować aplikację dla wymagającej komisji (if you know what i mean) w C#, Java czy nawet Pythonie niż w C++. A obecny rynek w większości jest nastawiony na takie aplikacje. |
|
jcoder |
» 2014-11-26 21:27:29 Brak bibliotek jest spowodowany m.in. ułomnością języka i trochę kulturą. Dla Cpp jest bardzo dużo bibliotek, ale są trudne w użyciu i każda używa innego stylu i każda wymyśla koło na nowo. Ot programiści C++ uwielbiają utrudniać sobie życie. Np. wiele z nich definiuje własną klasę do Stringów. Natomiast takie rzeczy jak Hibernate albo Di Framework masowo używane w biznesie są w ogóle niemożliwe do napisania, bo brakuje mechanizmów metaprogramowania jakie ma np. Java lub C#.
Kiedyś wydajność była duża przewagą C i C++, obecnie jednak ta przewaga juz prawie nie istnieje. JVM robi niemal wszystkie optymalizacje jakie robi gcc na poziomie O2 i dokłada trochę własnych, co jest wystarczające dla nawet bardzo wymagających wydajnościowo projektów. Jak Java jeszcze dostanie niebawem value classes to będzie pozamiatane. |
|
DejaVu |
» 2014-11-26 21:50:48 Brak bibliotek jest spowodowany m.in. ułomnością języka i trochę kulturą. Dla Cpp jest bardzo dużo bibliotek, ale są trudne w użyciu i każda używa innego stylu i każda wymyśla koło na nowo.
|
1. Nie sądzę, aby język był ułomny. 2. Liczba bibliotek nie odzwierciedla jakości. 3. Sensowne biblioteki zazwyczaj są obarczone nieprzyjazną licencją. 4. Większość bibliotek jest stworzona dla C, a nie dla C++, stąd ułomność API większości bibliotek, przez co korzystanie z nich wydaje się nieco kulawe (i tak faktycznie jest w większości przypadków). Problemem C++ może być co najwyżej bagaż z C i cały zbiór niestandardowych bibliotek zaprojektowanych w sposób strukturalny na losowej licencji, która zazwyczaj albo gryzie się z obecnie używanymi albo wymaga opłat albo narzuca ograniczenia w postaci linkowania czy innych 'wymagań' jakie należy spełnić, aby formalnie móc korzystać z biblioteki XYZ. |
|
1 « 2 » 3 |