понедельник, 24 августа 2009 г.

[comp.flame] Вернут ли нетбуки старые-добрые времена?

Толчком к написанию данной заметки стали два небольших события. Во-первых, недавнее интервью Мартина Одерски в серии “A-Z programming languages”. Во-вторых, наблюдение за объемом трафика, который генерирует наш внутрикорпоративный Confluence.

Итак, Мартин Одерски неоднократно объяснял, что ориентирование Scala на платформу JVM является стратегическим шагом (я в курсе того, что Scala как-то дышит и на .Net-е, но в контексте данного разговора хрен редьки не слаще). Во-первых, Scala получает стабильную и взрослую среду исполнения (с HotSpot-ом, сборщиками мусора, адаптацией к куче разных аппаратных платформ и ОС). Во-вторых, Scala получает огромных размеров готовую библиотеку и возможность взаимодействия с большим количеством существующего Java кода. В-третьих, Scala за счет двух первых пунктов претендует на переманивание изрядного количества Java-программистов в свои ряды.

Однако, все это означает, что интересный язык программирования затачивается исключительно под управляемую среду. Со всеми вытекающими отсюда тормозами. И я таки буду настаивать, что управляемый код – это тормоза. Та же ItelliJ IDEA или Eclipse, которые часто приводят в качестве быстрых Java-программ, на мой взгляд – изрядные тормоза. Может быть потому, что я видел, как начинали летать Word 6.0 и Visual Studio 4.2 при их запуске не на 486DX2-80 с 8Mb, а на Pentium 200MMX с 32Mb. Вот это была скорость. А то, что для IDEA нужен 2GHz процессор и 2Gb памяти чтобы нормально работать – это таки диагноз.

Теперь о Confluence. Работая в 1Gb офисной сетке не очень-то замечаешь, сколько весят ее странички. Понятно, что весят достаточно, чтобы открываться не мгновенно. Вообще-то стиль Web-приложений убивает напрочь. Со времен MS-DOS-а выработалась привычка к тому, что новые окна открываются или старые обновляются практически мгновенно. А тут приходит эра Web-приложений и после нажатия на кнопку “OK” в каком-то диалоге требуется около секунды для того, чтобы перерисовалось старое окно. В общем, павбывавбы, да не о том хочется сказать…

Так вот сегодня, по ADSL каналу в 128kbps, грузил простенькую страничку из Confluence. Страничка завесила почти 1Mb (950+ KB, если не ошибаюсь). Афигеть! На днях я закончил два компонента, DLL-ки с которыми весят по 450KB каждая. И делают они гораздо больше полезного для народного хозяйства, чем эта мегабайтная страничка.

А тут еще ходят слухи о пришествии Web-приложений на desktop. Типа растет новый класс Web-приложений, которые способны работать в браузере и в оффлайне, в том числе и сохраняя свое состояние на локальном жестком диске. Слухами я называю это потому, что очень далек от области Web-разработки, поэтому не очень в курсе того, насколько это жизнеспособно сейчас и какие у этого перспективы. Однако, в то, что на каком-нибудь JavaScript-е или Flash-е скоро начнут делать автономные desktop-ные приложения, я уверен.

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

Во-вторых, я уже несколько месяцев являюсь владельцем нетбука. И это заставляет смотреть совсем по другому на нынешнее софтостроение. Нетбуки – это совсем другой мир. У них в ближайшее время вряд ли будет хорошее быстродействие (все-таки быстродействие – это цена, а сила нетбуков в их низкой цене). Мой маломощный нетбук с VIA-процессором начинает громогласно гудеть при более-менее серьезной нагрузке. А что создает на нем нагрузку? В большинстве случаев – браузер, когда открывает страничку с Flash-евой рекламой. Страшно подумать, что будет, когда на нетбуки придут desktop-ные приложения на JavaScript-е и Flash-е.

Второй фактор, который серьезно отдаляет мир нетбуков от всего остального мира – это размер экрана. Разрешения 1024x600 для 9” экранов или даже 1280x800 для 11” можно считать практически пределом. Не думаю, что здесь что-то серьезно улучшиться. Ведь даже 13” экран сразу переводит девайс в совсем другую категорию за счет существенно больших габаритов. А ведь маленький вес и размер в купе с низкой ценой и есть основные причины покупки нетбуков.

Итак, экраны у нетбуков маленькие как по размеру, так и по разрешению. А это ведет к тому, что разработанные для больших братьев приложения на нетбуках становятся малопригодными к использованию. Большие рамки у окон, большие картинки в тулбарах, широкие скроллбары, красочные диалоги с картинками и обилием пустого места, крупные шрифты – все это прекрасно выглядит на FullHD дисплеях, но является откровенным издевательством на нетбуках.

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

Но, если под нетбуки нужно специально затачивать приложения, то на чем их писать? На JVM-овской Scala/Java или .Net-овских C#/VB/F#? Или на нативных C/C++? Широко распространенных, но опасных. К тому же имеющих репутацию медленных в разработке. Или же где-то там (якобы) живущим, но тоже нативным OCaml-у с Haskell-ем? Или известным только фанатам диалектам Common Lisp-а? А может быть на Ada или Oberon?

На мой взгляд, приложения для нетбуков (да и не только для нетбуков) должны разрабатываться на нативных языках. Но безопасных. И я не очень понимаю, почему сейчас сложилось мнение, что управляемые среды – это безопасно, а неуправляемые, нативные – это опасно? Может быть из-за флагманов этих сред – Java/C# vs С/C++?

Но я, к примеру, начинал серьезно осваивать программирование на очень нативном и очень безопасном Turbo Pascal-е. Выходы за пределы массива или переполнение буферов там вылавливалось на раз. При очень маленьких размерах исполнимого кода и вполне приличной скорости его работы. Так что очень зря между “управляемостью” и “безопасностью” автоматически ставится знак равенства.

Таки пора уже озвучивать давно обещанную амбулу. Нетбуки могли бы дать толчок к разработке новых, современных приложений на нативных языках. Но новые, многообещающие языки (C# и Scala) как раз ориентированы на управляемые среды. А где новые, многообещающие, мощные и безопасные промышленные нативные языки? Или таковым считается только Haskell? Сможет ли распространение нетбуков подтолкнуть кого-нибудь к созданию чего-то вроде Scala, но для нативного кода?

Честно говоря, я сам в это не верю. Хотелось бы, но не верю. Имхо, сейчас вообще у любого нового языка программирования будет очень мало шансов стать широко распространенным инструментом (в очередной раз поминаю незлым тихим словом долгострой под названием D). И рынки нетбуков или многоядерных машин будет проще окучивать с помощью адаптированных старых лидеров (опять же Java, C#, C++0x), чем с помощью чего-то нового. Хотя…

PS. Под старыми-добрыми временами я подразумевал начало 90-х, когда при написании, скажем, текстового редактора под MS-DOS, Windows или OS/2, не было большого выброра – C, C++, Pascal, Modula-2 да и все, пожалуй. Хорошие времена были. Трава зеленее, вода мокрее… :)

Отправить комментарий