Skrivet av tufflax:
C++ kommer fortfarande vara extremt komplicerat, usch. Och dessutom finns det bättre språk än Python; Clojure t.ex.
Absolut största problemet med C++ är att det finns alldeles för många som är "expert" på C++. C++ är ett relativt stort och komplicerat språk, men standardbiblioteket är väldigt bra och något de flesta C++ "experter" inte alls begripit sig på.
Som du ser på min avatar så gillar även jag Clojure, men prestandamässigt så är tyvärr inte Clojure i närheten av C++. Och så komplicerat behöver inte C++ vara. Hur mycket enklare kan du implementera t.ex en icke-förstörande insert-sort för godtycklig typ och container? I C++11 där jag endast använder delar av standardbiblioteket som funnits de senaste 15 åren
template<typename C>
C insert_sort(const C& src)
{
C res;
for (auto &e: src)
res.insert(lower_bound(begin(res), end(res), e), e);
return res;
}
inte så komplicerat va? Men de flesta känner inte till vare sig "lower_bound" och ofta inte ens "insert". En mer "normal" C++ variant (i.e. mer STL-lik) av en annan simpel (och inte så effektiv) sorteringsalgoritm där man använder standardbiblioteket och "gamla" C++ är denna select sort
template<typename FwdIterator>
void select_sort(FwdIterator first, FwdIterator last)
{
if (first != last) {
iter_swap(first, min_element(first, last));
select_sort(first + 1, last);
}
}
hur mycket kortare får du till den i valfritt annat språk? Bygger du denna med "gcc" så kan du enkelt köra "min_element" på flera CPU-kärnor till och med genom att lägga med "-D_GLIBCXX_PARALLEL -fopenmp" när du kompilerar, vilket annat språk blir det så enkelt att använda många CPU-kärnor (corner-case, jag vet)?
Länken du postade klagade på att C++ kräver manuell hantering av minne. Det är inte sant och har inte varit sant sedan templates infördes i språket i början av 90-talet.
void does_not_leak_memory()
{
shared_ptr<string> heap_allocated_string = make_shared<string>("Hello world");
// use string
} // <- string is automatically freed here
shared_ptr<string> returns_heap_obj()
{
shared_ptr<string> heap_allocated_string = make_shared<string>("Hello world");
// use string
return heap_allocated_string;
} // <- string is not freed here, but it will be when all referenses are lost
Kanske lite mycket att skriva, men det är enklare sedan C++11 standarden klubbades. Samma sak blir då
void does_not_leak_memory()
{
auto heap_allocated_string = make_shared<string>("Hello world");
// use string
} // <- string is automatically freed here
Så visst är C++ ett stort och relativt komplicerat språk, men det är inte alls så uselt som många vill få det till, i alla fall om man verkligen kan programmera C++...