-
81. Data: 2017-08-10 12:17:44
Temat: Re: Rust
Od: "M.M." <m...@g...com>
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
-
82. Data: 2017-08-10 14:19:16
Temat: Re: Rust
Od: Maciej Sobczak <s...@g...com>
> Automatyczne sprawdzanie poprawności to "święty Graal" informatyki.
Może nie informatyki, ale w weryfikacji jako działce inżynierii oprogramowania, na
pewno by się przydało.
> Co prawda udowodniono matematycznie że nie może istnieć maszyna Turinga
> sprawdzająca poprawność innej maszyny Turinga
Nic nie szkodzi. Nikt zdrowy nie robi maszyn Turinga, więc fakt, że jakaś tam jeszcze
inna maszyna Turinga nie może istnieć, nie jest dla nikogo żadnym dramatem.
Ciekawszym tematem jest napisanie programu, np. w C, do sprawdzania poprawności
innego programu, np. w C.
--
Maciej Sobczak * http://www.inspirel.com
-
83. Data: 2017-08-10 14:51:57
Temat: Re: Rust
Od: slawek <f...@f...com>
On Thu, 10 Aug 2017 02:34:32 -0700 (PDT), g...@g...com
wrote:
> Naprawdę byłoby fajnie, gdybyś
A mi szczerze wisi co steruje bramą od garażu: może być nawet Proust
a nie Rust.
-
84. Data: 2017-08-10 14:56:38
Temat: Re: Rust
Od: slawek <f...@f...com>
On Thu, 10 Aug 2017 03:17:44 -0700 (PDT), "M.M." <m...@g...com>
wrote:
> A matematycy potrafią sprawdzać.
Nie potrafią. Patrz tw. Goedela. Muszą być aksjomaty. A tych się nie
da sprawdzić. Nie dlatego że starożytni Grecy zrobili tabu, ale
dlatego że nie jest to możliwe.
-
85. Data: 2017-08-10 14:57:50
Temat: Re: Rust
Od: slawek <f...@f...com>
On Thu, 10 Aug 2017 05:19:16 -0700 (PDT), Maciej Sobczak
<s...@g...com> wrote:
> Nic nie szkodzi. Nikt zdrowy nie robi maszyn Turinga
Robi. Dla zabawy, np. z klocków Lego.
-
86. Data: 2017-08-10 15:21:35
Temat: Re: Rust
Od: "M.M." <m...@g...com>
On Thursday, August 10, 2017 at 2:19:17 PM UTC+2, Maciej Sobczak wrote:
> > Automatyczne sprawdzanie poprawności to "święty Graal" informatyki.
>
> Może nie informatyki, ale w weryfikacji jako działce inżynierii oprogramowania, na
pewno by się przydało.
>
> > Co prawda udowodniono matematycznie że nie może istnieć maszyna Turinga
> > sprawdzająca poprawność innej maszyny Turinga
>
> Nic nie szkodzi. Nikt zdrowy nie robi maszyn Turinga, więc fakt, że jakaś tam
jeszcze inna maszyna Turinga nie może istnieć, nie jest dla nikogo żadnym dramatem.
>
> Ciekawszym tematem jest napisanie programu, np. w C, do sprawdzania poprawności
innego programu, np. w C.
Dlaczego? Na MT też można napisać program w C, jakie różnice masz
na myśli? Z teoretycznego punktu widzenia jest ważna różnica,
ale pomiędzy komputerem a MT, nie pomiędzy językiem. Komputer ma
(póki co) skończoną pamięć, MT nieskończoną.
Pozdrawiam
-
87. Data: 2017-08-10 15:25:41
Temat: Re: Rust
Od: "M.M." <m...@g...com>
On Thursday, August 10, 2017 at 2:57:08 PM UTC+2, slawek wrote:
> On Thu, 10 Aug 2017 03:17:44 -0700 (PDT), "M.M." <m...@g...com>
> wrote:
> > A matematycy potrafią sprawdzać.
>
> Nie potrafią. Patrz tw. Goedela. Muszą być aksjomaty. A tych się nie
> da sprawdzić. Nie dlatego że starożytni Grecy zrobili tabu, ale
> dlatego że nie jest to możliwe.
Zależy o jakie sprawdzenie chodzi. Zwykle sam sposób sprawdzania jest
także aksjomatem, dowodzenie przez indukcję jest aksjomatem. Na wiarę
przyjmujemy, że przeprowadzony dowód przez indukcję oznacza, że
twierdzenie jest prawdziwe.
Natomiast praktyczna i teoretyczna przydatność systemu formalnego
wynikłego z aksjomatów jest pewnym sposobem sprawdzania aksjomatów -
albo są przydatne, albo nie.
Pozdrawiam
-
88. Data: 2017-08-10 18:06:59
Temat: Re: Rust
Od: "AK" <n...@n...net>
Użytkownik <g...@g...com> napisał:
> C# nie jest ulepszeniem C.
Masz 100% racji.
Ba! C# nawet nie "siedzialo" kolo C.
Siedzialo za to baaaardzo blisko Javy (szczegolnie J++:).
PS: A bylo to tak. Sun raptem cofnal pozwolennie na adoptowac swego niechcianego,
ale wszak calkiem fajnego w swiecie Win dziecka (J++) wiec, MS urodzil swoje (.NET,
C#)
AK
-
89. Data: 2017-08-10 21:20:12
Temat: Re: Rust
Od: "M.M." <m...@g...com>
On Thursday, August 10, 2017 at 8:39:23 PM UTC+2, slawek wrote:
> On Thu, 10 Aug 2017 18:06:59 +0200, "AK" <n...@n...net> wrote:
> > Ba! C# nawet nie "siedzialo" kolo C.
>
> Siedziało, siedziało.
>
> C# jest - według MS - lepszym językiem niż C++. Tak że programiści
> używający dotychczas C++ powinni przesiąść się na C#. Ogólnie jest
> językiem z klamrowymi nawiasami, czyli bliżej mu do C niż do Algolu,
> Fortranu, Lispa czy Basha. Oczywiście jest językiem OOP, ale C++ też
> jest (a zgadzamy się że C++ wywodzi się z C).
>
> Oczywiście że są "podobieństwa" pomiędzy Javą a C#. Twórcy Javy
> celowo zrobili wiele rzeczy tak jak w C++ (choćby operator ==), więc
> i w ten sposób C# dziedziczy niektóre rzeczy po C++, a więc także po
> C.
Panowie, powiedzcie mi, co to jest język programowania? Jak używacie
tego pojęcia? Bo z wyglądu, szczególnie gdy w C++ nie nadużywa się
ficzerów (domyślcie się co mam na myśli), to Java, C# i C++ naprawdę
są podobne. Myślę, że w C# bardzo przyjemnie się programuje, chociaż
mam znikome doświadczenie.
Pozdrawiam
-
90. Data: 2017-08-10 22:06:06
Temat: Re: Rust
Od: slawek <f...@f...com>
On Thu, 10 Aug 2017 12:20:12 -0700 (PDT), "M.M." <m...@g...com>
wrote:
> [Czy] w C# bardzo przyjemnie się programuje
C# jest niesamowicie przyjemny, bo Visual Studio niemal samo pisze
programy, wszystko podpowiada itd. Odśmiecanie działa magicznie, są
lambdy itp. wynalazki. A co najważniejsze - jest ładnie, bo MS
wymyślił (czego nie ma Java) słowo kluczowe partial. Więc brzydkie
rzeczy są zamiatane do innych plików.
Jednak jest haczyk. C# to przejście na Ciemną Stronę Mocy, czyli
mocne uzależnienie od MS. Jeżeli ktoś tego nie chce lepiej niech
trzyma się Javy. Praktycznie niemal to samo, ale teoretycznie program
w Javie ruszy na czymkolwiek, z Rasberry Pi i Linuksem włącznie.
Java też nie jest aż tak swobodna. Łapę trzyma Oracle i podobno nawet
groził procesami za niekupienie licencji (potrzebna dla embeded).