LINUX.ORG.RU

Почему Java — это не круто


0

0

По мотивам статьи Пола Грэхема "Крутые Хакеры" (http://www.paulgraham.com/gh.html)

Сачин Хеджип выделил основные причины неприязни которую настоящие хакеры испытывают к java. Вот они:
- никаких сюрпризов и хитрых фич в языке
- традиционно считается java тормозит
- большинство swing-приложений ужасно выглядят
- строгая типизация это занудно
- сложно изобрести велосипед (все есть в стандартной библиотеке)
- java популярна, а это не круто
- на java нельзя писать драйверы и другие крутые штуки

Стоит отметить, что крутизна технологии никак не связана с ее практическим применением.

>>> Why People Think Java Un-Cool

★★★

Проверено: ivlad ()
Ответ на: комментарий от vada

> Дану! Правда! А чего не прикручивают? Где виртуальная машина Perl, > C, C++, Ada, Lisp, Fortran,... ?

Позволю себе не согласиться. Есть несколько разработок которые используют байт-код, исполняющийся в рамках JVM. В частности, NetProlog : http://netprolog.pdc.dk/ Сам язык PROLOG - логический и к Java отношения никакого не имеет.

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

Ну децкая задача совсем. Фортран порвет всех на ней.

Школьники на информатике такие решают, двайте лутше про ленточные

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

Sun-ch
()
Ответ на: комментарий от dsa

>>И много там в J2EE собственно Java'ы?

Скажем так, немало :)

>>которые меняются быстрее, чем успеваешь прочитать очередной превью этого "стандарта"

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

# April 1997, EJB specification announced
# December 1998, Java 2, SDK 1.2 released
# June 1999, J2EE announced & RI shipped
# September 1999, J2EE Beta released
# December 1999, J2EE platform released
# April 2000, J2EE licensed to ATG, BEA, et al
# May 2000, JDK 1.3 released
# May 2000, J2EE 1.2.1 released
# September 2001, J2EE 1.3 released

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

Ладно Вадик, я тебе подскажу.

Одним из эффективных методов улучшения производительности вычислительных процедур является их ортогонализация по Корунену - Лоеву. Этот способ ортогонализации основан на том, что ковариационная матрица может быть представлена как произведение трех матриц, одна из которых диагональная.

Sun-ch
()
Ответ на: комментарий от Sun-ch

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

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

P.S. я не против любых матриц, хоть разреженных, если ты профинансируешь разработку.

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

>> Дану! Правда! А чего не прикручивают? Где виртуальная машина Perl, > C, C++, Ada, Lisp, Fortran,... ?

>Позволю себе не согласиться. Есть несколько разработок которые используют байт-код, исполняющийся в рамках JVM. В частности, NetProlog : http://netprolog.pdc.dk/ Сам язык PROLOG - логический и к Java отношения никакого не имеет.

Это не просимая "виртуальная машина". Она как раз остаётся неизменной и называется JVM. А что именно хотел товарищ, так и осталось непонятным.

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

>>И много там в J2EE собственно Java'ы? >Скажем так, немало :)

А ничего если я эти Jxxx библиотеки из kawa'ы буду дёргать? Это уже не будет J2EE?

# April 1997, EJB specification announced # December 1998, Java 2, SDK 1.2 released # June 1999, J2EE announced & RI shipped # September 1999, J2EE Beta released # December 1999, J2EE platform released # April 2000, J2EE licensed to ATG, BEA, et al # May 2000, JDK 1.3 released # May 2000, J2EE 1.2.1 released # September 2001, J2EE 1.3 released

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

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

>мы скорость выполнения программ на разных языках написанных собрались >мерить.

А чё ее мерить?

Или ты сомневашься, что реализация обращение матрицы методом Гаусса, на

фортране будет быстрее чем на яве?

Другое дело использовать алгоритм выгодно использующий сильные стороны

языка.

На простых задачах агритны тоже простые и похожие.

Sun-ch
()
Ответ на: комментарий от Sun-ch

> Или ты сомневашься, что реализация обращение матрицы методом Гаусса, > на фортране будет быстрее чем на яве?

не сомневаюсь.

> Другое дело использовать алгоритм выгодно использующий сильные > стороны языка.

Ну и хде их найти у явы на числодробилках ? Хотя бы примерно, где искать.

Vodkin
()
Ответ на: комментарий от Sun-ch

>Короче, Вадик - ты двоешник.

>Все с тобой понятно.

Убогого каждый обидить может :(

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

А думаю, что существует некоторая критическая точка, когда сложность

реализации алгоритма на фортране превысит скромные умственные

способности афтора. Тогда придется прибегнуть к лиспу, с++ или яве.


Хотя с другой стороны при правильном проектировании этого можно

избежать.

Ведь написали же OS/360 на ассемблере.

Sun-ch
()

Java — это круто. Сачина Хеджипа в БИОРЕАКТОР!!!

>- никаких сюрпризов и хитрых фич в языке

"Зачем нужна, а?" (c)

> - традиционно считается java тормозит

Тормозит Сачин Хеджип.

> - большинство swing-приложений ужасно выглядят

Ужасно выглядит Сачин Хеджип.

> - строгая типизация это занудно

Сачин Хеджип это занудно.

> - сложно изобрести велосипед (все есть в стандартной библиотеке)

"Зачем нужна, а?" (c)

> - java популярна, а это не круто

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

>- на java нельзя писать драйверы и другие крутые штуки

LOL! (3 раза) А что такое JDBC драйверы type 4?

Сачина Хеджипа в БИОРЕАКТОР. Вместе с бездельниками кульхацкерами. Метан нужен всем, даже бхаи-бхаи индусам. Если не хватит метана, то добавить Антихриста (Луговского-Маухуура). :)

Javanese
()
Ответ на: комментарий от Sun-ch

> элита не пишет на яве

Масяныч это элита! Три раза "ку" Масянычу.:)))

Javanese
()
Ответ на: комментарий от Sun-ch

Саныч! Ты погоди! Не лезь!

Мы собираемся мерить ИМЕННО выполняемый код на принципиально одинаковых алгоритмах.

Особености языковых фич это немного другое. Можно написать решение системы линейных уравнений из двух уравнений так, что решаться год будет. Это нахрен не нужно.

Зачем нам заморачиваться с разреженными диоагональными матрицами? Там методов всяких просто пруд пруди. Зачем сложные алгоритмы? Говорят байт код медленный. Ну так давайте посмотрим насколько медленный.

Фортран, бесспорно, порвет всех как тузи тряпку. Но сравнить, насколько будет быстрее? Неужели неинтересно?


2Водкин

Сортирвку как делать будем? Слианием, пузырьками, или еще как?

vada ★★★★★
()

"Java did not have a good IDE "

Это такой типа индусский юмор!

Пущай наш бхаи по разуму пойдёт в садик, подучит малька, что на эклипсе можно создавать и отлаживать проги не только для вебсферы, но и ,например, для jбосса, а потом снова вылзает людей смешить. Пущай также подучит малька, что плагины можно создавать и для эклипса, и для сановского нетбинса. В противном случае пусть "лечится эвтаназией" (c). :)

Javanese
()
Ответ на: комментарий от Sun-ch

Саныч, фортран (FORTRAN IV) для разработки просто БЯДА!

А чужой код читать! Маааама!

Эти вычисляемые goto х.з.куда просто песня.

А всякие там комон блоки, просто чума какя-то.

Как вспомню... Брррр.. Мурашки по коже.

:)

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

Хаора, Хаора,... Не помню. Это что-то с рекурсией. Делим пополам, и сортируем половинки, а потом сливаем? Напомни, или мне к Кнуту обратиться лучше?

vada ★★★★★
()

А вот скажите мне крютые клепатели доморощенных КИС, ERP систем на яве.

Неужели не чувствуется что дядя Билли вышел на тропу войны?

В число оглашенных стратегических планов Microsoft Business Solutions на 2004-2005 гг. в России входит рост оборота на 50%, дальнейшая региональная экспансия, в том числе через крупнейших партнеров, развитие методологии внедрения решений и вертикальный фокус.

А снизу 1С тоже прет как танк.

И где тут Вы?

Sun-ch
()
Ответ на: комментарий от vada

Короче, сегодня в конце дня или на крайняк завтра утром, вышлю программу. На фортране писать не буду, будет чистый Ц, безо всяких плюсов. Использовать буду в варианте :

1. qsort и bsearch из stdlib 2. Сам напишу замену этих библиотечных функций.

Компяляторов у меня на работе 3 шт. : GCC, Intel, Watcom, Borland. Фортраном не располагаю. Исходники будут в этом же топике.

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

Хорошо, используй жабский sort. Как он там чего делает - Х.З. Так тебе и быстрее и проще будет.

Vodkin
()
Ответ на: комментарий от Sun-ch

Саныч! Уважаю!

>развитие методологии внедрения решений и вертикальный фокус.

Это ты сам придумал, или списал от куда?

ЗЫ. Нас тута нет.

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

>1. qsort и bsearch из stdlib 2. Сам напишу замену этих библиотечных функций.

Ну и отлично. А я на JAVA твою прогу перепру. Могу еще на паскаль. FreePascal есть. Потом обсудим, и погоняем.

ЗЫ. Фортран 77 есть в GCC. Только я на нем писать не буду. Стремно.

vada ★★★★★
()
Ответ на: комментарий от Sun-ch

Саныч! Тебе только глумится. :)

Давай на фортране ваяй! Или на 1С.

Помню, ты крутейший алгоритм на 1С реализовал. Про улитку. :)

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

Да я так, шнуркую по мелочам, в основном вертикальные рынки.

Sun-ch
()
Ответ на: комментарий от Vodkin

/* Это вариант N 1. Есть оверхед на вызове Cmp */

#include <stdio.h>
#include <stdlib.h>

int SZ;

int Cmp(const void *p1, const void *p2)
{
  register int i1 = *(int *)p1, i2 = *(int *)p2;

  if(i1 > i2)
    return 1;

  if(i1 < i2)
    return -1;

  return 0;
}

int main(int argc, char *argv[])
{
  int  i;
  int *a, *rc;

  if(argc < 2)
  {
    printf("Usage : tst <array_sz>\n");
    return 1;
  }

  SZ = atoi(argv[1]);
  if(SZ < 0 || SZ > 100000000)
  {
    printf("BAD SIZE!\n");
    return 1;
  }

/*  printf("SIZE = %d\n", SZ); */

  if((a = malloc(sizeof(int) * SZ)) == NULL)
  {
    printf("Out mem!\n");
    return 1;
  }

  for(i = 0; i < SZ; i++)
  {
    a[i] = rand();
/*    printf("%d\n", a[i]); */
  }

  qsort(a, SZ, sizeof(int), Cmp);
/*
  printf("-----------------\n");

  for(i = 0; i < SZ; i++) printf("%d\n", a[i]);
  printf("-----------------\n");
*/
  for(i = 0; i < SZ; i++)
  {
/*    printf("%d\n", a[i]); */
    rc = bsearch(a + i, a, SZ, sizeof(int), Cmp);

    if(rc == NULL)
    {
      printf("Elem %d not found\n", a[i]);
      break;
    }
  }

  return 0;
}

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

да, забыл написать, параметр в командной строке должен быть. Он является размерностью массива.

Vodkin
()

Ладно вот мой код


a =[]; 1000000.times {|i| a[i] = rand}; a.sort.find_all {|i| a[i]}

Sun-ch
()
Ответ на: комментарий от Sun-ch

>Вадик ты чё то тормозишь?

>А еще говорят что ява это язык это для рапид апликейшн девелопмент :(

Да, блин, генеральный притащился. Напружинил. Типа, таботаю я... :((

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

>Вот мое предложение. Создать массив целых чисел(или с плавающей точкой (double) на выбор), скажем (1000000 элементов). Заполнить его псевдослучайными числами. Создать новый отсортированный массив. Последовательно применить двоичный поиск к каждому элементу массива. Можно использовать стандартные библиотечные функции. Если время выполнения будет небольшим, можно выполнить алгоритм в цикле N раз. Это не числодробилка, но тоже показательная задача

Не смеши мои тапочки этой "числодробилкой" ;) 

Показываю что такое "числодробилка"

 16:11:31  up 24 days,  1:01,  2 users,  load average: 2,33, 2,68, 2,76
50 processes: 47 sleeping, 3 running, 0 zombie, 0 stopped
CPU0 states: 100,0% user   0,1% system    0,0% nice   0,0% iowait   0,0% idle
CPU1 states:  99,1% user   0,4% system    0,0% nice   0,0% iowait   0,0% idle
Mem:  2063048k av, 1785084k used,  277964k free,       0k shrd,   39780k buff
         5380k active,            1629032k inactive
Swap:       0k av,       0k used,       0k free                 1313224k cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
32250 ss        14   0 1078M 1,1G  903M R    66,6 53,5  1048m   1 OpenCFD-0.1

так вот расчетная область это 640 000 узлов - каждый описывается структурой
из _примерно_ 150 штук long double  и 2-мя десятками int-ов

Я чегой-то не уверен что джава просто в состоянии инициализировать такой объем данных а уж про "числодробление" наверное лучьше не вспоминать ;))) 



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

> У меня на винде запущено 10 far'ов, 2 winrar'а, edonkey, > overnet,flashget, открыто 5 окон оперы, Photoshop CS 8, ImageReady CS, > Delphi 5, Delphi 6, The Bat с полгиговой базой данных, какая нибудь > игрушка, и 3dmark заодно.... не тормозит... а если на java..

Эээээ простите, а зачем так много? ;) Ты во всем одновременно работаешь? ;) Извините, Кай Юлий, не признали ;)

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

Жаба в чём то красива (вероятно концепция ОО), но её беда в том что это проприетарный язык одной кампании. К тому же ничего более менее серъёзного на ней не напишешь - посему как всегда C++.

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

Может Вы не знаете, но физики показали что запасов энергии в нашей

вселенной хватит только на ~ 10^128 элементарных лог. операций

Тут люди на деньги спорят, а Вы тратите наши такты на всякую херню.

Sun-ch
()
Ответ на: комментарий от vm

> Я чегой-то не уверен что джава просто в состоянии инициализировать > такой объем данных а уж про "числодробление"

Матов не хватает. Яву делали _не_ для числодробления. Это все равно, что сравнивать опен-офис с матлабом. Понятно, что в ОО не расчитаешь мат. модель какого-нибудь однополосного детектора, зато в матлабе не сделаешь (за реальное время) расчет бухгалтерского баланса с выкладками.

> К тому же ничего более менее серъёзного на ней не напишешь - > посему как всегда C++.

Вовсе не по этому. А потому, что ты даже на C++ ничего серьёзного не писал.

Puzan ★★★★★
()
Ответ на: комментарий от Sun-ch

>Может Вы не знаете, но физики показали что запасов энергии в нашей >вселенной хватит только на ~ 10^128 элементарных лог. операций

Это все зависит от модели вселенной ;)

>Тут люди на деньги спорят, а Вы тратите наши такты на всякую херню.

Нечто ты думаешь что эта фуйня там вертится забесплатно ? ;)

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

Бух. баланс считают в 1С? Это похоже на бейсик.

Непонятно зачем нужна ява?

Sun-ch
()
Ответ на: комментарий от Puzan

>Матов не хватает. Яву делали _не_ для числодробления.

А я чего пытаюсь объяснить "специалистам" которые ситают что джава отстает от сей "по скорости числодробления на 3%" ? ;)

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

Во. Пинайте.

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Random;
import java.util.Date;

public class Tst
{
    private static final int maxSize = 1000000;

    public static void main (String argv [])
    {
		int sz;

        if (argv.length < 1) {
            System.err.println ("Usage : tst <array_sz>");
            System.exit (1);
        }
				
		try {
            // Get array size
			sz = Integer.valueOf(argv[0]).intValue();

            // Test array size
            if (sz <= 0 || sz > maxSize) {
                System.out.println("BAD SIZE!");
	            System.exit (1);
            }

            // Initial randomize
            Random r = new Random(maxSize);

            // Fill array
            int[] a = new int[sz];
            System.out.println("1. Fill array size of "+sz);
            System.out.println("    start : "+new Date().getTime());
            try {
	            for (int i=0; i<sz-1; i++) {
       				a[i] = r.nextInt();
        	    }
            }
            catch (Exception e) {
                throw new Exception("Fill array error at i="+i+"\n"+e.getMessage());
            }
            System.out.println("    stop  : "+new Date().getTime());

            // Sort array
            System.out.println("2. Sort array");
            System.out.println("    start : "+new Date().getTime());
            Arrays.sort(a);
            System.out.println("    stop  : "+new Date().getTime());

            // Binary search elements
            System.out.println("3. Binary search");
            System.out.println("    start : "+new Date().getTime());
            for (int i=0; i<sz-1; i++) {
                if (Arrays.binarySearch(a, a[i]) != i) System.out.println("Element "+a[i]+" i= "+i+" not found!");
            }
            System.out.println("    stop  : "+new Date().getTime());
		}
		catch (Exception e) {
           throw new NumberFormatException("Integer param ["+argv[0]+"] error\n" + e.getMessage());
		}
	}

}
a

vada ★★★★★
()
Ответ на: комментарий от Sun-ch

Саныч, будешь смеяться, но те-же самые ученые доказали, что во вселенной реальный физический смысл имеют числа не более 10^40, а число 10^100 (помоему гугол) ваапче больше бесконечности :)

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

Я же написал, что не считаю эту задачу числодробилкой. А вообще то и ею можно загрузить систему по полной. Запусти несколько копий и увеличь размер массива до максимума. И будет тебе счастье. Я согласен, что задача эта детская, но показательная.

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

Ну я проверять не буду. Если все работает, - верю на слово. Ты время работы своей программы приведи на числах 10000,100000,1000000 и 10000000. И сравним чья быстрей. А вообще, длинная у тебя программа, я думал на Си больше писать придется. Вопрос : какой конфигурации у тебя комп ? Может мою прогу заодно запустишь ? Она без проблем GCC компилится.

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

Звиняйте, лажанулся. В буфере обмена какая-то старая лажа оказалась.



import java.util.Arrays;
import java.util.Random;
import java.util.Date;

public class Tst
{
    private static final int maxSize = 1000000;

    public static void main (String argv [])
    {
		int sz;

        if (argv.length < 1) {
            System.err.println ("Usage : tst <array_sz>");
            System.exit (1);
        }
				
		try {
            // Get array size
			sz = Integer.valueOf(argv[0]).intValue();

            // Test array size
            if (sz <= 0 || sz > maxSize) {
                System.out.println("BAD SIZE!");
	            System.exit (1);
            }

            // Initial randomize
//            Random r = new Random(maxSize);
            Random r = new Random();

            // Fill array
            int[] a = new int[sz];
            System.out.println("1. Fill array size of "+sz);
            System.out.println("    start : "+new Date().getTime());
            int i = 0;
            try {
	            for (i=0; i<sz-1; i++) {
       				a[i] = r.nextInt();
        	    }
            }
            catch (Exception e) {
                throw new Exception("Fill array error at i="+i+"\n"+e.getMessage());
            }
            System.out.println("    stop  : "+new Date().getTime());

            // Sort array
            System.out.println("2. Sort array");
            System.out.println("    start : "+new Date().getTime());
            Arrays.sort(a);
            System.out.println("    stop  : "+new Date().getTime());

            // Binary search elements
            System.out.println("3. Binary search");
            System.out.println("    start : "+new Date().getTime());
            int j;
            for (i=0; i<sz-1; i++) {
                j = Arrays.binarySearch(a, a[i]);
                if (j < 0) System.out.println("Element "+a[i]+" i= "+i+" j= "+j+" not found!");
            }
            System.out.println("    stop  : "+new Date().getTime());
		}
		catch (Exception e) {
           throw new NumberFormatException("Integer param ["+argv[0]+"] error\n" + e.getMessage());
		}
	}

}

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

Вот получилось такое:

1. Fill array size of 1000
    start : 1093535757460
    stop  : 1093535757462
2. Sort array
    start : 1093535757464
    stop  : 1093535757474
3. Binary search
    start : 1093535757476
    stop  : 1093535757491
=============================
1. Fill array size of 10000
    start : 1093535804440
    stop  : 1093535804447
2. Sort array
    start : 1093535804449
    stop  : 1093535804509
3. Binary search
    start : 1093535804511
    stop  : 1093535804587
============================
1. Fill array size of 100000
    start : 1093535840624
    stop  : 1093535840713
2. Sort array
    start : 1093535840715
    stop  : 1093535840803
3. Binary search
    start : 1093535840805
    stop  : 1093535840873
=============================
1. Fill array size of 1000000
    start : 1093535870980
    stop  : 1093535871252
2. Sort array
    start : 1093535871254
    stop  : 1093535871680
3. Binary search
    start : 1093535871682
    stop  : 1093535871952
=============================
1. Fill array size of 10000000
    start : 1093535896395
    stop  : 1093535898494
2. Sort array
    start : 1093535898496
    stop  : 1093535902901
3. Binary search
    start : 1093535902904
    stop  : 1093535905629
==============================

Время в формате longint впадлу мне было тысячные высчитывать.

ЗЫ. А ни кто и не говорил, что на жабе код короткий. Какраз наоборот.

А компик у меня... ща гляну... Мозгу 512 метров.

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 1
model name      : Intel(R) Celeron(R) CPU 1.70GHz
stepping        : 3
cpu MHz         : 1700.048
cache size      : 128 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips        : 3394.76

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