Сообщений: 1,912
Тем: 56
Зарегистрирован: Jan 2009
Репутация:
12,921
04-17-2012, 09:08 PM
(Сообщение последний раз редактировалось: 04-17-2012, 09:38 PM VISTALL.)
Blakkky Написал:Я знаю, что отказались, но (внезапно) для строк и других оберток на атомарные типы данных (Integer, Double, etc) операторы (+-*/) перегрузили "из коробки".
Натив очень хочется, чтобы не прибегать к JNI на СИ, а писать все на одном языке (пусть и не все приложение в натив, а только отдельные классы/методы, пусть даже на своем диалекте платформозависимом). Да и по большому счету, портируемость - это хорошо, конечно, но много ли приложений, которым она нужна? Массово - это клиент-банки и игрушки для телефонов, все остальное можно и скомпилить в натив для 3х-4х платформ и не таскать за собой ява-машину.
О! Еще забыл, чего очень-очень не хватает: препроцессора и беззнаковых типов данных!
А про язык - ява не на много проще остальных языков, так что особо разницы нету.
уже писал - посмотри Jna&BridJ - норм либы
Старые песни о Главное. Generic as Runtime
source
[src=java]
/*
* Copyright 2010-2012 napile
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import napile.reflect.Class;
/**
* Created with IntelliJ IDEA.
* User: VISTALL
* Date: 29.02.12
* Time: 3:47
* To change this template use File | Settings | File Templates.
*/
public class Test<E>
{
private static class IntKey
{
public IntKey(int str)
{
}
}
private static class Key
{
public Key(String str)
{
}
}
private static class Inner<K(String)> //ok
{
private static void init()
{
Inner<Key> a = new Inner<Key>(); // ok
Inner<IntKey> a2 = new Inner<IntKey>(); // fail
}
private void test()
{
K k = new K("test"); // ok
k = new K(1, "test"); //fail
int val = 1;
if(K instanceof String)
val = 0;
}
}
private E[] _array = new E[2]; //ok
private E _value;
public void testNullAndClass()
{
E newValue = new E(); // fail
_value = true ? newValue : E.class.getNullValue(); // ok
Class<E> clazz = E.class; //
_value = E.class.getNullValue();
_value = null; // ok unchecked
}
}
[/src]
Добавлено через 20 минут
немножко обновил что б наглядней видить
Добавлено через 30 минут
забыл написать это napile
Сообщений: 1,484
Тем: 12
Зарегистрирован: Mar 2010
Репутация:
2,994
Сообщений: 1,660
Тем: 9
Зарегистрирован: Feb 2009
Репутация:
10,142
04-17-2012, 11:05 PM
(Сообщение последний раз редактировалось: 04-17-2012, 11:08 PM DiagoD.)
Ява устраивает на все 100%, правда иногда все же не хватает множественного наследования но в принципе всегда выкручиваемся)))
А на счет ручного управления памятью, то это точно так же как и с ручной коробкой передач, это пантово и перед "телачкоми" можно повыделоватся, но все же с автоматом на много удобней ездить.
Добавлено через 2 минуты
Я не вижу смысла в ручном управлении памятью.
Сообщений: 3,967
Тем: 90
Зарегистрирован: Nov 2010
Репутация:
15,337
DiagoD Написал:А на счет ручного управления памятью, то это точно так же как и с ручной коробкой передач, это пантово и перед "телачкоми" можно повыделоватся, но все же с автоматом на много удобней ездить. Неудачное сравнение, я вот лично люблю когда у меня и руки заняты, и обе ноги, так сказать, "полностью погружен в управление машиной"... но это другая тема.
По сути да, я тоже не вижу смысла ручного управления памятью. От утечек годами избавится немогут.. а тут ручное управление :redlol:.
Сообщений: 1,660
Тем: 9
Зарегистрирован: Feb 2009
Репутация:
10,142
Ro_0TT Написал:Неудачное сравнение, я вот лично люблю когда у меня и руки заняты, и обе ноги, так сказать, "полностью погружен в управление машиной"... но это другая тема.
Это вы просто не ездили на автомате)
Сравнение может быть и не совсем удачное, но суть была в том, что ручное управление памятью это хорошо когда ты им умеешь правильно пользоваться, но все же автомат на много удобней.
Сообщений: 1,484
Тем: 12
Зарегистрирован: Mar 2010
Репутация:
2,994
04-17-2012, 11:27 PM
(Сообщение последний раз редактировалось: 04-17-2012, 11:29 PM Visor.)
Я бы не ставил ручное управление памятью, которое и не ставят, потому что java юзают все кому не лень и те кто могут ездить, и значительно больше новиков, которые ездить может никогда и не научается.
Добавлено через 1 минуту
Ro_0TT Написал:Неудачное сравнение, я вот лично люблю когда у меня и руки заняты, и обе ноги, так сказать, "полностью погружен в управление машиной"... но это другая тема.
По сути да, я тоже не вижу смысла ручного управления памятью. От утечек годами избавится немогут.. а тут ручное управление :redlol:. Избавится не могут единицы, которые понимают что делают и реально могут делать л2-серверо ядро, остальные просто притусовываются)
Если не получается - то нужно тренироваться и все получится.
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
Blakkky Написал:Компиляции в натив не хватает ужасно и многословность явы иногда напрягает (особенно когда без IDE писать/править что-то надо). О нет, только не перегрузка операторов....
а то будет
Вот смотришь в книгу и думаешь то ли это
a.out(8) то ли (int)a << 8....
Сообщений: 2,302
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
5,617
Все что нужно от java для меня - есть и устраивает. Для win приложений использую шарп.
Сообщений: 1,912
Тем: 56
Зарегистрирован: Jan 2009
Репутация:
12,921
04-18-2012, 06:14 AM
(Сообщение последний раз редактировалось: 04-18-2012, 09:05 AM VISTALL.)
Azagthtot Написал:О нет, только не перегрузка операторов....
а то будет
Вот смотришь в книгу и думаешь то ли это
a.out(8) то ли (int)a << 8....
угу привет, С++. ВОт мне интересно как в Scala с этим сделали, вроде там переегрузка операторов есть
Добавлено через 2 часа 50 минут
В переопределении есть свои минусы и плюсы
Сообщений: 123
Тем: 2
Зарегистрирован: Sep 2008
Репутация:
1,861
Azagthtot Написал:О нет, только не перегрузка операторов....
а то будет
Вот смотришь в книгу и думаешь то ли это
a.out(8) то ли (int)a << 8....
Ну тут проблема либо в особо выпендрежистом разработчике, который сует перегрузку куда только можно и нельзя не документируя ничего, либо в читателе кода, который не удосужился посмотреть документацию на библиотеку и не знает внутренних договоренностей команды разработчиков, но уж точно не в возможности перегрузки операторов.
В принципе, на любом ЯП, если постараться, можно написать абсолютно неоднозначный и нечитабельный код, и проблема не в языке как таковом.
А Вы попробуйте на яве и на С++ написать код для поиска, всего-то навсего, корней квадратного уравнения, если изначально известно, что числа будут большими (4кбита, скажем, чтоб точности хватило для запуска ракет  ), а потом прочитать тот и другой код. Программирование, оно не только рисование окошек и вываливание строк текста в лог, там и математика встречается
Код: Double4k *x1, *x2, *a, *b, *c, *d;
.....
d = b * b - 4. * a * c;
x1 = ( -b - Double4k::sqrt( d ) ) / 2. / a;
x2 = ( -b + Double4k::sqrt( d ) ) / 2. / a;
С++ оставляет запись оригинальной и читабельной, почти все записано на языке математики.
Код: Double4k x1, x2, a, b, c, d;
......
d = b.mul( b ).sub( new Double4k( 4.0 ).mul( a ).mul( c ) );
x1 = new Double4k( 0. ).sub( Double4k::sqrt ( d ) ).div( a ).div( new Double4k( 2. ) );
x2 = new Double4k( 0. ).sub( Double4k::sqrt ( d ) ).div( a ).div( new Double4k( 2. ) );
А вот ява явно пытается научить нас литературному языку. Имхо, заставлять писать такой код математика - это садизм.
И, кстати, add/mul/sub/div - это не совсем в канонах названия методов на яве, если называть как положено, то будет еще более не читабельно
ЗЫ: опечатался в формуле на яве, интересно, сколько времени уйдет на поиск опечатки (я 4 раза код прочитал, пока нашел, хотя ошибка наибанальнейшая).
|