-
1. Data: 2013-12-20 21:03:51
Temat: Detekcja wzorców w języku, metody
Od: Sebastian Biały <h...@p...onet.pl>
Mam język imperatywny. Nie ważne jaki, wszystkie są w zasadzie identyczne.
Język ten słuzy do programowania w pewnej wąskiej grupie zastosowań,
gdzie używane są pewne charakterystyczne "wzorce projektowe".
Nie mają one za duzo wspólnego z wzorcami OO, ale po chwili namysłu
odpowiadam, że w zasadzie chodzi o coś bardzo podobnego w idei detekcji.
Programista patrząc w kod widzi własnie taki wzorzec.
Teraz ja chciałbym spojrzeć w kod i go dostrzec. Automatycznie.
Kod ma masę szumu. Od trywializmów typu komentarze, przez i++, ++i a
kończąc na wymianach całych bloków kodu na inne analogi. Ale to dalej
implementacja wzorca, tylko czasem nie wprost.
Na razie ostrożnie badam teren. To co udało mi się przeczytać
publikowane na przestrzeni ostatnich kilku lat (i dostepne od reki z
Googla) sprowadza się zazwyczaj do prostego mechnizmu:
1) przeparsuj i zbuduj AST
2) AST->Prolog
Prolog czasem z odatkami typu fuzzy logic. Prawie cała literatura kręci
się wokół OO design patterns w Javie.
Ale ponieważ tematu nie znam i może mam złe przykłady to:
a) Czy AST->Prolog lub inny język logiczny jest obecnie najczęstszym
rozwiązaniem? Oczywiście wliczając w to Prolog-like embedded engines.
b) Może istnieje jakiś framework który jest na tyle abstrakcyjny że nie
zależy od skladni badanego języka? Coś do badania składni ogólnie co
spełnia moje marzenia o klasyfikacji?
c) Może to się robi kompletnie inaczej?
Mam *wrażenie* że detekcja wzorców w kodzie jest powszechna w
narzedziach typu lint. Interesuje mnie chwilowo podejście akademickie.
Typu "czy to w ogóle jest mozliwe" więc nie szukam rozwiązań
produkcyjnych, ale bardziej potwierdzenia/zaprzeczenia tezy że się da.
Żeby była jasność: wyobrażam sobie takie coś:
to Fred
{
jeśli zmienna x jest int
jeśli jest uzywa w pętli
jesli zaczyna się od 0 i kończy na zmiennej y inkrementując co 2
jesli w srodku jest przynajmniej jeden break
jesli w środku nie ma continue
jesli w srodku mamy pętlę while gdzie x jest zmniejszane
}
Algorytm ma odpowiedzieć na pytanie "czy to jest Fred" po zobaczeniu
niezbędnego kawalka kodu.
Zagadnienia parsowania są nieistotne. Parser jest.
-
2. Data: 2013-12-20 22:26:38
Temat: Re: Detekcja wzorców w języku, metody
Od: Adam Klobukowski <a...@g...com>
On Friday, 20 December 2013 21:03:51 UTC+1, Sebastian Biały wrote:
<ciach>
Najprościej chyba dało by się wykryć singletona.
Co do innych, myślę że trzeba sobie zrobić graf interakcji pomiędzy klasami, co co
wywułuje, jakie są argumenty itp. Takie grafy powinno dac się automatycznie
porównywać z 'wzorcowymi' grafami wzorców projektówych.
AdamK
-
3. Data: 2013-12-21 03:46:31
Temat: Re: Detekcja wzorców w j?zyku, metody
Od: A.L. <a...@a...com>
On Fri, 20 Dec 2013 21:03:51 +0100, Sebastian Bia?y
<h...@p...onet.pl> wrote:
>Mam język imperatywny. Nie ważne jaki, wszystkie są w zasadzie identyczne.
>
>Język ten słuzy do programowania w pewnej wąskiej grupie zastosowań,
>gdzie używane są pewne charakterystyczne "wzorce projektowe".
>
>Nie mają one za duzo wspólnego z wzorcami OO, ale po chwili namysłu
>odpowiadam, że w zasadzie chodzi o coś bardzo podobnego w idei detekcji.
>Programista patrząc w kod widzi własnie taki wzorzec.
>
>Teraz ja chciałbym spojrzeć w kod i go dostrzec. Automatycznie.
>
>Kod ma masę szumu. Od trywializmów typu komentarze, przez i++, ++i a
>kończąc na wymianach całych bloków kodu na inne analogi. Ale to dalej
>implementacja wzorca, tylko czasem nie wprost.
>
>Na razie ostrożnie badam teren. To co udało mi się przeczytać
>publikowane na przestrzeni ostatnich kilku lat (i dostepne od reki z
>Googla) sprowadza się zazwyczaj do prostego mechnizmu:
>
>1) przeparsuj i zbuduj AST
>2) AST->Prolog
Co to jest AST-> Prolog, i co w ogole Prolog ma do rzeczy?
Caly ped do wzorcow stracil rozped dosyc dawno temu - patrzac na kod
nei da sie wyodrebnic wzorcow. Inaczej niz w przypadku ukladow
elektronicznych - inzynier elektronik, patzrac na schemat, od razu
powie co jest co.
Patzrac na program, ani go analizujac czymkolwiek, wyodrebnic wzorcow
sie nie da. Miedzy innymi dlatego ze wzorce zdefiniowane sa metoda
machania rekami
A.L.
-
4. Data: 2013-12-21 03:47:18
Temat: Re: Detekcja wzorców w języku, metody
Od: A.L. <a...@a...com>
On Fri, 20 Dec 2013 13:26:38 -0800 (PST), Adam Klobukowski
<a...@g...com> wrote:
>. Takie grafy powinno dac się automatycznie porównywać z 'wzorcowymi' grafami
wzorców projektówych.
A gdzie takie grafy sa zdefiiowane?
A.L.
-
5. Data: 2013-12-21 08:29:26
Temat: Re: Detekcja wzorców w j?zyku, metody
Od: Sebastian Biały <h...@p...onet.pl>
On 2013-12-21 03:46, A.L. wrote:
>> 1) przeparsuj i zbuduj AST
>> 2) AST->Prolog
> Co to jest AST-> Prolog, i co w ogole Prolog ma do rzeczy?
http://cs.nju.edu.cn/~gchen/paper/gcc2003/pdf/097.pd
f
http://ir.nul.nagoya-u.ac.jp/jspui/bitstream/2237/14
977/1/406.pdf
Takich artykułów gdzie Prolog uzywany jest do ostatecznej klasyfikacji
jest ogromna ilość i prawdę mówiąc z dziesiątek rzeczy osiągalnych na
google nie widziałem nic specjalnie innego. Dlatego pytam, czy oznacza
to rownież aktualny stan wiedzy. Daty są raczej w większości >2005.
> Caly ped do wzorcow stracil rozped dosyc dawno temu - patrzac na kod
> nei da sie wyodrebnic wzorcow.
I tutaj mam zrelaksowane założenia - jesli nie wykryje - nic się nie stanie.
> Inaczej niz w przypadku ukladow
> elektronicznych - inzynier elektronik, patzrac na schemat, od razu
> powie co jest co.
O i tu masz znakomity przykład potrzeby detekcji. Narzędzia syntezy
*muszą* wykrywać wzorce "elektroniczne" w kodzie HDL aby poprawnie
wykorzystywać zasoby. W przeciwnym wypadku idą do śmieci bo konkurencja
potrafi.
> Patzrac na program, ani go analizujac czymkolwiek, wyodrebnic wzorcow
> sie nie da. Miedzy innymi dlatego ze wzorce zdefiniowane sa metoda
> machania rekami
To wystarczająca definicja. Patrzący na te wzorce używa tych samych
definicji. Czyli ich jakość nie jest istotna. Istotne dla mnie jest
tylko sensowniejsze niż przypadkowe wykrycie. "O, tu masz chyba Freda"
będzie ok.
-
6. Data: 2013-12-21 08:32:20
Temat: Re: Detekcja wzorców w języku, metody
Od: Sebastian Biały <h...@p...onet.pl>
On 2013-12-20 22:26, Adam Klobukowski wrote:
> Najprościej chyba dało by się wykryć singletona.
Nie chodzi o dowód czy da się wykryć *coś*. Chodzi o dowód że da się
wykryć *mój*. Rozglądam się za czymś co pozwala mi na swobodę eksperymentu.
> Co do innych, myślę że trzeba sobie zrobić graf interakcji pomiędzy klasami
Nie ma klas. Jak mówiłem to nie jest OO. Z grubsza to zwykły kod
strukturalny.
-
7. Data: 2013-12-21 08:56:12
Temat: Re: Detekcja wzorców w języku, metody
Od: Adam Klobukowski <a...@g...com>
On Saturday, 21 December 2013 03:47:18 UTC+1, A. L. wrote:
> On Fri, 20 Dec 2013 13:26:38 -0800 (PST), Adam Klobukowski
>
> <a...@g...com> wrote:
>
> >. Takie grafy powinno dac si� automatycznie por�wnywa� z 'wzorcowymi'
grafami wzorc�w projekt�wych.
>
> A gdzie takie grafy sa zdefiiowane?
Nigdzie. Trzeba sobie je samemu wymyśleć (na podstawie definicji wzorców projektowych
rzecz jasna).
AdamK
-
8. Data: 2013-12-21 17:47:56
Temat: Re: Detekcja wzorców w j?zyku, metody
Od: A.L. <a...@a...com>
On Sat, 21 Dec 2013 08:29:26 +0100, Sebastian Biały
<h...@p...onet.pl> wrote:
>On 2013-12-21 03:46, A.L. wrote:
>>> 1) przeparsuj i zbuduj AST
>>> 2) AST->Prolog
>
>> Co to jest AST-> Prolog, i co w ogole Prolog ma do rzeczy?
>
>http://cs.nju.edu.cn/~gchen/paper/gcc2003/pdf/097.p
df
>http://ir.nul.nagoya-u.ac.jp/jspui/bitstream/2237/1
4977/1/406.pdf
>
>Takich artykułów gdzie Prolog uzywany jest do ostatecznej klasyfikacji
>jest ogromna ilość i prawdę mówiąc z dziesiątek rzeczy osiągalnych na
>google nie widziałem nic specjalnie innego. Dlatego pytam, czy oznacza
>to rownież aktualny stan wiedzy. Daty są raczej w większości >2005.
>
>> Caly ped do wzorcow stracil rozped dosyc dawno temu - patrzac na kod
>> nei da sie wyodrebnic wzorcow.
>
>I tutaj mam zrelaksowane założenia - jesli nie wykryje - nic się nie stanie.
>
>> Inaczej niz w przypadku ukladow
>> elektronicznych - inzynier elektronik, patzrac na schemat, od razu
>> powie co jest co.
>
>O i tu masz znakomity przykład potrzeby detekcji. Narzędzia syntezy
>*muszą* wykrywać wzorce "elektroniczne" w kodzie HDL aby poprawnie
>wykorzystywać zasoby. W przeciwnym wypadku idą do śmieci bo konkurencja
>potrafi.
>
>> Patzrac na program, ani go analizujac czymkolwiek, wyodrebnic wzorcow
>> sie nie da. Miedzy innymi dlatego ze wzorce zdefiniowane sa metoda
>> machania rekami
>
>To wystarczająca definicja. Patrzący na te wzorce używa tych samych
>definicji. Czyli ich jakość nie jest istotna. Istotne dla mnie jest
>tylko sensowniejsze niż przypadkowe wykrycie. "O, tu masz chyba Freda"
>będzie ok.
Personalnie, uwazam to za zawracanie glowy. Dopoki sie nie pojawi
formalny jezyk do opisywania wzorcow, to takie papiery jek powyzej
mozna....
Przy czym przez "fornalny jezyk" rozumiem formalny jezyk. Tak zwany
UML nie jest ani jezykiem, ani nie jest formalny
A.L.
-
9. Data: 2013-12-21 18:49:34
Temat: Re: Detekcja wzorców w j?zyku, metody
Od: Sebastian Biały <h...@p...onet.pl>
On 2013-12-21 17:47, A.L. wrote:
> Personalnie, uwazam to za zawracanie glowy. Dopoki sie nie pojawi
> formalny jezyk do opisywania wzorcow, to takie papiery jek powyzej
> mozna....
Hmmm a znasz jakieś próby tworzenia takowego?
-
10. Data: 2013-12-21 20:34:44
Temat: Re: Detekcja wzorców w j?zyku, metody
Od: A.L. <a...@a...com>
On Sat, 21 Dec 2013 18:49:34 +0100, Sebastian Biały
<h...@p...onet.pl> wrote:
>On 2013-12-21 17:47, A.L. wrote:
>> Personalnie, uwazam to za zawracanie glowy. Dopoki sie nie pojawi
>> formalny jezyk do opisywania wzorcow, to takie papiery jek powyzej
>> mozna....
>
>Hmmm a znasz jakieś próby tworzenia takowego?
Pogogluj na
formal language for programming patterns
To i owo jest, sa proby, ale nic konkretnego
A.L.