eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Jakie typowanie jest najlepsze i dlaczego statyczne?
Ilość wypowiedzi w tym wątku: 197

  • 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

strony : [ 1 ] . 2 ... 10 ... 20


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: