eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › jaki wybrac jezyk?
Ilość wypowiedzi w tym wątku: 130

  • 101. Data: 2011-08-17 15:08:24
    Temat: Re: jaki wybrac jezyk?
    Od: "Jordan Szubert" <u...@j...us.to>

    Dnia 17-08-2011 o 16:16:54 Stachu 'Dozzie' K.
    <d...@g...eat.some.screws.spammer.invalid> napisał(a):

    > On 2011-08-17, Jordan Szubert <u...@j...us.to> wrote:
    >> Dnia 17-08-2011 o 15:39:36 Stachu 'Dozzie' K.
    >> <d...@g...eat.some.screws.spammer.invalid> napisał(a):
    >>
    >> [...]
    >>> Przepraszam, ale dlaczego w Adzie się dało zrobić poprawnie silny
    >>> system
    > ^^^^^^^^^^^^
    >>> typów? Dlaczego dało się w Haskellu i SML-u? Nie wyskakuj mi więc
    > ^^^^^
    >>> z pomysłem że rzutowanie jest ogólnie niebezpieczną operacją,
    ^^^^^^^^^^
    >>> niemożliwą do weryfikacji podczas kompilacji, bo nie jest.
    >>
    >> Haskell ma rzutowanie? jak wygląda?
    > Czytać do skutku.

    Czyli nie chciałeś sugerować, że Haskell jest przykładem bezpiecznego
    rzutowania (a IMO jest uzasadniona interpretacja zacytowanego fragmentu),
    a jedynie porządnego systemu typów?
    To się zgadzam, na pożegnanie prosząc (z ciekawości jedynie, nie dlatego,
    iżbym nie wierzył, że może istnieć) o opis, jak działa porządne/bezpieczne
    rzutowanie.

    --
    Jordan Szubert


  • 102. Data: 2011-08-17 15:11:27
    Temat: Re: jaki wybrac jezyk?
    Od: Maciej Sobczak <s...@g...com>

    On Aug 17, 3:30 pm, Michal Kleczek <k...@p...onet.pl> wrote:

    > Przy takim podejsciu to zaden jezyk nie ma, bo chyba (tutaj - fakt -
    > potrzebuje wsparcia mocniejszych teoretykow) nie da sie zrobic jezyka
    > "turing complete" bez operacji "unsafe" czyli nieweryfikowalnych
    > statycznie (takich jak rzutowanie).

    A tak żeby było ciekawiej, zapytam: po co rzutowanie [*]?
    Udało mi się napisać parę programów bez rzutowania. W szczególności
    "Hello World" nie używa rzutowania, ale dłuższe programy też się da.
    Najwyraźniej mógłbym te programy napisać również w języku, który
    rzutowania w ogóle nie ma.

    Niebezpieczne rzutowanie może być potrzebne w języku, żeby na
    współczesnych systemach operacyjnych zaimplementować dany język w tym
    samym języku (np. bibliotekę i cały run-time C++ da się napisać w C+
    +), albo ale to wymaganie nie musi być uzasadnione z punktu widzenia
    "normalnego" programisty.

    [*] Hint: jawne konwersje typów tu się nie zaliczają, bo są
    bezpieczne. Mówimy o rzutowaniu typu reinterpret_cast, void* i tego
    typu chwytach.

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 103. Data: 2011-08-17 15:29:32
    Temat: Re: jaki wybrac jezyk?
    Od: Michal Kleczek <k...@p...onet.pl>

    On 2011-08-17 17:11, Maciej Sobczak wrote:
    > On Aug 17, 3:30 pm, Michal Kleczek<k...@p...onet.pl> wrote:
    >
    >> Przy takim podejsciu to zaden jezyk nie ma, bo chyba (tutaj - fakt -
    >> potrzebuje wsparcia mocniejszych teoretykow) nie da sie zrobic jezyka
    >> "turing complete" bez operacji "unsafe" czyli nieweryfikowalnych
    >> statycznie (takich jak rzutowanie).
    >
    > A tak żeby było ciekawiej, zapytam: po co rzutowanie [*]?
    > Udało mi się napisać parę programów bez rzutowania. W szczególności
    > "Hello World" nie używa rzutowania, ale dłuższe programy też się da.
    > Najwyraźniej mógłbym te programy napisać również w języku, który
    > rzutowania w ogóle nie ma.
    >
    > Niebezpieczne rzutowanie może być potrzebne w języku, żeby na
    > współczesnych systemach operacyjnych zaimplementować dany język w tym
    > samym języku (np. bibliotekę i cały run-time C++ da się napisać w C+
    > +), albo ale to wymaganie nie musi być uzasadnione z punktu widzenia
    > "normalnego" programisty.
    >

    Jezeli twoj jezyk nie pozwala zaimplementowac siebie samego, to problem
    lezy w zdefiniowaniu do czego sie nadaje (czyli do czego mozna go uzyc)
    - no chyba ze potrafisz udowodnic, ze to jedyny problem, ktorego nie da
    sie rozwiazac w tym jezyku.
    I tak potrzebujesz jezyka tzw. "ogolnego przeznaczenia" do rozwiazania
    problemow, ktorych nie mozesz rozwiazac przy uzyciu specjalizowanych
    jezykow.

    --
    Michal


  • 104. Data: 2011-08-17 15:32:44
    Temat: Re: jaki wybrac jezyk?
    Od: Michal Kleczek <k...@p...onet.pl>

    On 2011-08-17 16:50, Stachu 'Dozzie' K. wrote:
    > On 2011-08-17, Michal Kleczek<k...@p...onet.pl> wrote:
    >> On 2011-08-17 15:42, Stachu 'Dozzie' K. wrote:
    >>> On 2011-08-17, Michal Kleczek<k...@p...onet.pl> wrote:
    >>>
    >>>> Fakt, ze argumentacja zwolennikow "dynamicznie typowanych" jezykow jest
    >>>> pokretna :) - mowia oni "jezeli twoje testy nie wykryly takiego bledu,
    >>>> to masz za malo testow".
    >>>
    >>> Zawsze masz za mało testów żeby uzyskać pewność. W języku statycznie
    >>> typowanym dostajesz pewność zgodności typów przez sam fakt skompilowania
    >>> programu.
    >>>
    >>
    >> Bede adwokatem diabla - a co ci daje "pewnosc zgodnosci typow"?
    >
    > Pewność wyeliminowania pewnej klasy błędów, dość często spotykanej
    > zresztą. To już dużo.

    No wlasnie konrargument zwolennikow dynamicznego typowania jest taki, ze:
    a) wlasnie - wbrew obiegowym opiniom - wcale nie "czesto spotykanej"
    b) i tak najpowazniejsze oraz najtrudniejsze w diagnozie i naprawie
    bledy (nie musza byc czeste) wynikaja z przyczyn, ktorych nie
    wyeliminuje statyczny typechecker.

    Analogiczna dyskusja toczy sie wsrod zwolennikow statycznego typowania.
    Dotyczy ona tego, czy ma byc "nominal typing" czy wystarczy "structural
    typing".
    I sam fakt, ze zastosowanie "nominal typing" powoduje wylapanie bledow w
    wiekszej ilosci programow nie jest wystarczajacym argumentem za jego
    stosowaniem.

    >
    >> Masz jakies dane empiryczne mowiace o tym, ze programy zweryfikowane
    >> statycznie na "zgodnosc typow" maja wyzszy poziom akceptacji
    >> uzytkownikow? Chetnie sie z nimi zapoznam.
    >
    > #define "akceptacja użytkowników", bo mnie kojarzy się z użytkownikiem
    > końcowym, który chce jedynie ładne ikonki do klikania.
    >

    Chociazby.
    Jak to sie ma do statyczniej kontroli typow?
    Czy programy napisane dajmy na to w Adzie maja ladniejsze ikonki i
    lepiej je wyswietlaja niz te napisane w Smalltalku?

    Czy dysponujesz jakimikolwiek danymi empirycznymi, ktore mowilyby o
    korelacji pomiedzy uzytym jezykiem programowania (w szczegolnosci czy
    jest on statycznie typowany), a akceptacja klienta (definiowana
    jakkolwiek rozsadnie)?

    --
    Michal


  • 105. Data: 2011-08-17 19:57:46
    Temat: Re: jaki wybrac jezyk?
    Od: Edek <e...@g...com>

    On 08/17/2011 04:29 PM, m...@t...pl wrote:
    >
    >> Tylko że nie wykryją wszystkiego, bo 1) najpierw funkcja się musi
    >> uruchomić i 2) jak już się uruchomi, to musi zajść sytuacja że funkcja
    >> dostała niezgodny typ. To w języku dynamicznym może zależec od ścieżki,
    >> którą pójdzie program. Trochę do dupy twój pomysł z zastępowaniem
    >> statycznego typowania testami.
    > Wniosek jest prosty, ani statyczne typowanie, ani testy automatycznie
    > generowane w runtimie nie zastępują uważności (jest takie słowo?)
    > programisty. Tyle że jak w C++ statycznie zadeklaruje tablicę i dojdzie
    > do przepełnienia zakresów, to program może długo działać bez wyraźnych
    > objawów tego przepełnienia. Oczywiście w C++ można tablice tworzyć
    > tylko przez new i jeszcze można zaimplementować testy zakresów. Tyle
    > że w takim przypadku składnia Javy wydaje się przyjemniejsza.

    Trafiłeś jak nie wiem co: napisz w Javie v1 * v2 gdzie v1 i v2 to
    wektory, piewrszy przykład z setki możliwych; vector[index] += 3 drugi
    (zamiast myJavaVektor.set(index, myJavaVector.get(index) + 3)).

    Co ma new do sprawdzania zakresów. Można stworzyć klasę Tablica,
    która ma stały rozmiar i sprawdzi zakresy, compile time albo runtime
    wg potrzeb i nie używa new.

    >
    > Apropo testów przytoczę jeden z moich przypadków który chyba daje
    > dużo do myślenia. Kiedyś wprowadziłem kilka poprawek do generatora
    > posunięć w szachach. Pech chciał że miałem ważną robotę i nad
    > szachami nie mogłem dalej pracować. Niemniej generator posunięć był
    > kompletny i stał wolny komputer z sześcioma rdzeniami. Odpaliłem
    > walidacje krzyżową dwóch programów na tych sześciu rdzeniach.
    > Zgromadziłem mnóstwo gier, gry zapisałem do plików, programy
    > wybierały losowo grę i przeszukiwały drzewo gry na określoną głębokość.
    > Taki test ma nawet swoją nazwę, zwie się testem perft. No i
    > co to daje do myślenia? Sytuacja w której dwa programy dały
    > inny wynik dla tych samych danych wejściowych pojawiła się
    > pierwszy raz dopiero po dwóch tygodniach ciągłych obliczeń na
    > tych sześciu rdzeniach. Przez dwa tygodnie nie pojawiła się
    > ani razu.
    >

    Faktycznie, daje do myślenia. Ja np. myślę, że valgrind nie wymagałby
    dwóch tygodni, a byłby wart więcej niż te testy (które można
    też zrobić, ale jak rozumiem wynik wskazuje na zwykły UB). Ten test
    chyba nie ma nazwy, i valgrind niestety używa tylko jednego rdzenia.

    Edek


  • 106. Data: 2011-08-17 20:58:09
    Temat: Re: jaki wybrac jezyk?
    Od: m...@t...pl

    > On 08/17/2011 04:29 PM, m...@t...pl wrote:


    > Co ma new do sprawdzania zakresów. Można stworzyć klasę Tablica,
    > która ma stały rozmiar i sprawdzi zakresy, compile time albo runtime
    > wg potrzeb i nie używa new.
    Mechanizm sprawdzania to jeden int i porównanie. W wyniku błędnego działania
    tego inta też można uszkodzić. Tyle ma wspólnego new, że jak uszkodzisz
    coś na stercie to się szybciej wywali niż na stosie - oczywiście nie
    zawsze, ale częściej.

    > Faktycznie, daje do myślenia. Ja np. myślę, że valgrind nie wymagałby
    > dwóch tygodni, a byłby wart więcej niż te testy (które można
    > też zrobić, ale jak rozumiem wynik wskazuje na zwykły UB). Ten test
    > chyba nie ma nazwy, i valgrind niestety używa tylko jednego rdzenia.

    To w valgrinda jest zakodowany generator posunięć szachowych i sprawdza
    czy nie ma błędu? ;-)

    Pozdrawiam


    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 107. Data: 2011-08-17 21:17:40
    Temat: Re: jaki wybrac jezyk?
    Od: Edek <e...@g...com>

    On 08/17/2011 10:58 PM, m...@t...pl wrote:
    >> On 08/17/2011 04:29 PM, m...@t...pl wrote:
    >
    >
    >> Co ma new do sprawdzania zakresów. Można stworzyć klasę Tablica,
    >> która ma stały rozmiar i sprawdzi zakresy, compile time albo runtime
    >> wg potrzeb i nie używa new.
    > Mechanizm sprawdzania to jeden int i porównanie. W wyniku błędnego działania
    > tego inta też można uszkodzić. Tyle ma wspólnego new, że jak uszkodzisz
    > coś na stercie to się szybciej wywali niż na stosie - oczywiście nie
    > zawsze, ale częściej.

    Przykład dotyczy tablicy o stałym rozmiarze. W przypadku compile time,
    co ci umknęło, nie da się "uszkodzić" ani indeksu ani rozmiaru.
    W przypadku runtime można zepsuć index co najwyżej, czyli i tak po
    sprawdzeniu dostęp jest w zakresie.

    Ogólnie mam wrażenie, że niektórzy żyją w generalnym chaosie, lepiej
    wtedy w ogóle nie używać new bo i tak się zapomni zwolnić, pointery
    mogą wskazywać gdziekolwiek "uszkadzając inty" - też lepiej nie używać.
    Code and pray.

    >
    >> Faktycznie, daje do myślenia. Ja np. myślę, że valgrind nie wymagałby
    >> dwóch tygodni, a byłby wart więcej niż te testy (które można
    >> też zrobić, ale jak rozumiem wynik wskazuje na zwykły UB). Ten test
    >> chyba nie ma nazwy, i valgrind niestety używa tylko jednego rdzenia.
    >
    > To w valgrinda jest zakodowany generator posunięć szachowych i sprawdza
    > czy nie ma błędu? ;-)
    >

    :) sprawdza, czy "genialny szachista" nie spadnie pod stół już podczas
    otwarcia.


  • 108. Data: 2011-08-17 21:56:29
    Temat: Re: jaki wybrac jezyk?
    Od: m...@t...pl


    > Ogólnie mam wrażenie, że niektórzy żyją w generalnym chaosie, lepiej
    > wtedy w ogóle nie używać new bo i tak się zapomni zwolnić, pointery
    > mogą wskazywać gdziekolwiek "uszkadzając inty" - też lepiej nie używać.
    > Code and pray.
    Ludzie się mylą. Lepiej przewidzieć pomyłki i zastanowić się jak łagodzić
    ich skutki, niż wierzyć że się nie popełni błędu.

    Języków C/C++ z reguły używam do bardzo małych programów, np. w granicach
    500-1000 linii kodu. Są one na tyle małe i niezbyt skomplikowane że wiele
    się nie zastanawiam nad estetyką, metodyką, itd, a one dobrze działają.
    Dużych albo trudnych projektów w C/C++ mam raptem cztery. Jeden z nich był
    napisany zgodnie ze sztuką. Podczas pisania programu zabroniłem na głos
    używać określenia "będzie za wolno działało". Program przez wiele lat
    działa i nie stwarza problemów. Pozostałe 3 programy zostały dlatego
    napisane w C/C++ żeby dokonać optymalizacji. No i od dziś nikt nie ma
    pewności czy nie został jakiś błąd.

    Jeśli ktoś twierdzi że w C/C++ można pisać bez błędów to ja się pod tym
    podpisuję. Ale czy np. w Javie nie jest trochę łatwiej?

    > >> Faktycznie, daje do myślenia. Ja np. myślę, że valgrind nie wymagałby
    > >> dwóch tygodni, a byłby wart więcej niż te testy (które można
    > >> też zrobić, ale jak rozumiem wynik wskazuje na zwykły UB). Ten test
    > >> chyba nie ma nazwy, i valgrind niestety używa tylko jednego rdzenia.
    Valgrind to dobra rzecz, ale gdy ostatnio chciałem nim sprawdzić program,
    to były błędy... w kompilatorze. Muszę jeszcze raz spróbować. Są jakieś
    alternatywne narzędzia dla valgrinda?
    Pozdrawiam

    > :) sprawdza, czy "genialny szachista" nie spadnie pod stół już podczas
    > otwarcia.
    To akurat był błąd typu: brak ifa :) Pomoże jedynie walidacja krzyżowa z
    innym programem który tego ifa ma :)
    Pozdrawiam



    --
    Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


  • 109. Data: 2011-08-17 21:59:50
    Temat: Re: jaki wybrac jezyk?
    Od: Edek <e...@g...com>

    On 08/17/2011 05:11 PM, Maciej Sobczak wrote:
    > On Aug 17, 3:30 pm, Michal Kleczek<k...@p...onet.pl> wrote:
    >
    >> Przy takim podejsciu to zaden jezyk nie ma, bo chyba (tutaj - fakt -
    >> potrzebuje wsparcia mocniejszych teoretykow) nie da sie zrobic jezyka
    >> "turing complete" bez operacji "unsafe" czyli nieweryfikowalnych
    >> statycznie (takich jak rzutowanie).
    >
    > A tak żeby było ciekawiej, zapytam: po co rzutowanie [*]?
    > Udało mi się napisać parę programów bez rzutowania. W szczególności
    > "Hello World" nie używa rzutowania, ale dłuższe programy też się da.
    > Najwyraźniej mógłbym te programy napisać również w języku, który
    > rzutowania w ogóle nie ma.

    Przez ostatnie dwa lata reinterpret_cast użyłem chyba raz (nie mogę
    sobie przypomnieć po co zamieniałem * na int, chyba po to, żeby
    sprawdzić alignment w celu weryfikacji zachowania kompilatora
    w testach. Niektóre nie alignowały odpowiednio zmiennych na stosie.).

    Void* używam często i gęsto, gdy nie ma nullptr; poza tym, nie
    przypomninam sobie. Może memcpy.

    Ale, żeby być uczciwym, użycie static_cast jest czasami przydatne,
    konkretnie w abstrakcyjnych klasach instancjonowanych z podklasą jako
    własnym parametrem, itp przyklady. Na C style to mam warninga.

    Edek


  • 110. Data: 2011-08-17 22:49:14
    Temat: Re: jaki wybrac jezyk?
    Od: Edek <e...@g...com>

    On 08/17/2011 11:56 PM, m...@t...pl wrote:
    >
    >> Ogólnie mam wrażenie, że niektórzy żyją w generalnym chaosie, lepiej
    >> wtedy w ogóle nie używać new bo i tak się zapomni zwolnić, pointery
    >> mogą wskazywać gdziekolwiek "uszkadzając inty" - też lepiej nie używać.
    >> Code and pray.
    > Ludzie się mylą. Lepiej przewidzieć pomyłki i zastanowić się jak łagodzić
    > ich skutki, niż wierzyć że się nie popełni błędu.
    >
    > Języków C/C++ z reguły używam do bardzo małych programów, np. w granicach
    > 500-1000 linii kodu. Są one na tyle małe i niezbyt skomplikowane że wiele
    > się nie zastanawiam nad estetyką, metodyką, itd, a one dobrze działają.
    > Dużych albo trudnych projektów w C/C++ mam raptem cztery. Jeden z nich był
    > napisany zgodnie ze sztuką. Podczas pisania programu zabroniłem na głos
    > używać określenia "będzie za wolno działało".

    Brutalne rozwiązanie, szkoda że czasem tak trzeba.

    Program przez wiele lat
    > działa i nie stwarza problemów. Pozostałe 3 programy zostały dlatego
    > napisane w C/C++ żeby dokonać optymalizacji. No i od dziś nikt nie ma
    > pewności czy nie został jakiś błąd.

    To ja ci powiem, że został popełniony jeden generalny. Kiedyś faktycznie
    optymalizacja to assembler albo bardzo blisko. Dzisiaj, fakt, jakieś
    multimedia i podobne niektórzy jeszcze rzeźbią w assemblerze, czy
    też wstawki typu atomiki, których dotychczas nie było, i ok. Natomiast
    większość optymalizacji - o ile wiem - to umiejętne użycie kompilatora.
    Czasami wydaje mi się, że niektórzy nie uświadomili sobie, że
    zarówno procki i kompilatory "deczko" się zmieniły przez ostatnie
    dziesięć lat. Oczywiście, niektóre rzeczy były i są kosztowne,
    trzeba kod pisać inaczej, żeby kompilator mógł go optymalizować,
    bo robi tylko te przekształcenia, które może zrobić mając dostępne
    założenia - zazwyczaj wystarczy mu przeszkody usunąć z drogi. Nie jest
    to darmo, ale nie ma to większego wpływu na pisanie poprawnego
    kodu. Range check w przypadku większych pętli zazwyczaj sprowadza się
    do jednorazowego >=start <end - co i tak kompilator musi zrobić,
    żeby np. wygenerować prologi przekształconych pętli, więc taki check
    w kodzie źródłowym paradoksalnie ułatwia mu pracę (ok, jak to zwykle
    z optymalizacjami bywa: czasami, nie zawsze, zależy, itd.).

    >
    > Jeśli ktoś twierdzi że w C/C++ można pisać bez błędów to ja się pod tym
    > podpisuję. Ale czy np. w Javie nie jest trochę łatwiej?
    >

    Java ma inne zalety: jest ogólnie prostsza i ma reflection. Moim zdaniem
    jest za mało ekspresywna, muszę się stanowczo dużo więcej naklepać,
    żeby uzyskać ten sam efekt. Przy małym i prostym kodzie tego może nie
    być widać; przy frameworkach FWIW też nie.

    Co do optymalizacji i Javy, to różnie mówią. Znam testy gdzie Java i C++
    były podobne. Znam takie, gdzie Java była wolniejsza. Znam też takie,
    że w HPC używają Javy, ale tylko ze słyszenia - kiedyś googlnę, nie
    spędza mi to snu z powiek łagodnie mówiąc.

    >>>> Faktycznie, daje do myślenia. Ja np. myślę, że valgrind nie wymagałby
    >>>> dwóch tygodni, a byłby wart więcej niż te testy (które można
    >>>> też zrobić, ale jak rozumiem wynik wskazuje na zwykły UB). Ten test
    >>>> chyba nie ma nazwy, i valgrind niestety używa tylko jednego rdzenia.
    > Valgrind to dobra rzecz, ale gdy ostatnio chciałem nim sprawdzić program,
    > to były błędy... w kompilatorze. Muszę jeszcze raz spróbować. Są jakieś
    > alternatywne narzędzia dla valgrinda?
    > Pozdrawiam
    >

    Są. Ale sam valgrind ma "suppresions" czy jakoś tak to się nazywa, co
    obchodzi znane problemy z libami, ma też opcję "wygeneruj suppresion",
    jak już nie ma innego wyjścia pod każdym upierdliwcem wypluje, jak go
    wyłączyć.

    Nie znam opcji pod Win, mam malutkie doświadczenie.


    >> :) sprawdza, czy "genialny szachista" nie spadnie pod stół już podczas
    >> otwarcia.
    > To akurat był błąd typu: brak ifa :) Pomoże jedynie walidacja krzyżowa z
    > innym programem który tego ifa ma :)
    > Pozdrawiam

    Testy tego możliwie małego kawałka kodu też. Nie pisałem algorytmów
    szachowych, nie wiem, czy dają się tak podzielić. No i fakt, valgrind
    braku ifa nie wyniucha - szkoda ;) Przydałby się tool, który bierze dwa
    algorytmy, powiedzmy, że różniące się nie zasadą działania, tylko
    użytymi strukturami danych, i mówi, czy są równoważne.

    Edek



strony : 1 ... 10 . [ 11 ] . 12 . 13


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: