Ruby, Python vs Java,C++
Posted by Jarosław Zabiełło Mon, 14 Nov 2005 20:41:00 GMT
Od czasu do czasu na grupach dyskusyjnych mają miejsce przepychanki na temat wyższości jednych języków nad drugimi. Czasami takie dyskusje wywołują sporo emocji. Zmęczony ciągłymi ogólnikowymi sloganami o tym jak to w C++ lub Javie pisze się lepiej i szybciej (dobry dowcip) programy niż w językach dynamicznych takich jak Python czy Ruby, postanowiłem rzucić małe wyzwanie miłośnikom tych języków.
Zadanie polegało na napisaniu wyszukiwarki do polskiego tekstu Koranu (w sumie nie widziałem nic takiego, stąd pomysł). Aby nie było za banalnie, trzeba było napisać taki kod który by automatycznie wyssał przekład Koranu ze strony internetowej http://www.planetaislam.com/koran.html następnie przetworzył go i wstawił do bazy mysql oraz przełączył się w tryb wyszukiwania fraz.
Wyzwanie zostało przyjęte i… mijają tygodnie za tygodniami a moi dyskutanci nie są w stanie przedstawić żadnego działającego kodu w Javie ani w C++. Tak to teoria zderza się z praktyką. Oto naprędce stworzona wersja w Ruby:
require 'mysql'
require 'open-uri'
@przeklad = 'bielawski'
@conn = Mysql.new('localhost', 'login', 'hasło', 'koran', 3308)
def download(max_chapter=15)
def clean_html(src) # nie znam biblioteki czyszczacej html wiec robie to regexem
src.gsub(/ /, ' ').gsub(/(<[^>]+>)/, '').gsub(/[ ]{2,}/, ' ').gsub(/&#/, '').gsub(/"/, '"')
end
@lines = []
1.upto(max_chapter) do |sura|
url = sprintf('http://www.planetaislam.com/koran/%s/%03d.htm', @przeklad, sura)
src = clean_html(open(url).read)
rows = src.scan(/(\d+?)[. ]([^\d]+)/) # wyluskuj wersety i numery rozdzialow
rows.each do |row|
@lines << sprintf('%s:%s %s', sura, row[0], row[1].gsub(/[\s]{2,}/, ' ').strip)
end
f = File.new("#{@przeklad}.txt", "w") # zapisuje sobie do pliku
@lines.each { |line| f.write("#{line}\n") }
end
end
def loaded_db
@conn.list_tables.include?(@przeklad) # Sprawdzam czy juz istnieje tabela z danymi.
end
def load_db
@conn.query("DROP TABLE IF EXISTS #{@przeklad}")
@conn.query("CREATE TABLE #{@przeklad} (
id int(10) unsigned NOT NULL auto_increment,
sura varchar(255) NOT NULL,
nr int(10) unsigned NOT NULL,
verse text NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci")
@conn.query("SET CHARACTER SET latin2")
@lines.each do |line|
sura, nr, verse = line.scan(/(\d+?):(\d+?) (.+)/)[0]
verse.gsub!(/'/,"''") # uzywam topornego sql bo cos mi metoda prepare nie dziala, moze zla biblioteka?
@conn.query("INSERT INTO #{@przeklad} (sura, nr, verse) VALUES(#{sura}, #{nr}, '#{verse}')")
end
end
def search_result(phrase)
@conn.query("SET CHARACTER SET cp1250")
sql = "SELECT * FROM " + @przeklad + " WHERE verse LIKE '%" + phrase + "%' "
c = @conn.query(sql)
while row = c.fetch_row
puts sprintf("Sura %s,%s %s\n", row[1], row[2], row[3])
end
end
if $0 == __FILE__
if !loaded_db
download
load_db
end
search_result('kobieta')
endA oto ostateczna wersja w Pythonie:
#!python
"""
Wyszukiwarka do Koranu
Przykłady uzycia:
python koran.py --txt zabijajcie
python koran.py --sura=ix
python koran.py --sura=9 --nr=4
python koran.py --sura=IX --nr=4
Wymagania:
interpreter Pythona 2.4 + standardowe biblioteki
pythonowska biblioteka MySQLdb
serwer MySQL 4.1
Autor:
Jarosław Zabiełło http://zabiello.com
"""
import HTMLParser, os, re, urllib2, sys
from optparse import OptionParser
import MySQLdb
class Koran(object):
dbname ="koran"
przeklad = 'bielawski'
lines = []
def __init__(self):
self.conn = MySQLdb.connect(
host='localhost',
port=3308,
user='login',
passwd='hasło',
db=self.dbname)
def download(self, max_chapter=15):
"""Sciagam dane z internetu i je troszke oczyszczam z nadmiarowego kodu html"""
def html_clean(src):
x = HtmlStripper()
x.feed(src)
return src = x.get_fed_data()
self.lines = []
for i in xrange(1,max_chapter):
url = 'http://www.planetaislam.com/koran/%s/%03d.htm' % (self.przeklad, i)
src = html_clean(urllib2.urlopen(url).read()) # pobrany caly plik
rows = re.findall(r'(\d+?)[. ]([^\d]+)', src) # wyluskuj wersety i numery rozdzialow
for row in rows:
self.lines.append('%s:%s %s' % (i, row[0], re.sub(r'[\s]{2,}', ' ', row[1]).strip()))
self.lines = [unicode(line, 'iso-8859-2').encode('utf-8') for line in self.lines]
f = open(self.przeklad+'.txt', 'w') # zapisuje sobie kopie na dysk
for line in self.lines:
f.write('%s\n' % line)
f.close()
def loaded_db(self):
"""Sprawdzam czy juz istnieje tabela z danymi."""
c = self.conn.cursor()
c.execute("SHOW TABLES")
rows = c.fetchall()
if self.przeklad in [row[0] for row in rows]:
c.execute("SELECT COUNT(*) FROM %s" % self. przeklad)
return c.fetchone()[0]
return False
def load_db(self):
"Zakladam ze stworzono baze o nazwie self.dbname i laduje dane do tabeli self.przeklad"
sqls = (
"DROP TABLE IF EXISTS %s" % self.przeklad,
'''CREATE TABLE %s (
id int(10) unsigned NOT NULL auto_increment,
sura varchar(255) NOT NULL,
nr int(10) unsigned NOT NULL,
verse text NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci''' % self.przeklad)
c = self.conn.cursor()
for sql in sqls: # odtwarzam baze
c.execute(sql)
c.execute("SET CHARACTER SET UTF8")
sql = "INSERT INTO "+self.przeklad+" (sura, nr, verse) VALUES (%s,%s,%s)"
for line in self.lines:
found = re.match(r'(\d+?):(\d+?) (.+)', line)
if found:
c.execute(sql, found.groups())
c.close()
def set_i18n(self, cursor, phrase=None):
if sys.platform == 'win32': # zakladam ze bede wyswietlal wyniki w okienku konsoli, czyli kodowanie dosowe
if phrase:
phrase = unicode(phrase, 'cp1250').encode('cp852')
cursor.execute("SET CHARACTER SET cp852")
elif sys.platform == 'linux':
cursor.execute("SET CHARACTER SET latin2")
return phrase
def search_result(self, phrase):
"""Wyszukuje wersetow wg prostej zasady: znadz wszystkie wersety w ktorych gdziekolwiek
wystepuje fraza phrase. Dla wygody dodalem obsluge polskich znakow spod konsoli dosowej
i linuksa."""
c = self.conn.cursor()
phrase = self.set_i18n(c, phrase)
sql = "SELECT * FROM " + self.przeklad + " WHERE verse LIKE '%" + phrase + "%' "
print sql
c.execute(sql)
rows = c.fetchall()
c.close()
print "Znaleziono %d wersetow:\n" % len(rows)
for row in rows:
print "Sura %s,%s %s\n" % (int_to_roman(int(row[1])), row[2], row[3])
def show_verse(self, sura, nr=0, context=0):
c = self.conn.cursor()
self.set_i18n(c)
if sura.isalpha():
sura = roman_to_int(sura)
if sura and nr: # wyswietl pojedyncza sure
sql = "SELECT verse FROM " + self.przeklad + " WHERE sura=%s AND nr=%s"
c.execute(sql, (sura, nr))
verse = c.fetchone()[0]
print "Sura %s,%s %s\n" % (int_to_roman(int(sura)), nr, verse)
else: # wyswietl cala sure
sql = "SELECT nr, verse FROM " + self.przeklad + " WHERE sura=%s ORDER BY nr"
c.execute(sql, [sura])
rows = c.fetchall()
for row in rows:
print "Sura %s,%s %s\n" % (int_to_roman(int(sura)), row[0], row[1])
c.close()
class HtmlStripper(HTMLParser.HTMLParser):
"""src: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440481"""
def __init__(self):
self.reset()
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_fed_data(self):
return ''.join(self.fed)
def int_to_roman(input):
"""src: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81611"""
if type(input) != type(1):
raise TypeError, "expected integer, got %s" % type(input)
if not 0 < input < 4000:
raise ValueError, "Argument must be between 1 and 3999"
ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')
result = ""
for i in range(len(ints)):
count = int(input / ints[i])
result += nums[i] * count
input -= ints[i] * count
return result
def roman_to_int(input):
"""src: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81611"""
if type(input) != type(""):
raise TypeError, "expected string, got %s" % type(input)
input = input.upper()
nums = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
ints = [1000, 500, 100, 50, 10, 5, 1]
places = []
for c in input:
if not c in nums:
raise ValueError, "input is not a valid roman numeral: %s" % input
for i in range(len(input)):
c = input[i]
value = ints[nums.index(c)]
try:
nextvalue = ints[nums.index(input[i +1])]
if nextvalue > value:
value *= -1
except IndexError:
pass
places.append(value)
sum = 0
for n in places:
sum += n
return sum
if __name__ == '__main__':
appl = Koran()
if not appl.loaded_db():
print 'Pobieram dane z internetu....'
appl.download()
print 'Wkladam dane do bazy...'
appl.load_db()
parser = OptionParser()
parser.add_option('--txt', dest='txt', help='wyszukiwana fraza')
parser.add_option('--sura', dest='sura', help='numer Sury (liczba dziesietna lub rzymska)')
parser.add_option('--nr', dest='nr', help='numer wersetu dla Sury')
(options, args) = parser.parse_args()
if options.txt:
appl.search_result(options.txt)
elif options.sura:
appl.show_verse(options.sura, options.nr)
else:
print "Wywolaj z parametrem --help"W międzyczasie zdążyłem nawet wykorzystać swój kod Pythona aby dodać go jako moduł do Plone. :)


A ty dalej swoje.
“C++ lub Javie pisze się lepiej i szybciej”
Napewno nie pisze się szybciej, szczególnie takich programików (skryptów).
Napewno taki przykład nie wykaże wyższości jednego języka nad drugim. Jednemu bardziej czytelny będzie kod Javy innemu Rubiego. Szybkość przy zastosowaniu nowoczesnych ide może być porównywalna.
Różnica jest wyczuwalna przy dłuższym obcowaniu z wieloma aplikacjami i rozwijaniu ich.
Java ma większy dorobek i Ruby czy Python musi udowodnić, że jest lepszy, tańszy aby był stosowany w porównywalnej skali. I tu jest też haczyk. Teraz coś musi być tańsze, niekoniecznie lepsze.
Np PHP jest dobitnym tego przykładem. Jest na tyle prosty, że przyciąga wielu ludzi, którzy w szybki sposób mogą coś tworzyć. Co z tego wychodzi widać, ale fimom to nie przeszkadza. Za niską cenę mają akceptowalną (przez nich) jakość.
Co do zadania, to miałem prawie gotowe, ale doszedłem do wniosku, że nie jestem specjalistą od Javy i moje dzieło nie było by dobrym przykładem elegancji, praktyczności czy czegokolwiek tego języka.
To takie moje trzy grosze.
Nie przekonuje mnie to jak wpierw ktoś podejmuje wyzwanie a potem się wycofuje mówiąc że nie jest specjalistą od Javy. A ja niby byłem specjalistą Rubiego jak pisałem ten kod? Zainteresowałem się Rubym przecież później niż Ty zainteresowałeś się Javą. Trzeba było od razu protestować że to nie jest klasa zagadnień gdzie Java może podskoczyć do Rubiego, czy Pythona.
Chyba będę kiedyś musiał do tego zasiąść bo mi nie dasz spokoju. Prawdopodobnie nie prędko się to stanie, bo mam inne ważniejsze, ciekawsze sprawy na głowie.
Ale nie bierz tego jako podjęcie wyzwania bo to nie jest dobra płaszczyzna do porównań. Bardziej doświadczenie.
O ile wiem, to wyzwanie na p.c.l.p. rzucił JZ… gwoli ścisłości tak piszę ;)
Czemu to ma służyć? Taki program to możesz napisać w każdym języku wyższego poziomu… Języków się nie porównuje przez pisanie kilkudziesięciolinijkowych skrypcików :/ Praktycznie wszystkie współczesne języki nie są tworzone z myślą o szybkim klepaniu linijek… Napisałeś ten program w kilka godzin? Super – jego profesjonalne testy zajęłyby z dwa dni… Jesteś dumny, bo nie korzystałeś z wykresów UML, nie musiałeś się bawić w definiowanie objektów i nikt nie kazał ci się zastanawiać nad strukturą projektu, w szczególności nad jego rozszczerzalnością? Fantastycznie, spróbuj napisać coś poważnego w kilka osób… zrozumiesz, że takie potyczki nie mają sensu…
Chodziło o praktyczne zweryfikowanie buńczucznej wypowiedzi, że w Javie i w C++ pisze się tak samo szybko programy jak w Pythonie czy Ruby. Rzuciłem więc jakimś przykładem. Wyzwanie zostało podjęte i… nie moja wina, że wyszła z tego kompletna porażka przeciwników Pythona. Trzeba było zaprotestować na początku i zaproponować inne wyzwanie.
W tym wypadku chodziło o napisanie aplikacji, która sobie pobierze i przetworzy dane z internetu, wsadzi do bazy relacyjnej i następnie przekształci się w wyszukiwarkę działającą z poziomu konsoli. Nie zawsze jest sens tracić czas na wykresy UML, i “profesjonalne testy” (niby co to ma znaczyć?)
Co do pisania większego programu, to http://bank.muratordom.pl działający w Pythonie był tworzony w zespole paru osób.
BTW, kod w Ruby napisałem w pół godziny (no ale to było już po napisaniu wpierw kodu w Pythonie który zajął jakieś 2 godziny. Nie pamiętam dokładnie)
...każdy może podać przykład który w danym języku szybciej się napisze. Czy to coś udowodni? wątpie :D
commons_http_client + hibernate + lucene
Chyba zajęłoby podobną ilość miejsca. Ale Java to nie jest język do pisania takich skryptów. Jakoś na razie nie widzę aplikacji na >1 mln linii kodu w Rubym i Pythonie…. A w C++ i Javie jest mnóstwo.
Szybkość pisania zresztą NIE MA WIĘKSZEGO ZNACZENIA. Implementacja to tylko kilka % czasu produkcji softu. Reszta to analiza, projekt, testy, pielęgnacja. W tym zakresie języki dynamiczne są mocno w tyle poza Javą… Zwięzły kod Perla czy Rubego czyta się gorzej niż Javy. Chociażby przez brak jawnej specyfikacji typów.
Cały Google stoi na Pythonie jak byś nie wiedział. grono.net było wcześniej postawione na Javie i to w ogóle się nie sprawdziło. Przebudowali to do Pythona i śmiga znacznie wydajniej od wcześniejszego rozwiązania. Java jest szybszym językiem, ale już rozwiązania na niej oparte – niekoniecznie.
Śmieszne jest to przykładanie “javowych” metodologii do języków dynamicznych. One w ogóle się tam nie sprawdzają. Nie da się pisać w Ruby z mentalnością Javy. Rals daje niezrównanie krótszy i czytelniejszy kod od frameworków Javy. Jest nie tylko szybszy do developingu ale także jest przez to tańszy w utrzymaniu. Zrównanie czytelności Rubiego z Perlem świadczy tylko o tym, że nie masz bladego pojęcia o Ruby.
Co do typów, to gdyby były takie dobre, to by w Javie nie trzeba było rzutować ich do innych. Z tego robi się potem taki burdel że sam kompilator Javy głupieje (nie jest w stanie skontrolować poprawności wszystkich rzutowań). Kończysz więc w tym samym miejscu co Pythonistas, o błędzie dowiesz się dopiero po uruchomieniu kodu. Tylko że Python jest niezrównanie lepszym narzędziem do wyłapywania i poprawiania błędów.
A jeszcze co do szybkości, to można przecież generować bytecode JVM za pomocą składni Pythona lub Rubiego. kwestia dopracowania i Railsy będą śmigać na JVM6, why not? Więc o co ci chodzi? O obronę składni języka Java? Każdy wie, że ona jest do bani. :)
No dobra to ja mam mniej profesjonalne pytanko :P
Otóż spór się tutaj toczył o javę a ja jestem w takim problemie że chcę zacząć uczyć się podstaw jakiegoś języka programowania (trochę kiedyś c+) ale teraz się zastanawiam czy wrócić do C+ i zacząć porządną naukę od nowa? Czy po prostu Ruby jest lepszy od C++?? :|
Jako pierwszy język do nauki? To zdecydowanie Python lub Ruby. A czy Ruby jest lepszy od C++? Wszystko zależy do czego chcesz danego języka używać.
No właśnie z tego co widzę to Ruby ma większe zastosowanie w internecie, a co za tym idzie musze znać jeszcze (tzn wypadałoby znać) html, php. css, mysql :P
Wydaje mi się że C++ nie “ciągnie” za sobą tylu zależności, a też jest bardziej ciekawy (chyba?). Szczerze to ciężko mi się określić czy lepsze jest dla mnie tworzenie programów czy jakiś webowskich rzeczy w Rubym. Ale raczej bardziej mnie kusi ten C++.
Ruby i Python jako dynamiczne języki (bardzo) wysokopoziomowe mają trochę inne zastosowanie niż niskopoziomowy C/C+. Zależy co cię interesuje, czy pisanie sterowników, czy bardziej ogólne rzeczy. Np. są wersje Pythona i Ruby, które potrafią generować kod CLR dla .NET lub bytecode JVM Javy. Więc używając tej samej, prostej składni, można napisać aplikację webową, skrypt systemowy, aplikację desktopową, aplikację dla .NET lub JVM. Nie wiem co niby ciekawego w C? Pisze się trudniej, dłużej, składnia jest ma lo porywająca. Jeśli chodzi o ciekawość, to stawiałbym na Ruby. To bardzo ciekawy język o dynamice kompletnie poza zasięgiem C+.
C/C+ nie służą tylko do pisania sterowników, nie wprowadzaj ludzi w błąd. W C/C++ napisana jest jak dotychczas większość kodu, który ludzie w ogóle na co dzień używają (np. takie przeglądarki netowe).
A czemu C/C++ miałby być mniej interesujący od Ruby’ego? I czemu wg Ciebie dynamika jest nieosiągalna? Wszystko można zaimplementować w C/C++. Łącznie z dynamiką. Owszem, wymaga to często bardzo wyrafinowanych, często nawet karkołomnych konstrukcji. I to właśnie jest często ciekawe – choć to rzecz gustu. Albo metaprogramowanie templejtami… ach, poezja ;)
No i trzeba jeszcze wspomnieć, że jeśli ktoś ma na celu pisanie szybkiego kodu, to ma do wyboru praktycznie tylko C/C++ lub fortrana.
I skąd wiesz, że grono.net po przepisaniu na pythona działa szybciej niż wersja w Javie?
Teoretycznie to wszystko możesz sobie napisać i w assemblerze. Są tacy dla których i to będzie “poezją”. Jak ktoś lubi karkołomne konstrukcje, to będzie ich bronił. Ja tam wole prostotę i czytelność. Jak nie muszę, to oszczędzę sobie użerania się z porąbaną składnią takiego C++ lub Javy. Templaty C++ poezją? Spróbuj tą “poezję” debugować jak się coś powali. Powodzenia.
Ruby daje more fun i umożliwia większą produktywność co zostało obnażone w tym wyzwaniu, gdzie poległa Java i C++ jako języki w których rzekomo “pisze się lepiej i szybciej” niż w Pythonie czy Ruby.
Co do grono.net to (jak masz tam konto) przeszukaj ich zasoby. Czytałem w środku o problemach jakie były z Javą.
Tylko że nie przedstawiłeś wersji w Javie ani C++, więc nie możesz powiedzieć, że poległy…
Składnia C++ jest spójna (poza kilkoma subtelnymi niejednoznacznościami), acz skomplikowana. Składnia Javy jest spójna i prosta. Czemu twierdzisz, że są “porąbane”?
Co to znaczy “more fun”? Czy jeśli wódka daje “more fun” niż Ruby – co IMHO oczywiste :)))) – to znaczy, że jest od niego lepsza?
Jakieś konkrety odnośnie grono.net? Nie mam u nich konta.
Hoho… widzę że się dyskusja ostro poruszyła…:D
Chociaż fakt jedno i drugie ma swoje zalety (oraz wady) tylko zastanawiam się teraz czy da się uczyć dwóch języków programowania równolegle…. hmmm…
Bo póki co to nadal nie wiem który by lepiej mi pasował… :)
Oczywiście, że poległy. To był challenge, który został przyjęty. To nie ja miałem te wersje przedstawić ale ci co twierdzili że da się “lepiej i szybciej” pisać w Javie niż w Ruby czy Pythonie. Ani lepiej ani szybciej jak się okazało w tym wypadku. A jeśli to był przykład trudny dla Javy to trzeba było się nie zgadzać na wyzwanie ale od razu protestować.
Co do more fun, to z tym jest tak jak z jedzeniem owocu którego nie znasz. Musiałbyś trochę poprogramować w Railsach aby to poczuć. W kilka linijek zrobisz to co w innym wypadku musiałbyś klepać w dziesiątkach/setkach linii.
Co do Javy. Tak, uważam, że ma kiepską składnię. Brak przeciążania operatorów, bardzo długie nazwy metod, brak transparentnych akcesorów. Już chyba C# ma lepszą.
zxc: weź ty się obudź. W dzisiejszych czasach znajomość kilku języków programowania to nie luksus, to mus.
Brak przeciążania operatorów to kwestia semantyki, a nie składni. Długie nazwy metod to kwestia designu bibliotek std, a nie składni. Brak “transparentnych akcesorów” to kwestia dyskusyjna, np. Fowler uważa, że akcesory to w ogóle zło.
Gdzie masz kody w kilku liniach, co by zajęły w C++/Javie kilkaset??
Chcesz kolejne wyzwanie? :) Napisz kod klienta i serwera SOAP w C++ oraz Javie. Zobaczymy jaki kod będzie prostszy i krótszy. Podejmujesz wyzwanie?
A masz odpowiedni kod w Rubym czy Pythonie? Chodzi o pełną, poprawną implementację. Wyzwanie może być całkiem dobre, bo to nie jest takie typowo “skryptowe” zadanie, gdzie zasadniczo – przyznam Ci oczywiście rację – w Rubym czy Pythonie pisze się szybciej i krócej.
@rsz : znowu dałeś się wpuścić w maliny nawet w PHP (którego nie cierpię ) da się to napisać w ciągu 10-15 minut :) . patrz url ;) . C/C++ jest dobry tylko to problemów klasy “Hard Real Time” np. konkursów ACM,biblotek systemowych lub pisania rozszerzeń do języków skryptowych :).
Do reszty Java/C# lub Ruby/Python .
Jak tak się tak prześcigacie w tych porównaniach, to ja mam propozycję prawdziwego killera. Napisać aplikację która poszukiwała by wzoru funkcji na podstawie tabeli danych (czyli x i f(x)). Nie chodzi tu o jakiś przybliżanie wielomianem tylko o wzór postaci sin( log(x) )^ 2 – 3x . W lispie to banał, w rubym pewnie też by się dość prosto dało, ale w javie czy C++ to myślę, że było by 10 razy więcej kodu :) W zasadzie nawet ciężko mi sobie wyobrazić jak się zabrać za to Javie. Jak ktoś przedstawi wersje w jakimś języku to ja dodam wersje w Lisp :) Dla nie obeznanych osób z tematem podam, że można wykorzystać algorytm genetyczny lub metodę wyżażania lub metodę gradientową. W sumie całość sprowadza się do wygenerowania na wstępie jakiegoś losowego wyrażenia (lub kilku) i potem modyfikując je można sprawdzać czy generują mały błąd. Moim zdaniem ciekawy temat ponieważ pokazuje możliwości samego języka a nie możliwości bibliotek, frameworków itp.
Patrze na tą dyskusję troche z innej perspektwy. Nie jako programista, ale jako inżynier systemu/projektant systemów telekomunikayjnych. Nie jestem pasjonatem programowania, patrze na język programowania jako na narzędzie (jedno z wielu) dzięki któremu dostarcza się PRODUKT. Uwierz, z tej perspektywt C++/Java bardzo zyskują. 1)Performance 2)Solidne platformy, rozwijane od wielu lat, stabilne, rozwijane przez duze koncerny, co do ktorych mozna liczycz na stały maintenance. 3)Rozbudowane i stabilne biblioteki ktore okrzepły już po okresie scierania sie milionow idei i pomysłow jak to się ma zwykle z nowymi cool jezykami/frameworkami. 4)Rzesze programistow, którzy znają dobrze C++/Jave i związane z nią platformy. Duża firma chce mieć pewność, że produkt który zostanie jej dostarczony, będzie mógł być rozwijany z tą samą jakością i że bez trudu będzie można znaleźć do tego ludzi z potwierdzonymi kompetencjami.
Na prawde, są zastosowania (szczególnie związane z oprogramowaniem o krytycznym znaczeniu dla klienta) gdzie C++/Java jest nie do pobicia i przez wiele następnych lat tak zostanie.
Ale w tej dyskusji zupełnie nie o to chodzi. Zgadzam się w 100%, że jeśli chodzi o wsparcie to Java czy C++ wymiatają jak na razie. Dyskusja ma natomiast wyłonić język w którym można napisać coś najszybciej i najprzyjemniej :) Jeśli chodzi o Java, to jako ‘projektant’ powinieneś wiedzieć, że w Javie już dawno przekroczono wszelkie granice zdroworozsądkowe. Wymagania rynku są coraz większe i potrzeba potężniejszego języka niż Java, po to żeby pisać szybciej i krócej. Zauważ, że jeśli w Rubym można napisać 2 razy krótszy kod (niektórzy twierdzą, że nawet 10x) to do napisania tego kodu potrzebujesz mniejszej ilości programistów. Mniej kodu oznacza lepsze panowanie nad kodem przez zespół. Co za tym idzie późniejsze refaktoryzacje są dużo prostsze. Może właśnie dlatego Ruby z roku na rok zdobywa olbrzymią rzeszę użytkowników, bo potrzebują czegoś więcej niż Javy. Nie zastanawiało Cię dlaczego sam Sun wspiera JRuby?
Z C/C++ sprawa wygląda trochę inaczej. Języki te na pewno nie umrą szybko bo zastosowanie jest ich trochę inne. C stosuje się i będzie nadal stosować do pisania sterowników/jąder OSów, natomiast C++ świetnie się sprawdza do pisania bibliotek systemowych (i nie tylko), aplikacji w urządzeniach embedded itp. Nie wiem czy zauważyłeś ale w C++ rozwinęło się metaprogramowanie, myślisz, że dlaczego? Może dlatego, że programiści wolą operować na wyższym poziomie abstrakcji i może dlatego, że chcą mieć namiastkę tego co daje dynamiczny język programowania?
No jeśli rozważać takie akademickie zagadnienie: “w którym języku pisze się szybciej i przyjemniej” to Python i Rubby z pewnością biją na głowę C++/Javę. Z drugiej strony takie pytanie jest pochodną “metapytnia”: “Którego języka użyć” :-). I tu w wielu obszarach (tele)informatyki C/C++ i Java jest zdecydowanie lepszym rozwiązaniem.
W dużych (>50 000 men hours) teleinformatycznych projektach, w których brałem udział, które prowadzone były za pomocą cieżkich RUPo podobnych metodyk kodowanie zajmowało okokło 10% czasu przeznaczonego na projekt. W tym kontekście “szybkość pisania” nie jest czynnikiem krytycznym (chodź krótki, elegancki kod to mniej błedów, łatwiejszy maintenance, co jest dużym plusem Ruby/Python). Chce tylko pokazać, że są rejony informatyki, gdzie takie pytanie zacytowane na początku postu nie ma sensu. JEst wiele innych czynników, które determinują wybór języka.
Co do JRuby vs Java to pewno, że wygląda to obiecująco (jak i inne pomysły typu Jython, groovy itp). Ale to pieśń przyszłości. Przyklad z mojego podwórka: umowa pomiędzy operatorem a dostawcą platformy: maksymalny czas w którym platforma nie działa (wliczając w to planowane restarty związane z upgradem softwaru, korekcjami) to 6 minut w ciągu roku. Jeśli ten czas zostanie przekroczony, to dostawca płaci (B.Wysokie) kary proporcjonalne do długości “przestojów”. Wyobrażasz sobie, że porzuca dobrze znaną (ze swoimi plusami i minusami) technologię i rzuca się w najbliższym czasie na JRuby?
No tak, ale weź pod uwagę, że Java też zdobywała powoli swoją popularność. Każde narzędzie potrzebuje czasu i Ruby ma jeszcze dużo czasu przed sobą. Najpierw musi udowodnić, że nadaje się dobrze do mniejszych zastosowań (to chyba już udowodnił) a potem będzie zdobywał większe rynki :) Java ma także tą przewagę, że wirtualna maszyna Javy jest zainstalowana na większości komputerów. Z drugiej strony zobacz na takiego LISPa, bardzo mało osób go używa, a jednak taki AutoCAD w dużej części został napisany właśnie w Lispie. Ktoś kiedyś nawet powiedział (stara wypowiedź dotycząca C i fortrana), że każdy wystarczająco duży projekt zawiera powolną nie zgodną ze specyfikacją, pełną błędów implementacje połowy Lispa :) Moim zdaniem Ruby doskonale nadaje się dla startupów. Małe firmy chcąc dogonić konkurencje często wybierają języki, które zapewnią im dużą szybkość wdrażania i pogoń za konkurencją w innym wypadku zawsze będą w tyle :)
Jednak wracając do tematu :) mówimy nie o możliwości wdrażania danego języka w każdy projekt ale o tym jak i w jakim czasie da się w nim coś wykonać. Główne czynniki to CZAS i ROZMIAR KODU, nic więcej :)
Jeśli masz przykład jakiegoś kodu, którego nie dało by się w krócej napisać w Rubym to wrzuć, zwolennicy Rubiego chętnie z nim zawalczą :)
“Nie jako programista, ale jako inżynier systemu/projektant systemów telekomunikayjnych.” – tu chyba tylko C/C++ bo to są Systemy Czasu Rzeczywistego .
Ruby ma największe szanse w nawracaniu PHPowców o ile będzie dostępny dobry hosting w Polsce .
Czołem, chciałbym zapytać czy autor pomysłu na konkurs brał udział w jakimś dużym projekcie informatycznym (zespół 5 ludzi, min 1 rok) ?
Ja proponuje teraz sprawdzic poprawnosc skladniowa programu w Pythonie przed jego uruchomieniem.
Nikt z was nie zwrocil uwagi na to, ze program w Java czy C++ juz na etapie kompilacji wskaze bledy czy ostrzeze przed instrukcjami z watpliwym sensem.
A Python czy Ruby?
Python ma do tego pyLint. Potrafi nawet wyłapać konstrukcje niezgodne z konwencjami PEP 8. W przypadku Ruby podobną robotę stara się wykonywać NetBeans 6.
Ciekawa dyskusja :) Trafiłem tu szukając stron porównujących języki skryptowe, bo mam w pracy spory system do raportowania błędów – JIRA – i chciałbym podłączyć pod niego jakiś język skryptowy, by łatwiej przeprowadzać niektóre co bardziej skomplikowane operacje. Na razie myślę o Lua, albo Groovy, być może też JRuby. Co do wyzwania rzuconego na początku dyskusji – dziwię się, że nikt nie próbował napisać tego w Javie, bo nie wydaje się to zbyt skomplikowane – biblioteki w Javie do łączenia się z internetem i do baz danych są już od lat… W C++ rzeczywiście byłoby trudno, ale za to C++ wydaje mi się jedynym rozsądnym wyjściem gdybym miał pisać program wykonujący wiele skomplikowanych obliczeń: symulacje fizyczne, czy ekonomiczne, sztuczna inteligencja, grafika 3D, itp. Jarosławie, fajny awatar.
Szczerze mowiac ,rowniez znalazlem sie tutaj ,bo chcialem znalezc strony porownujace jezyki Skryptowe. w/g mnie Jarek Zabiełło jest ograniczony jak ten jego Ruby. Sam pracuje jako programista JAVA/PHP (gry internetowe) i znam roznice miedzy jezykami skryptowymi i kompilowanymi (w javie to kwestia sporna). Podany przez Ciebie przyklad jest calkowiecie stronniczy i niesprawiedliwy. Sprobuj napisac program w Pythonie zmieniajacy standarodowe przerwania w procku. W C to sa 3 minuty. Oczywistym jest ,ze jezyki skryptowe sa lepsze do analizy tekstow (bash+awk) i do tego zostaly stworzone. Stwierdzenie ,ze lepszy jest żuk od mercedesa s-klasy bo mozna na nim przewiezc kanape jest rownie trafne. Widac po sposobie rozumowania autora ,ze nie jest gornolotnym informatykiem, Jego pojecie o inzynierii oprogramowania jest marne. Jezeli chce porownywac jezyki na podstawie skryptow 20-linijkowych to gratuluje mu poziomu. Prawda jest taka ,ze jak ktos juz zaznaczl: kodowanie to tylko kilka % projektu. Jezeli chcesz napisac szybko projekt kozystasz z PHP,ROR ,jezeli chcesz stworzyc bezpieczny i wydajny projekt piszesz w J2EE ,ASP.NET. Nie mowie tutaj o aplikacjach desktopowych ,gdzie jezyki skryptowe to totalna porazka. Oczywiscie jak pisalem ,programuje w jezykach i takich i takich ale mam swiadomosc tego ,ze jezyki skryptowe sa tylko narzedziem, chociaz np. w Linuxie bash jest podstawowym elementem systemu. Ja mam wyzwanie dla Autora, nie wiem czy sie go podejmie. Proponuje stworzyc Komunikator internetowy (w javie jeden dzien pisania)z prostym GUI. Moze cos innego? Aplikacja graficzna do obslugi np. lotniska (selekcja bagazy ,bookowanie lotow, sprawdzanie polaczen, generowanie opoznien w XML i umieszczanie tego na stronie). a moze jakies inne “wyzwanie”? Nie boje sie niczego ,co autor moze mi powiedziec JA bede kozystal z PHP/JAVA lub J2EE/J2SE. Jezeli dodam do tego umiejetnosc pisania w C++/assemblerze to moge powiedziec ,ze umiem napisasc duzo. Od web serwisow opartych na SOAP,RMI,XML,XSLT,SOCKET,SERVLET,JSP (moj aktualny projekt) do pisania sterownikow dosowych (moje projekty na studia). Kazdy jezyk jest do czego innnego ale nie mozna ujmowac JAVIe nic,poniewaz takiego wsparcia dla nowoczesnych technologii,frameworkow,dobrych IDE mozliwosc kozystania z UML, czy komponentow nie daje nic poza .NET-em. prosze o kontakt duce74gmailcom autora,chetnie sie z nim sprobuje w programowaniu.
Nastepna jest kwestia taka ,ze zeby sie nauczyc javy potrzebujesz 2,3 lat ,zeby sie nauczyc C++ potrzebujesz 5,6 ,zeby napisac taki banalny Skrypt jaki przedstawil autor w ROR-ze musisz sie uczyc 2 miesiecy. Nic dziwnego ,ze ktos probuje sie dowartosciowac i chce porownac sie z powaznymi programistami. DLA JASNOSCI – BARDZO SZANUJE PYTHONA (najlepszy jezyk skryptowy) , rozumiem zwoloennikow ROR ale nie rozumiem takich ludzi jak Jaroslaw Zabiello ,ktorzy probuja udowodnic swoja wartosc przed innymi jego typu.
duce74: W zasadzie, to powinieneś mieć zabanowany wpis za głupie ataki ad hominem. W intencji autora nie było napisanie jakiegoś kompleksowego porównania języków dynamicznych z językami systemowymi, ale o podważenie buńczucznej tezy jaka padła kilka w różnych dyskusjach o wyższości tych drugich jako wygodniejszego narzędzia do tworzenia dowolnej aplikacji. Rzuciłem zatem wyzwanie tym mądralom, aby napisali taką przykładową aplikację jak wyżej. Czy dobrałem tendencyjny przykład? Jak najbardziej! Moi oponenci, gdyby mieli więcej oleju w głowie, to by odrzucili to wyzwanie, gdyż wiadomo, że do pewnych zadań jedne języki są lepsze od drugich. Ale oni to wyzwanie przyjęli no to nic dziwnego, że polegli. Zrobili to więc na własne żądanie, a ty pokazałeś tylko to, że nie umiesz czytać ze zrozumieniem.
Co do aplikacji desktopowych w jęz. dynamicznych, to zobacz np. SPE, niezły IDE do Pythona napisany całkowicie w Pythonie. Albo lepiej, zobacz IronPython który, zdaniem niektórych firm, jest znacznie lepszym wyborem do tworzenia aplikacji w technologii .NET niż VB.NET czy C#. Tak samo JRuby pozwala mi na pełny dostęp do bibliotek Javy bez pokracznej składni Javy. Zaś co do samego C, zobacz jak łatwo używa się C w Ruby. Nie wspomnę o IronRuby, Jython czy języku takim jak Erlang, który do aplikacji sieciowej wielkiej skali nadaje się wcale nie gorzej od Javy czy .NET.
Dobra naleza Ci sie przeprosiny. Popostu nie tylko ja odnioslem wrazenie ,ze Twoj stronniczy przyklad nie jest skierowany do ludzi ,ktorzy powinni go czytac. Przepraszam Cie natomiast ,ze ‘najechalem’ na Twoja osobe ,zamiast na przyklad. Co do Twojej drugiej czesci ostatniego posta: Sama skladnia jezyka nie jest wazna. Iron python ,czy JRuby to wlasnie ulatwienie dla ludzi ,ktorzy umieja skladnie tych jezykow a chca programowac na INNYCH PLATFORMACH PROGRAMISTYCZNYCH – wlasnie powaznych .NET i J2SE/J2EE. Co do w/g Ciebie pokracznej skladni javy – to jest skladnia ,w ktorej przyjeto konwencje najpopularniejszych jezykow programowania. Porownaj ilu ludzi (powaznych programistow ale i nie tylko) pracuje w C/C++/JAVA/C# gdzie wlasnie taka skladnia jest przyjata a ilu pracuje w Ruby. Ona sie rozwija od ponad 20 lat i wiekszosc programistow ja kocha. Ja widzac kod w javie czytam jak z ksiazki ale to kwestia ilosci h spedzonych nad zrodlami.
Jezeli chodzi o rzeczy typu SPE to jest rowniez ulatwienie dla programistow nie znajacych alternatyw dla swojego jezyka.
Java (jak i C#) maja wspaniala przenoscnosc (m.in. watki zamiast procedur) sa szybkie, maja bardzo dobre zabezpieczenia i klasy wyjatkow, bardzo dobrze wspomagaja wspolbierznosc, maja bardzo duzo bibliotek napisanych przez doswiadczonych programistow. Maja olbrzymie mozliwosci ,jezeli chodzi o wybor ide i narzedzi testowych/frameworkow. Naprawde nigdy jezyki skryptowe nie dogonia ich w znacznej wiekszosci zadan. C++/Assembler pozostanie przez wiele lat w firmach programujacych systemu wbudowane ,gdzie przenosnosc nie jest wazna ,jak i przy waznych projektach jak pisanie kompilatorow/bibliotek/sterownikow/gier.
Do tej pory domena jezykow skryptowych byly web serwisy. Ale w dzisiejszych czasach kazdy powazny serwis jest pisany w J2EE lub ASP.NET ,ze wzgledu na wsparcie dla technologii jak CORBA,SOAP,WSDL niezliczone frameworki , mozliwosc pracy w sieciach klastrow, oraz ze wzgledow bezpieczenstwa/wydajnosciowych.
Jezeli ktos jest hobbysta i pisze dla wlasnej przyjemnosci moze bawic sie w tym ,co mu sie podoba. Ale informatyk pragnacy sie zrealizowac w swojej dziedzinie musi znac technologie wykorzystywane przez powazne firmy (i nie mowie tu o firmach typu “grono” tylko raczej “plusgsm” ,”idea”,obsluga bankow i wyszukiwarek internetowych.
Po raz kolejny dodam ,ze nie jestem przeciwnikiem jezykow skryptowych ,gdyz do niektorych zadan sa najlepsze. Jednak podwazanie potegi wiodacych jezykow programowania z najlepszym wsparciem i wykorzystywanych w najbardziej odpowiedzialnych projektach jest przesada.
Pozdrawiam i jeszcze raz przepraszam za wczorajszy post.
Owszem, podważam “potęgę wiodących języków”, ale to nie znaczy, że podważam jakość i dojrzałość bibliotek dla platform .NET czy J2EE. Przecież mogę do nich uzyskać dostęp z poziomu języków dynamicznych – Rubiego (JRuby, IronRuby) czy Pythona (IronPython i Jython). Więc nie widzę tu jakiejś szczególnej wyższości np. C# nad IronPythonem. Są firmy pracującą w .NET gdzie 95% kodu jest w IronPythonie a nie C#. Przypadek? Nie. Wygoda i większa szybkość tworzenia kodu.
Co do estetyki, to składnia takiej Javy jest daleka od doskonałości. Brak przeciążeń operatorów, nagminnie stosowane koszmarnie długie (wielbłądzie) nazwy metod i zmiennych, konieczność tworzenia (często bezużytecznych) konstrukcji na wyrost, toporność w konieczności definiowaniu każdej zmiennej którą i tak potem często trzeba rzutować na inny typ (przy czym można to zrobić błędnie a kompilator tego nie wyłapie!) Ech… Jeśli ktoś to kocha, to proszę bardzo. Ale założę się o orzechy przeciwko granatom, że trochę pracy w Pythonie i Ruby a niewiele zostanie z tej miłości.
Poruszyłeś też kwestię testowania kodu jako przewagę języków mainstreamu, a przecież to języki dynamiczne mają tu przewagę. Znacznie kompilatora jako kontrolera jakości kodu jest niewielkie, to, co się liczy to testy jednostkowe. A te znacznie łatwiej tworzy się w językach dynamicznych. To dla nich znacznie bardziej naturalne środowisko pracy. Gdzie tu jest więc ta przewaga języków głównego nurtu? Że niby mają wiele IDE? Ruby też ma świetny IDE – Netbeans 6, InteliJ, Aptana RadRails; Python też ma świetny WingIDE Pro, Komodo IDE, SPE. Nawet “koszmarkowy” ;) PHP ma bardzo świetny IDE – Zend Pro. I nie trzeba lepszych, bo jęz. dynamiczne nie potrzebują aż takiej ingerencji w pracę programisty jak C++, Java czy C#.
Nie lekceważyłbym języków dynamicznych, w niektorych ciężkich zastosowaniach biznesowych (tak, nie chodzi mi o banalne projekty), są znacznie lepsze. Np. nie wiem, czy wiesz ale całe Google w dużej mierze oparte jest na Pythonie. Wiem to, bo rozmawiałem z nimi w centrali w Dublinie. Pythonowy serwer aplikacyjny Zope jest także używany w dużych przedsiębiorstwach, NATO, NASA, organizacje rządowe itp.
Co do wielowątkowości i współbieżności to myślę, że Java poszła raczej w złym kierunku. Programowanie i debugowanie aplikacji wielowątkowych jest trudne. Bardziej podoba mi się to co proponuje Erlang ze swoimi super lekkimi, izolowanym procesami. Jest to niesamowicie skalowalny i stabilny język wykorzystywany w oprogramowaniu telekomunikacyjnym (tam jest w ogóle wymagany inny, znacznie wyższy poziom niezawodności niż w innych dziedzinach). Ericson ma przestoje rzędu kilku minut na rok w swym systemie opartym na Erlangu (miliony linii kodu).
napisalo do Ciebie okolo 20 osob i wiekszosc z nich uwaza ,ze nie masz racji. Wyjasnij mi prosze teraz dlaczego Twoja swiatla wiedza nie jest popierana przez najwieksze koncerny (no ok jest stosowana ,moze nie w takim stopniu jak J2EE i ASP.NET ale spotykana). Dlaczego na uczelniach wyzszych tysiace madrych glow stawiaja na jezyki kompilowane, dlaczego pracodawcy szukaja programistow jezykow ,za ktorymi ja stoje? Czy nie uwazasz ,ze walczysz z wiatrakami? Znajdujesz przyklady (wyjatki potwierdzaja regule) stosowania jezykow skryptowych do zadan przeznaczonych (z definicji) do jezykow kompilowanych (do binarek ,czy bajtkodow). Nie bedziemy szukac daleko.
Podaj mi aplikacje mogace konkurowac z wymienionymi ponizej:
multimedia: mplayer,allplayer,xmms,winamp
programowanie: Netbeans,Kdevelop,MS Studio,Eclipse (o kompilatory/debugery nie pytam)
Systemy operacyjne: (bez pytan, ulomnosc jezykow skryptowych)
komunikatory: irssi,xchat,mIrc,gaim,tlen,gg,kadu
przegladarki WWW: firefox,ie,opera
menadzery okien: gnome,explorer,kde,enlightment
Gry: Warcraft 2(jeszcze nie wydana),Heroes CS,NFS Undergraund
Wyjasnij mi dlaczego nie pisze sie ich w jezykach skryptowych? Oczywiscie sa biblioteki do pythona pozwalajace obslugiwac grafike/dzwiek/sockety ale sa one marna kopia (czesto napisana w innych jezykach) tego co oferuja Ci kompilowane jezyki programowania.
Powiedz mi , dlaczego zadna z firm rozwijajacych powyzsze aplikacje nie pisze ich w Pythonie? Bo jest nie dojrzaly? A dlaczego nie pisali go w Perlu?
A jezeli chcesz mi powiedziec ,ze w .Net ,czy JAVA jest mozliwe wykorzystanie skladni Pythona,czy Ruby – to tylko swiadczy o potedze tyche platform i ich bibliotek. Poza tym to dalej pozostaje .NET i JAVA. Jezeli chcesz napisz sobie parser ,ktory bedzie zamial Ci skladnie Pythona na JAVE. Ostatecznie bedzie to jednak JAVA. Poza tym ja i wiekszosc ludzi woli skladnie javy niz pythona. To ,ze NetBeans wspiera Ruby to tylko plus dla NetBeansa ( IDE JAVY!!!) Nie dla Ruby.
Powiedz mi jeszcze jedna rzecz. Czy umiesz programowac w Javie ,.Net i C++? Nie pytam o assemblera. Nie chodzi mi tu o pisanie prostych skrypcikow tylko o prawdziwe programy? Ja umiem pisac i w jezykach skryptowych (Bash/AWK, niestety PHP) oraz kompilowanych (JAVA,C++). I dlatego moge powiedziec obiektywnie ,ze zastosowanie tych pierwszych jest ograniczone i mozna ich uzywac ,jezeli stawiasz wyzej szybkosc wykonania nad jakoscia (Web Serwice) lub jezeli piszesz proste skrypty systemowe. Innych rozwiazan dla nich nie widze ,a biblioteki powstaja dla ludzi ,ktorzy nie chca sie uczyc jezykow dedykowanych do jakichs rozwiazan i uwazaja ,ze ich jezyk jest najlepszy.
Jestem mlody i naprawde najwazniejsze jest dla mnie ,zeby byc dobrym programista/projektantem. Gdybym widzial przyszlosc w tych jezykach (oczywiscie maja przyszlosc w swoich zastosowaniach) to bym sie ich uczyl. Mam swierzy umysl i oceniam sprawy obiektywnie. W przeciwienstwie do Ciebie.
Co do wielowatkowosci w JVM troche nie masz racji:). Nie bylo mozliwosci wykorzystania procesow ,poniewaz nie wszystkie systemy operacyjne pozwalaja na prawidlowa ich implementacje przez JVM. Wykorzystanie wielowatkowosci bylo jedynym mozliwym rozwiazaniem ,ktore zapewnia przenosnosc kodu (polecam poczytac o tym troche). Poza tym watki sa tworzone szybciej od procesow i praktycznie wszystkie trendy we wspolczesnej informatyce ide w strone ich stosowania. Sa szybsze , dlaje sa czescia programu glownego co zapewnia im komunikacje z calym programem. Istenie mozliwosc zapamietania stanu obiektow miedzy wywolaniami poszczegolnych watkow ,co ma zastosowanie w J2EE, gdyz nie istenieje potrzeba tworzenia nowych obiektow miedzy wywolaniami zadania na serwerze. Super lekkie procesy nadal beda procesami z oddzielnymi segmentami pamieci kodu i danych ,oraz stosow (polecam architekture komputerow i assemblera) i mimo ich super lekkosci beda mniej wydajne od watkow.
Co do dynamicznego typowania, to ma zastosowanie tylko w szybkim wytwarzaniu kodu. Rzutowanie jawne ma wlasnie na celu ochrone przed bledami ,a nie je powoduja. Dlaczego systemy napisane w ADA95 nie pozwalaja nawet na przypisanie float-a do int-a? zeby powodowac bledy? Nie! poniewaz tego jezyka stosuje sie w programowaniu satelit, sond kosmicznych ,czy sprzetu wojskowego , gdzie nie ma prawa wystapic rzaden blad.
Kazdy jezyk ma swoje zastosowanie, zastosowanie jezykow skryptowych jest jasne. I nie wmawiaj ludziom ,ze jest to lek na wszelkie zlo. Jezeli umiesz programowac w innych jezykach to dziwie sie czemu tego nie widzisz. jezeli nie umiesz – rozumiem. Kazdy broni swojego.