Павел Остапенко @mt_
User
Information
- Rating
- Does not participate
- Location
- Москва и Московская обл., Россия
- Registered
- Activity
Specialization
Chief Technology Officer (CTO)
Optimization of business processes
Development management
Mentoring
FullStack
Agile
«Эти фреймворки», как вы выразились, работают в 2-3 раза быстрее STL даже на базовых операциях типа работы с динамическими массивами или строками.
Компиляция SQL идёт на стадии компиляции программы. То есть, с точки зрения динамических языков, во время выполнения происходят мгновенно.
Мы ведь говорим об эффективности, о памяти, об удобстве. Тот пример запроса, что вы привели выше, давно уже компилируется и в С++, я вам привёл пруфлинк. Всё работает стабильно, быстро. И пользоваться удобно.
Что касается SQL-функций, то имеется в виду PL/pgSQL и что-то подобное? Если да, то это довольно большая специфическая тема, далёкая от обсуждаемого «большинства прикладных задач».
И как защита памяти от Явы, спасла? Приложения на Яве — стабильнее нормально написанных на С++? А плохо написанные приложения на Яве — не падают?
Я пробовал разные приложения что на чистой Яве, что на Андроиде — и знаете что — они падают. И падают довольно часто. Может, конечно, у меня с Явой что-то не то, не знаю.
2. По поводу плюсов и минусов Явы перед С++, в той самой Википедии, на которую вы ссылаетесь, написано следующее.
а) Независимость байт-кода от операционки (мы все знаем, что на деле распространяется несколько бинарников для нескольких процессоров, что покрывает 99% пользователей).
б) Система безопасности. О ней я писал выше — там всё очень и очень спорно, как минимум.
И что же мы получаем за эти неочевидные преимущества:
— замедление работы кода в несколько раз
— потребление памяти в 10-30 раз больше
Заметьте, это не я придумал, это написано в Википедии, на которую вы сами же и ссылаетесь.
А особенно интересно будет, если, как вы предлагаете, всё делать в одной задаче: если вдруг что с виртуальной машиной, то падает вообще весь user space. Напоминает старые времена DOS.
Этакий anti-unix way.
www.ultimatepp.org/www$uppweb$vsswing$en-us.html
Скажите пожалуйста, чем отсутствие ФП в С++ мешает, как вы там выразились, для большинства прикладных задач?
Маркетинговые заголовки типа «решает проблемы с динамической памятью» — потускнели и покрылись трещинами. Из самописных андроидовских программ на яве, дай бог если половина не падает.
Я также утверждаю, что эти проблемы решить куда проще, чем проблемы многопоточности, проблемы неверной логики работы алгоритмов, проблемы покрытия различных ситуаций (включая нештатные). Ява здесь не решает вообще ничего по сравнению с С++.
И здесь я даже не говорю про память. А на этом стоило бы остановиться подробнее.
Но — зачем? Вы пришлю сюда заранее уверенным в том, что Ява может быть не медленнее С++. Нужно ли мне тратить время на разубеждение? Не вижу смысла.
В данном случае, возможно, скорее зеалот.
Во-первых, на лету скомпилировать также качественно не удастся. Оптимизирующий компилятор того же С++ (в режиме полной оптимизации) требует совсем других времён и совсем другой памяти — ничего этого в маленьком устройстве может не быть, не говоря уже о том, что это сотни мегабайт данных, которые динамически генерятся и «перевариваются» процессором.
Всё, на что можно рассчитывать в JIT — это баланс между скоростью и памятью при компиляции против её качества. Как правило, не в пользу качества.
Но это ещё не всё! Как ты ни компилируй, у тебя останутся свистелки вроде фонового мусоросборщика, дополнительных накладных расходов памяти при аллокации, и самое главное — проблемы скорости динамических переменных. Работа с переменной в С++ не сравнится с той же задачей в Яваскрипт. Там, где С++ обходится простым вызовом процессорной инструкции, Яваскрипт осуществит массу проверок, выполнит массу кода, прежде чем перейдёт к непосредственной работе. И эта проблема ПРИНЦИПИАЛЬНО не решается оптимизирующей компиляцией, это логика работы динамических языков.
Якобы, это спасает от проблем времени выполнения. На практике, даже этот довод оказывается очень спорным: от действительно серьёзных проблем в логике программы, динамическое программирование всё равно не спасает — программа, даже если не упадёт, то окажется неработоспособной. По сути, на практике выясняется, что нужна та же самая работа по отладке, что и в неконтролируемой среде.
Да, динамическое программирование позволяет делать некоторые «финты», которые в ряде случаев уменьшают затраты на разработку. Но извините, пользователю пофигу на это всё: ему важно, чтобы программа на его не самом мощном устройстве хорошо и быстро работала. А по этой характеристике, динамические языки позади статических. Особенно, на слабых процессорах с минимумом оперативной памяти.
Пользователю (а автолюбитель — это максимум уровень продвинутого пользователя) действительно не так важно знать, как оно работает. Уметь хотя бы минимально настраивать — уже хорошо (ну там фильтр воздушный зима-лето, жидкостей подливать когда надо, проверять стёртость колодок и т.п.).
Программисту (то есть автоконструктору) знать эти вещи обязательно. И, уверяю вас, он их знает без всяких Википедий.
Наконец, все вот эти вот фразы, что «у нас всё работает не медленнее чем на С или С++» — это как правило значит, что люди серьёзные приложения не сравнивали. Ну быстрее работает неинтерпретированный код. Быстрее. И не только потому, что оптимизирующий С++ компилятор имеет больше времени на оптимизации, чем JIT. Сама структура языка предполагает более детерминистский подход к программированию. Это сложнее, да. Но если этим правильно пользоваться, то будет реально быстрее.
Мне ОЧЕНЬ не хватает нормальной поддержки С++ на Андроиде. Мне будет точно также не хватать её в этой ОС. Я ещё понимаю, если бы скорость девайсов была такая, что интерпретированность не чувствовалась. Так ведь нет же: берут слабую железку, заставляют писать на высокоуровневых и менее эффективных (с точки зрения исполнения) языках. При этом ещё обрубают высокоэффективные средства разработки на С++.
Ну и наконец, вся эта хвалёная стабильность систем на Яве. Всё это на практике виснет, глючит и падает ничуть не меньше, чем нативный код. Программы с утилитами точно также глючат, при этом ещё съедают гораздо больше памяти.
Тогда спрашивается — НАФИГА было затеваться с Явой?
Ну сделайте вы систему открытой. Допилите под неё gcc и прочее. Остальные постепенно подтянутся.
Пусть кто на чём может, тот на том и будет писать. Кто не может или не хочет С++, пусть пишет на Яве, Яваскрипте, да хоть брэйнфаке.
Что это за дурацкие проприетарные ограничения, которые выдаются гигантами за охрененно продвинутый современный подход, которые к тому же плохо себя показывают на практике?
На С++ вполне можно сделать бинарник размером порядка 1 МиБ при полном отсутствии несистемных зависимостей. А если вообще не пользовать фреймворки, то это будет вообще что-то около 200 КиБ, не больше.
Я не уверен что это переформатирует весь рынок, но имеет право на жизнь — совершенно точно.