Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
игра ведь вообще не оптимизирована
Оптимизация конкретной игры мало что имеет общего с языком программирования, неоптимизаровано можно на чем угодно написать и обвинять языкКак программист я вас понимаю и Джаву уважаю, а как пользователь я не люблю Джаву из-за тормозов, глюков и корявого интерфейса в софте на ней написанном :)
если не нужно что-то новое из стандартов 3d графики
… недостатки самой среды VM. Где, например, те же generic...
Где, например, те же generic реализованы через одно место.
А еще, например, в C# невиртуальные методы со временем стремятся превратиться в виртуальные.
Это связано не с MSIL, а с развитием кода. В самый неожиданный момент выясняется, что метод должен быть виртуальным, что бы его перекрыть.
Я считаю, что компилятор и среда выполнения должны быть достаточно умны, что бы самостоятельно оптимизировать код, написанный без низкоуровневой оптимизации и хаков. Можно сказать, Oracle Java вполне удовлетворяет этому требованию. Поэтому, не вижу смысла захламлять обычный код хаками и низкоуровнемыми оптимизациями.
«Переход на графен откроет совершенно новую эпоху — частота электронных устройств может достигнуть терагерца.»
exvel: Ну, слава богу. Можно продолжать говнокодить.
Заранее ничего нельзя предусмотреть со 100% точностью. Это абсолютно нормально, такова жизнь.
Заказчику не нужно ПО, которое работает на 10% быстрее и на 10% экономнее по памяти, но при этом периодически валится по непонятной причине в самый неподходящий момент.
В жизни есть ценности поважнее пары сэкономленных байт.
но при этом периодически валится по непонятной причине в самый неподходящий момент.
Вовсе нет. Моя точка зрения в том, что оптимизировать стоит 1% кода, который действительно является узким местом и от этого будет польза.
А от оптимизации 99% кода сомнительными практиками типа структур
int a = 5;
int b = a.Clone()
var x = new { Items = new List<int> { 1, 2, 3 }
.GetEnumerator() };
while (x.Items.MoveNext())
{
Console.WriteLine(x.Items.Current);
}
List<int>
возвращает List<T>.Enumerator
. Вы попробуйте привести его к IEnumerator или лучше List<T>
предварительно привести к IList<T>
и получите размещение в хипе.Смешались в кучу кони, люди...
Я считаю, что структуры — важная часть языка, и возможность их использования очень нелишняя
то её логично сделать структурой — получаем бонус от thread safety и прочего
потому что профит от нее зачастую не 2% за потраченную неделю оптимизаций
Ваше мнение
При этом в качестве примера приводите крайне не очевидный баг, вызванный наличием этой части языка. И тут же, кстати, в ответ получаете, что при правильном использовании плюсы теряются (улетает в хип).
Как вообще структуры связаны с thread safety? Неизменяемый класс ни чуть не менее thread safety, чем структура. Посмотрите на scala и akka — весьма безопасная многопоточность благодаря удобным неизменяемым классам и механизмам работы с ними (на jvm).
Я знаю только 2 профита от структур: тяжелая арифметика и размещение в массиве. Это полезно в очень редких случаях. При этом на jvm можно таких же улучшений добиться, хоть и с чуть большими затратами.
Я вообще ни чего подобного не писал. Мое мнение выше: есть крайне узкая ниша полезности структур в C# и не то, чтобы без них не обойтись.
неизменяемые структуры — это то же самое, что неизменяемые классы, только быстрее.
В java есть escape analysis, позволяющий размещать данные в хипе
Но вообще я в этот спор ввязался только из-за вашего смешивания неизменяемости и структур.
1.Структуры обязаны быть неизменяемыми.
2.Изменяемые структуры — путь мучений и невзгод.
3.Неизменяемые структуры — при правильном подходе могут дать хороший буст в некоторых сценариях
Но для компактности и быстрой обработки лучше хранить данные по полям в массиве, а не в структуре, т.к. нет потерь на выравнивание и т.п.
Мысль не понял. В чем проблема обмена объектами?
В ситуациях, когда оператор GOTO безусловно облегчает жизнь. Потому что если бы его не было, его пришлось бы как-то имитировать средствами if, while и т.п… Нет, не так?
Есть там возможность указать нужное выравнивание, порядок байт, объединения (union)?
В Scala я пишу Dictionary<Int, String>.
Выпустили бы новый рантайм без совместимости, как делает .NET — цены бы ему не было.
огромное количество (большинство?) приложенийНу потому что десктоп-приложения — это никак не огромное количество и тем более не «большинство», а крошечная часть приложений на Java. А вообще на скриншоте просто «ненативный» l&f одного конкретного, хоть и вроде как «стандартного», gui-фреймворка. Java это ж язык, а не набор виджетов, она не имеет никакого отношения к виду программ, на Java можно написать gui так, что и не отличите от нативного.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Разработчики Haskell, Scala, Clojure и вскочили на подножку «мощного электровоза Java» создав свои компиляторы.
Разработчики Haskell, Scala, Clojure и вскочили на подножку «мощного электровоза Java» создав свои компиляторы.
Вы можете заменить большинство библиотек вашим собственным кодом, если вам нужны особенные функциональные возможности.
Зачем-то упоминают андройд, который наоборот, пытается избавиться от Dalvik и переходит на ART.
Есть Xamarin, который сделал Моно более чем портабельным, стабильным и платным.
Есть факт, что нынешних студентов учат C# во всех вузах и это их основной язык на протяжении всего периода обучения.
И с вашей стороны будет полнейшей глупость отрицать, что это никак не сказывается на рынке.
Еще есть факт, что .net — это тренд на отечественном рынке разработки. И бизнес делает акцент на эту технологию.
Если Вы не знакомы с этим рынком, то не стоит выражать дилетантское мнение вообще.
Я и не утверждал, что mono вытеснит джаву, как, судя по всему, вы недальновидно восприняли мой комментарий.
И, пожалуйста, меньше дерзости в общении с незнакомыми людьми.
Вас это не красит.
Раз обобщено, то зачем автор об этом пишет?
Когда языку много лет и он при этом активно развивается, то вряд ли на нем никто и ничего не делал и вряд ли он становится более популярным мгновенно.
тк для новичка главное не скобки
function example (test0, test1, test2) {
if (test0)
{
if (test1)
{if (test2) {
return 10;
}} else { return 5;}}
return 0;
}
def example(test0, test1, test2):
if test0:
if test1:
if test2:
return 10
else:
return 5
return 0
function example (test0, test1, test2) {
if (test0)
{
if (test1)
{if (test2) {
return 10;
}} else { return 5;}}
return 0;
}
public class Foo {
public Foo(){
}
private void todo(boolean param){
if(param){
// to do
} else {
// or no to do
}
}
}
Разработка Java началась в 1990 году
Ruby начал разрабатываться 23 февраля 1993 года
/**
* a'la System.gc() c принудительной задержкой
* @param time long
*/
static void sleepGC(long time)
{
System.gc();
// libThread.yield();
try
{
libThread.sleep(time);
}
catch (Exception ex)
{
}
// newTime = System.currentTimeMillis();
}
у меня только одна претензия — невозможность передать функцию как аргумент
И потом у меня в списках пакетов есть куча JRE,JDK разных, вся эта мешанина — мешает.
Потом — память, ещё ни одно приложение на Java не кушала меньше 500 мегабайт
Functional interface — наиболее подходящий эквивалент.
Потому что разным пользователям нужны разные версии, и потому, что платформа развивается.
Для эффективной работы системы с автоматической сборкой мусора нужно «пространство для маневра». А мусора — много, это особенность языка. Нет, можно писать код так, чтобы вообще выйти на некое плато и не порождать объекты, но это уже будет не совсем java-программа
Это сколько лишней писанины
часто не столько в фичах сколько в брендах
в C++,Python и т.д. мире то же есть разные компиляторы и интерпретаторы но они все стараются по максимуму реализовать платформу
Java навсегда! 12 причин длительного доминирования Java