[Holy war] Язык Java круче всех

enochka1145

В этом треде я попрошу приводить достаточно конкретные аргументы против тезиса, вынесенного в заголовок (если, конечно, они существуют). Предполагается сравнение в первую очередь с C++ и C#.
Бессодержательные сообщения типа "Ошибаешься. Учи Аду." прошу направлять сразу в Garbage, чтобы не усложнять процесс.

rosali

Ты совершенно прав. Java круче всех. Чем больше такие как ты, тем дороже хорошие программисты.

freezer

В Жаве есть свойства? А делегаты? А события? Или их надо самому ручками делать?
В Жаве есть шаблоны? Множественное наследование реализации? Автоматические локальные переменные?
Арифметика с указателями?

maggi14

да! да! если меня правильно информитровали, Сан разрабатывает (если еще не разработала) Джаву с шаблонами
так что Джава, в меру оперативно, тырит неплохие концепции

enochka1145

В Java нет свойств и событий. Да, их надо делать ручками. Шаблонов тоже нет.
Java прост и в этом его сила. В C++ есть ещё больше, чем ты привёл (ты про C#, я так понял). Только зачем всё это богатство, если из-за него только всё усложняется, а стоимость проекта больше?
Я хотел бы увидеть достаточно конкретные примеры, где можно сказать "а вот на Java это делать замучаешься".

freezer

вот когда разработает, тогда и поговорим
А в c#'е они уже в этом году окончательно в релизе появятся

enochka1145

Возможно, ты путаешь с generic-ами. Они похожи на шаблоны, но предназначены для других вещей.

enochka1145

Вот когда появятся, тогда и поговорим.
Граждане, давайте по существу.

freezer

я привел по 3 примера из c# и C++ и один общий. Людей, которые много работали и с C++ и с C# и с Java довольно мало. Если человек много имел дело с c++, то там ему все раз плюнуть, а в java он это делать замучается и наоборот
Если мне надо запрограммировать шустрые математические рассчеты, то наверное, на C/C++ у меня это лучше получится, чем у тебя на Java... imho

freezer

так уж и для других?

enochka1145

Разумеется, речь не об обращении матриц или решении дифуров. Речь о достаточно общих, распространённых задачах (приёмах).

maggi14

обращение матриц - достаточно частая задача. Правда, на Си++ ее не делают.
Для частых задач очень не помешают свойства, которых в яве нет

voronetskaya

Чем больше таких как ты, тем дороже хорошие программисты.

ты, кстати, работу не ищешь случайно?

freezer

А... ну если ты так ставишь вопрос Тогда да, в той области для которой предназначена Java, она не сильно уступает своим основным конкурентам. Разве что такая неудобность: свойства надо ручками вызовы методов делать, а вместо делегатов - массив ссылок на интерфейс. Но когда привыкнешь, проблемой это не считаешь

enochka1145

Насколько я понимаю, в C++ шаблоны чтобы по десять раз одну и ту же логику для разных типов не писать. При этом компилятор создаст столько версий алгоритма, сколько потребуется.
В Java generic-и нужны, например, для того, чтобы
- компилятор следил, объекты каких типов содержатся в контейнере;
- не нужно было выполнять небезопасный downcast от Object к фактическому типу.
По-моему, это не одно и то же.

freezer

на C++ делают какую-нибудь обертку для LAPAC, т.к. перегрузка операторов довольно облегчает жизнь. Кстати, ее вроде тоже в Жаве нет?..

enochka1145

А разве в C# свойства не нужно руками прописывать? Ну там get/set всякие?

enochka1145

Перегрузки операторов нет. А что, она хорошо реализована хотя бы на C++?

freezer

ну так в Жаве ты тоже можешь написать для каждого типа по типизированному контейнеру, который будет проверять типы на этапе компиляции и не делать downcasting'ов. И в c++ можно сделать универсальный контейнер элементов void* вместо std::vector или std::list

rosali

Разве что такая неудобность: свойства надо ручками вызовы методов делать, а вместо делегатов - массив ссылок на интерфейс.
Еще в Java-е фишка есть, когда нужно передать параметр by ref, то передают массив из одного элемента, тоже привыкаешь.

freezer

при обращении к свойству - не нужно

freezer

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

enochka1145

ну так в Жаве ты тоже можешь написать для каждого типа по типизированному контейнеру, который будет проверять типы на этапе компиляции и не делать downcasting'ов. И в c++ можно сделать универсальный контейнер элементов void* вместо std::vector или std::list
Java не будет делать копии алгоритма для каждого типа, а это может быть важно в свете оптимизации по скорости.

enochka1145

// Еще в Java-е фишка есть, когда нужно передать параметр by ref, то передают массив из одного элемента, тоже привыкаешь.
Не понял. Можно пример?

enochka1145

Да штука приятная, я не спорю. Но она усложняет программу. Для каждого случая нужно писать operatorX(A a friend operatorX(A a, A b) и т. д., насколько я помню. С operator++ тоже какие-то заморочки.

rosali

C#
 
class Complex
{
private double re;
private double im;
void get_re_im(out double re, out double im)
{ re = this.re; im = this.im; }
}
Java
 
class Complex
{
private double re;
private double im;
void get_re_im(double[] re, double[] im)
{ re[0] = this.re; im[0] = this.im; }
}

maggi14

может, он о строках и скалярах?

enochka1145

Как насчёт
Complex z = w.clone;

rosali

Ну просто бывает нужна вернуть из функции несколько значений (не обязательно примитивных, в принципе). В C# есть для этого "out" параметр, а в Java-е - я слышал для этой цели массивы из одного элемента очень популярны...

enochka1145

Что это за "функция", которая возвращает кучу всего? Может, это просто плохой ОО-дизайн? Может, дашь ещё примеров?

maggi14

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

bleyman

А ты теперь лучше сам приведи хоть одно положительное отличие жавы от шарпа =)
Насколько я помню, всё, что есть в жаве - есть в шарпе, но в шарпе есть ещё немножко полезных вещей, типа пропертей и индексеров.
А! Единственное, чего в шарпе нет - квалификатора throws, но о его пользе споры ведуццо уже давно и безультратно.

rosali

 
void split_at(string s, int at, out string left, out string right);
void calculate_statistics(double[] data, out double mean, out double stddev, out double max, out double min);
Ладно, короче, тебе примеры не приходят в голову не потому, что их нет, а потому что они невыразимы в Java.

bleyman

>> в Джава все типы, кроме всяких чисел, передаются исключительно как референс.
.. И структур, ага.
Видишь ли, out и ref параметры это аналог плюсового
void a(Type ** b)
где две звёздочки. Почувствуй разницу.

maggi14

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

freezer

вроде есть, только игнорируется... Или это только в c++

enochka1145

Практически всё, что есть в Java, есть и в C#, ясное дела. Тем более, в С++ типа .NET 2005 (ИМХО). Только так уж ли нужны отдельные навороты - это я и пытаюсь выяснить. Мне хотелось бы увидеть что-то типа кода на C++ или C# с пометкой "аналог на Java отсутствует/слишком коряв в реализации".

rosali

К чему ты это пишешь? Бывает что функция должна вернуть _два_ объекта, тогда в Java приходится либо писать маленький классик в котором два поля, либо то что я написал - городить одноэлементные массивы. А в C# есть out параметры, они прекрасно работают и с классами.
 
void create__linked_pair(out A a, out B b)
{
a = new A;
b = new B;
a.b = b;
b.a = a;
}

void use_linked_pair
{
A a;
B b;
create_linked_pair(out a, out b);
//...
}

maggi14

Пожалуйста.
#include <stdio.h>
void main(void)
{
printf("Hello world");
}
:)

rosali

неа. Не две, а одна.
Ладно, не тупи. Таки две.

maggi14

> тогда в Java приходится либо писать маленький классик в котором два поля
это с чего это?
в яве, в большинстве случев, все параметры in-out. За редким исключением.

freezer

Нет так немного
C++:
class T;
1) void F(T a, int b); // все - по значению
2) void F(T& a, int b); // объект - по ссылке, целое по значению
3) void F(T** pA, int& b); // ссылка на объект - по ссылке, целое - по ссылке
C#:
class T;
1) не возможно
2) void F(T a, int b);
3) void F(ref T a, ref int b);

maggi14

с чего это две? Ссылка - это, по большому счету, одна звезда. Нафига там вторая?

maggi14

пардон, в шарпе не шарю.. думал, словом реф вы сокращаете сишные референсы.

freezer

это не кошерный код Надо так:
#include <iostream>
int main
{
std::cout << "Hello, world!" << std::endl;
return 0;
}

enochka1145

// void split_at(string s, int at, out string left, out string right);
А в C# такая (библиотечная) функция есть? Я к тому, что это самое _at (ИМХО) обычно опредляют на ходу и более удобна версия (более общая, кстати)
public String[] split(String regex)
Про статистику щас гляну.....

freezer

объект всегда передается по ссылке, но когда пишут ref или out, то сама ссылка передается по ссылке Не боись, это наверное, единственный сложный момент в c#

freezer

Нахрена RegEx'ы для такой элементарной задачи?

bleyman

Тебе привели.
2 Кайафа: ух бля знатоков выискалось.
Поясняю.

class IntContainer
{
public readonly int Int;
public IntContainer(int value)
{
this.Int = value;
}
}

class SomeClass
{
public static void SomeRefMethod(ref IntContainer ic)
{
ic = new IntContainer(13);
}

public static void SomeMethod(IntContainer ic)
{
ic = new IntContainer(13);
}
}

public static void Main
{
IntContainer ic = new IntContainer(0);

SomeMethod(ic);
Console.WriteLine(ic.Int);

SomeRefMethod(ref ic);
Console.WriteLine(ic.Int);

}
}

Выведет
0
13
Нельзя говорить о том, что шарповые/жавовские ссылки - это аналог указателей в плюсах, потому что это приводит вот к такому вот непониманию элементарных вещей.
2 ЖЮнит - тебе привели, кажется, пример с использованием аут параметра (а что, в жаве его реально нету? Жава говнооо!). Заводить на каждый такой случай контейнер для двух стрингов или возвращать массив стрингов - наносить повреждения собственному мозгу.

enochka1145

// void calculate_statistics(double[] data, out double mean, out double stddev, out double max, out double min);
Извини, думаю, проблема надуманная. Неужели так часто надо получить пачку результатов, не оформленных в один объект?

maggi14

> 2 Кайафа: ух бля знатоков выискалось.
> (а что, в жаве его реально нету?
Ну и чем ты от меня отличаешься?

enochka1145


А какому классу принадлежит main?

maggi14

а что, классовость - это самоцель?

enochka1145

// Нахрена RegEx'ы для такой элементарной задачи?
А почему бы и нет?
В простых случаях пишешь
String[] tokens = line.split(" ");
но всегда знаешь, что разбивать можно и намного хитрее.

enochka1145

Мне привели пример с комплексными числами (самая что ни на есть область применения Java) - я привёл более удачное решение Complex w = z.clone;
Мне привели пример со статистикой, где тебя функция забрасывает всякими параметрами - я отвечаю, что считаю что пример не слишком показательный.
Против других примеров нисколечко не возражаю.

bleyman

Я шарп знаю, хуле!

enochka1145

// а что, классовость - это самоцель?
Да нет, но в нашем глобализированном мире обычно всё к чему-то относится...

bleyman

Ну блиа, тебе же сказали - твой основной язык выебал тебе моск так, что ты не умеешь думать про вещи не в его терминах.
this.effect = Effect.FromFile(
World.Device,
creationParams_FromFile.SrcFile,
creationParams_FromFile.PreprocessorDefines,
creationParams_FromFile.IncludeFile,
creationParams_FromFile.SkipConstants,
creationParams_FromFile.Flags,
creationParams_FromFile.Pool,
out this.compilationErrors);

enochka1145

Ну вот... Того в Java нет, этого в Java нет... А сколько-нибудь конкретных примеров, где это и то в C++ и C# всё разруливают, что-то особо не видно.
Мне бы водил-стриптизёрш... В том треде дисскуссия как-то ушла не в ту степь...

enochka1145

И что? Куда смотреть? На последнюю строчку? А exception-ы на что?
P.S. "creationParams_FromFile." не влом каждый раз писать?

Dasar

> Мне хотелось бы увидеть что-то типа кода на C++ или C# с пометкой "аналог на Java отсутствует/слишком коряв в реализации".
1. параметры ref/out - уже обсудили
2. свойства

Data.Current.Length = Car.Wheel.Length;
3. индексные свойства

dictionary["Key"] = myCollection[5];
4. структуры
влияет на производительность.
5. boxing - автоматическое приведение примитивных типов к объектам, и полуавтоматическое - обратное привидение

Console.WriteLine(1);
6. params - метод может принимать произвольное кол-во параметров

void MyMethod(params object[] data) {}

MyMethod("sf", 1, new Class;
7. Аттрибуты - упрощается кодирование стандартных задач

class MyClass
{
[Browsable(true)]
[DisplayName("Данные")]
[XmlIgnore]
[Serializable(false)]
public int MyData{}
}
8. using - автоматический вызов определенного метода интерфейса (Dispose) при выходе из блока

using (StreamReader reader = new StreamReader("data.txt"
{
throw new Exception("какая-то ошибка");
} //здесь reader будет автоматически закрыт в любом случае

enochka1145

1. Не обсудили! Хочу нормальных примеров.
2. Не понял. Можешь пояснить?
3. Как насчёт Map?
4. Давай не будем про производительность . Не C++ всё-таки.
5-6. Есть в Java 5.
7. Думаю...
8. (несерьёзно) Ну вызови dispose в finally. Пусть читателю будет яснее!

enochka1145

7. А что мешает сделать то же самое, скажем, в блоке
{
Browsable = true; и т. д.
}
внутри описания класса?

bobby

А Annotations в Java 5 - это не аналог атрибутов C#?

enochka1145

Я тоже подумал сначала.
ОК, щас гляну...

enochka1145

Нет, не похоже. Тем не менее, думаю, такой код
class A
{
{
property1 = value1;
...
}
...
}
должен помочь.

Dasar

> 1. Не обсудили! Хочу нормальных примеров.

void Swap(ref int a, ref int b);

[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
> 2. Не понял. Можешь пояснить?

Data.Current.Length = Car.Wheel.Length;
в Java-е превращается:

Data.getCurrent.setLength(Car.getWheel.getLength;
> 3. Как насчёт Map?
Что такое Map? какой у него синтаксис?
> 4. Давай не будем про производительность . Не C++ всё-таки.
С# декларирует, что при нормальном JIt-е С# сможет приблизится по скорости к C++;
т.е. C# имеет меньшее кол-во технологических ограничений - которые мешают добиться нормальной скорости
> 8. (несерьёзно) Ну вызови dispose в finally. Пусть читателю будет яснее!
Что нагляднее?

using (StreamReader reader = new StreamReader("in.txt"
using (StreamWriter writer = new StreamWriter("out.txt"
{
writer.Write(reader.ReadToEnd;
}
или

StreamReader reader = new StreamReader("in.txt");
try
{
StreamWriter writer = new StreamWriter("out.txt")
try
{
writer.Write(reader.ReadToEnd;
}
finally
{
writer.Close;
}
}
finally
{
reader.Close;
}

Dasar

> что мешает сделать то же самое, скажем, в блоке
в блоке чего?
и Browsable = true - чему ставится?

bobby

Я, в общем-то, C# и Java знаю хреново, но вот это говорит мне, что annotations - это более-менее аналог attributes в C#:
Annotations do not directly affect program semantics, but they do affect the way programs are treated by tools and libraries, which can in turn affect the semantics of the running program. Annotations can be read from source files, class files, or reflectively at run time.
Или атрибуты в C# вовсе не для того нужны? =)

enochka1145

1. Swap: ладно, это в Java, похоже, только напрямую. Только часто ли нужна такая специфическая операция?
QueryPerformanceFrequency: А почему бы не вернуть long (-1 в случае ошибки)?
2. Совсем не обязательно. У массивов есть length (знаю, это другой length). У StreamTokenizer есть sval. При желании можно использовать переменные, а не соотв. get/set.
3. В Map (например, HashMap) надо делать put(key, value). М. б., не так изящно, зато можно при желании менять реализацию (HashMap, TreeMap, SortedMap, ...)
4. Ну и Java тоже подаёт надежды (в виде будущих JVM). Язык проще => больше возможностей для оптимизации.
8. Думаю...

enochka1145

Тут ты меня поймал - я с атрибутами не разбирался.

Dasar

9. foreach

foreach (string s in text.Split(','
BlaBla(s);

10. Перегрузка операторов
Если говорить про новые фишки, то:
11. Generics
12. anonymous delegate
list.Sort(delegate(int i1, int i2) {return -i1.CompareTo(i2);});
13. partial class - класс может быть объявлен по частям - удобно, например, когда часть класса генерится автоматически

partial class Class
{
int a;
}
partial class Class
{
public int A {get {return a;}}
}

14. yield - "быстрое" объявление enumerator-ов

IEnumerator<TakingPoint> IEnumerable<TakingPoint>.GetEnumerator
{
foreach (TakingPoint item in InnerList)
{
yield return item;
}
}

ps
Пятая Java когда вышла?

enochka1145

OK, я тут ошибся, код в { } в производном классе всё равно в последнюю очередь выполняется.
Зато это хорошее применения для шаблона (а к ним хотел бы свести дискуссию) Builder: Получаешь заготовку, настраиваешь параметры, и все счастливы.

enochka1145

9. for (String s : "Hello world".split(" " print(s); // это в BeanShell
Это и остальное (кроме перегрузки операторов есть в Java 5).
Если надо делать классы на ходу, есть BeanShell.

Dasar

> QueryPerformanceFrequency: А почему бы не вернуть long (-1 в случае ошибки)?
Потому что это готовая (уже реализованная) winapi-шная функция
> зато можно при желании менять реализацию (HashMap, TreeMap, SortedMap, ...)
у индексных свойств в C# тоже можно менять реализацию
> 4. Ну и Java тоже подаёт надежды (в виде будущих JVM). Язык проще => больше возможностей для оптимизации.
Syntactic Sugar не усложняет язык, т.к. не добавляет новых концепций.
свойства - это обычные методы
foreach, using - это сокращенная запись стандартных кусков кода.
overload operators - обычные методы
и т.д.

Dasar

5 java - когда вышла?

enochka1145

Не могу сказать - у меня Java 6. Полгода - год назад, наверно.

bobby

30.09.2004

bastii

Ну аццы Джава, как там реализовано множественное наследование интерфейсов?
Еще плюс в пользу .NET (ну и C# в том числе) заключается в том, что за последние годы MS получилось создать очень хорошую информационную среду для разработчиков. Один институт MVP чего стоит.

enochka1145

class A implements i1, i2, ..., i999 { ... }

vijrel7878

Java - гавно!
Кстати, куда делся этот тред?

enochka1145

Просил же - сразу в Garbage.

vijrel7878

это очень конкретный аргумент, все остальное - размазывание данной выше характеристики

bastii

Спасибо, ценная инфа

bastii

А сколько объект этого класса будет занимать?

enochka1145

Ты же спросил, как с множественным наследованием интерфейсов . Может, надо уточнить вопрос?

enochka1145

// А сколько объект этого класса будет занимать?
"Это нас не касается. Этим занимаются во флоте."

ifani

за последние годы MS получилось создать очень хорошую информационную среду для разработчиков. Один институт MVP чего стоит
А можно поподробнее?

enochka1145

Итак, несмотря на кричащее название треда, пока не удалось обсудить какой-нибудь содержательный пример (задачу который на Java кодируется из рук вон плохо. А жаль. Хотелось попрактиковаться, а не попрепираться по мелочам.

ifani

Не надоело ещё?
Он, кстати, спросил "как реализовано", а не "как используется/делается/реализуется".
А если ещё увидеть его соседний топик%

bastii

MVP = Most Valuable Professional
одно из проявлений их деятельности (кроме блогов и всяких статей) - это активная работа в майкрософтских новостных группах. Реально, на любой нормальный вопрос, обычно получаешь несколько очень качественных ответов.

bastii

Итак, несмотря на кричащее название треда, пока не удалось обсудить какой-нибудь содержательный пример (задачу который на Java кодируется из рук вон плохо. А жаль. Хотелось попрактиковаться, а не попрепираться по мелочам.
Где-то еще в начале треда тебе накидали пяток фич, которых, народ считает, недостает Джаве. Что тебе еще нужно? Наверно ты очень мало прогал на Джава или прогал очень специфические вещи, если не можешь их оценить. И не надо разводить гнилой базар типа, что перегрузка операторов усложняет язык, делает программу не такой прозрачной и все такое. Все это бред. Конечно, только ненормальный начнет перегружать операторы направо и налево. Обычно этой фичей вообще никто пользоваться не будет, но есть группа прогеров, которые ее очень оценят.

voronetskaya

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

Dasar

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

bastii

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

enochka1145


Хочу что-нибудь типа водил-мутантов с внятными условиями.

voronetskaya

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

enochka1145

Вот, например.
1. Общая читабельность и простота.
2. Возможность повторного использования.
3. Возможность усовершенствования.

Dasar

> 1. Общая читабельность и простота.
> 2. Возможность повторного использования.
> 3. Возможность усовершенствования.
Как их можно измерить? хотя бы на пальцах?

Dasar

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

enochka1145

(Интересный ход дискусии.)
1. Время, потраченное на прочтение и понимание (можно засечь секундомером) и общие представления о прекрасном .
2. 1 / количество исправлений после Copy & Paste.
3. Аналогично 2 для числа исправления остального (внешнего) кода, вызывающего этот код.

bastii

И вообще, почему никто не вспомнил любимый момент архитектора C#, который он называет versioning, кажется (что проявляется в C# в виде ключевых слов override и new)?

voronetskaya

ну мы все неплохо представляем о ком речь
1. не говори за всех. я, например, не представляю о ком ты.
2. если ты имеешь в виду кучку крикунов, сишарп и джаву видевших тока в учебнике и собсвенной программе хелло ворлд(а громче всех кричат почему-то именно такие то и хер бы с ними.
отсутствие этой фичей в Джава многие аргументируют так
1. здесь лишнее слово "многие". Если эти "многие" опять же из описанных выше крикунов - рецепт тот же.
2. отсутствие не нужно аргументировать - оно просто есть( аргументировать нужно присутствие. так вот, то что ты принимаешь за аргумены - на самом деле контраргументы. против присутствия фич в неджаве.
ну и еще ты забыл в своем посте слово "имхо"(в моем, оно, как видишь, есть)

Dasar

> 1. Время, потраченное на прочтение и понимание (можно засечь секундомером) и общие представления о прекрасном
1. Правильно ли я, понимаю, что из этого следует, что чем код компактнее - тем лучше?
2. Компактность должна быть не в ущерб читабельности, или другими словами - код должен легко читаться без обращения к доп. источникам?

bastii

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

enochka1145

1. При прочих равных (с другими версиями) условиях, да.
2. Да, желательно; за исключением javadoc, которые высвечиваются без обращения к источниках этих javadoc-комментариев.
А к чему всё это?

voronetskaya

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

enochka1145

Понимаю. Всё-таки было бы здорово, если бы мы разобрали конкретную задачку.

Dasar

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

voronetskaya

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

Dasar

> А к чему всё это?
Примеры приводимые на C# были ли компактнее, чем аналогичные Java-ишные?
Теряли ли C#-ные примеры при этом читабельность?

Dasar

> а как ты считаешь, каких программистов больше - плохих или хороших?
Какая разница - каких больше?
Главное - с какими программистами (с плохими или хорошими) - ты вместе хочешь работать .
ps
Исходя из определения плохого программиста - плохих всегда больше.

voronetskaya

это все идеализм-утопизм, батенька.

enochka1145

Из таких примеров я запомнил Swap(...) и using
Похоже, я неправильно назвал весь тред.
Цель была - попытаться найти не слишком специализированную задачи, которая хорошо реализуется на C++/C#, а на Java - якобы плохо.
Я хотел попрактиковаться в Java, предоставляя Java-решения таких задач.

bastii

Штука в том, что то, как выглядит язык, определяется набором первоначальных требований, которые к нему предъявляют. В случае Джава требование о максимальной простоте языка (назовем это требование так, хотя не совсем точное название) приписывается очень высокий приоритет (по крайней мере так было раньше, до пятой версии). С другой стороны, Джава позиционируется как универсальный язык (более того, фактически единственный для целой платформы). Последнее делает это требование очень спорным. Гораздо разумнее было бы изначально заменить его на более мягкое.
Ладно, другой более очевидный момент. Рассмотрим пятую версию. Очевидно, что новый язык не удовлетворяет старой системе требований (достаточно посмотреть на новые енумы или статические импорты или как там они называются). Причем, замечу, что именно не удовлетворяет старым требованиям, а не является развитием языка в рамках этих требований. Т.е. в Сан решили, что она в чем-то ошибочна. Причем очевидно, что убрали как раз то требование, которое имело очень высокий приоритет. Другими словами - основную установку, которой руководствовались при разработке языке, признали необоснованной и ошибочной. Ладно, посмотрим, что там дальше будут делать с языком.
Так что про иделальность и уникальность Джава ненадо. Ошибаются все. Когда-то считали, что распределенные объектные системы тоже самая правильная штука. Сегодня с этим не все согласны.

bastii

Еще инфа для размышлений. Конструкцию using посчитали такой полезной, что ее добавляют в новую версию VB. Впрочем, как и перегрузку операторов, и беззнаковые целые. Замечу, что VB развивают отдельно, и по этому поводу тоже было очень много полемики.

enochka1145

Всё это, конечно, не может не радовать. Но почему Java открыта и более распространена, чем .NET? Хотя, может, это ненадолго.

SvinkaVJeansah

Ява хороша не тем, что она язык, а тем, что она ВМ и, соответственно, концепция.
В остальном все зависит от программиста.

bastii

Не совсем понимаю, что ты имеешь в виду под "открыта" и какое это имеет отношение к обсуждаемому вопросу. Или мы не только язык обсуждаем? Про распространенность все понятно: Джава в двое старше, появилась первой (т.е. ниша была свободна .NET ограничена майкрософтской платформой (где, кстати, .NET вытесняет Джава).

bastii

Можно и JVM c CLR посравнивать Там аналогичная ситуация.

koly

В общем, получается, что настоящий фанат java когда говорит о преимуществах языка, то упоминает его ПРОСТОТУ, а когда вступает в полемику с апологетом С#, то начинает вспоминать о ПОСЛЕДНИХ НОВОВВЕДЕНИЯХ - java5 и java6 :^). Значит - сам себе противоречит.
Предлагаю определиться со своей позицией:
- за простоту языка
или
- за попытку его нагнать упущенное в java5, java6

Dasar

> Цель была - попытаться найти не слишком специализированную задачи, которая хорошо реализуется на C++/C#
> , а на Java - якобы плохо.
> Я хотел попрактиковаться в Java, предоставляя Java-решения таких задач.
Так ты хочешь сравнить:
язык Java против языка C#?
или framework Java против framework-а .Net?

sergey_m

это не кошерный код Надо так:
После этого себя можно чувстовать крутым плюсовиком? Или просто тащиться от того, что программы дольше компилируются?

sergey_m

Давай не будем про производительность
С такой оговоркой ты вполне можешь одержать победу в споре "Язык Java круче всех".

sergey_m

Просил же - сразу в Garbage.
Оба лозунга "java - говно" и "java круче всех" заслуживают гарбейджа в одинаковой мере. Если хочешь, могу перенести весь тред.

sergey_m

1. Время, потраченное на прочтение и понимание (можно засечь секундомером) и общие представления о прекрасном .
2. 1 / количество исправлений после Copy & Paste.
3. Аналогично 2 для числа исправления остального (внешнего) кода, вызывающего этот код.
Товарищ, ты идеальный программист в вакууме. Твои критерии касаются только того, как ты работаешь с кодом, а не то, как он работает сам по себе. Где критерии о затратах памяти, процессора?
Ты напоминаешь коллекционера оружия, которого интересуют наиболее эстетически интересные образцы, а не наиболее рабочие.

enochka1145

// Если хочешь, могу перенести весь тред
Прошу. Глупый какой-то тред получился...

Ivan8209

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

(display "Hello, world!")

---
...Я работаю антинаучным аферистом...

anton7805

Штука в том, что то, как выглядит язык, определяется набором первоначальных требований, которые к нему предъявляют. В случае Джава требование о максимальной простоте языка (назовем это требование так, хотя не совсем точное название) приписывается очень высокий приоритет (по крайней мере так было раньше, до пятой версии). С другой стороны, Джава позиционируется как универсальный язык (более того, фактически единственный для целой платформы). Последнее делает это требование очень спорным. Гораздо разумнее было бы изначально заменить его на более мягкое.
одна из немногих умных мыслей в этом треде... действительно, java позиционировался вначале как простой и надежный язык, но платформа - то j2ee развивается быстрыми темпами , и излишняя простота языка уже начинает мешать. А так ,вроде нормальный язык

puare

не заметил здесь упоминаний про AOP. Как с этим в шарпе? А в плюсах? Гугл что-то ничего более-менее внятного не вывел на этут тему, в отличии от запроса относительно java AOP.
Если кто-то считает, что AOP не особо нужная/удобная вещь - он просто им не пользовался. Как говорится, попробовав раз - пишу и сейчас

Dasar

> не заметил здесь упоминаний про AOP. Как с этим в шарпе? А в плюсах? Гугл что-то ничего более-менее внятного не вывел на этут тему
http://www.google.ru/search?q=.Net+Aop

Dasar

> А в плюсах? Гугл что-то ничего более-менее внятного не вывел на этут тему
В плюсах AOP не очень нужен (как что-то дополнительное т.к. там mixin-ы можно напрямую реализовать через множественное наследование.

puare

Ну АОП это не тока миксин, не так ли? Это еще и dynamic introductions, и advices и все остальное. И кстати, вот этот вот AOP.NET динамически ведь инструментацию проводит, да? Или как AspectJ, в статике?

freezer

разница в производительности
у нас с начальником недавно был как раз на этот счет спор... нужно было не шибко сложное преобразование строки сделать. Он делал через Split с помощью регэкспа, а я чисто C-style, последовательным обходом массива символов и записью в StringBuilder. Мой вариант работал в 10 раз быстрее (и то и то - на c#).

freezer

1. Swap: ладно, это в Java, похоже, только напрямую. Только часто ли нужна такая специфическая операция?
QueryPerformanceFrequency: А почему бы не вернуть long (-1 в случае ошибки)?
Хм... а в Жабе есть что-нить типа InterlockedIncrement?.. как его без ссылок сделать?

enochka1145

Эх, давайте, что ль, шаблоны обсуждать в соседнем треде...

enochka1145

Извини, не знаю, что это такое.

freezer

твой пример был на чистых Си. Об этом говорит даже void в списке параметров.

freezer

Interlocked.Increment Method
Increments a specified variable and stores the result, as an atomic operation.
Overload List
Increments a specified variable and stores the result, as an atomic operation.
public static int Increment(ref int);
Increments a specified variable and stores the result, as an atomic operation.
public static long Increment(ref long);
--- это для многопоточных программ, атомарное увеличение числовой переменной на единицу

Marinavo_0507

Ну ты ещё ассемблерные вставки попроси.

freezer

я чего-то упустил, в c# есть ассемблерные вставки? Есть unsafe-блоки, это кстати, еще одна фича которой нет в Жабе, но ассемблер - это уже слишком

Dasar

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

bastii

А причем здесь шаблоны. Из в C# и Java нет, или ты про что?

enochka1145

Я имел в виду design patterns.
Ладно, лажовый тред я создал, надо закругляться...

bleyman

Да нет же, прекрасный тред.
В нём абсолютно отчётливо обнаружилось, что жава как язык - полное говно (по сравнению с шарпом, конечно и единственный её плюс - несколько более широкая распространённость =)
ИМХО, конечно же. То есть я прочитал эти 12 фишек, которых нет в жаве, и осознал вот это.
Спасибо, дружёк! Я теперь больше не буду задумываться на тему "а может жава всё-таки не сосёд"!
ЗЫ: в числе недостатков никто не вспоминал отсутствие уинта?

ZaAp

Для пущего флейма подкину ещё статейку 101 reason why Java is better than Dot Net
А вообще, кому как удобно. Я чёта уж привык на Яве. Да и кстати все красоты что есть в пятом компиляторе от Сана мне и даром не нужны, я лучше напишу две строчки вместо одной, зато буду уверен в стабильности работы IBM JDK 1.4 на кластере из Websphere.

freezer

Тут фишка в том, что Жаба существует дольше и под нее (пока) больше всяких разных библиотек. Поэтому, даже без существенного развития она может довольно долго просуществовать, как, например Фортран.
ЗЫ а ты уинтом часто пользуешься? ну кроме interop'а, когда апишная функция уинт использует?

Dasar

> ЗЫ а ты уинтом часто пользуешься? ну кроме interop'а, когда апишная функция уинт использует?
ИМХО, в прикладных задачах очень часто приходится работать с legacy-системами и сторонними системами.
И в этих системах uint-ы встречаются тоже довольно часто.

bastii

А я без for(:) и generics в IDEA уже даже прогать не могу Видимо мы прогаем разные вещи.

ZaAp

вполне возможно.на яве я в основном делаю server-side J2EE приложения, а jrockit и ibm jdk под них только 1.4 . IDEA самая удобная для кодирования, но многие вещи в J2EE она обходит стороной. Я использую её скорее как текстовый редактор.

anton7805

Да .net - уже говно тем что ориентирована на 1 платформу микрософт , а факт того что софтварные гиганты такие как ibm,sun,oracle и др. явно ориентированы на поддержку java,то есть не столько java ,сколько против микросовта. Так что в ближайшее время вытеснение java с рынка не предвидится

Dasar

> Да .net - уже говно тем что ориентирована на 1 платформу микрософт
Mono вроде уже работает.
По крайней мере почти все .net-проекты на sourceforge декларируют поддержку mono.

bastii

Ну а стратейка вообще спорная. Каждый пункт вызывает возражения. Суть в том, что .NET это только про винду. Вот этот момент и растянут на 101 причин, если не считать слабо обоснованные или просто не корректные. Если момент про винду отбросить, то с таким же успехом можно привести 202 причин против Java, причем первых пару десятков будут составлять вполне объективные, преимущественно технические плюс те, что почему-то (видимо по ошибке) включили в список причин против .NET. Там, куда .NET позиционируется, она уже сильнее Java. С другой стороны никто не спорит, что у Java есть очень много хороших моментов.
В теме Java vs .NET меня больше интересует вопрос в плане трудоустройства и так дальше, если учитывать местную специфику. Может лучше такой тред замутить? Даже так, много ли теряешь сегодня если выбираешь .NET, а не Java?

voronetskaya

Да и кстати все красоты что есть в пятом компиляторе от Сана мне и даром не нужны, я лучше напишу две строчки вместо одной, зато буду уверен в стабильности работы IBM JDK 1.4 на кластере из Websphere.
аналогично =)

freezer

угу, .NET ориентирована только на платформу CLR, но и Java ориентирована только на платформу JVM А всякие IBM'ы мелкомягкие себе вроде чуть ли не в партнеры записывают...

bastii

.NET ориентирована только на платформу CLR, но и Java ориентирована только на платформу JVM
не понял юмора

anton7805

угу, .NET ориентирована только на платформу CLR, но и Java ориентирована только на платформу JVM А всякие IBM'ы мелкомягкие себе вроде чуть ли не в партнеры записывают...
пешы исчо

bleyman

Отличная статейка!
Иеперь моё мнение о том, что жава-говно не поколеблет никто и никогда (разве что выйдет новая жава с фишечками).
Я нашёл в ней, конечно, один технический недостаткок (отсутствие фичи) .НЕТа,
http://www.manageability.org/manageabilityWiki/GarbageCollectClasses
Всё остальное - это бессвязные вопли на тему "винформс 1.1 херовые, а у нас много графических библиотек" (Именно так я и упустил единственный шанс написать прогу на жаве: задача выбора между тремя оконными библиотеками оказалась непосильна "разработчикам на жаве платят больше" и "сан утверждает, что жвм иногда быстрее, особенно когда мы пытаемся интерпретировать питон".
Особенно меня поразило, что в статье не упомянули отличие в работе с эксепшенами. Мб они ламера?
Упд: нет, я просто пропустил это место. Оно есть. Почитав комменты, я пришёл к выводу, что жавовская модель действительно не очень хороша, потому что "Usually all you want is to treat the exceptions centrally in as few locations as possible not in every damned method.", а делать throws опциональным - значит делать его бессмысленным.

enochka1145

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

Lorin

"Язык Java круче всех" ©

bastii

Это ты про это?
By contrast, generated MSIL cannot be unloaded. The only way to unload code is to unload an entire application domain (that is, to unload all of your application's code).
В CLR 2.0 есть lightweight генерация IL статических методов, причем этот IL собирается GC (наверно и нативный код тоже). А решение о невозможности выгрузки сборок было осознанным, видимо дает какие-то ощутимые бонусы. По крайней мере не раз встречал в блогах попытки его объяснить. Потом с их стороны честно было бы упомянуть про то, что dllки разделяются процессами и про возможно запихнуть сразу найтив код, который тоже будет разделятся процессами.
Короче если сами платформы еще и можно сравнивать, что про ВМ все довольно очевидно: CLR гораздо более сложная, низкоуровневая и рассчитанная на более широкий круг задач, чем JVM. Плюс CLR очень активно развивается, а с JVM непонятно, вроде Sun ее трогать не решается.

bastii

Какая разница, они все дают уродский GUI, т.е. который почти одинаково уродский под все системы.

enochka1145

Да кто эти "они", мне интересно? Иногда приколько немного приврать, но совсем завираться - это же не дело.

bastii

Ну я видел только две Swing и SWT . Про SWT я конечно погорячился в плане уродства (хотя я видел только Eclipse, плюс это не чистый SE). Но все проги на Swing ужасны, мне даже интерфейс винды 95 больше нравится, причем в 5ой версии сильно лучше не стало. Хотя наверно, если очень сильно постараться, то можно что-то сделать.

Ivan8209

> я лучше напишу две строчки вместо одной
Ещё один считающий, что две страницы кода лучше одной.
Почему бы не писать на ассемблере?
Напишешь десять строчек вместо одной, но зато будешь точно
уверен в том, что компилятор правильно тебя понял.
> Язык Java круче всех
Если слово "круче" воспринимать буквально, получается правильнее.
---
...Я работаю антинаучным аферистом...

garikus

[Holy war] Язык Java круче всех
В этом треде я попрошу приводить достаточно конкретные аргументы против тезиса, вынесенного в заголовок (если, конечно, они существуют). Предполагается сравнение в первую очередь с C++ и C#.
Бессодержательные сообщения типа "Ошибаешься. Учи Аду." прошу направлять сразу в Garbage, чтобы не усложнять процесс.
А как же другие языки ?

enochka1145

Ну давай сюда свои другие языки...
А вообще, тред не заладился и рассматривается своим создателем как deprecated.
Предполагалось затмить всех своими знаниями design pattern-ов, которые доставляют простые элегантные решения для предъявленных "контрпримеров". ОК, как-нибудь в другой раз...

bastii

С# ближе всего к Java и претендует на большую крутизну, поэтому естественно, что его использовали для опускания Java. С другими языками будет сложнее.

freezer

а где тут юмор? На c# пока пишут только для одной платформы, на Java - тоже только для одной. А вот реализации этих платформ есть и для писюков под разными осями, и для встроенных систем...

bastii

забей, просто ты там CLR и JVM в платформы записал

bleyman

> Какие именно библиотеки, если не секрет?
Понятия не имею. Там была Eclipse (до сих пор ржу с этого названия и в ней была квик-старт картинка, типа "возможная структура жава-приложения". Наверху былы три клеточки с ГУИ библиотеками (свинг там точно был ниже три клеточки с ещё чем-то, и ниже ещё что-то. Я попытался выяснить у случившегося рядом человека, который уже имел опыт программирования на жаве, что типа лучше. Он сказал, что из трёх пробовал две, и одна ему нравится больше другой.
Потом я оценил скорость работы Eclipse на пятисотом пеньке (секундный лаг между нажатием кнопки и появлением символа на экране и решил, что это не для меня.
Так я не стал прогать на жаве.

enochka1145

// Наверху былы три клеточки с ГУИ библиотеками (свинг там точно был ниже три клеточки с ещё чем-то, и ниже ещё что-то. Я попытался выяснить у случившегося рядом человека, который уже имел опыт программирования на жаве, что типа лучше. Он сказал, что из трёх пробовал две, и одна ему нравится больше другой.
Другим словами: по сообщениям источника ОБС News, в Java 3 GUI библиотеки, только никто не знает, что это за библиотеки. Круто.
Про трудность выбора, отвернувшего человека от Java. Скорее всего имеются в виду AWT, Swing, Swing. AWT не стоит использовать по причине отсталости. Вы же не будете использовать библиотеки OWL (ObjectWindows library) или MFC 1.0, не так ли? Остаётся SWT и Swing. Ну это конечно просто жестокий выбор, прям Java-аналог выбора буриданова осла. Хотя казалось бы: нравится Eclipse - используй SWT, не нравиться - юзай Swing.
// Потом я оценил скорость работы Eclipse на пятисотом пеньке (секундный лаг между нажатием кнопки и появлением символа на экране
Это всего лишь ленивая загрузка - чтобы не забивать память всем необходимым на все случаи жизни. Нажми кнопку ещё раз и будет тебе щастье.
// и решил, что это не для меня.
Так я не стал прогать на жаве.
Что ж, несмотря на ощутимую потерю для Java, мы постараемся это как-то преодолеть.....

bleyman

> Другим словами: по сообщениям источника ОБС News, в Java 3 GUI библиотеки, только никто не знает, что это за библиотеки. Круто.
Вот ты л0х. Не какая-то мифическая Одна Бабка, а я.
Более того, ты и сам их после этого назвал.
В чём проблема?
> Это всего лишь ленивая загрузка - чтобы не забивать память всем необходимым на все случаи жизни.
> Нажми кнопку ещё раз и будет тебе щастье
Ты не понял. Это после каждого нажатия такой лаг был =) Если отключить всё интеллисенс, то лаг вроде бы становился порядка сотни-двух миллисекунд, то есть почти приемлемым. Но как-то это всё равно неприятно.

psihodog

Нельзя говорить о том, что шарповые/жавовские ссылки - это аналог указателей в плюсах, потому что это приводит вот к такому вот непониманию элементарных вещей.
А по-моему, твой код очень хорошо сочетается с концепцией "шарповые/жавовские ссылки - это аналог указателей в плюсах".
В С++ код
#include<iostream>

using namespace std;

class IntContainer
{
public:
const int Int;
IntContainer(int value): Int(value) {}
};

class SomeClass
{
public:
static void SomeRefMethod(IntContainer *&ic)
{
ic = new IntContainer(13);
}

static void SomeMethod(IntContainer *ic)
{
ic = new IntContainer(13);
}
};

int main
{
IntContainer *ic = new IntContainer(0);

SomeClass::SomeMethod(ic);
cout<<ic->Int<<'\n';

SomeClass::SomeRefMethod(ic);
cout<<ic->Int<<'\n';

return 0;
}

выведет то же самое...

pilot

http://msk.nestor.minsk.by/kg/2002/16/kg21611.html
Python и другие...
Все познается в сравнении. Это аксиома стала в компьютерном мире одной из главных. Так давайте же сравнивать...
На практике выбор языка программирования часто диктуется другими реальными сдерживающими факторами, такими как стоимость, доступность, подготовка, предшествующая инвестиция, или даже эмоциональная симпатия. Поскольку эти аспекты чрезвычайно нестабильны и переменчивы, будет пустой тратой времени много говорить о них. Сравним Python с такими языками, как Java, Perl, Tcl, Smalltalk, C++.
Java. Многие думают, что Python программы выполняются медленнее, чем программы Java, но они в то же время требуют намного меньше времени для разработки. Python программы типично медленнее в 3-5 раз, чем эквивалентные Java программы. Эта разница может быть объяснена за счет встроенных высокоуровневых типов данных Python и его динамической типизации. Например, Python программист не тратит времени, описывая типы аргументов или переменных, а мощные типы полиморфных списков и словарей Python, для которых богатая синтаксическая поддержка встроена прямо в сам язык, могут найти применение почти в каждой Python программе. Из-за типизации во время выполнения Python должен выполнять больше работы, чем Java. Например, при обработке выражения a+b он должен сначала исследовать объекты a и b, чтобы выяснить их типы, которые неизвестны во время компиляции. Затем вызывается соответствующая операция сложения, которая может оказаться перегруженным пользователем методом. Java, с другой стороны, может выполнять эффективное сложение целых или чисел с плавающей точкой, но требует описания переменных a и b, и не позволяет перегружать оператор + для экземпляров классов, определенных пользователем. По этим причинам Python намного лучше подходит как "склеивающий" язык в то время, как Java лучше характеризуется как низкоуровневый язык для реализации. Фактически, вместе они могут образовать отличную пару. Компоненты можно реализовывать на Java, а затем использовать в приложениях на Python; Python также полезно использовать для прототипов компонент, пока их разработка не "затвердеет" в Java реализации. Для поддержки такого типа разработки создается реализация Python, написанная на Java. Она позволяет вызывать Python код из Java и наоборот. В этой реализации исходный код Python транслируется в байт-код Java (с помощью библиотеки времени выполнения для поддержки динамической семантики Python).
Perl. Python и Perl родом из похожих окружений и несут много сходных особенностей, но имеют разную философию. Perl предназначен для поддержки общих программно-ориентированных задач, например, имеет встроенную обработку регулярных выражений, сканирование файлов и генерирование отчетов. Python концентрируется на общих методологиях программирования, таких, как разработка структур данных и объектно-ориентированное программирование, способствует написанию удобочитаемого (а значит, легко поддерживаемого) кода путем предоставления элегантной, но не чрезмерно зашифрованной нотации. Как следствие, Python близко подходит к Perl, но редко побеждает в его оригинальной нише приложений; однако, Python имеет хорошую применимость за пределами ниши Perl.
Tcl. Подобно Python, Tcl полезен как язык расширения приложений, так и в качестве независимого языка программирования. Однако Tcl, который традиционно хранит все данные как строки, обладает скудными структурами данных, а выполняет типичный код намного медленнее, чем Python. Tcl также недостает особенностей, необходимых при написании больших программ, таких как модулированные пространства имен. В то время, как "типичные" большие приложения, использующие Tcl, обычно содержат расширения, написанные на C или C++, эквивалентные Python приложения часто могут быть написаны на "чистом Python". Безусловно, разработка на чистом Python осуществляется намного быстрее, чем при написании и отладке C или C++ компонент. Было высказано, что одним из качественных разработок на Tcl является пакет Tk. Python приспособил интерфейс Tk в качестве своей библиотеки стандартных компонент GUI. Tcl 8.0 затрагивает вопросы скорости, предоставляя байт-код компилятор с ограниченной поддержкой типов данных, и добавляет пространства имен. Однако это все еще слишком громоздкий язык программирования.
Smalltalk. Возможно, наибольшее различие между Python и Smalltalk состоит в Python синтаксисе "основного потока", который дает ветвь подготовки программистов. Подобно Smalltalk, Python имеет динамическую типизацию и динамическое связывание, и все в Python является объектом. Тем не менее, Python отличает встроенные объектные типы от классов, определенных пользователем, и к настоящему времени не допускает наследование из встроенных типов. Стандартный набор библиотеки типов данных Smalltalk более очищенный, тогда как библиотека Python имеет больше средств для работы с Internet и WWW, например, c e-mail, HTML и FTP. Python имеет отличающуюся философию касательно среды разработки и распределения кода. Там, где Smalltalk по традиции имеет монолитный "системный образ", который включает как среду, так и программу пользователя, Python хранит стандартные модули и модули пользователя в индивидуальных файлах, которые могут легко быть перестроены или распространены за пределами системы. Как следствие, существует более одного выбора при использовании графического интерфейса пользователя (GUI) в Python программе, поскольку GUI не встроен в систему.
C++. Почти все сказанное для Java также применимо к C++, тем более, что там, где код Python обычно в 3-5 раз короче, чем эквивалентный код Java, он часто в 5-10 раз короче эквивалентного кода C++! Анекдотическое подтверждение гласит: то, что один программист Python может завершить за два месяца, два программиста C++ не смогут сделать и за год. Python блестяще используется как клей, соединяющий компоненты, написанные на C++.
В заключение хотелось бы сказать только одно: не так давно вышла новая версия питона — 2.2. Это еще один сильный шаг вперед. Вперед к сверхвысокому уровню современного программирования. Этот язык стоит того, чтобы его знать.
По материалам www.python.org

pilot

и здесь нет про 2.2, 2.3 и 2.4 версии Питона...
а они продвинулись уже достаточно далеко
Оставить комментарий
Имя или ник:
Комментарий: