Komputery z DNA bardziej przyjazne użytkownikowi
Biologiczne komputery wykonane z DNA i innych molekuł, istnieją w wysoce wyspecjalizowanych laboratoriach. Potrafią wykonywać coraz bardziej skomplikowane zadania, ale ich obsługa nie jest prosta.
Badacze z izraelskiego Instytutu Weizmanna stworzyli właśnie przyjazny użytkownikowi komputer biologiczny, który jest w stanie dokonywać skomplikowanych obliczeń.
Pierwsze autonomiczne programowalne urządzenie wykorzystujące DNA powstało w 2001 roku w Instytucie Weizmanna, a jego twórcami byli profesor Ehud Shapiro wraz z zespołem. Niewielka molekuła, biliony razy mniejsza od kropli wody, była w stanie wykonać proste operacje, takie jak np. porównanie listy zer i jedynek i stwierdzenie, czy ich liczba była sobie równa.
W 2004 roku ulepszona wersja komputera wykryła w próbce komórki rakowe i uwolniła molekuły, które je zniszczyły. W przyszłości takie biokomputery mogą być wstrzykiwane do ciała pacjenta, gdzie będą wykrywały choroby i je zwalczały.
Teraz profesor Shapiro wraz z doktorantami Tomem Ranem i Shaiem Kaplanem poinformowali o skonstruowaniu biokomputera, zdolnego do "myślenia". Potrafi on dedukować, na zasadzie zaproponowanej przez Arystotelesa, wykorzystując operatory "jeśli", "to". Innymi słowy, gdy biokomputer otrzyma zbiór zasad, np. "Wszyscy ludzie są śmiertelni", "Sokrates jest człowiekiem" to prawidłowo odpowie na pytanie "Czy Sokrates jest śmiertelny".
Biologicznemu komputerowi wgrano całą serię zasad i zadawano skomplikowane pytania. Wszystkie uzyskane odpowiedzi były prawidłowe.
Jednocześnie Shapiro i jego zespół opracowali kompilator, który "tłumaczy" dane pomiędzy wysokimi językami programowania a kodem używanym do programowania DNA. Biokomputer został zbudowany z licznych nici DNA, które reprezentowały poszczególne zasady, dane i zapytania. Część z nici wyposażono w rodzaj lampy błyskowej emitującej zielone światło. I to właśnie w odpowiednich błyskach światła zakodowane były odpowiedzi. Całą bazę danych dla biokomputera umieszczono w kroplach wody.
Komentarze (14)
Filon, 4 sierpnia 2009, 23:45
To brzmi jak z filmu terminator bunt maszyn. Czy zbyt duża ingerencja komputerów w nasz ORGANIZM nie będzie potencjalnym niebezpieczeństwem dla naszej rasy?
lililea, 5 sierpnia 2009, 11:57
Co to jest wysoki język programowania :/ wysokopoziomowy :/ ?
Pomyśleć jakie lekkie można by zrobić laptopy, i czym zasilane ?
Mariusz Błoński, 5 sierpnia 2009, 15:47
To język bardziej zrozumiały dla człowieka, łatwiejszy do nauczenia się. Jest tak przerobiony, że np. zawiera słowa z prawdziwego języka, za pomocą których wydaje się polecenia programistyczne. Dla komputera jest on bezpośrednio niezrozumiały. Dopiero po kompilacji (czyli automatycznym przetłumaczeniu tego języka na inny) maszyna jest w stanie wykonać polecenia.
lililea, 5 sierpnia 2009, 15:50
Te cechy posiada każdy język programowania.
czesiu, 5 sierpnia 2009, 16:14
W skrócie im wyższy poziom języka programowania tym większy poziom abstrakcji.
Łopatologicznie:
Zamiast pisania 100 linijek zawiłego kodu do wyświetlenia kwadratu wystarczy abyś wpisała
Kwadrat(poz x,poz y, rozmiar), gdzie x,y oznaczają np. górny lewy wierzchołek, o resztę martwi się kompilator.
Twoje stwierdzenie przejawia ignorancję.
Zobacz proszę i porównaj na wikipedii artykuły:
http://pl.wikipedia.org/wiki/Kod_maszynowy
http://pl.wikipedia.org/wiki/Assembler
http://pl.wikipedia.org/wiki/Java
lililea, 5 sierpnia 2009, 18:28
To są fakty. Każdy język programowania posiada te cechy.
Asembler ani kod maszynowy nie są językami programowania, języki progamowania zaczynają się od poziomu Ansi C.
Pojęcie wysokiego języka programowania nie istanieje.
Wydaje mi się że mogłoby tu chodzić o języki funkcjonalne.
lililea, 5 sierpnia 2009, 23:27
W ogóle to przypadkiem trafiłam na fajny artykuł na ten temat.
Co prawda o bazach danych ale na temat
http://whydoeseverythingsuck.com/2008/03/graphs-better-database-abstraction.html
czesiu, 6 sierpnia 2009, 01:39
Skoro według ciebie asembler, algol, fortran... nie są językami programowania nie mamy o czym rozmawiać.
Polecam wikipedię http://pl.wikipedia.org/wiki/Asemblerowy_j%C4%99zyk_wysokiego_poziomu#Poziom_j.C4.99zyka
akapit o tytule "poziom języka"
odnośnie twojego linka polecam inny: http://whydoeseverythingsuck.com/2008/01/power-of-abstraction.html konkretnie cytat:
"We no longer have to think about what happens inside the abstraction. Similarly, compiled languages like Pascal and C were great abstractions on top of assembly language. Java is a great abstraction on top of C, and so on."
Jak widzisz wg twojego źródła Java reprezentuje wyższy poziom niż C, który reprezentuje wyższy poziom abstrakcji niż asembler... czyli nawet pośród języków wysokiego poziomu masz języki o jeszcze "wyższym" poziomie abstrakcji.
lililea, 6 sierpnia 2009, 08:50
Między asemblerem a algol czy fortran jest duża różnica, algol i fortran to języki programowania! Nigdy nie twierdziłam że miedzy javą a C nie ma różnicy.
Twierdze po prostu że pojęcie wysokiego języka programowania nie istnieje. I denerwuje mnie używanie takiego pojęcia, tam gdzie powinna być informacja która mnie interesuje.
Nie znasz się, najwyraźniej nie czytasz moich odpowiedzi a tupiesz nóżkami jak małe dziecko.
wo3kie, 6 sierpnia 2009, 10:44
Lililea,
Tak sie sklada, ze pracuje z jezykami programowania na codzien i to Ty nie masz racji i sprzeczasz sie z calym swiatem.
Jezyki programowania wysokiego i niskiego poziomu istnieja, niezaleznie czy Ci sie to podoba czy nie, niezaleznie czy sie z tym zgadzasz czy nie i niezaleznie od tego czy tuptasz nozkami czy nie.
Jedna instrukcja asemblera przeklada sie na jedna instrukcje maszynowa.
Jedna instrukcja C przeklada sie na kilka instrukcji maszynowych.
Ale juz w przypadku C++ niektore instrukcjc C++ (polimorfizm, RTTI, wyjatki) przekladaja sie na dziesiatki instrukcji asemblera. Ponadto dochodzi pojecie metaprogramowania, czyli programowania na typach - zupelnie nie dajace sie przelozyc na kod asemblera.
Java, dziala na maszynie wirtualnej. Ten jezyk nie ma pojecia na jakim sprzecie pracuje. Nie ma tam wskaznikow, short i longjumpow, nie mozna wstawiac wstawek asemblera. Dzieki temu jest bardziej przenosny.
Przejdzmy teraz do baz danych na ktore sie powolywalas wczesniej. SQL, jezyk deklaratywny. Zupelnie rozny od C, C++, Javy (jezyki imperatywne)...
Dlaczego?
Mowisz co trzeba zrobic (wybierz z bazy pola gdzie nick = 'Lililea') a nie mowisz jak to zrobic (iteruj sie po rekordach, porownaj imie z 'Lililea' jak jest rowne wypisz na ekranie jak nie przejdz dalej).
BTW, nie wiem czy wiesz, ale istnieje takze jezyk Lua. Jego nazwa wydala mi sie bardzo podobna do koncowki twojego nicka.
i To sa wlasnie jezyki wysokiego poziomu
Lukasz
lililea, 6 sierpnia 2009, 10:51
według ciebie
język wysoki = język wysokiego poziom
Jasne, mówmy po polskiemu a będziemy mieli piątków jak mrówków.
Też pracuje w tej dziedzinie i dlatego właśnie denerwuje mnie taka terminologia, oraz próba wrzucenia do jednego worka języka maszynowego i języka programowania jakiegokolwiek poziomu z powodów powyżej przez ciebie opisanych.
A w przypadku tego artykułu różnica miedzy tym czy chodzi o szeroko wszystkim znany język programowania wysokiego poziomu, czy też o jakiś nowy rodzaj przekazywania instrukcji nie mający ze starym sposobem nic wspólnego jest istotna.
wo3kie, 6 sierpnia 2009, 11:10
> Też pracuje w tej dziedzinie
No to sie przestan chwalic i napisz w koncu rzeczowego posta z rozsadnymi argumentami. Uzasadnij dlaczego tak uwazasz, podaj przyklady, powolaj sie moze na literature...
> Asembler ani kod maszynowy nie są językami programowania, języki progamowania zaczynają się od poziomu Ansi C.
Wedlug mnie asembler jest jezykiem programowania. Ma jakas skladnie. Mozna go opisac gramatyka. Piszac cos w asemblerze mozna zrobic blad skladniowy. Wiec jest jezykiem programowania.
Z definicji jezyk jest dowolnym zbiorem napisow nad pewnym ustalonym alfabetem. Warto zaznaczyc, ze definicja ta jest bardzo szeroka. Jezykami sa np.: zbior pusty L=0, zbior zawierajacy pusty napis L={E} oraz zbior wszystkich zdan w jezyku polskim, ktore sa poprawne gramatycznie. Definicja jezyka nie przypisuje zadnego znaczenia napisom w jezyku, zajmuje sie tym semantyka. Formalna definicja jezyka jest:
Niech T bedzie alfabetem, T* zbiorem wszystkich lancuchów nad alfabetem T. Dowolny podzbiór L zbioru T * nazywamy jezykiem L nad alfabetem T.
Asembler jak najbardziej pasuje do tej definicji. Wiec jest jezykiem programowania.
Ogolnie na forach internetowych uwaza sie, ze ten kto odpisze ostani ma racje a temu kto odpisal przedostatni zabraklo po prostu argumentow. Nie obraz sie, ale ja juz Ci nie bede odpisywac. Szkoda mi po prostu na to czasu.
Lukasz
lililea, 6 sierpnia 2009, 11:23
Jak już ktoś się chwali to ty, ja nie wypisuje definicji które można znaleźć gdziekolwiek, żeby udowodnić że coś wiem.
Przekleiłeś ogólną definicję języka jako dowód na to że asembler jest językiem programowania.
Język programowania, musi być zupełny w sensie Turinga (dlatego SQL nie jest i tak wiem że asembler spełnia, ale to nie jedyny warunek).
To może chiński też jest.
wilk, 6 sierpnia 2009, 12:05
Assembler oczywiście, że jest językiem programowania, mnemonicznym, niskiego poziomu. Sam język programowania to konstrukt syntaktyczno-semantyczny plus zbiór leksykalny. Kompletność Turinga nie jest wymogiem stricte (to już zależy od publikacji i toku nauczania wykładowcy ).
Zaś co do zwrotu, to oczywiście masz rację - powinno być tam "język wysokiego poziomu" lub "wysokopoziomowy język programowania".
Zaś chiński oczywiście jest gramatyką kontekstową i stanowi język naturalny.
Hehe, pewnie tak, ale te operacje chyba nie przebiegają zbyt szybko i wymagają specyficznych warunków. No i poziom upakowania jest marny.