-
1. Data: 2013-01-27 22:28:51
Temat: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Wojciech Muła <w...@g...com>
Ahoj, przeglądam sobie czasem changelogi postgresa, gcc
i innych dużych programów i mam nieodparte wrażenie, że
spory odsetek błędów nigdy by nie powstał, gdyby program
był pisany w języku z silnym systemem typów (czyli nie
C/C++).
Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
analizujące zależność defektów programów od języka?
w.
-
2. Data: 2013-01-27 22:55:54
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Przemek O <p...@o...eu>
W dniu 2013-01-27 22:28, Wojciech Muła pisze:
> Ahoj, przeglądam sobie czasem changelogi postgresa, gcc
> i innych dużych programów i mam nieodparte wrażenie, że
> spory odsetek błędów nigdy by nie powstał, gdyby program
> był pisany w języku z silnym systemem typów (czyli nie
> C/C++).
A ja mam wrażenie, że gdyby nie wynaleziono komputerów, to ilość błędów
oprogramowania też drastycznie by spadła, a wręcz nigdy by nie powstała...
MSPANC
> Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
> analizujące zależność defektów programów od języka?
Nie znam takich publikacji, niemniej wydaje mi się, że zależności nie
należy szukać na poziomie języka. Chyba, że dałoby się wykazać, że dany
język ma specjalne predyspozycje to danego typu defektów, co wydaje się
raczej karkołomnym zadaniem.
IMHO akademickie rozważania dobre np. na prace doktorską :P
W praktyce dowolny programista może popełnić dowolny błąd w dowolnym języku.
pozdrawiam,
Przemek O.
-
3. Data: 2013-01-28 08:38:30
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: "M.M." <m...@g...com>
W dniu niedziela, 27 stycznia 2013 22:55:54 UTC+1 użytkownik Przemek O napisał:
> A ja mam wrażenie, że gdyby nie wynaleziono komputerów, to ilość błędów
> oprogramowania też drastycznie by spadła, a wręcz nigdy by nie powstała...
> MSPANC
Ehhh
> > Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
> > analizujące zależność defektów programów od języka?
Masę przypadkowej lektury przeczytałem na temat tego, jak to mało
błędów popełnia się w javie. Czy to prawda? Nie mam wyrobionego własnego
zdania na ten temat. Osobiście mam dużo mniejszą wprawę w javie i na
pewno częściej się rąbnę w javie niż w C++, a nawet w C. Można się
zastanowić nad tym tematem.
> Nie znam takich publikacji, niemniej wydaje mi się, że zależności nie
> należy szukać na poziomie języka. Chyba, że dałoby się wykazać, że dany
> język ma specjalne predyspozycje to danego typu defektów, co wydaje się
> raczej karkołomnym zadaniem.
> IMHO akademickie rozważania dobre np. na prace doktorską :P
> W praktyce dowolny programista może popełnić dowolny błąd w dowolnym języku.
A może jednak jakieś przesłanki są? Jeden język umożliwia ujemne indeksy
w tablicach i/lub przekraczanie zakresów struktur danych, drugi nie ma nawet
arytmetyki wskaźników. Rzecz jasna, że jeden język może mieć te mechanizmy na
poziomie bibliotek i narzędzi, a programista może nie używać ryzykownych
konstrukcji. Niemniej są to cechy języka, więc ja się jednak przychylam ku
stwierdzeniu że są języki sprzyjające popełnianiu błędów i języki chroniące
przed błędami.
Pozdrawiam
-
4. Data: 2013-01-28 09:54:22
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Andrzej Jarzabek <a...@g...com>
On 27/01/2013 21:28, Wojciech Muła wrote:
> Ahoj, przeglądam sobie czasem changelogi postgresa, gcc
> i innych dużych programów i mam nieodparte wrażenie, że
> spory odsetek błędów nigdy by nie powstał, gdyby program
> był pisany w języku z silnym systemem typów (czyli nie
> C/C++).
W C++ można przecież korzystać wyłącznie z silnego typowania. Problemem
są zewnętrzne API, ale korzystając tylko z języka ze ściśle silnym
typowaniem po prostu nie dałoby się z nich korzystać w ogóle.
-
5. Data: 2013-01-28 10:14:05
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Andrzej Jarzabek <a...@g...com>
On 28/01/2013 07:38, M.M. wrote:
> W dniu niedziela, 27 stycznia 2013 22:55:54 UTC+1 użytkownik Przemek O napisał:
>
>>> Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
>>> analizujące zależność defektów programów od języka?
> Masę przypadkowej lektury przeczytałem na temat tego, jak to mało
> błędów popełnia się w javie. Czy to prawda? Nie mam wyrobionego własnego
> zdania na ten temat. Osobiście mam dużo mniejszą wprawę w javie i na
> pewno częściej się rąbnę w javie niż w C++, a nawet w C. Można się
> zastanowić nad tym tematem.
Myślę, że ogólnie w Javie popełnia się sporo błędów, ale nie byłoby dla
mnie zaskakujące, że w C++ popełnia się znacznie więcej.
Na pewno ktoś, kto zna C++ lepiej niż Javę może popełniać w Javie więcej
błędów, ale weź pod uwagę, że C++ jest bardziej skomplikowanym językiem
i trudniej się go dobrze nauczyć.
Poza tym pomijając to, czy C++ jako taki jest bardziej "błędogenny" od
Javy (moim zdaniej jednak trochę jest), to wydaje się, że sporo błędów
wynika z tego, że dużo programistów, którzy piszą w C++ i słabo go
znają, nauczyli się wcześniej albo Javy albo C i przenoszą nawyki.
-
6. Data: 2013-01-28 11:19:36
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Maciej Sobczak <s...@g...com>
W dniu niedziela, 27 stycznia 2013 22:28:51 UTC+1 użytkownik Wojciech Muła napisał:
> Ahoj, przeglądam sobie czasem changelogi postgresa, gcc
> i innych dużych programów i mam nieodparte wrażenie, że
> spory odsetek błędów nigdy by nie powstał, gdyby program
> był pisany w języku z silnym systemem typów (czyli nie
> C/C++).
A może wystarczy skorzystać z silnego systemu typów w C/C++?
> Czy znacie publikacje
> analizujące zależność defektów programów od języka?
Tak. Ale to nie jest tylko sprawa systemu typów. Ogólnie - im bardziej statyczna jest
kultura jakiegoś języka, tym mniej błędów można w nim popełnić. A konkretniej -
popełnić można tyle same, ale zostaną wcześniej wykryte. System typów to tylko część
- np. system typów zagwarantuje, że w danym miejscu można użyć obiektu tylko
konkretnego typu, ale nie zagwarantuje, że ten obiekt będzie miał stan właściwy w
momencie użycia. Bez tego zapewnienia najlepsze co może zrobić język to zamienić
zachowania niezdefiniowane na zdefiniowane wyjątki - i to jest jedyny "sukces" Javy w
tej dziedzinie. Piszę "sukces", bo z punktu widzenia poprawności nie jest to żaden
postęp.
Tak, wybór języka ma wpływ na ilość bugów, które znajdą się w końcowym produkcie.
--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
-
7. Data: 2013-01-28 11:28:57
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: "M.M." <m...@g...com>
W dniu poniedziałek, 28 stycznia 2013 10:14:05 UTC+1 użytkownik Andrzej Jarzabek
napisał:
> > zdania na ten temat. Osobiście mam dużo mniejszą wprawę w javie i na
> > pewno częściej się rąbnę w javie niż w C++, a nawet w C. Można się
> > zastanowić nad tym tematem.
>
> Myślę, że ogólnie w Javie popełnia się sporo błędów, ale nie byłoby dla
> mnie zaskakujące, że w C++ popełnia się znacznie więcej.
Trudno opracować jakiś miarodajny sposób w ocenie zagadnienia. Można
wziąć np. 10 zespołów składających się z programistów Javy i 10 z
C++. Każdy z członków zespołu niech ma średnio 2-3 lata doświadczenia w
zawodzie i niech jest w podobnej kondycji psychofizycznej. Potem można
dać każdemu zespołowi z 10 takich samych zadań do zrealizowania w
takich samych ramach czasowych. Na końcu niby można porównać kod pod
względem błędów. No właśnie NIBY. C++ z założenia jest językiem
trudniejszym, w którym można uzyskać lepszy rezultat, kosztem większego
nakładu pracy, większego skupienia i większego czasu na
wyszkolenie programistów. Więc choć czasu będą mieli tyle samo, to
ten zespół od C++ będzie musiał się trochę bardziej spieszyć. A jeśli
czasu będzie w nadmiarze, to ten zespół od C++ może napisze lepszą
aplikację, która zajmuje mniej pamięci, albo szybko działa na
słabych urządzeniach. Nie wiem jak to sensownie porównać... to chyba
trochę tak, jakby zapytać czy lepszym mistrzem jest mistrz w biegu
na 100 metrów, czy mistrz w biegu na kilometr.
> Na pewno ktoś, kto zna C++ lepiej niż Javę może popełniać w Javie więcej
> błędów, ale weź pod uwagę, że C++ jest bardziej skomplikowanym językiem
> i trudniej się go dobrze nauczyć.
>
> Poza tym pomijając to, czy C++ jako taki jest bardziej "błędogenny" od
> Javy (moim zdaniej jednak trochę jest), to wydaje się, że sporo błędów
> wynika z tego, że dużo programistów, którzy piszą w C++ i słabo go
> znają, nauczyli się wcześniej albo Javy albo C i przenoszą nawyki.
Generalnie myślę podobnie.
Abstrahując od tematu błędogenności, język C++ jest naprawdę wielki,
trudny w opanowaniu, programowanie w nim wymaga znajomości podstaw
architektury sprzętowej i do tego język C++ od czasu do czasu
ulega zmianom. Dobre programowanie w C++, z wykorzystaniem wszystkich
mechanizmów tego języka jakie w danym projekcie mogą być pomocne,
jest naprawdę trudną sztuką.
Pozdrawiam
-
8. Data: 2013-01-28 13:08:11
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Michoo <m...@v...pl>
On 28.01.2013 08:38, M.M. wrote:
> W dniu niedziela, 27 stycznia 2013 22:55:54 UTC+1 użytkownik Przemek O napisał:
>
>> A ja mam wrażenie, że gdyby nie wynaleziono komputerów, to ilość błędów
>> oprogramowania też drastycznie by spadła, a wręcz nigdy by nie powstała...
>> MSPANC
> Ehhh
>
>>> Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
>>> analizujące zależność defektów programów od języka?
> Masę przypadkowej lektury przeczytałem na temat tego, jak to mało
> błędów popełnia się w javie. Czy to prawda?
Java też bywa błędogenna przez skopany projekt:
1. Niektóre wyjątki są checked (czyli trzeba je "gdzieś" obsłużyć) ale
inne nie. Unchecked jest np "NumberFormatException" co oznacza, że łatwo
zrobić kod, który w momencie otrzymania nieprawidłowego numerka poleci
aż do dołu.
2. Operatory i metody.
Gdy mamy dowolną mieszankę int i Integer to operatory >,<,>=,<= działają
jak trzeba, ale operatory == i != działają dla dwóch Integerów zależnie
od tego jak duża wartość jest w nich trzymana ;)
equals jest zdefiniowane w Object, więc:
String s="";Integer i=1;
if(s.equals(i)
jest całkowicie poprawną konstrukcją tożsamą z if(false)
3. Operowanie na haszach.
Większość kontenerów pracuje na bazie hashCode() używając equals w
przypadku kolizji. Trzeba trzymać te dwie metody "zsynchronizowane" albo
można uzyskać bardzo subtelne błędy.
4. Parsowanie.
Zagadka - czym się różnią:
try{
Integer i = Integer.valueOf(str);
return i;
}catch(Exception ex){
return null;
}
try{
Boolean i = Boolean.parseBoolean(str);
return i;
}catch(Exception ex){
return null;
}
4. Dalsza zabawa z equals. Kontenery używają equals, które jest z
"Object", więc można robić klasy "selektorow". Powoduje to niestety, że:
Map<String,String> map = new HashMap<String,String>();
Integer i=1;
//...
map.get(i);
Jest poprawnym składniowo sposobem pobrania nulla z kolekcji.
map.put(i,"aaa");
jest oczywiście niepoprawne z powodu niegodności typów.
Istnieje przy tym interface Comparable, ale służy właściwie tyko do
sortowania, więc 0 bezpieczeństwa typów.
etc.
--
Pozdrawiam
Michoo
-
9. Data: 2013-01-28 18:45:53
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: darekm <d...@e...com>
W dniu 2013-01-27 22:28, Wojciech Muła pisze:
> Ahoj, przeglądam sobie czasem changelogi postgresa, gcc
> i innych dużych programów i mam nieodparte wrażenie, że
> spory odsetek błędów nigdy by nie powstał, gdyby program
> był pisany w języku z silnym systemem typów (czyli nie
> C/C++).
>
Można odwrócić pytanie. Co by było gdyby te duże programy pisano w
języku z dynamicznym typowaniem
> Ale jak napisałem, to tylko wrażenie. Czy znacie publikacje
> analizujące zależność defektów programów od języka?
>
Poniekąd należało by zdefiniować pojęcie defekt, bo chyba nie chodzi o
liczbę commitów czy zgłoszeń. Dla mnie wyznacznikiem jest zdolność do
powstawania dużych i małych programów. Wydaje mi się (z obserwacji) że
języki z dynamicznym typowaniem mają większy udział wśród programów
niewielkich, natomiast trudno znaleźć przykłady wśród dużych programów.
Nie twierdzę że ich w ogóle nie ma, ale że to są rzadkie egzemplarze.
--
Darek
-
10. Data: 2013-01-29 02:59:48
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Roman W <b...@g...pl>
On Mon, 28 Jan 2013 18:45:53 +0100, darekm <d...@e...com> wrote:
> Można odwrócić pytanie. Co by było gdyby te duże programy pisano w
> języku z dynamicznym typowaniem
Przecież wiadomo: syf, kila i mogila.
RW