eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingRust › Re: Rust
  • X-Received: by 10.31.164.205 with SMTP id n196mr64304vke.22.1502360265171; Thu, 10
    Aug 2017 03:17:45 -0700 (PDT)
    X-Received: by 10.31.164.205 with SMTP id n196mr64304vke.22.1502360265171; Thu, 10
    Aug 2017 03:17:45 -0700 (PDT)
    Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin2!goblin.stu.neva.ru!weretis.net!feeder6.news.weretis.net!feeder
    .usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews
    .com!nntp.giganews.com!w51no2042533qtc.0!news-out.google.com!i9ni125qte.0!nntp.
    google.com!w51no2042528qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups
    .com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Thu, 10 Aug 2017 03:17:44 -0700 (PDT)
    In-Reply-To: <omgs3i$s8o$1@node2.news.atman.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=77.254.42.28;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 77.254.42.28
    References: <om4qli$mfm$1@node2.news.atman.pl>
    <8...@g...com>
    <a...@g...com>
    <om9hfe$4up$2@node2.news.atman.pl>
    <a...@n...v.pl>
    <omfp58$92v$1@node1.news.atman.pl>
    <a...@n...v.pl>
    <omgs3i$s8o$1@node2.news.atman.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <c...@g...com>
    Subject: Re: Rust
    From: "M.M." <m...@g...com>
    Injection-Date: Thu, 10 Aug 2017 10:17:45 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Lines: 104
    Xref: news-archive.icm.edu.pl pl.comp.programming:210947
    [ ukryj nagłówki ]

    On Thursday, August 10, 2017 at 7:48:35 AM UTC+2, Borneq wrote:

    > Co prawda udowodniono matematycznie że nie może istnieć maszyna Turinga
    > sprawdzająca poprawność innej maszyny Turinga,

    A matematycy potrafią sprawdzać. Czy to by oznaczało, że człowiek jest
    komputerem lepszej jakości niż MT?

    Moim zdaniem może sprawdzać, co łatwo udowodnić: Na nieskończonej
    taśmie MT mamy pary uporządkowanie (X,Y), gdzie:

    X) ciąg instrukcji
    Y) zero lub jedynka (lub informacje o problemie stopu, itd)

    Pary są oddzielone symbolem specjalnym, który nie pojawia się w żadnym
    programie. Przykładowo, rozpatrujemy programy o N instrukcjach, więc
    zero to jest symbol N+1, jedynka N+2, symbol specjalny N+3.
    Pary na taśmie są uporządkowane według programów, tzn kolejne programy z
    taśmy po zdekodowaniu są kolejnymi liczbami naturalnymi. Zadajemy
    MT ciąg instrukcji. Maszyna dekoduj go na liczbę, następnie omija
    tyle znaków specjalnych, ile równa jest ta liczba. Innymi słowy: odszukuje
    zadany ciąg instrukcji. Po odnalezionym ciągu instrukcji znajduje zero lub
    jedynkę lub jeszcze jakieś inne ciekawe informacje. Jeśli znalazła zero, to
    daje odpowiedź że program jest niepoprawny. Jeśli znalazła jedynkę, to
    daje odpowiedź że ciąg instrukcji jest poprawny (w jakimś sensie).

    MT może udzielać odpowiedzi czy program jest poprawny, czy nie, w czasie
    wykładniczym względem ilości instrukcji w programie. Gdyby na MT można
    było zaimplementować hash-table, to by mogła udzielać odpowiedzi w
    czasie O(1), ale z tego co wiem, na taśmie nie można.

    Poza tym można zdefiniować minimalną i maksymalną pozycję głowicy. Jeśli
    głowica przekroczy którąś z tych pozycji, to program uznajemy za niepoprawny.
    W ramach zakresu od min do maks może istnieć skończona ilość stanów, równa
    N ^ (max-min+1), gdzie N to ilość symboli. Na drugiej maszynie można
    każdemu stanowi przypisać zero lub jedynkę. Druga maszyna może symulować
    pierwszą maszynę dla skończonej ilości danych wejściowych. Gdy pierwsza
    maszyna chociaż dla jednych danych osiągnie stan z tabeli oznaczony
    zerem, to druga maszyna udzieli odpowiedzi że program jest niepoprawny.
    Podobnie, jeśli pierwsza maszyna chociaż dla jednych danych przekroczy
    zakres <min,max>, to też druga udzieli odpowiedzi że program jest
    niepoprawny. Druga maszyna w trakcie symulowania zapamiętuje stany
    pierwszej maszyny, które nie są zdefiniowane. Jeśli któryś ze stanów
    powtórzy się, to druga maszyna udzieli odpowiedzi, że pierwsza maszyna
    się pętli w nieskończoność dla przynajmniej jednego zestawu danych
    wejściowych.

    Czyli dużo można, ale są to zazwyczaj możliwości teoretyczne, bo
    wymagają czasu wykładniczego. Poza tym jest drugi problem: skąd wziąć
    maszynę z odpowiedziami który stan jest poprawny, albo który
    ciąg instrukcji jest poprawny? Niemniej, to że nie umiemy podać
    takiego programu z odpowiedziami, nie uprawnia nas do mówienia
    że W OGÓLE nie można automatycznie weryfikować.



    > ale z jednej strony w
    > Javie stosuje się system asercji czy unit testy, w C++ jest biblioteka
    > GSL i odpowiedni plugin sprawdzający zgodność z nią.
    > A Rust wymusza swoje reguły. Trudno początkującemu w Rust jest wręcz
    > nieraz dla pewnych przypadków napisać kod który się skompiluje (te
    > problemy z mutualnością) ale to jest wymuszone automatycznie, nie musi
    > tego sprawdzać programista i czegoś przeoczyć.

    Ja bym chciał jakiś tego typu język, ale żeby można było go całkowicie
    skompilować do kodu maszynowego i żeby dostępne optymalizatory generowały
    tak wydajny kod jak dla C++.

    Pozdrawiam

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: