Re[9]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.11.05 00:39
Оценка:
Здравствуйте, eao197, Вы писали:

E>Влад, извини, что увожу тему в сторону, но почему ты считаешь Java динамическим языком?


Вообще-то его таковым считали авторы еще при создании.

А вообще, что тут считать то? Язык позволяет делать динамически все от загрузки объектов, до компиляции.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: С++ culture
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.11.05 04:23
Оценка:
Здравствуйте, VladD2, Вы писали:

[skip, ибо...]

ГВ>> Да, кстати, я не спорю с тем, что полезно знать нескольких языков. Я просто считаю приведённую выше формулировку слишком поверхностной.

VD>Это твои проблемы. Я и не брался давать формулировку для энциклопедии. Я выражаю свое мнение. Оно просто [...]

Тогда я прекращаю дискуссию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: С++ culture
От: ie Россия http://ziez.blogspot.com/
Дата: 07.11.05 04:51
Оценка:
sch>Как говорил один замечательный художник и просто умный человек: причиной любого конфликта является непонимание.

ИМХО, маленько не так: В конфликте не бывает абсолютно правых, бывает лишь общее непонимание.
Превратим окружающую нас среду в воскресенье.
Re[10]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.11.05 07:16
Оценка: 37 (3) +2
Здравствуйте, VladD2, Вы писали:

E>>Влад, извини, что увожу тему в сторону, но почему ты считаешь Java динамическим языком?


VD>Вообще-то его таковым считали авторы еще при создании.


Понятно, значит классификацию Java как динамического языка нужно оставить на совести его создателей

VD>А вообще, что тут считать то? Язык позволяет делать динамически все от загрузки объектов, до компиляции.


А вот если попробовать подсчитать, то можно интересный результат получить (http://en.wikipedia.org/wiki/Dynamic_programming_language):

In computer science, a dynamic programming language is a kind of programming language in which programs can change their structure as they run: functions may be introduced or removed, new classes of objects may be created, new modules may appear.


Можно ли в Java вводить новые методы в уже существующие классы? AFAIK, нет.
Можно ли в Java изымать существующие методы из уже существующих классов? Опять же, AFAIK, нет.

Подгружать новые модули с новыми классами и объектами? Да ты же сам мне недавно доказывал, что через COM на C++ это уже давно можно было делать.

Компилировать новые модули и подгружать их в уже работающую программу? Да на C++ -- нет проблем: запускаем внешний компилятор, строим DLL и полный вперед. А если компилятор оформлен в виде DLL или COM-объекта, то прямо из приложения можно это делать.

Единственное проявление динамизма Java, которое приходит мне в голову -- это возможность вызова либого метода объекта через reflection с передачей аргументов в виде object[]. Только, имхо, маловато этого, чтобы динамическим языком называться. Поэтому, как мне кажется, динамизм некоторых языков сильно преувеличивается.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: С++ culture
От: Шахтер Интернет  
Дата: 07.11.05 09:09
Оценка: :)))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Да ведь спорят. Я в свое время мир предложил


PD>>http://www.rsdn.ru/Forum/Message.aspx?mid=1445599&amp;only=1
Автор: Pavel Dvorkin
Дата: 20.10.05


PD>>Не получается мир.


ГВ>И прямо во время подписания мирного соглашения из-за острого несогласия с выбранным цветом чернил...


Ну что делать, если у C++ ников кровь голубая...
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[11]: С++ culture
От: sch  
Дата: 07.11.05 11:22
Оценка: -1 :)
E>Единственное проявление динамизма Java, которое приходит мне в голову -- это возможность вызова либого метода объекта через reflection с передачей аргументов в виде object[]. Только, имхо, маловато этого, чтобы динамическим языком называться. Поэтому, как мне кажется, динамизм некоторых языков сильно преувеличивается.

Сделать на C++ библиотеку, которая будет реализовывать нечто подобное довольно просто. Опять же, при грамотном использовании шаблонов, C++ может дать гораздо более разнообразную динамичность, чем другие языки.
Re[12]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.11.05 12:47
Оценка: +2
Здравствуйте, sch, Вы писали:

E>>Единственное проявление динамизма Java, которое приходит мне в голову -- это возможность вызова либого метода объекта через reflection с передачей аргументов в виде object[]. Только, имхо, маловато этого, чтобы динамическим языком называться. Поэтому, как мне кажется, динамизм некоторых языков сильно преувеличивается.


sch>Сделать на C++ библиотеку, которая будет реализовывать нечто подобное довольно просто.


Ануткать

Принципиальная разница будет в том, что в Java можно в run-time собрать необходимое количество аргументов в object[] и вызвать любой метод по его имени. В С++ подобный вызов можно будет сделать только для тех, методов, к которым шаблонные обертки были приделаны.

sch> Опять же, при грамотном использовании шаблонов, C++ может дать гораздо более разнообразную динамичность, чем другие языки.


Ключевые слова: "грамотном использовании" и "может дать". Слишком сильные "если" А в уже готовых динамических языках динамичность можно использовать прямо здесь и прямо сейчас. Пример, как водится, из Ruby:
# Обертка вокруг теста для того, чтобы не вылетать по исключению.
def execute_test_case( message )
    begin
        puts "-- #{message} --"
        yield
    rescue Exception => x
        puts "!!! caught: #{x} !!!"
    end
end

# Исходный класс и его методы.
class Test
    def hello; puts "hello"; end
    def bye; puts "bye"; end
end

# Тестируемый объект. Важно отметить, что все последующие модификации
# класса Test будут отражаться на уже существующем объекте.
t = Test.new

execute_test_case "Original Test class" do t.hello; t.bye end

# Теперь метод bye нам не нужен.
class Test
    remove_method :bye
end

execute_test_case "Test class without bye method" do t.hello; t.bye end

# Теперь заменяем метод hello и возвращаем метод bye
class Test
    def hello; puts "Hello, world"; end
    def bye; puts "Bye, world"; end
end

execute_test_case "Modified Test class" do t.hello; t.bye end


Получаем:
-- Original Test class --
hello
bye
-- Test class without bye method --
hello
!!! caught: undefined method `bye' for #<Test:0x2777040> !!!
-- Modified Test class --
Hello, world
Bye, world


И все это "из коробки" для любого метода и любого класса. Другой вопрос насколько это надо и когда это стоит использовать. Но делать вручную то же самое на C++ и тяжело и вряд ли необходимо.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: С++ culture
От: sch  
Дата: 07.11.05 13:11
Оценка:
Здравствуйте, eao197, Вы писали:

E>И все это "из коробки" для любого метода и любого класса. Другой вопрос насколько это надо и когда это стоит использовать. Но делать вручную то же самое на C++ и тяжело и вряд ли необходимо.


Согласен с тобой по всем пунктам.

Тут просто действует общее правило, которое заключается в том, что на C++ можно делать *все*, только напильником поработать надо
Re[14]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.11.05 13:49
Оценка: 12 (1) +1 -1
Здравствуйте, sch, Вы писали:

sch>Тут просто действует общее правило, которое заключается в том, что на C++ можно делать *все*, только напильником поработать надо


На ассемблере можно сделать еще больше. Вот толку от того — 0.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.11.05 13:49
Оценка: -3
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Тогда я прекращаю дискуссию.


Об этом можно и не сообщать.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.11.05 13:49
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Можно ли в Java вводить новые методы в уже существующие классы?


Да. На том построена туча фрэймворков.

E>Можно ли в Java изымать существующие методы из уже существующих классов?


Опять же да. Если бы это было невозможно, то разных Spring-ов просто не существовало бы.

E>Подгружать новые модули с новыми классами и объектами?


Тоже да.

E> Да ты же сам мне недавно доказывал, что через COM на C++ это уже давно можно было делать.


Ком является отдельной и не маленькой технологией.

E>Компилировать новые модули и подгружать их в уже работающую программу? Да на C++ -- нет проблем: запускаем внешний компилятор, строим DLL и полный вперед. А если компилятор оформлен в виде DLL или COM-объекта, то прямо из приложения можно это делать.


Ага. Вот только ни одного так и не оформелно в виде ДЛЛ. А теоритически можно. Вот только работать такие приложения будут ну очень медленно. Ведь компиляция С++ — жто процесс порой очень долгий.

Далее на сцену выходят все те же проблемы отсуствия динамичести. Подключение модулей осложнено. Динамическая загрузка осложнена. Про безопасность и надежность можно просто забыть.

E>Единственное проявление динамизма Java, которое приходит мне в голову -- это возможность вызова либого метода объекта через reflection с передачей аргументов в виде object[]. Только, имхо, маловато этого, чтобы динамическим языком называться. Поэтому, как мне кажется, динамизм некоторых языков сильно преувеличивается.


Ты судишь о том, что знаешь очень поверхносно. Я яву тоже знаю не очень глубого, но и моих знаний досточно чтобы заметить что твои суждения явно не верны.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.11.05 16:33
Оценка: +1
Здравствуйте, VladD2, Вы писали:

E>>Можно ли в Java вводить новые методы в уже существующие классы?


VD>Да. На том построена туча фрэймворков.


Каких?

E>>Можно ли в Java изымать существующие методы из уже существующих классов?


VD>Опять же да. Если бы это было невозможно, то разных Spring-ов просто не существовало бы.


Я думаю, что пора просить помощи у знатоков Java в этом вопросе. Лично я не могу представить себе такого кода на Java:
// SomeClass.java

public class SomeClass
{
    public void hello()
        {
            // трам-пам-пам...
        }
}

и где-то в другом файле:
public class SomeClass
{
    public void bye()
        {
            // трам-пам-пам...
        }
}

И затем:
public class SomeClassTest
{
    static public void main( string args[] )
        {
            SomeClass s = new SomeClass();
            s.hello();
            s.bye();
        }
}




Может быть на уровне манипуляций с байт-кодом Java и можно что-либо подобное делать, но к языку Java это оношения уже не будет иметь.

E>>Единственное проявление динамизма Java, которое приходит мне в голову -- это возможность вызова либого метода объекта через reflection с передачей аргументов в виде object[]. Только, имхо, маловато этого, чтобы динамическим языком называться. Поэтому, как мне кажется, динамизм некоторых языков сильно преувеличивается.


VD>Ты судишь о том, что знаешь очень поверхносно. Я яву тоже знаю не очень глубого, но и моих знаний досточно чтобы заметить что твои суждения явно не верны.


Если в отношении добавленя/изъятия методов классов я прав, то мне кажется, что динамизм Java слишком завышен.

Кстати, а в C# возможно добавление/изъятие методов в класс, после того, как класс уже будет полностью определен?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.11.05 16:33
Оценка: +1
Здравствуйте, sch, Вы писали:

E>>И все это "из коробки" для любого метода и любого класса. Другой вопрос насколько это надо и когда это стоит использовать. Но делать вручную то же самое на C++ и тяжело и вряд ли необходимо.


sch>Согласен с тобой по всем пунктам.


sch>Тут просто действует общее правило, которое заключается в том, что на C++ можно делать *все*, только напильником поработать надо


Угу. Только, к сожалению, объем доработок напильником может быть настолько велик, что ценность полученного результата окажется несоизмеримо меньше стоимости затраченных усилий.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.11.05 23:17
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, VladD2, Вы писали:


E>>>Можно ли в Java вводить новые методы в уже существующие классы?


VD>>Да. На том построена туча фрэймворков.


E>Каких?


А на строчку ниже взглянуть слабо было?

VD>>Опять же да. Если бы это было невозможно, то разных Spring-ов просто не существовало бы.


Или влом было погуглить?

http://www.optim.ru/cs/2004/3/spring/spring.asp
Spring в гугле

E>Может быть на уровне манипуляций с байт-кодом Java и можно что-либо подобное делать, но к языку Java это оношения уже не будет иметь.


Ну, конечно. А к чему интересно имеет? Спринги и т.п. как раз так и устроены. Они дают декларативный интерфейс к динамическим возможностям среды. А в основе лежат рефлексия, кодогенерация и динамическое создание экземляров.

E>Кстати, а в C# возможно добавление/изъятие методов в класс, после того, как класс уже будет полностью определен?


Несколькими способами. От RealProxy до эмита.

Вот только ты почему-то считашь, что динамичность языка определяется добавлением кода в рантайме. Как раз это нужно довольно редко. А вот создать и проинциализировать объект основываясь только на его описании полученном в рантайме — это задача очень частая. В плюсах без создания специального фрэймворка (или использования разных КОМ-ом) не решаемая.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: С++ culture
От: Stoune  
Дата: 08.11.05 03:29
Оценка:
Здравствуйте, aik, Вы писали:


aik>Это где так удачно аську разместил? Можно в мыло

Так надо заполнить поля в своей аське, у меня в интересах С++, так на меня сами из большого кадрового агенства через поиск нашли, жаль я уже на тот момент выбрал свой путь, а предложение было очень соблазнительным.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[14]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 05:47
Оценка: +1
Здравствуйте, VladD2, Вы писали:

E>>Может быть на уровне манипуляций с байт-кодом Java и можно что-либо подобное делать, но к языку Java это оношения уже не будет иметь.


VD>Ну, конечно. А к чему интересно имеет? Спринги и т.п. как раз так и устроены. Они дают декларативный интерфейс к динамическим возможностям среды. А в основе лежат рефлексия, кодогенерация и динамическое создание экземляров.


Динамическое создание экземпляров -- это совсем не то, что изменение интерфейса класса путем добавления/изъятия методов в него.

Ты же утверждал:

E>Можно ли в Java вводить новые методы в уже существующие классы?

Да. На том построена туча фрэймворков.

что можно изменять интерфейс уже определенного класса.

E>>Кстати, а в C# возможно добавление/изъятие методов в класс, после того, как класс уже будет полностью определен?


VD>Несколькими способами. От RealProxy до эмита.


А где примеры можно посмотреть?

VD>Вот только ты почему-то считашь, что динамичность языка определяется добавлением кода в рантайме. Как раз это нужно довольно редко. А вот создать и проинциализировать объект основываясь только на его описании полученном в рантайме — это задача очень частая. В плюсах без создания специального фрэймворка (или использования разных КОМ-ом) не решаемая.


Скорее это говорит не о динамизме языка, а о динамизме программ на этом языке. А вот добавление или изменение кода в рантайме -- это как раз показатель динамизма языка. ИМХО.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: С++ culture
От: mrozov  
Дата: 08.11.05 07:37
Оценка: -1
Здравствуйте, Cyberax, Вы писали:


C>Твоя мысль понятна. Но судишь ты о мало тебе знакомой проблеме. Вообще

C>странная ситуация. Все кто пользуется С++ не находят проблем в
C>описаваемых теоретиками случаях.

Наглая и беспринципная ложь, коллега!


Я работал с С++ много лет и любил этот язык, но то, что эти проблемы действительно являются проблемами — всегда знал и видел. Перешел на .net при первой же возможности и меня тошнит каждый раз, когда приходится возвращаться к программированию на c++.

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

Smartpointer-ов действительно не хватает, но в сравнении с другим — это воистину мелочи. Собственно, если бы меня в с++ заставили использовать using, но взамен дали бы единую и согласованную систему исключений с автоматическим поднятием stack trace — согласился бы не задумываясь.

А вообще — есть еще отдельные товарищи, которые утверждают, что лучше фортрана языка нет и не будет. Правда, в наше время у них с достойной оплатой труда некоторые проблемы
Re[2]: С++ culture
От: mrozov  
Дата: 08.11.05 08:09
Оценка: 48 (1) +1
Я бы все-таки сказал — "низкая квалификация с++ кадров".

Среди сишников профессионалов не больше, чем среди других популяций. А может и меньше — C++ многие выбирают из-за "крутизны". А этот язык некомпетентности не прощает.

Даст бог — через какое-то время ситуация изменится и останутся только действительно грамотные люди. Но до тех пор, пока отдельные товарищи гонят волну истерии и призывают писать на с++ прикладные проекты как правило, этого ждать не приходится.
Re[3]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.11.05 08:17
Оценка: +1
Здравствуйте, mrozov, Вы писали:

M>Даст бог — через какое-то время ситуация изменится и останутся только действительно грамотные люди. Но до тех пор, пока отдельные товарищи гонят волну истерии и призывают писать на с++ прикладные проекты как правило, этого ждать не приходится.


А вот мне интересно: вот у меня, к примеру, уже не помню когда были проблемы с утечками памяти. И с повисшими указателями. И с выходами за пределы массивов. И с чем там еще, чего в C++ все так боятся. Программирую на C++ довольно плотно, получается где-то по 2-3 тысячи отлаженных строк в месяц. Когда читаю многие здешние посты про паталогические проблемы C++ проявляющиеся на каждом шагу, то постоянно задаюсь вопросом: "Что же я делаю не так?"

И что, мне нужно, как правило, не выбирать C++ в качестве основного языка для реализации прикладных проектов?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: С++ culture
От: mrozov  
Дата: 08.11.05 09:48
Оценка: +3 -2
1. Не хочу показаться грубым — я не обвиняю Вас во лжи. Но мне лично программисты Вашей квалификации никогда не встречались. Я лично, работая с с++, разнообразных проблем, прямо или косвенно связанных с неверными указателями объелся просто. Утечки памяти имели место быть практически в каждой написанной мной программе.

2. Подозреваю, что даже такой высококлассный специалист, как Вы, смог бы выиграть в скорости написания кода той же степени надежности, используя не с++, а с# или Java.

3. Желательно все-таки читать написанный текст, а не бороться с собственными демонами. Я в своем посте помянул именно и конкретно то, что вижу своими глазами регулярно. А именно — массу проблем, связанных с использованием с++ теми, кто рожден для программирования на VB.

Т.е. Ваша личная высочайшая или даже сверхестественная квалификация ни в коей мере не отменяет того простого факта, что большинство (подавляющее) людей не способны писать код с той степеню аккуратности, которая требуется для грамотного кодирования на с++.

Для меня лично переход на .net ознаменовал резкий скачек в производительности работы. Не в последнюю очередь за счет Resharper-а, NUnit-а и xml-comments. Обратно — не хочу.

Dixi.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.