eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjaki wybrac jezyk? › Re: jaki wybrac jezyk?
  • Data: 2011-08-16 09:51:27
    Temat: Re: jaki wybrac jezyk?
    Od: "Wojciech \"Spook\" Sura" <w...@o...com.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia 15-08-2011 o 21:46:29 Maciej Sobczak <s...@g...com>
    napisał(a):

    >> *W tym kontekście* absolutnie zgadzam się ze stwierdzeniem, że wJavie
    >> robi się mniej błędów.
    >
    > Otóż nie, to nie przeszkadza w robieniu błędów. Ten mechanizm je co
    > najwyżej wykrywa. W run-time. Nic nie stoi na przeszkodzie, żeby
    > wysłać klientowi program z błędem i w tym kontekście uważam, że Java
    > nie wnosi istotnego postępu w dziedzinie poprawności.

    Ok, może w przypadku testowania zakresów tablic tak. Ale popatrz na taki
    przypadek:

    switch (myEnum)
    {
    case enVal1:
    {
    x = someOtherVarX / 2.0f;
    y = someOtherVarY / 2.0f;
    }
    default:
    {
    x = NaN;
    y = NaN;
    }
    }

    W C++ powyższy kod się skompiluje i będzie działał zgodnie z tym, co
    programista napisał (choć raczej niezgodnie z tym, co zamierzał). W C#
    próba kompilacji takiego kodu skończy się błędem (w Javie, natomiast,
    przejdzie).

    Zmierzam do tego, że - choć język jako taki nie może wykluczyć powstawania
    błędów - to jednak istnieją takie jego konstrukcje, które znacznie
    zmniejszają prawdopodobieństwo posadzenia takiego buraka, jak w powyższym
    przykładzie (chodzi mi o ogólną zasadę, a nie o ten czy inny konkretny
    przypadek).

    W końcu zarówno Java jak i C# wyewoluowały z C++, co dało projektantom
    szansę poprawienia niektórych językowych konstrukcji.

    W dyskusji wspominana jest Ada. Nie znam tego języka, ale czytałem o nim
    kiedyś, że jest pełen nadmiarowych konstrukcji językowych - na przykład
    koniec bloku wymaga informacji, jaki to był blok (np. END PROCEDURE).
    Przymus kończenia bloku case instrukcją break, goto lub return w C# jest w
    pewnym sensie nadmiarowy, ale znacząco ogranicza możliwość popełnienia w
    tym miejscu błędu. Wydaje mi się, że istnieje silna zależność pomiędzy
    stosunkiem szybkości i wygody pisania w danym języku a jego
    błędogennością. Niedawno nadziałem sie na C++owe max, które wywołane dla
    parametrów rand() - 2 i 0 zwróciło nagle -1. W Delphi, C# i Javie nie da
    się napisać odpowiednika C++owego makra, które w konkretnych
    okolicznościach może działać niezgodnie z założeniami. Niemożność
    stosowania makr w pewnym stopniu utrudnia pisanie, ale z drugiej strony
    eliminuje możliwość popełnienia trudnego do zlokalizowania błędu.

    W C++ można bardzo łatwo strzelić sobie w stopę trzymając w jednej ręce
    komplet tomów encyklopedii Britannica, a w drugiej - średniej wielkości
    piłkę plażową. Ale na przykład w C# trzeba już mieć na wyposażeniu karabin
    snajperski :)

    Pozdrawiam -- Spook.

    --
    Używam klienta poczty Opera Mail: http://www.opera.com/mail/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: