konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Artur Pietrzyk:

Jaka opinia by sie pojawila o STL'u w takim przypadku gdy znajowalo by sie w nim wiele algorytmow ale wiekszosc z nich nie dalo by sie wykorzystac w wiekszosci implementacji.

Wyobraz sobie ze jestes poczatkujacym programista, chcesz cos sobie napisac, znalazles informacje na stl sgi ze jest to wlasnie w tej bibliotece, wczesniej korzystales z vectorow, list z tej biblioteki, jest fajnie, gorzej jak siedzisz juz 2 dni nad ta biblioteka i nie potrafisz tego przerobic tak zeby spelnialo twoje oczekiwania, a samemu zrobilbys to w chwilke.

Logika stla jest taka ze programisci tej biblioteki nie przejmowali sie umiejetnosciami programisty. 1 element z vectora posiadajacy n ilosc elementow mozesz sobie usunac, ale kazdy powinien wiedziec ze odbywa sie to liniowo czyli usuwalac juz pare elementow z duzej tablicy osiagamy czas paru sekund, bo stl musi przesunac wszystko w lewo.

Niewiele mam książek o C++. A dokładniej, to mam kilka wydań "C++ Primer" Lippmana. No i jest tam napisane, kiedy użyć vector, list albo inne kontenery. Te informacje podane są razem z oszacowaniem czasochłonności np. usuwania elementu ze środka vector.
Jeśli więc programista nie przeczytał dokładnie dokumentacji, żadnej książki o C++, to potem są rzeczywiście "kfiatki".

Moim zdaniem jedynym wyjsciem jest wlasna implementacja takich elementarnych algorytmow.
Albo przeczytanie porządnej książki o C++.
Własna implementacja algorytmów jest bardzo kształcąca i pewnie szybsza (ze wzgledu na operowanie na drobniejszych szczegółach - o ile jest się dobrym algorytmistą), ale potem przydaje się przejście na STL lub Boosta. Powód jest prosty: duża część problemów w programowaniu powtarza się i ludzie wynajdują właśnie takie kolekcje rozwiązań tyvh problemów w celu przyspieszenia roboty.
Nie znaczy to oczywiście, że źle robisz robiąc własne implementacje algorytmów. Jest tak dlatego, że niektóre problemy programistyczne mogą być niepokryte przez zakres stosowalności ww. bibliotek.

konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Tomasz Krzal:

Niewiele mam książek o C++. A dokładniej, to mam kilka wydań "C++ Primer" Lippmana. No i jest tam napisane, kiedy użyć vector, list albo inne kontenery. Te informacje podane są razem z oszacowaniem czasochłonności np. usuwania elementu ze środka vector.
Jeśli więc programista nie przeczytał dokładnie dokumentacji, żadnej książki o C++, to potem są rzeczywiście "kfiatki".

Największą wadą (z perspektywy doświadczenia z PHP-em) języka C++ jest to, że raz ustalona struktura - np. w funkcji foo() będzie to ... vector of int, jest to że trzeba ją ustalić. W związku z czym w następnej funkcji - która np. używa list of string na wejściu wynik poprzedniej trzeba najpierw konwertować.

Tak samo było z najgorszą z możliwych implementacji łańcucha w "C".

Ale... Boost ma taki fajny "ficzer" - "variant".
Po podpięciu pod to stringa, listy, vectora itd całkiem miło się w tym pracuje. Zupełnie nowa jakość. Polecam!

Oczywiście ta wada jest też największą zaletą C++ - gdy chcemy konkretnie i wydajnie przeprocesować vector of int.

konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Piotr Likus:
Największą wadą (z perspektywy doświadczenia z PHP-em) języka C++ jest to, że raz ustalona struktura - np. w funkcji foo() będzie to ... vector of int, jest to że trzeba ją ustalić. W związku z czym w następnej funkcji - która np. używa list of string na wejściu wynik poprzedniej trzeba najpierw konwertować.
Być może pomoże ci szablon funkcji z przekazywanym typem danych.

konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Piotr P.:
Piotr Likus:
Największą wadą (z perspektywy doświadczenia z PHP-em) języka C++ jest to, że raz ustalona struktura - np. w funkcji foo() będzie to ... vector of int, jest to że trzeba ją ustalić. W związku z czym w następnej funkcji - która np. używa list of string na wejściu wynik poprzedniej trzeba najpierw konwertować.
Być może pomoże ci szablon funkcji z przekazywanym typem danych.

Niezupełnie - bo chyba to nie podlega dziedziczeniu i zmianie w potomnych klasach / szablonach.
Andrzej Martyna

Andrzej Martyna Architekt
oprogramowania,
programista

Temat: C++0x - czyżbyśmy się doczekali?

Piotr P.:
Przemysław O.:
STL nie jest żadnym cudownym dzieckiem i na niektórych
platformach są takie implementacje (np win multithreaded) że
zakaz jest jedynym sensownym rozwiązaniem.
Prawda jest taka, dopóki czegoś nie zrobisz samemu, nie masz żadnej gwarancji że działa jak powinno.

Oczywiscie szanujemy takich ludzi :)

Are you sure?
Mamy sami wszystko pisać? Np. obsługę systemu plików też? Własne printf?
[...]

Konkretny przykład uzasadnionego zakazu:

Klas map i set w implementacji Visual Studio 6 nie można przekazywać pomiędzy różnymi dll'kami bo po prostu nie działa.
I takie przykłady prowadzą do jedynego słusznego wniosku, że żeby być pewnym swojego softu trzeba byłoby wszystko napisać samemu...
Niestety tego typu ograniczenia są powszechne. Obchodzenie ich jest kosztowne i irytujące.

konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Andrzej Martyna:
Klas map i set w implementacji Visual Studio 6 nie można przekazywać pomiędzy różnymi dll'kami bo po prostu nie działa.
I takie przykłady prowadzą do jedynego słusznego wniosku, że żeby być pewnym swojego softu trzeba byłoby wszystko napisać samemu...
Niestety tego typu ograniczenia są powszechne. Obchodzenie ich jest kosztowne i irytujące.

A kto przekazuje coś więcej niż struct*,char* między DLL'kami?
To proszenie się o baty.
Może w obrębie jednego kompilatora coś takiego zadziała, ale jeśli się dostaje struktury z innego (w tym Pascal, VB, C#) to można się lekko zdziwić wprost odmienną wersją struktury. Bo DLL'ki są m.in. po to, aby podłączyć soft stworzony różnymi narzędziami przez różnych ludzi i np. mogą mieć różne RTL'ki.

STL -jest- użyteczne, tylko nie oczekiwałbym że się -samo- prześle np. po HTTP jako array of char... Trzeba trochę rozumieć co się robi.

konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Andrzej Martyna:
Piotr P.:
Przemysław O.:
STL nie jest żadnym cudownym dzieckiem i na niektórych
platformach są takie implementacje (np win multithreaded) że
zakaz jest jedynym sensownym rozwiązaniem.
Prawda jest taka, dopóki czegoś nie zrobisz samemu, nie masz żadnej gwarancji że działa jak powinno.

Oczywiscie szanujemy takich ludzi :)

Are you sure?
Mamy sami wszystko pisać? Np. obsługę systemu plików też? Własne printf?
[...]

Konkretny przykład uzasadnionego zakazu:

Klas map i set w implementacji Visual Studio 6 nie można przekazywać pomiędzy różnymi dll'kami bo po prostu nie działa.
I takie przykłady prowadzą do jedynego słusznego wniosku, że żeby być pewnym swojego softu trzeba byłoby wszystko napisać samemu...
Niestety tego typu ograniczenia są powszechne. Obchodzenie ich jest kosztowne i irytujące.

Visual Studio 6? To z 1998 roku?
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: C++0x - czyżbyśmy się doczekali?

Tak, to właśnie - do dziś nie zrobili edytora z blokowym zaznaczaniem i wklejaniem w żadnej nowej wersji : )
Darek Ś.

Darek Ś. Senior Software
Engineer, Splunk

Temat: C++0x - czyżbyśmy się doczekali?

Szymon Kubisiak:
Tak, to właśnie - do dziś nie zrobili edytora z blokowym zaznaczaniem i wklejaniem w żadnej nowej wersji : )

O ktorym edytorze mowisz? chyba nie o tym z VisualStudio? Nie pamietam juz jak to bylo w 6.0 (bo ostatni raz mialem stycznosc z ta wersja dobrych kilka lat temu), ale w VS2003 (i nowszych) na pewno blokowy copy/paste jest (o ile mamy na mysli to samo mowiac o blokowych operacjach na tekscie :)).
Darek Ś.

Darek Ś. Senior Software
Engineer, Splunk

Temat: C++0x - czyżbyśmy się doczekali?

Piotr Likus:
A kto przekazuje coś więcej niż struct*,char* między DLL'kami?
To proszenie się o baty.
Może w obrębie jednego kompilatora coś takiego zadziała,
[...]

Jesli cala aplikacja jest w natywnym C++ to dziala bardzo dobrze :) i to oczywiscie w przypadku znacznie bardziej skomplikowanych struktur danych niz struct*/char*. O czyms takim jak wyjatki nie wspominajac.

Zreszta ciezko sobie wyobrazic budowanie projektu, ktory ma np. ze 100 roznych modulow C++ inaczej jak z uzyciem .dll/.so. Jesli kazdy z nich mialby byc statycznym libem to linkowanie wszystkiego do jednego pliku wykonywalnego trwalo by cale wieki.

A z kolei jesli komunikacje miedzy nimi ograniczyc tylko do w/w char*/struct* to de facto mamy cos w rodzaju aplikacji w C z poszczegolnymi modulami implementowanymi gdzieniegdzie w C++ ;)

Za to interfejs C sprawdza sie bardzo dobrze przy laczeniu np. z Prologiem albo z jezykami skryptowymi jak tcl, perl, ... .

pozdrawiam,
Darek Slusarczyk
Jakub L.

Jakub L. Programista

Temat: C++0x - czyżbyśmy się doczekali?

Darek S.:
Szymon Kubisiak:
Tak, to właśnie - do dziś nie zrobili edytora z blokowym zaznaczaniem i wklejaniem w żadnej nowej wersji : )

O ktorym edytorze mowisz? chyba nie o tym z VisualStudio? Nie pamietam juz jak to bylo w 6.0 (bo ostatni raz mialem stycznosc z ta wersja dobrych kilka lat temu), ale w VS2003 (i nowszych) na pewno blokowy copy/paste jest (o ile mamy na mysli to samo mowiac o blokowych operacjach na tekscie :)).

Pewnie chodzi o odpowiednik ctrl + v z vima.
Mnie straszliwie boli brak podświetlenia wszystkich wystąpień danego słowa w otwartym pliku.
Jak pisałem w Javie, to w Eclipse miałem to domyślnie włączone, jak muszę coś znaleźć to przerzucam się do vmia, tam * i skaczę po wystąpieniach, a w VS się kurna nie da, tylko to kretyńskie wyszukiwanie.
I jeszcze domyślne podświetlanie pasującego nawiasu, a nie jakieś dziwne kombo klawiszowe do tego.

Temat: C++0x - czyżbyśmy się doczekali?

Za to interfejs C sprawdza sie bardzo dobrze przy laczeniu np. z Prologiem albo z jezykami skryptowymi jak tcl, perl, ... .
No właśnie. Ja łączę się z Delphi, plikami skryptowymi SAS Institute Software albo rozszerzonymi procedurami SQL Servera. Jest tylko jedno ale.
Jak sobie radzicie z wyrównywaniem składowych struktury? Np do 4 lub 8 bajtów. Czasem trzeba wyrównywać do 4, bo Delphi a czasem do 8, bo xp w SQL serwerze. Wtedy wychodzą 2 wersje dll'a i są problemy.
Darek Ś.

Darek Ś. Senior Software
Engineer, Splunk

Temat: C++0x - czyżbyśmy się doczekali?

Jakub L.:
Pewnie chodzi o odpowiednik ctrl + v z vima.

W VStudio wystarczy przytrzymac Alt+Shift i mozna selekcjonowac/kopiowac jak w trybie VISUAL BLOCK z Vim'a.
Mnie straszliwie boli brak podświetlenia wszystkich wystąpień danego słowa w otwartym pliku.
Jak pisałem w Javie, to w Eclipse miałem to domyślnie włączone, jak muszę coś znaleźć to przerzucam się do vmia, tam * i skaczę po wystąpieniach, a w VS się kurna nie da, tylko to kretyńskie wyszukiwanie.

Inkrementalny search / Ctrl+I jako tako dziala, chociaz faktycznie wszystkich wystapien danego slowa nie podswietla (nie wiem jak w nowszych wersja VS).
I jeszcze domyślne podświetlanie pasującego nawiasu, a nie jakieś dziwne kombo klawiszowe do tego.

Ano niestety dla C++ VS automatycznie podswietla tylko w sytucji, gdy sie dany blok pisze. Dziwne, bo na przyklad w C# automatyczne podswietlanie nawiasow dziala zawsze.

No ale zawsze mozna skorzystac z
http://www.codeproject.com/KB/macros/matchingbraces.aspx
;)
addin niby dla 2008, ale np. pod 2005 rowniez dziala (wystarczy zmienic wersje w pliku .Addin)

A Vim'a oczywiscie bardzo lubie - jest jedyny w swoim rodzaju :)

p.s.
sprawdzalem na VS2005, bo do tej wersji mam w tej chwili dostep

pozdrawiam,
Darek Slusarczyk
Darek Ś.

Darek Ś. Senior Software
Engineer, Splunk

Temat: C++0x - czyżbyśmy się doczekali?

Włodzimierz Kołodenny:
No właśnie. Ja łączę się z Delphi, plikami skryptowymi SAS Institute Software albo rozszerzonymi procedurami SQL Servera. Jest tylko jedno ale.
Jak sobie radzicie z wyrównywaniem składowych struktury? Np do 4 lub 8 bajtów. Czasem trzeba wyrównywać do 4, bo Delphi a czasem do 8, bo xp w SQL serwerze. Wtedy wychodzą 2 wersje dll'a i są problemy.

Oj w Delphi to nie wiem :) ale w VStudio:

0)
ustawic dla danego pliku opcje Struct Member Alignment (C/C++ | Code Generation - przelacznik /Zp)

1)
otoczyc/zawrzec dany kawalek kodu/strukture w #pragma pack

Pewno w Delphi powinien byc jakis odpowiednik.

pozdrawiam,
Darek Slusarczyk
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: C++0x - czyżbyśmy się doczekali?

Już kiedyś o tym dyskusja była tutaj - w nowszych VS da się zaznaczyć blok trzymając alt, a w VC6 ponad to był tryb zaznaczania blokowego (ctrl-shift-F8 chyba) którym przełączało się także wklejanie na blokowe/liniowe oraz przed/za kursorem.

Chodziło mi tylko o to że stary VC ma pewne rzeczy których nowsze nie mają. Oczywiście edytor to kiepski przykład, ale pierwszy jaki mi przyszedł do głowy :)

Zresztą, wystarczy robić pluginy do obcego programu i już sam model pamięci cię przykuwa do kompilatora, jak z 3dsMAX.Szymon Kubisiak edytował(a) ten post dnia 19.01.09 o godzinie 01:53

konto usunięte

Temat: C++0x - czyżbyśmy się doczekali?

Piotr Likus:
Piotr P.:
Piotr Likus:
Największą wadą (z perspektywy doświadczenia z PHP-em) języka C++ jest to, że raz ustalona struktura - np. w funkcji foo() będzie to ... vector of int, jest to że trzeba ją ustalić. W związku z czym w następnej funkcji - która np. używa list of string na wejściu wynik poprzedniej trzeba najpierw konwertować.
Być może pomoże ci szablon funkcji z przekazywanym typem danych.

Niezupełnie - bo chyba to nie podlega dziedziczeniu i zmianie w potomnych klasach / szablonach.

Szablony paramatetrów szablonów pomogą.Michał Rotkiewicz edytował(a) ten post dnia 23.01.09 o godzinie 23:24
Andrzej Martyna

Andrzej Martyna Architekt
oprogramowania,
programista

Temat: C++0x - czyżbyśmy się doczekali?

Przemysław O.:
[...]

Visual Studio 6? To z 1998 roku?

Tak i w kilku projektach go jeszcze używamy bo zdążyliśmy poznać już WSZYSTKIE jego słabe strony :-))))

Poza tym jest tam parę rzeczy (ale przyznaję, coraz mniej), które Microsoft zdecydował się "zabrać" użytkownikom swoich produktów jak np. bardzo użyteczne:
Szymon Kubisiak:
[...]

Tak, to właśnie - do dziś nie zrobili edytora z blokowym
zaznaczaniem i wklejaniem w żadnej nowej wersji : )

Dodałbym jeszcze coś co jest np. w SourceSafe a nie ma w TFS (przynajmniej bez dodatków zrobionych przez dobrych ludzi):
1. Wildcard search
2. Status search
3. Sharing
4. Historia pliku przed jego branchowaniem (teraz w TFS'ie pliki w branchu są jak nowo narodzone, bez bagażu przeszłości :-)

I np. genialna funkcjonalność w VS 2003: "work offline", która została "zabrana" w VS 2005 i teraz przywrócona w VS 2008.

Generalnie rozwój i postęp czasem odbywa się wraz z zapominaniem nie tylko tego co było złe ale i tego dobrego też...
Andrzej Martyna

Andrzej Martyna Architekt
oprogramowania,
programista

Temat: C++0x - czyżbyśmy się doczekali?

Szymon Kubisiak:
Już kiedyś o tym dyskusja była tutaj - w nowszych VS da się zaznaczyć blok trzymając alt, a w VC6 ponad to był tryb zaznaczania blokowego (ctrl-shift-F8 chyba) którym przełączało
[...]

Rzeczywiście z altem działa, ale nie znalazłem na to skrótu klawiszowego. Ale to drobiazg. Zgadzam się, że w starym, dobrym VS6 są przyjemne rzeczy, których nie ma w nowszych. Poza tym działa bardzo szybko.
Jak ktoś jest miłośnikiem tego edytora to polecam chodzącą wersję minimalistyczną 3,2 MB:
DEVSHL.DLL
MSDEV.EXE
DEVEDIT.PKG
DEVPRJ.PKG
IDE\DEVCPP.PKG
Darek Ś.

Darek Ś. Senior Software
Engineer, Splunk

Temat: C++0x - czyżbyśmy się doczekali?

Andrzej Martyna:
Rzeczywiście z altem działa, ale nie znalazłem na to skrótu klawiszowego. Ale to drobiazg.

Z klawiatury Alt+Shift.
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: C++0x - czyżbyśmy się doczekali?

Darek S.:
Z klawiatury Alt+Shift.

Chodzi o skrót przełączający edytor w trwały tryb BEZ trzymania Alta.

Następna dyskusja:

Ktoś tu się zna na RPC?




Wyślij zaproszenie do