Нужен совет по выбору книги (C++)

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Krishna
Странно, у меня ни разу не было проблем с переносом кода с nix на винду или обратно. Но собственно мне вообще на яву фиолетово, особенно видя как на ней тормозят написанные IDE, пока их не начнешь править всякими настройками и хуками. Возможно предмет сравнения не совсем верен, но все таки странно это видеть от столь давнего языка.
 

Krishna

Продался Java
P.S. Что касается книг по С++, то голос за "Керниган, Ричи. Язык C" и "Самоучитель C++" Шилдт
 

MildMildMint

Новичок
fixxxer Это следствие неверного алгоритма(рекурсия и т.д.). Это лишь малая доля утечек по сравнению с человеческим фактором при работе с указателями.
 

dr-sm

Новичок
Мой голос за Яву.
1) 99% кроссплатформена (более, нежели пых) - не придётся привязываться к платформе.
2) Нет возни с указателями и прочих радостей С++. Ява проще, упорядоченней и стандартизирована. В ней нет С++ приколов, когда выполнение одного и того же кода может варьироваться в зависимости от компилятора.
3) Более востребована на рынке и не менее оплачиваема, нежели С++. Подавляющая часть "энтерпрайз"-приложений, мобильных приложений - ява. Таким образом, для тех кто знает яву доступная предметная область крайне широка.
4) Благодаря тому, что она служила основным донором для ООП-функционала пхп при её изучении многое будет знакомо, это большой плюс. Для тех кто знает пых и паскаль на уровне института - освоить Яву не проблема.
5) Производительность современной Явы сопоставима с С++. Можно разрабатывать практически любые прикладные приложения. Работа с OpenGL и т.п. доступна.
6) наличие огромного числа хороших, годных библиотек. отсутcтвие необходимости изобретать велосипеды или загоняться с архитектурой очередной въюхи сильно облегчает жизнь.
7) maven

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

fixxxer

К.О.
Партнер клуба
fixxxer Это следствие неверного алгоритма(рекурсия и т.д.). Это лишь малая доля утечек по сравнению с человеческим фактором при работе с указателями.
В данном случае это было следствие экономящего cpu GC. =)

Поинтересуйся как-нибудь у разработчиков поиска Яндекса, почему они все пишут на С++. Ручное управление памятью в некоторых задачах критически важно. Это не значит, что оно нужно всегда и везде, совсем даже наоборот; но только вот не надо рассказывать, что GC решает все проблемы. В этом плане мне видится разумным компромиссный подход, как в D например.
 

fixxxer

К.О.
Партнер клуба
Производительность современной Явы сопоставима с С++
Тут надо смотреть во что упираемся. ;) Для cpu bound, memory bound, disk i/o bound и network bound будут совсем разные результаты. Бенчи же по типу вычислений чисел всяких там фибоначчи пригодны только для засовывания оных в жопу их авторам, пардон.

Но конечно с точки зрения удобства ООП и поддержки, С++ по сравнению с Java это полная *банина. Примерно так же как Java по сравнению со Scala, хехе.
 

AmdY

Пью пиво
Команда форума
fixxxer
не надо начинать. оказывается в java тоже можно сделать свой уборщик.

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

fixxxer

К.О.
Партнер клуба
не надо начинать. оказывается в java тоже можно сделать свой уборщик.
я знаю :) для постоянно изменяемых динамических структур все равно получится неэффективно. воркэраунд - выделять память большими пачками (условно говоря, byte[2^стопицот]) и в их рамках крутиться. впрочем, и в С++ с heap fragmentation ровно та же история ;)
 

tz-lom

Продвинутый новичок
минус явы в том что если хочешь писать нормальные проги надо досконально знать как работает вся эта куча кода (со всеми использованными библиотеками и языковыми конструкциями)
мне не раз показывали что короткий и понятный код работает гораздо медленнее чем длинный и непонятный из за "гибкости" джавы и остутствия оптимизаций присущих компилируемым языкам (конечно тут законна и фраза про то что в РНР их тоже нет,но в РНР нет такого активного использования рефлексии и как следствие сильной просадки производительности на ней)

правда про С++ тоже радостного ничего не скажу, Алан Кей уже всё сказал,кто я такой чтобы его дополнять?
учи СИ , си это классно и полезно :)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
трейнер я привел как пример
 

Krishna

Продался Java
минус явы в том что если хочешь писать нормальные проги надо досконально знать как работает вся эта куча кода (со всеми использованными библиотеками и языковыми конструкциями)
мне не раз показывали что короткий и понятный код работает гораздо медленнее чем длинный и непонятный из за "гибкости" джавы и остутствия оптимизаций присущих компилируемым языкам (конечно тут законна и фраза про то что в РНР их тоже нет,но в РНР нет такого активного использования рефлексии и как следствие сильной просадки производительности на ней)

правда про С++ тоже радостного ничего не скажу, Алан Кей уже всё сказал,кто я такой чтобы его дополнять?
учи СИ , си это классно и полезно :)
Почём гаш для народа?
 

Krishna

Продался Java
Тут надо смотреть во что упираемся. ;) Для cpu bound, memory bound, disk i/o bound и network bound будут совсем разные результаты. Бенчи же по типу вычислений чисел всяких там фибоначчи пригодны только для засовывания оных в жопу их авторам, пардон.
Да не нужно ничего смотреть в 90% случаев (условно).
Если не брать задачи, где производительность изначально один из важнейших показателей (3D игры, граф. редакторы, браузеры и т.п), а рассмотреть оставшиеся прикладные области (которых будет много больше), то Java удовлетворит требования к производительности, а главное, предложит значительный профит в стоимости разработки.
 

tz-lom

Продвинутый новичок
Почём гаш для народа?
и как это понимать?

было бы очень круто оценить комментарии почему в джаве этот код работает дикомедленно, а так же мнение почему он не оптимизируется в javac
Код:
for ( Type var : list.toArray() ){
  if(thmthing) { 
    list.remove(var);
  }
}
 

Krishna

Продался Java
tz-lom
По приведенному куску очевидно, что ты даже его содержимое не понимаешь, где уж комментарии по производительности)
 

tz-lom

Продвинутый новичок
Krishna
оокеей,специально для ВАС я привожу полный рабочий код который разжёвывает вопрос о моём понимании кода на джаве
замечу что на джависта я никогда не претендовал,но это не мешает мне накалякать пару строк и не отменяет факта что приведённый ранее код имеет место быть ( естественно в гораздо более комплексной форме)
Код:
import java.util.ArrayList;

public class HW
{
    public static void main(String[] args) {
        
        ArrayList<Integer> al = new ArrayList<Integer>();
        al.add(3);
        al.add(4);
        al.add(5);
        al.add(6);
        
        for ( Object var : al.toArray() ){
            if((Integer)var>=5) { 
                al.remove(var);
            }
        }
        
        for(Integer i : al)
                System.out.println(i);
    }
}
 

dr-sm

Новичок
так тоже "дико медленно"?
Код:
import java.util.List;
import java.util.ArrayList;

public class HW
{
    public static void main(String[] args) {

        List<Integer> al = new ArrayList<Integer>();
        al.add(3);
        al.add(4);
        al.add(5);
        al.add(6);

        List<Integer> bl = new ArrayList<Integer>();

        for(Integer omg: al) {
                if (!(omg >= 5)) {
                        bl.add(omg);
                }
        }

        for(Integer i : bl) {
                System.out.println(i);
        }
    }
}
 

Krishna

Продался Java
tz-lom
Нуу чтооож, для начала, расскажи мне, что такое "дико медленно" и где дико быстро.
 
Сверху