Специально(или нет?) сделал малоинформативный тайтл. Просто не пришло в голову что написать.
А тема нашего разговора сегодня - веб-фреймворки, а точнее что мы сейчас имеем и что мы можем сделать, изменить.
Начнём из далека.
Сейчас у нас есть огромное количество различных веб-фреймворках на разных, но, в основном, популярных языках:
- Python
- Ruby
- PHP
- Lisp
- Java
etc
Что мы имеем?
- На пайтоне всё медленное, требует не хилых машин, а как следствие - не хилых оптимизаций.
По статистике(я провёл небольшой опрос среди знакомых и не очень) получается что ~10% времени уходит на разработку(основной кодинг логики, версия 0.1, если угодно). Не важно что это - GAE, Pylons, Django. Не важно что за проект - форум, соцсеть, личный сайт, блог. Одна фигня.
На что тратится остальное время? Темплейты - да, но часто оно меняется по сложности. Кому сложный сайт с AJAX и JQuery, а кому простой сайтец времён web1.0(как я такое мог сказать... ну, в общем, я думаю вы поняли про что я). Возьмём условно - 20%.
На что уходят ещё 70%? Чем занимаются веб-кодеры на пайтоне в 7! раз дольше чем основной логикой? Оптимизацией! KVS, быдлокод etc etc. Что можно сказать? Всё круто, да только оптимизировать такой код лично для меня дорого. Да и глядя на то что мой код(да простейший) рендерит страницу за 0,9сек(без KVS), когда другой портал(на том-же VDS) рендерит похожее, да только с большей информацией и несколькими ещё запросами в БД, за 0,5сек(без KVS). Обидно, не правда ли? Оптимизация сильно исправляет положение но... Зачем тратить время на оптимизацию своего кода, когда зло глубже? И да, как сказал уже не помню кто: «Использование KVS это не оптимизация, а кешинг». Что намекает на то что код на пайтоне практически не оптимизируем(можно поспорить, но зачем если правда рядом?) - Руби. Как много в имени его. Как оно рекламируется, как оно всем нравится, как оно гламурно. И что? Руби считается одним из самых малопроизводительных языков(тоже спорно, но давайте просто скажем что в этом плане он не лучше пайтона, так будет честнее).
Признаюсь, сам не юзал. Хотя, конечно, приходилось немного кодить для redmine. У кого не спрошу «а почему ты юзаешь?» дык почти все отвечают: «по работе нужно».
В общем, на одну полку с пайтоном. Чисто так, «округляя». - PHP. Это язык, в первую очередь, который создан для веба. Производительность? Не скажу что так плохо как у руби или пайтона. Скорость разработки? Фреймворков не мало. Не плохо, жить можно(но не мне).
Но! Этот язык является сильно ограниченным. Да, есть гтк-биндинг и другие плюшки, но всё это больше похоже на клоунаду.
Признаться, сам язык не так плох как о нём думают. Однако! Это полностью интерпретируемый язык. Да! Есть сотни компиляторов и оптимизаторов. Но зачем, простите, ипаться с тем что не заложено «внутри»?
Я говорю что PHP плох. Почему? Есть более простые, серьёзные, удобные, хорошие языки. - Тут спорить не буду и не хочу. Как выразился тв. «архимаг»: «у лиспа одно спасение - веб». Лично я не вижу применения для него в вебе.
Быстрый интерпретатор? Может быть. Возможность делать всё что хочешь? Да.
Но я такое юзать не буду. Не принципиально, просто не буду(уже сто раз говорил чем лисп плох, все согласны, кроме самих лисперов). - Джава она и в африке джава. Как и эрланг(вы не против что в одном пункте?) это фантастическая платформа для гигантских приложений, где производительность не проблема. Главное чтобы не падало, а точнее падало, но только было максимум механизмов для удержания таких систем на плаву.
Я к такому отношусь негативно. Почему? Да я готов поспорить что на таких системах теряется уйма производительности(везде, не нужно говорить что я не знаю каких-то механизмов, просто я не хочу раздувать эту тему).
Что можно добавить в этот список? Всякие асп.нет, веб-фреймворки на xml(был тут на лоре один человек) etc etc. Оно не интересно с точки зрения использования в реальном мире.
Картина, мягко говоря, не самая лучшая. Да, есть деньги - будет хоть на брейнфаке с JVM. Но кризис, студентота. Что делать? Думать о оптимизации раньше!
Да! C, C++ и.... D.
- C. Кто не писал на этом языке или считает его ущербным? Да школота и только.
Нет, у меня не фанатизм, я не считаю что «C - бох» и на него нужно молиться, как некоторые. Но при том что язык низкоуровневый, он ещё и обладает неплохим синтаксисом.
Всё круто, да вот только нет OOP, что заставило бы в веб-фреймворке делать массу костылей. Не столько костылей сколько вообще не красивый код. Да и управление памятью... Не хочется этим заниматься в веб-фреймворке при написании приложения.
Да и сам язык хоть и хорош, но только для низкоуровневого. - С++. Просто для того чтобы не обделять. Язык съедобен, но только с Qt(раньше кодил на C++ без кути, но сейчас просто принципиально не хочу). Ну и всё, просто глупо что-то ещё здесь говорить.
- D. Вам хиханьки и хаханьки, а другим - профит.
Сам язык является таким C++, но каким он должен быть. Удобным, красивым, быстрым, с функциональщиной и ООП. Да всё в нём есть.
Оптимизация? Его создатели - короли оптимизации. Сам по себе компилятор оптимизирует ещё в компайл-тайме всё что можно и нельзя. На выходе получаем убершустрый код.
Я видел веб-фреймворки(не путать с веб-тулкитами) на плюсах. Мне было страшно. Весь код был в костылях и тысячах темплейтов. Мне было жалко кодеров.
Лично я вижу очень хорошую нишу для D - веб.
Увы, пока язык только развивается, по сему пока приходится писать костыли и придумывать иные пути реализации. Однако, и того что есть достаточно для многих и многих вещей.
Недели 3 назад я начал исследовать данный вопрос и пришёл к выводу - реализуемо, реально, может быть простым и функциональным.
Последний год я использую Python, а в частности Pylons, для вебкодинга(сам я прикладник-сетевик, но деньги нужны, да и потом понравилась логика веб-фреймворков, т.е. сам я html не пишу, ofc). Больше всех мне понравился Pylons. Так-же очень понравились некоторые идеи GAE.
В общем, подумав хорошенько, я решил начать написание веб-фреймворка. Без фанатизма, начиная с самых опасных частей, которые могут убить проект и-за не реализуемости.
И вот оно - Dylons(ха-ха, да-да):
https://launchpad.net/dylons
Работает шустро, проблем нет. Как бэк-енд юзается моя же обёртка - libdfcgi на базе libfcgi.
Олсо, есть абстрактный слой для бекэнда. Хочешь - прикрути свой наследуя нужный класс.
Сейчас над данным экспериментом трудятся два человека - я и мой знакомый. Я пишу основную систему, а он - небольшой темплейт-енжин.
Сейчас самая большая проблема - ORM. QtDSQL просто не существует, т.е. обёртки нет, да и его производительность не на столько велика.
Одна из целей треда - сообщить о таком эксперименте и о том, что нам нужны люди. Не только желающие заняться ORM, но и просто кодеры, что хотят высказать своё мнение о том что хорошо бы сделать и что они хотели бы от Dylons.
Для затравки, вот экземпл.
Далее, пойдём дальше.
В ди нет пока возможностей распаралелливания(да даже на x86_64 нет компилятора, сам юзаю x86-либы). Нет OpenMP(хотя написать то можно, но сложно). Использование в продакшне - ферма. Хотя оно не плохо.
По сему я стал отталкиваться от распаралелизации и вообще шустрой VM. Здесь я слаб. Вижу Parrot. И что? Как там? Говорят не плохо. Но на сколько шустро?
Какие вообще есть мысли у Вас по этому поводу?