Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333 То что Delphi обходится без апп-сервера - это не прекрасно, это значит, что у Delphi нету апп-сервера. Не совсем понял, что Вы имеете в виду. Наличие J2EE-подобных спецификаций на контейнеры, объекты итп? jdev333 А это серьезный минус для более-менее немаленьких сложных проектов. Согласитесь, что это не "минус", а "предмет многих религиозных споров без какого-либо осмысленного результата". jdev333 На жабе хороший "нетормозной" GUI - мона, но займет больше ресурсов. Честно говоря, не видел. Вроде как называли отличным примером идею, но и она не очень быстра. Впрочем, у меня больше претензий ко времени, необходимому для разработки функционально нормального интерфейса. jdev333 А "бизнес" писать лучше на жабе Не соглашусь, пожалуй, хотя вопрос в принципе оценочный - кому что проще. Минус дельфы в этом плане - непроработанные в эту сторону стандартные библиотеки. А большой плюс - абсолютный минимум технических деталей, которые следует постоянно держать в голове. Пример такой детали - стандартная для явы проблема использования частично инициализированного объекта (из конструктора предка вызывается виртуальный метод, доопределенный в потомке). Из всего, что я пробовал, дельфа в наибольшей степени дает программисту сосредоточиться на сути ("что я делаю"), уводя на второй план технику реализации ("как это делать"), что является плюсом для бизнес-приложений. Хотя, безусловно, вызывает появление толпы ламеров, которые вроде как специалисты. Впрочем, таких ламеров обильно везде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 13:16 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer jdev333 То что Delphi обходится без апп-сервера - это не прекрасно, это значит, что у Delphi нету апп-сервера. Не совсем понял, что Вы имеете в виду. Наличие J2EE-подобных спецификаций на контейнеры, объекты итп? ну да, если я правильно понял человека, писавшего про сервера для жабы :) jdev333 На жабе хороший "нетормозной" GUI - мона, но займет больше ресурсов. Честно говоря, не видел. Вроде как называли отличным примером идею, но и она не очень быстро Впрочем, у меня больше претензий ко времени, необходимому для разработки функционально нормального интерфейса вот и я к тому же. На джаве делать GUI пока не особо оправданно. ------ Зато на жабе есть исключения и загрузка класса по имени. А самое главное - апп-сервер, который дает кучу возможностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 13:48 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333 Зато на жабе есть исключения и загрузка класса по имени. Хм. Вы так говорите, слово в жабе они появились раньше чем в дельфе :) Если уж говорить о подобных возможностях, приведите жаба-аналог следующего кода, столь же простой и удобный: Код: plaintext 1. 2. 3. 4. 5. 6. jdev333А самое главное - апп-сервер, который дает кучу возможностей. Это самое главное для тех задач, где он нужен :) Само по себе безусловно хорошо, но это не столько объект сравнения, сколько вопрос разных ниш. Борландеры с моей точки зрения повели себя несерьезно, вроде как попытавшись подсесть на веб, но более декларативно - типа "а у нас можно и эту модную феньку тоже" - чем действительно попытавшись сделать удобное решение для этой ниши. Само по себе решение идти в эту нишу с виндовс-продуктом - вряд ли было разумно, просто дань моде, которая ничего особенного не дала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:41 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer а чего тут? Создать класс по имени , вызвать конструктор или getInstance() или метод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 15:29 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333а чего тут? Создать класс по имени , вызвать конструктор или getInstance() или метод. Безусловно, можно. Только займет раза в три больше места и не будет никакой поддержки от компилятора (вместо ошибки компиляции "нет такого конструктора" при исполнении вылетит InvocationЧтоТоException). С поддержкой исключений в жабе у меня также есть некоторые претензии. Первая - директива throws. Точнее, то, что из метода, указанного как не возбуждающий исключений, тем не менее может вылететь уйма исключений; соответственно эта директива только мешает без какой-либо практической пользы. Вторая - отсутствие нормальной поддержки исключений в Swing-е; в результате, кстати, многие java-программы работают "втихую": я нажал на кнопку, исключение вылетело в System.out, красота, ошибок нет, работы тоже нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 15:54 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
Безусловно, можно. Только займет раза в три больше места и не будет никакой поддержки от компилятора (вместо ошибки компиляции "нет такого конструктора" при исполнении вылетит InvocationЧтоТоException). ЭЭЭ! Стоп!. Как это "ошибка компиляции" для класса, которого еще может не быть? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 15:57 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer Безусловно, можно. Только займет раза в три больше места и не будет никакой поддержки от компилятора (вместо ошибки компиляции "нет такого конструктора" при исполнении вылетит InvocationЧтоТоException). Ну прям таки в три раза :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 16:11 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333 ЭЭЭ! Стоп!. Как это "ошибка компиляции" для класса, которого еще может не быть? :) Близким аналогом в данном случае будет работа через интерфейс с классом, которого может еще не быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 16:46 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
------------- Ну прям таки в три раза :) Между Код: plaintext и Код: plaintext есть некоторая разница, реализация которой несколько увеличит этот код. Ладно, уточню свою фразу: в три, если расписывать аккуратно, и в два, если описывать и инициализировать массив в одну строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 16:53 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer есть некоторая разница, реализация которой несколько увеличит этот код. Какая такая разница и как увеличит? по-моему, все одинаково. Близким аналогом в данном случае будет работа через интерфейс с классом, которого может еще не быть. Это к чему? Пусть есть интерфейс, от которого наследуются все классы, вызываемые таким способом ( по имени). В каком языке компилятор выдаст преупреждение об ошибке на этапе компиляции для еще несуществующих классов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 17:11 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333Какая такая разница и как увеличит? по-моему, все одинаково. Хм. Боюсь, на "одинаково" я могу только посоветовать посмотреть повторно. Увеличит за счет необходимости использования объекта Constructor. jdev333 Пусть есть интерфейс, от которого наследуются все классы, вызываемые таким способом ( по имени). В каком языке компилятор выдаст преупреждение об ошибке на этапе компиляции для еще несуществующих классов? В любом нормальном языке компилятор выдаст ошибку (а не предупреждение) на попытку вызова метода, отсутствующего в интерфейсе либо присутствующего с другой сигнатурой. Даже если через этот интерфейс предполагается работа с классом, который может не существовать на момент компиляции вызывающего кода. К сожалению, я не предполагал, что беседую с человеком, не знакомым с дельфой. Reflection в данном случае - довольно неуклюжее приближение к имеющемуся в Delphi механизму сlass references (хотя с другой стороны является более мощным и более универсальным механизмом). Происходящее в написанном мной коде жабовскими словами можно описать примерно так: от загруженного по имени класса берется интерфейс, и по этому интерфейсу вызывается конструктор объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 17:42 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
В любом нормальном языке компилятор выдаст ошибку (а не предупреждение) на попытку вызова метода, отсутствующего в интерфейсе либо присутствующего с другой сигнатурой. Даже если через этот интерфейс предполагается работа с классом, который может не существовать на момент компиляции вызывающего кода. Ну да. Но и в жабе выдаст ошибку при попытке вызвать метод, отсутствующий в интерфейсе. К сожалению, я не предполагал, что беседую с человеком, не знакомым с дельфой. Reflection в данном случае - довольно неуклюжее приближение к имеющемуся в Delphi механизму сlass references (хотя с другой стороны является более мощным и более универсальным механизмом). Происходящее в написанном мной коде жабовскими словами можно описать примерно так: от загруженного по имени класса берется интерфейс, и по этому интерфейсу вызывается конструктор объекта. ну и в жабе так же берется интерфейс и вызывается что-то. Где Вы видите разницу в 3 раза какую-то? Хм. Боюсь, на "одинаково" я могу только посоветовать посмотреть повторно. Увеличит за счет необходимости использования объекта Constructor. Не понял. Почему это в жабе необходимо использовать какой-то объект Constructor? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 17:50 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer С поддержкой исключений в жабе у меня также есть некоторые претензии.Первая - директива throws. Точнее, то, что из метода, указанного как не возбуждающий исключений, тем не менее может вылететь уйма исключений; соответственно эта директива только мешает без какой-либо практической пользы. вообщето, без объявления в директиве throws, могут вылетать только наследники RuntimeException, а это такие ошибки, которые в отлаженной программе не должны возникать, а если они есть, то это реальные баги. А вот все остальные ошибки, обязаны быть объявлены в throws или перехвачены в try/catch иначе будет ошибка на этапе компиляции. На счет ненужности throws это вы конечно загнули, а как бы вы например читая JavaDoc, определяли какие ексепшены может выкидывать тот или иной метод? Или вам чисто пофиг, у вас каждый метод в try/catch ??? Или вы любитель копатся в исходниках, которые не всегда есть?? А компилятору тоже тогда нужно в исходниках копаться? softwarer Вторая - отсутствие нормальной поддержки исключений в Swing-е; в результате, кстати, многие java-программы работают "втихую": я нажал на кнопку, исключение вылетело в System.out, красота, ошибок нет, работы тоже нет :) тут чего то вообще не понял, при чем тут свинг?? Как описали вы, может происходить в любой программе и без свинга, это все зависит от рук программиста, точнее от того, как он ошибки обрабатывает и куда стек трейсы выводит. Кстати, аналог log4j в делфи есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 18:39 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333Ну да. Но и в жабе выдаст ошибку при попытке вызвать метод, отсутствующий в интерфейсе. Угу. Вот только в жабе написанный мной код не удастся выполнить через интерфейс. Или она уже научилась засовывать в интерфейс конструкторы? jdev333 ну и в жабе так же берется интерфейс и вызывается что-то. Где? Пока что я вижу одно предложения java-реализации, где интерфейсами и не пахнет. Мало того, сначала Вы сказали "выпадет в ранайтме, так и надо", теперь вроде как говорите что все будет так же, с ошибкой в дизайн-тайме. jdev333 Где Вы видите разницу в 3 раза какую-то? Не понял. Почему это в жабе необходимо использовать какой-то объект Constructor? Хм. Простите, я еще готов понять, что я рассказываю про возможности дельфы, но неужели мне нужно рассказывать еще и про возможности жабы? Сформулирую так: в чем, по-Вашему, отличие Class.newInstance() и Constructor.newInstance()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 19:40 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
wessenвообщето, без объявления в директиве throws, могут вылетать только наследники RuntimeException, а это такие ошибки, которые в отлаженной программе не должны возникать, а если они есть, то это реальные баги. И кому легче от того, что они не должны возникать? Они возникают. Причем в официальных релизах тех же оракловых программ (это чтобы убрать ссылку на лично мои кривые руки). В любой нетривиальной программе есть ошибки, и задача программиста - минимизировать проблемы от них. Если программа упадет от NullPointerException - пользователю, час вбивавшему данные, глубоко наплевать на то, что эта ошибка не должна была возникнуть. wessenА вот все остальные ошибки, обязаны быть объявлены в throws или перехвачены в try/catch иначе будет ошибка на этапе компиляции. Это был бы замечательный принцип, если бы он всегда работал. Но тогда, когда он работает по принципу "здесь играем, здесь не играем, а здесь рыбу заворачивали", проще вставить в шаблон метода throws Throwable и не париться. Догадываетесь, почему Throwable? Потому если если вставить throws Exception, то программа таки будет падать - именно падать, пролетая сквозь вроде бы правильные блоки catch. wessenНа счет ненужности throws это вы конечно загнули, а как бы вы например читая JavaDoc, определяли какие ексепшены может выкидывать тот или иной метод? Я предпочту здесь отойти от сути и сфокусироваться на логике рассуждений: Вы считаете правильным модифицировать язык, чтобы сделать малополезную документацию чуть менее малополезной? wessenИли вы любитель копатся в исходниках, которые не всегда есть?? Наоборот. Я не люблю копаться в исходниках, но пока что я не встречал джавовской библиотеки (включая JDK), которая рано или поздно не заставила бы меня (может быть взять декомпилятор) и разобраться, что там понаворотили. wessenА компилятору тоже тогда нужно в исходниках копаться? Хм. Признаться, не уследил за логикой Ваших рассуждений. А компилятор копается в javadoc-ах? wessenтут чего то вообще не понял, при чем тут свинг?? При том, что свинг - одно из мест, где эту проблему можно было бы исправить. wessenКак описали вы, может происходить в любой программе и без свинга, это все зависит от рук программиста, В случае жабы - именно так, от рук программиста. В случае дельфы - можно специально постараться и сделать программу, которая работает "как описал я". Но если не стараться, пользователь как минимум увидит сообщение об ошибке. wessenКстати, аналог log4j в делфи есть? Затрудняюсь ответить насчет аналога, поскольку log4j не устроил меня и я плохо знаю его возможности. Средств аналогичного назначения, разумеется, полно. Впрочем, имхо сравнение библиотек малоосмысленно - все равно их слишком много, чтобы кто-нибудь имел представление о всех имеющихся, и можно говорить лишь о наличии решений под ту или иную довольно узкую задачу. С тем же успехом я могу спросить о наличии в яве аналога DevExpress, GExperts или хотя бы ODAC (вот об отсутствии последнего, кстати, я сильно печалюсь). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 20:16 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer jdev333 Ну да. Но и в жабе выдаст ошибку при попытке вызвать метод, отсутствующий в интерфейсе. Угу. Вот только в жабе написанный мной код не удастся выполнить через интерфейс. Или она уже научилась засовывать в интерфейс конструкторы? Конструкторы, действительно, в интерфейсы не засунешь. Мона засунуть метод createNewInstance(), а конструктор спрятать. Поэтому выполнить - удастся. softwarerjdev333 ну и в жабе так же берется интерфейс и вызывается что-то. Где? Пока что я вижу одно предложения java-реализации, где интерфейсами и не пахнет. Мало того, сначала Вы сказали "выпадет в ранайтме, так и надо", теперь вроде как говорите что все будет так же, с ошибкой в дизайн-тайме. Вы чего, жабу не знаете? :) ((MyInterface)Class.forName(name)).createNewInstance(a,b,c,d); softwarerjdev333 Где Вы видите разницу в 3 раза какую-то? Не понял. Почему это в жабе необходимо использовать какой-то объект Constructor? Хм. Простите, я еще готов понять, что я рассказываю про возможности дельфы, но неужели мне нужно рассказывать еще и про возможности жабы? Сформулирую так: в чем, по-Вашему, отличие Class.newInstance() и Constructor.newInstance()? Constructor - это , вообще, что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 22:18 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer wessenКак описали вы, может происходить в любой программе и без свинга, это все зависит от рук программиста, В случае жабы - именно так, от рук программиста. В случае дельфы - можно специально постараться и сделать программу, которая работает "как описал я". Но если не стараться, пользователь как минимум увидит сообщение об ошибке. Специально постараться, как я понимаю, должен программист? :) softwarer wessen А вот все остальные ошибки, обязаны быть объявлены в throws или перехвачены в try/catch иначе будет ошибка на этапе компиляции. Это был бы замечательный принцип, если бы он всегда работал. Но тогда, когда он работает по принципу "здесь играем, здесь не играем, а здесь рыбу заворачивали", проще вставить в шаблон метода throws Throwable и не париться. Догадываетесь, почему Throwable? Потому если если вставить throws Exception, то программа таки будет падать - именно падать, пролетая сквозь вроде бы правильные блоки catch. OutOfMemory перехватывать собрались? :) Checked exceptions - бизнес -эксшепшионы, Runtime - остальные. работа с ними всегда ведется по-разному, ибо суть у них разная. softwarer wessenНа счет ненужности throws это вы конечно загнули, а как бы вы например читая JavaDoc, определяли какие ексепшены может выкидывать тот или иной метод? Я предпочту здесь отойти от сути и сфокусироваться на логике рассуждений: Вы считаете правильным модифицировать язык, чтобы сделать малополезную документацию чуть менее малополезной? Вы и сами в состоянии обвинить себя в передергивании и переставлении с ног на голову :) Однако, Вы этого не делаете. Разве все так плохо? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 22:37 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
jdev333Специально постараться, как я понимаю, должен программист? :) Да. В дельфе, если специально постараться, можно сделать плохую (в части данной конкретной особенности) программу. В жабе программист должен постараться, чтобы сделать (в свете данной конкретной особенности) хорошую. Соответственно, в рамках сравнения реализации исключений в двух средах - это недоработка жабы. Заметьте, сравнивать исключения предложил не я :) jdev333 OutOfMemory перехватывать собрались? :) Не пробовал. Полагаю, в моем случае они обработаются по общей схеме, и надеюсь, у создателей java-машины хватило умения реализовать их хотя бы на уровне Turbo Vision (где эту проблему можно было адекватно обработать). jdev333 Checked exceptions - бизнес -эксшепшионы, Runtime - остальные. работа с ними всегда ведется по-разному, ибо суть у них разная. Это теория. Какое отношение, например, SQLException имеет к бизнесу при нормальном понимании слова "бизнес"? То, что для одного класса - бизнес-функция, для другого - неинтересная техническая деталь. Работа с ними ведется одинаково, ибо в первую очередь интересно одно: бизнес-функция работает либо бизнес-функция не работает. Грубо говоря, если я начал транзакцию, мне надо откатить ее вне зависимости от того, произошло ли SomeBusinessRuleException, SQLException или NullPointerException. Разумеется, абзац выше - определенная гипербола, утрированная точка зрения. Такая же гипербола, как Ваше "всегда по-разному". Реальность - где-то посередине; где-то я ловлю конкретные исключения, где-то пишу реакцию на Exception, а кое-где - и на Throwable; если я этого не сделаю, моя программа станет тем самым дерьмом, которое втихую гадит под себя (в смысле - в System.out). softwarer [quot wessen]На счет ненужности throws это вы конечно загнули, а как бы вы например читая JavaDoc, определяли какие ексепшены может выкидывать тот или иной метод? jdev333 Вы и сами в состоянии обвинить себя в передергивании и переставлении с ног на голову :) Однако, Вы этого не делаете. Разве все так плохо? :) Признаться, совсем не понял смысла этой фразы :( Я специально подчеркнул, что отхожу от вроде бы намеченной темы (и был бы рад, если бы мои собеседники делали так же). Причину тоже указал, правда в форме вопроса - примененная схема рассуждений мягко говоря неудачна, первичная вещь (язык) выводится следствием вторичной (javadoc), серьезно отвечать на следствия из этого бессмысленно. Если Вы считаете, что на основании этого меня нужно обвинить в дезориентации чего-либо - что ж, обвиняйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 00:21 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
Не знаю, как сейчас, но помню года 4 назад достаточно было саму Delphi оставить на выходные, чтобы в понедельник утром из-под неё полезли совершенно тупые сообщения об ошибках. Думаю, комментарии о надёжности Delphi-программ излишни. И stack trace в Дельфи есть? Как его программно получить, чтобы узнать в каком месте ошибка было и залогировать ей в стандартный вывод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 09:27 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer как минимум сообщение об ошибке Ну и какова польза от этого сообщения - без логов, без стэктрайса, без всего? Ошибка может быть где угодно, в любом из методов программы, вызываемых при возникновении события. Вот юзер пожаловался на то, что вылазит окошко с ошибкой. Работает он на старой версии программы, какую компилить ещё надо и ставить где-то и с версиеями офиса и оракла, каких у Вас просто нет (к примеру, совсем нет - покупать надо). И говорит он, что вот у меня такая гадость вылазит. Ваши действия? А теперь представьте, что у вас есть нормальный человеческий лог с вызовами процедур и со стэктрейсом. Вы можете начать с того, что возьмёте из SourceSafe'а версию кастомера и просмотрите именно то место, откуда вылезла ошиюка. И, скорее всего, даже если код писали китайские студенты, Вы сможете придумать достоверную гипотезу о том, почему ошибка возникла и что с ней делать. Как на Delphi сделать так, чтобы эксепшины писались в лог, а не гадились на экран? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 09:49 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarerЯ специально подчеркнул, что отхожу от вроде бы намеченной темы (и был бы рад, если бы мои собеседники делали так же). Причину тоже указал, правда в форме вопроса - примененная схема рассуждений мягко говоря неудачна, первичная вещь (язык) выводится следствием вторичной (javadoc), серьезно отвечать на следствия из этого бессмысленно. То что есть throws в методе - подсказывает программисту о возм-х исключениях (это мона сделать в комментариях-документ) и программно задает (а это уже нельзя) логику поведения метода и т.д. И в javadoc это отображается (автоматом) и в коде программы. И нет никакого влияния документации на жабу - ясное передергивание. И Вы сами это понимаете, но прикидываетесь. Придраться к толкованиям формы рассуждений (типа тут бы нуна вместо javaDoc сказать о сыпцах)- так себе занятие. А, вообще, забавно. Вы открыли мне глаза. Я-то думал, что Delphi - старый недобрый Паскакаль, а там, оказывается, что-то полезное появилось. Но не все :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 10:07 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
А самое прикольное, что в Дельфи эксепшины из разных мест программы выглядят абсолютно одинаково . Вы можете даже воспроизвести баг у себя, сделать патч к старой версии программы, отправить его кастомеру, и поставить себе текущую версию программы, чтобы продолжить над ней. Но Вы не можете быть уверены, что пофиксили именно тот баг, что воспроизводился у кастомера. Вы вполне могли воспроизвести и пофиксить другой баг. После этого кастомер ставит Ваш патч и видит тот же самый баг. Теперь Вам опять надо будет снести текущую версию и поставить старую тупую версию, которую юзает кастомер. Но Вы не можете быть уверены, правильно ли Вы отослали патч. Вы начинаете смотреть релиз-меил, проверяете-всё верно. Но что именно буилд инженеры положили в патч остаётся загадкой. Вы начинаете долгую и нудную переписку, чтобы выяснить, что патч у кастомера стоит должным образом. Но у Вас-то баг не воспроизводится, так как Вы его пофиксили. Придётся разбираться заново. И теперь представьте, что у Вас был бы нормальный человеческий лог со стекрэйсом, который бы позволил точно отличить один баг от другого . В Delphy для различения багов программист должен приложить усилия. В Java баги различаются по умолчанию - их можно различать по стектрейсу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 10:13 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
softwarer И кому легче от того, что они не должны возникать? Они возникают. Причем в официальных релизах тех же оракловых программ (это чтобы убрать ссылку на лично мои кривые руки). Вы действительно считаете, что оракловые программы верх совершенства и официальные релизы делают лучшие программисты планеты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 10:49 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
DarkSquidВы действительно считаете, что оракловые программы верх совершенства и официальные релизы делают лучшие программисты планеты? Ничуть. Похоже, так считают мои оппоненты, которые среди прочих приводят их в пример. Я пока что не видел программы на яве, которая бы мне действительно и безоговорочно понравилась, поэтому затрудняюсь оценить творчество лучших программистов планеты и мерять этой шкалой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:00 |
|
||
|
Delphi vs Java2
|
|||
|---|---|---|---|
|
#18+
DarkSquidНу и какова польза от этого сообщения - без логов, без стэктрайса, без всего? Польза от этого сообщения в том, что пользователь знает о состоянии программы. Достаточно типичное состояние java-программы (видел не раз, хотя разумеется и не то чтобы каждый день) - в трейс вылетел тот же NullPointerException, программа осталась с висящим прогрессбаром в состоянии "вроде бы работает", и если пользователь не заглянет в лог - так и будет ждать, пока "доработает до конца". Польза от этого сообщения в том, что пользователь не нажмет кнопку второй, третий, четвертый раз, потому что она "не нажимается - вернее нажимается, но ничего не делает", и тем не усугубит последствия ошибки. Позволю себе переставить местами абзацы Вашего повествования, дабы соблюсти логику ответа. DarkSquidА теперь представьте, что у вас есть нормальный человеческий лог с вызовами процедур и со стэктрейсом. А кто Вам сказал, что у меня его нет? Хм. У меня складывается впечатление, что в этой теме я единственный, кто серьезно работал с обоими инструментами, и разговариваю с куликами с одного болота. DarkSquidВы можете начать с того, что возьмёте из SourceSafe'а версию кастомера Гадость какая :( Я уж лучше из стартима возьму. DarkSquid Ошибка может быть где угодно, в любом из методов программы, вызываемых при возникновении события. Вот юзер пожаловался на то, что вылазит окошко с ошибкой. Угу. Что в самом худшем случае лучше, чем если он жалуется: "Программа просто не работает. Жму, и ничего не происходит. Консоль? Какая консоль? А, это дурацкое черное окно, которое все время мешается.. Да, там постоянно что-то пишется - я никогда не обращал на него внимания. Нет, конечно ничего не сохранял. Да, сейчас запущу еще раз.... Нажал, там вылетело что-то на десять экранов, какие-то непонятные слова, ничего записать не успел. А, так это в файл надо записать? А как?" DarkSquid..... Ваши действия? Чтобы не расписывать, отмечу, что кроме стектрейса, у меня есть еще один простой путь - взять из VCS-а map-файл и в нем увидеть строку (файл и номер), при исполнении которой вылетела ошибка. Собственно, если бы Вы когда-нибудь попробовали, например, MemCheck (это удобный вспомогательный файл, разработанный парой швейцарских студентов), то увидели бы, что он выдает трейс без всякого исключения (сообщает, например, "вовремя не освобожден указатель такой-то, выделенный там-то"). DarkSquidи просмотрите именно то место, откуда вылезла ошиюка. И, скорее всего, даже если код писали китайские студенты, Вы сможете придумать достоверную гипотезу о том, почему ошибка возникла и что с ней делать. Ну и? Что особенного дает здесь жаба? Хотя относительно достоверной проверки - сомнительно. Скажем, следующий фрагмент кода: Код: plaintext Какую достоверную гипотезу о происхождении NullPointerException Вы выдвинете? Я - так вижу как минимум две, причем не вижу, как на основании только этой информации выбрать из них верную. DarkSquidКак на Delphi сделать так, чтобы эксепшины писались в лог, а не гадились на экран? Повесить на событие Application.OnException обработчик, который будет писать исключения в файл. На экран они при этом перестанут вылетать, поскольку это дефолт на случай отсутствия пользовательских обработчиков. В жабе близким к понятию обработчика является понятие Listener-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:46 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33358730&tid=1346901]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
82ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 402ms |

| 0 / 0 |
