eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjaki wybrac jezyk? › Re: jaki wybrac jezyk?
  • Data: 2011-08-16 06:27:14
    Temat: Re: jaki wybrac jezyk?
    Od: Michal Kleczek <k...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 2011-08-15 21:46, Maciej Sobczak wrote:
    >
    > Jawne deklarowanie wyjątków się nie sprawdziło w praktyce i Javowcy
    > masowo to pomijają. Nie, nie chodzi o początkujących adeptów, robią
    > tak również projektanci poważnych frameworków. Po prostu się nie
    > sprawdziło.
    >

    Wydaje mi sie, ze "sie nie sprawdzilo" nie dlatego, ze jest "zle samo w
    sobie", ale raczej z tego samego powodu, dla ktorego Ada jest taka
    popularna jaka jest - zeby sensownie uzyc wymaga zbyt powaznego
    pomyslunku dla przecietnego programisty. Co gorsza - wymaga projektu, co
    w czasach agile jest takie passe.

    >> silniejsza kontrola typów
    >
    > Np. gdzie?
    >
    > Bo ja znalazłem taki fajny przykład:
    >
    > import java.util.TreeSet;
    >
    > class NonComparable {}
    >
    > public class Test {
    > public static void main(String[] args) {
    > TreeSet<NonComparable> mySet = new TreeSet<NonComparable>();
    > mySet.add(new NonComparable());
    > mySet.add(new NonComparable());
    > }
    > }
    >
    > W funkcji main są trzy linijki.
    > W języku z poważną statyczną kontrolą typów powinien być błąd
    > kompilacji w pierwszej linii, gdzie tworzony jest bezsensowny typ
    > zbioru. Tak się stanie np. w Adzie (w równoważnym przykładzie).
    >
    > W języku z trochę gorszą kontrolą typów poleci błąd kompilacji w
    > drugiej linii, gdzie dodawany jest element do zbioru. Tak jest w C++.
    >
    > W języku, który jest niepoważny, błąd poleci dopiero w run-time i
    > dopiero w trzeciej linii, chociaż ona kompletnie nie różni się od
    > drugiej. Tak jest w Javie i większości skryptowych.
    >
    > Sorki, ale dla mnie to lipa.
    >

    Dobre.
    Ale nieprawdziwe :)
    Java rzuci ClassCastException na pierwszym add (fakt - w runtime).
    1. Wymaga tego specyfikacja TreeSet.add()
    2. Zweryfikowalem zrodla - TreeSet jest implementowany przez TreeMap,
    ktorej put() w przypadku gdy mapa jest pusta probuje porownac klucz sam
    ze soba (wlasnie w celu zweryfikowania typu).

    Z drugiej strony - nie jestem pewny czy to wina jezyka, czy takiej a nie
    innej konstrukcji biblioteki std. W koncu nic nie stalo na przeszkodzie
    by zrobic dwie klasy ( a nie bez sensu je kleic ):
    TreeSet1<T extends Comparable<? super T>>
    TreeSet2<S, T extends Comparator<? super S>>

    API _zawsze_ mozna spieprzyc - niezaleznie od jezyka. Spieprzyc API jest
    bardzo latwo, bo zrobienie dobrego API jest truuudna sztuka :)

    Fakt, ze generyki zostaly do jezyka dodane pozno i biblioteka std nie
    mogla byc wywrocona do gory nogami, wiec ich wykorzystanie w niej nie
    moze byc pelne.

    Tak przy okazji - dlaczego w C++ wysypie sie kompilacja na _pierwszym_
    add? (Moj C++ troche juz zardzewial i mnie zaciekawilo...)

    --
    Michal

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: