LINUX.ORG.RU

Есть ли у java будущее

 , , , ,


0

8

Не смотря на такой голословный заголовок, последнее время заметил тенденцию, что по большей части если и идет хайп о джаве, то это мобильная разработка. Да, есть, остаточные отголоски энтерпрайза и то как «спринг - всему голова», но все же. Вот «недавно» для нагрузочного простого бэкенда (микросервисы) завезли Го, а для тех же мобильников через силу, но все же, пытаются пропихнуть котлин.

Не было ли у вас ощущения, что джава вообще держится благодаря андроиду и как бы теряет свои позиции? Конечно она так быстро не исчезнет, слишком много кода, но уже не раз слышал такое сравнение что джава это современный КОБОЛ.

Ответ на: комментарий от FilosofeM

А вот и школотроны-дегенераты набежали, жертвы ЕГЭ и любители ЖабаСкрипта и Ноды.

Хуже, он лиспер.

anonymous
()
Ответ на: комментарий от system-root

молотком или всё же перейти на микроскоп. потом плюнул и решил перейти на Ивангая

нет ли в цветах молотка и микроскопа признаков разжигания хохлосрача?

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

отклик контроллера проверить

Если нужен отклик контроллера проверить, то эти тесты норм. Если нужно удобство разработки и долговременной поддержки, то эти тесты ничего не говорят. И по сути тот, что в топе (вроде rapidoid) прекрасно это показывает обгоняя даже undertow и jetty. Я, как-то давно, глянул реализацию JSON теста на rapidoid и там тупо отдавался заготовленный plain/text в виде JSON, что многое говорит об этих тестах.

Например, в той же Tapestry 5, прежде, чем добраться до контроллера преодолевается куча слоев, где ты можешь встроить свои хендлеры и еще кучу своей кастомизации. Также, запрос проходит через слой рефлекшена. Поэтому Tapestry и Spring, в том бенчмарке, похожи по перформансу. И оба инструмента подходят для сложных веб-проектов с долговременной поддержкой. А Undertow, например, не подходит, хоть он там и в топе.

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

Да. еще этот тест дает примерное представление о перформансе разных ЯП. Где нужно понимать, что ты сравниваешь, например Django и Tapestry можно сравнить, а Django и Undertow - нет.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от foror

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

И вот тут как раз вопрос, почему те самые слои дают такую просадку, если никаких хендлеров и кастомизаций не используются?

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

Любое обобщение (упрощение) дается ценой гибкости (в большинстве случаев). Так вот как раз undetrow дает 100% гибкости, потому что он является только http сервером (а netty еще больше, так как настройка над сокетами), а вот любые веб-фреймворки, дают уже ограничение в обмен на удобство. Так вот хенделы и кастомизация - это твой набор гибкости и он может не покрывать полностью всю гибкость.

Так что на undetow как раз можно написать любой сайт, а в обобщениях - по мере возможности тех фреймворков.

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

это твой набор гибкости и он может не покрывать полностью всю гибкость.

всех возможностей*

В общем, в этом и смысл этих всех тестов (тестов «кто быстрее») - узнать наличие оверхеда, за который не хочется платить (буквально платить железом).

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

И вот тут как раз вопрос, почему те самые слои дают такую просадку, если никаких хендлеров и кастомизаций не используются?

Очень давно не возился с Tapestry, поэтому так вот навскидку не скажу. Хотя сейчас вспомнил, что Tapestry оборачивает апи сервлетов, идем на тесты смотрим Frontend Server: Resin - что за резин-шмезин? Его даже нет в тестах как чистый сервлет контейнер. Почему не Undertow или Jetty на крайний случай? Опять это всё показывает насколько эти тесты далеки от идеала.

Так что на undetow как раз можно написать любой сайт

Тогда пиши сразу на Java HTTP Server API, прикинь какие у тебя возможности по гибкости? А если продолжить твою мысль, то зачем тебе джава? Сразу на асме делай, вот где безграничные возможности по кастомизации.

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

Это конечно про случай разработки веб-сайта, если нужно отдавать plain/text из БД, то конечно подойдет и Undertow. В общем, под каждую задачу нужно находить оптимальный уровень абстракции, которым пожертвуешь какую-то производительность, но приобретешь скорость и удобство разработки.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Тогда пиши сразу на Java HTTP Server API, прикинь какие у тебя возможности по гибкости?

Ну тут можно утрировать до бесконечности любые слова, в данном контексте я обосновывал фразу «А Undertow, например, не подходит, хоть он там и в топе.», где утверждение выглядит некомпетентно и звучит так как-будто голый http сервер не подходит для создания любого веб-сайта (где я еще отметил, что наоборот это веб-фреймворк может как раз ограничивать вас в этом, но не веб-сервер).

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

wist512
() автор топика
Ответ на: комментарий от foror

Тестируя просто отклик мы НЕ тестируем то как будет работать в будущем наш сайт, мы тестируем некий добавочный вычислительный оверхед от фреймворка.

Взять быстрый сервер и прикрутить к нему роутинг и mvc дело одного часа, а вот взять фреймворк, который по производительности просаживается до динамических языков, это уже создает множество вопросов (и это тогда когда мы не начинали еще писать бизнес логику).

И да, как я уже говорил там есть тесты с json и с множественными запросами в БД

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

где утверждение выглядит некомпетентно

Оно вырвано из контекста.

звучит так как-будто голый http сервер не подходит для создания любого веб-сайта

любого веб-сайта

Когда мой же текст совсем про другое:

оба инструмента подходят для сложных веб-проектов с долговременной поддержкой. А Undertow, например, не подходит, хоть он там и в топе.

для сложных веб-проектов с долговременной поддержкой

проверить самому, получив представление о том или ином вычислительном оверхеде.

Можно и так.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от wist512

Взять быстрый сервер и прикрутить к нему роутинг и mvc дело одного часа

Мне понятна эта философия, и у меня нет сейчас желания объяснять, чем отличается веб-фреймворк для разработки сложных веб-проектов с долговременной поддержкой от «роутинг и mvc дело одного часа».

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

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 3)
Ответ на: комментарий от foror

Оно вырвано из контекста.

Окей

Например, в той же Tapestry 5, прежде, чем добраться до контроллера преодолевается куча слоев, где ты можешь встроить свои хендлеры и еще кучу своей кастомизации. Также, запрос проходит через слой рефлекшена. Поэтому Tapestry и Spring, в том бенчмарке, похожи по перформансу. И оба инструмента подходят для сложных веб-проектов с долговременной поддержкой. А Undertow, например, не подходит, хоть он там и в топе.

Насколько поменялся смысл? Тут явно говорится, что http сервер не годиться для неких «сложных веб-проектов», то есть не для всех он.

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

wist512
() автор топика
Ответ на: комментарий от foror

веб-фреймворк для разработки сложных веб-проектов с долговременной поддержкой

Вы путаете «написание модульного кода», который позволяет долговременное поддерживать проект, с наличием какого-то предварительного заготовленного набора инструментов, который облегчает ту или иную повторяющуюся рутинную работу (работая с веб сайтом).

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

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

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

http сервер ограничивает как-то при создание сложных сайтов

Такого я не говорил. Я говорил, что разумный человек не возьмет http cервер, чтобы разрабатывать сложный веб-проект. А компетентный специалист не возьмет http сервер, чтобы прикрутить к нему роутер и mvc за час. Но на каком-то уровне веб-проектов это простительно и можно допустить таких «спецов». Не простительно, это когда уведут БД с кредитными картами пользователей сайта.

в действительности он просто диктует mvc паттерн, реализует роутинг, шаблонизатор и, возможно, работу с формами, работу с пользователями (сессии).

В общем и не удивительно, вы не виноваты, что не понимаете, что такое современный веб-фреймворк (в моём понимании, конечно). Лучшее, что на Java сейчас есть это Spring, Tapestry и может что-то еще этого уровня. Но по сути, даже эти проекты довольно жалкое зрелище (я не буду подбирать слова для уровня «фреймворков» собранных из запчастей за час) для разработки веб-сайтов по сравнению с той же Django или Ruby on Rails. Более того, для меня Django и Ruby on Rails представляют устаревшие концепции, не говоря уже о том, что написаны без статической типизации.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 3)
Ответ на: комментарий от UNiTE

Конечно - будущее у квалифицированных джава-разработчиков есть.

И бабло - есть, не только, чтобы есть, но и ништяки всякие за 4 килобакса в месяц приобретать.

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

За еду.

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)
Ответ на: комментарий от foror

Такого я не говорил

Вы сказали хуже, вы сказали что http сервер (undertow) не подходит для этого и теперь уже несколько постов пытаетесь на этом маневрировать, что выглядит уже забавно.

В общем и не удивительно, вы не виноваты, что не понимаете, что такое современный веб-фреймворк
в моём понимании, конечно

Конечно же я не могу понимать что такое «современный веб-фреймворк» в вашем понимание.

Я говорил, что разумный человек не возьмет http cервер, чтобы разрабатывать сложный веб-проект.

Какое смелое утверждение.

Не простительно, это когда уведут БД с кредитными картами пользователей сайта.

Особенно когда вы использовали самый «современный веб-фреймворк»

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

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

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

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от dave

Посмотришь на импорты в хаскеле, высирающие в скоуп сразу все инстансы тайпклассов — и такая тоска находит по скале

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

Гугл скоро выпилит жабку из Андроида.

И чем же он ее заменит?

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

Ну и вообще не очень понятно, чем этот код:

import cats.implicits._

val parse = Kleisli((s: String) => if (s.matches("-?[0-9]+")) Some(s.toInt) else None)

val reciprocal = Kleisli((i: Int) => if (i != 0) Some(1.0 / i) else None)

val parseAndReciprocal = reciprocal.compose(parse)
хуже этого:
import           Control.Arrow
import           Data.Char

parse :: Kleisli Maybe String Int
parse =
  Kleisli $ \s ->
    if (head s == '-' || isDigit (head s)) && all isDigit (tail s)
      then Just $ read s
      else Nothing

reciprocal :: Kleisli Maybe Int Double
reciprocal =
  Kleisli $ \i ->
    if i /= 0
      then Just $ 1.0 / fromIntegral i
      else Nothing

parseAndReciprocal :: Kleisli Maybe String Double
parseAndReciprocal = parse >>> reciprocal
Если, конечно, не считать, что я не осилил регулярки в хаскеле.

Softwayer ★★
()

go-тонутые app отлично кросскомпилятся на arm и запускаются под андроедом. — это так, к слову.

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

Почему её надо на что-то менять?

библиотечный зоопарк. вот буквально вчера видел на хабре статью «как запихнуть несколько версий библиотеки в один jar» - это нормально? таких приключений вообще быть не должно.

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

.NET Core и C#.

под виндой они, кстати, уже тормозят хуже жабы.. ку да ими, блджад, жабу заменять? винмобайл - давно ёкнулся. .Net - не нужен!

anonymous
()
Ответ на: комментарий от dave
def compose[Z](k: Kleisli[F, Z, A])(implicit F: FlatMap[F]): Kleisli[F, Z, B]

Что не так? Могла бы, конечно, быть более общей, но это уже к библиотеке, а не к языку.

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

А ты упертый!

Haskell:

-- | Kleisli arrows of a monad.
newtype Kleisli m a b = Kleisli { runKleisli :: a -> m b }

-- | @since 3.0
instance Monad m => Category (Kleisli m) where
    id = Kleisli return
    (Kleisli f) . (Kleisli g) = Kleisli (\b -> g b >>= f)

-- | @since 2.01
instance Monad m => Arrow (Kleisli m) where
    arr f = Kleisli (return . f)
    first (Kleisli f) = Kleisli (\ ~(b,d) -> f b >>= \c -> return (c,d))
    second (Kleisli f) = Kleisli (\ ~(d,b) -> f b >>= \c -> return (d,c))

// и еще пара или тройка таких же кратких и красивых определений

против нескончаемой простыни на Scala:

package scalaz

import Id._

/**
 * Represents a function `A => M[B]`.
 */
final case class Kleisli[M[_], A, B](run: A => M[B]) { self =>
  import Kleisli._

  def dimap[C, D](f: C => A, g: B => D)(implicit b: Functor[M]): Kleisli[M, C, D] =
    Kleisli(c => b.map(run(f(c)))(g))

  /** alias for `andThen` */
  def >=>[C](k: Kleisli[M, B, C])(implicit b: Bind[M]): Kleisli[M, A, C] =  kleisli((a: A) => b.bind(this(a))(k.run))

  def andThen[C](k: Kleisli[M, B, C])(implicit b: Bind[M]): Kleisli[M, A, C] = this >=> k

  def >==>[C](k: B => M[C])(implicit b: Bind[M]): Kleisli[M, A, C] = this >=> kleisli(k)

  def andThenK[C](k: B => M[C])(implicit b: Bind[M]): Kleisli[M, A, C] = this >==> k

  /** alias for `compose` */
  def <=<[C](k: Kleisli[M, C, A])(implicit b: Bind[M]): Kleisli[M, C, B] = k >=> this

  def compose[C](k: Kleisli[M, C, A])(implicit b: Bind[M]): Kleisli[M, C, B] = k >=> this

  def <==<[C](k: C => M[A])(implicit b: Bind[M]): Kleisli[M, C, B] = kleisli(k) >=> this

  def composeK[C](k: C => M[A])(implicit b: Bind[M]): Kleisli[M, C, B] = this <==< k

  def traverse[F[_]](f: F[A])(implicit M: Applicative[M], F: Traverse[F]): M[F[B]] =
    F.traverse(f)(run)

  def =<<(a: M[A])(implicit m: Bind[M]): M[B] = m.bind(a)(run)

  def map[C](f: B => C)(implicit M: Functor[M]): Kleisli[M, A, C] =
    kleisli(a => M.map(run(a))(f))

  def mapT[N[_], C](f: M[B] => N[C]): Kleisli[N, A, C] =
    kleisli(run andThen f)

... // итого 478 строк!
dave ★★★★★
()
Ответ на: комментарий от Softwayer

Про аналог ArrowLoop я, вообще, молчу:

instance MonadFix m => ArrowLoop (Kleisli m) where
    loop (Kleisli f) = Kleisli (liftM fst . mfix . f')
      where f' x y = f (x, snd y)

Обратить особое внимание на mfix

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.