LINUX.ORG.RU
ФорумTalks

[Ненависть] [Java] бедная и длинная жаба

 ,


0

1

гуглим:

Perl copy file Python copy file

все делается в одну строчку

а теперь Java copy file

ага.

P.S. после конвертации одной библиотеки из Java в Python: http://code.google.com/p/java2python/

размер текста программы уменьшился на 25% (удалялось много ненужного кода)

Java такая Java.

> а теперь Java copy file

org.apache.commons.io.FileUtils.copyFile(orig, res);

ня?

Deady
()
Ответ на: комментарий от isden

>там поди и абстрактных методов и интерфейсов нет, да?

Конечно нет.

Сам езыг вообще очень странный: не говоря о полном отсутствии обратной совместимости, постоянному перекраиванию стандартной библиотеке, Гвидо упорно набивает шишки, которые были набиты создателями других языков задолго до него. Например, в python 2.3 2003 года разлива не было ключевого слова finally, а было что-то подобное плюсовому catch(...). Правда в плюсовке объекты уничтожаются автоматически при выходе из области видимости, поэтому catch(...) там весьма уместен, а вот в пистоне велкам ту копипаста для освобождения ресурсов.

linuxfan
()
Ответ на: комментарий от stevejobs

Нет, конечно. Он всё-таки не настолько auto :-) Для этого нужно новое ключевое слово:

astral a=new MyObject()

, при этом a получается именно того типа, которого хотел программист.

hdfan2
()
Ответ на: комментарий от linuxfan

там поди и абстрактных методов и интерфейсов нет, да?

Конечно нет.

Как языковой сущности со своим синтаксисом нет. Но есть стандартная библиотека для определения обязательных для имплементации методов.

Правда в плюсовке объекты уничтожаются автоматически при выходе из области видимости, поэтому catch(...) там весьма уместен

Если они на стеке выделены, тогда деструктор вызывается, да. Но с кучей же бида. А в питоне объекты замечательно собираются. Более того, в нонешней версии есть with как раз для таких задач.

baverman ★★★
()
Ответ на: комментарий от baverman

>Если они на стеке выделены, тогда деструктор вызывается, да.

Мосье, значит, не в курсе auto_ptr, shared_ptr и прочих методов для слежения за временем жизни объекта?

А в питоне объекты замечательно собираются.

Расскажи мне, как в пистоне замечательно «соберется» сокет, который забыли закрыть.

Более того, в нонешней версии есть with как раз для таких задач.

Как я уже сказал выше, Гвидо настолько умный, что считает своим долгом пройтись по всем граблям, по которым уже прошли до него десятки тысяч людей.

linuxfan
()
Ответ на: комментарий от hdfan2

> astral a=new MyObject()

, при этом a получается именно того типа, которого хотел программист.


для этого не надо нового слова. потому что к Астралу не ходи, и так известно что всё наследуюется от Object.

Object a = new MyObject()

stevejobs ★★★★☆
()
Ответ на: комментарий от linuxfan

Мосье, значит, не в курсе auto_ptr, shared_ptr и прочих методов для слежения за временем жизни объекта?

Мосье велосипедил соответствующие обертки, когда еще не знал про стандартную плюсовую библиотеку.

Расскажи мне, как в пистоне замечательно «соберется» сокет, который забыли закрыть.

Зачем рассказывать? Покажу лучше код:

import socket
import weakref
import subprocess

# Trick to avoid direct object reference from current stack frame
socket_holder = [socket.socket(socket.AF_INET, socket.SOCK_STREAM)]
s = weakref.ref(socket_holder[0])

s().connect(('ya.ru', 80))

# Connection established
subprocess.Popen(['/usr/bin/env', 'netstat', '-p', '--inet']).wait()

# Removing any references to socket by clearing list. gc destructs socket after that line
socket_holder[:] = []

# Connection in fin wait status
subprocess.Popen(['/usr/bin/env', 'netstat', '-p', '--inet']).wait()

# Check socket realy garbage collected
assert s() == None
baverman ★★★
()
Ответ на: комментарий от baverman

>Зачем рассказывать? Покажу лучше код:

Ндя, показал так показал: пришлось ВРУЧНУЮ очищать массив.

Хочу код, суть такова: есть функция, она печатает «python sucks» и открывает сокет, затем кидает исключение. Исключение перехватывается в месте вызова функции и вызывается netstat, который показывает, что сокет был закрыт.

linuxfan
()
Ответ на: комментарий от linuxfan

Ндя, показал так показал: пришлось ВРУЧНУЮ очищать массив.

Товарищ, не паясничайте, я просто показал, что будет при срабатывании гц. Но можно и корованы пограбить, правда в питоне фрейм собирается после возврата из вызывающей функции, но сути это не меняет:

import socket
import weakref
import subprocess
import gc

ref = None

def python_rulezz():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('ya.ru', 80))
    
    global ref
    ref = weakref.ref(s)
    
    raise Exception()

def call():
    try:    
        python_rulezz()
    except:
        print 'Socket alive. python_rulezz stack frame refers to socket', gc.get_referrers(ref())
        
    print 'Socket still alive. python_rulezz frame will be collected after returning from call', gc.get_referrers(ref())


call()
# Only at this point python_rulezz stack frame disapears and socket is collected
assert ref() == None

# Connection fin wait
subprocess.Popen(['/usr/bin/env', 'netstat', '-p', '--inet']).wait()
baverman ★★★
()
Ответ на: комментарий от linuxfan

> Например, в python 2.3 2003 года разлива не было ключевого слова finally

«Слышал звон, да не знаешь, где он» (с) finally есть в Питоне с лохматого 1.5 (как минимум).

В 2.3 не было try-except-finally, что было иногда неудобно (приходилось делать вложенный try).

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

>Товарищ, не паясничайте, я просто показал, что будет при срабатывании гц. Но можно и корованы пограбить, правда в питоне фрейм собирается после возврата из вызывающей функции

Ок, теперь я поверил.

linuxfan
()
Ответ на: комментарий от stevejobs

Ну а если хочется указатель не на Object и не на класс после new, а на одного из предков или на интерфейс? Нет, без astral никак нельзя :-)

hdfan2
()
Ответ на: комментарий от isden

>и что здесь такого страшного и ужасного?

Просто тавтология бессмысленная.

эмм.. O_O

А что? Можно же было сделать значения по умолчанию, что методы public, а свойства private. Ну а static — да, во многом вещь нужная, просто раздражает public static void main ради описания такой элементарной вещи.

vkos ★★
()
Ответ на: комментарий от stevejobs

Во-первых, знаю. Во-вторых, осуждаю не сам принцип, а громоздкость конструкций в жабе. Даже в плюсах эти модификаторы меньше место занимают, а можно было ещё компактней сделать.

vkos ★★
()
Ответ на: комментарий от vkos

> Просто тавтология бессмысленная.

какая же тавтология? <тип переменной> <имя переменной> = <значение переменной>

Можно же было сделать значения по умолчанию, что методы public, а свойства private.


цитата:

По умолчанию метод, как и переменная, доступен только классам в том же пакете (наборе классов), что и исходный класс. Если перед возвращаемым типом задан модификатор доступа public, то метод является глобальным и доступен любым объектам, а модификатор private означает, что метод доступен в том классе, в котором он был объявлен, т.е. метод инкапсулирован в данном классе.

Ну а static — да, во многом вещь нужная, просто раздражает public static void main ради описания такой элементарной вещи.


http://www.blurtit.com/q669236.html
http://www.allinterview.com/showanswers/1889.html

isden ★★★★★
()
Ответ на: комментарий от isden

>какая же тавтология? <тип переменной> <имя переменной> = <значение переменной>

Такая, что в большинстве случаев значением является резулятат вызова конструктора с тем же именем, что и тип.

По умолчанию метод, как и переменная, доступен только классам в том же пакете (наборе классов), что и исходный класс. Если перед возвращаемым типом задан модификатор доступа public, то метод является глобальным и доступен любым объектам, а модификатор private означает, что метод доступен в том классе, в котором он был объявлен, т.е. метод инкапсулирован в данном классе.

Ну и? Большинтсво функций объявляются как public.

Короче, доводы приводить можно, но от этого громоздкость никуда не денется.

vkos ★★
()
Ответ на: комментарий от vkos

> Такая, что в большинстве случаев значением является резулятат вызова конструктора с тем же именем, что и тип.

http://www.linux.org.ru/jump-message.jsp?msgid=5338217&cid=5340826 и выше по треду.

Ну и? Большинтсво функций объявляются как public.


ну и есть тебе умолчания, можешь явно указывать только там где оно нужно.

Короче, доводы приводить можно, но от этого громоздкость никуда не денется.


ты бы еще лисп вспомнил, с его обилием скобочек, или отступы в питоне. у каждого языка есть своя специфика.

isden ★★★★★
()
Ответ на: комментарий от isden

>ты бы еще лисп вспомнил, с его обилием скобочек, или отступы в питоне. у каждого языка есть своя специфика.

Скобочки и отступы не вызывает ощущения какой-то бессмысленности, хотя это конечно субъективно.

В итоге, на мой взгляд логичность явы не удобна и не очевидна.

vkos ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.