Выпущен (http://nuitka.net/posts/nuitka-release-042.html) релиз компилятора для языка Python - Nuitka 0.4.2 (http://nuitka.net), позволяющего транслировать скрипт на языке Python в представление на C++, которое можно скомпилировать в исполняемый файл, использующий libpython для обеспечения максимальной совместимости с CPython (используются штатные средства CPython для управления объектами). Возможна компиляция как библиотек так и непосредственно исполнительных файлов, в том числе и рекурсивная.
В текущем виде проект уже обеспечивает заметное повышение производительности итогового исполняемого файла по сравнению с CPython (опережение на 258% в тесте pystone). Тем не менее, началась работа по реализации более значительных оптимизаций, которые позволят перевести производительность на новый уровень. В частности, уже реализована начальная система развёртывания констант и планируется задействование средств статического анализа кода для учёта информации о типах переменных при трансляции в код на С++, что позволит использовать нативные типы данных без обращения к libpython. Для преобразования типов, которые не удалось угадать при проведении автоматизированного анализа, разработчику будет предоставлена возможность ручного определения модуля с подсказками об используемых типах. Также планируется реализация интерфейса для взаимодействия с кодом на языке Си, через подключение написанных на Си ctypes-биндингов.В текущем выпуске полностью поддерживаются версии языка Python 2.6, 2.7, 3.2 и базовый синтаксис версии 3.3. Компиляция выполняется путем трансляции кода в С++ и последующей передачи компилятору С++, таким как g++, MinGW g++, clang. Поддерживаются операционные системы Linux, MacOS X, Windows (32bit), FreeBSD, и аппаратные платформы x86, x86_64 и arm. Выпуск 0.4.2 примечателен добавлением поддержки Python 3.3 и FreeBSD, а также большой порцией новых оптимизаций и исправлением ошибок.
Установка компилятора может быть выполенена через pip:
<font color="#461b7e">
sudo pip install nuitka
</font>Компиляция программ может быть выполнена командой:
<font color="#461b7e">
nuitka-python --recurse-all some_file.py
или просто:
nuitka --exe some_file.py</font>
URL: http://nuitka.net/posts/nuitka-release-042.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=36544
Мне нравится этот оборот "в текущем виде проект уже обеспечивает" применительно к софту. Два раза. Видать это главное его достоинство. Текущий проект.
Название хорошее, но какие преимущества перед shedskin(который хорош в основном только на тривиальном коде)?
> Название хорошее, но какие преимущества перед shedskin(который хорош в основном только
> на тривиальном коде)?Название от имени жены разработчика - Анютка, да она русская.
Преимущество - компилируется любой корректный код, не требуется дописывания или переписывания кода.
Компилятора Python?
Хмм.
Да. На самом Python делают прототипирование, которое позволяет быстро сделать полурабочий вариант. Потом этот полурабочий компиляируют и еще лучше тестируют, и если все хорошо паралельно начинают переписывать проект на что-то побыстрее.
> Да. На самом Python делают прототипирование, которое позволяет быстро сделать полурабочий вариант.Но зачем тратить время на полурабочий вариант? Не проще ли сразу делать нормально? На что только не пойдет народ чтобы плюсы не учить...
>> Да. На самом Python делают прототипирование, которое позволяет быстро сделать полурабочий вариант.
> Но зачем тратить время на полурабочий вариант? Не проще ли сразу делать
> нормально? На что только не пойдет народ чтобы плюсы не учить...Голову лучше забивать нормальными вещами. Если человек начинает думать категориями плюсов, то он просто не может думать о простых и приятных вещах, это просто не вмещается в него. Он превращается в того, что я считаю страшным оскорблением - в "технаря". Их жизнь проходит за перегородками и у них пропадают человеческие навыки и чувства.
Хватит зомбировать людей, и заставлять их утыкаться в чёрный ящик. В любом, подчёркиваю, в любом таком сообществе царят только снобизм, злоба, неудовлетворённость и ненависть. Это не стоит того.
А нормальный человек плюсы понять не сможет. Чисто физически, не говоря уже о психологически. Потому что ему будет СЛИШКОМ НЕИНТЕРЕСНО и СЛИШКОМ БОЛЬНО. Нельзя понять такое.
Это языки должны быть средством для общения людей, а не люди - придатком и исполнителями для языков.
Что только не придумают, чтобы не учить C++ :)
…и это правильно. Всякой фигнёй вроде С++ незачем забивать голову. Вот чистый С — совсем другое дело.
от чистого си уже и с гцц отказываться начяли ибо не нужен для прикладного софта.
>от чистого си уже и с гцц отказываться начяли ибо не нужен для прикладного софта.Это произошло, что все старые и опытные программисты самоустранились, и в проект нахлынула волна неопытных новичков. Как говорил Линус Торвальдц, уже того факта, что на си++ пишут там много посредственных программистов, должно быть достаточно, чтобы полностью отказаться от этого языка.
На русском языке говорят много плохих людей, полностью откажитесь от русского. Или вам надо, чтобы САМ ЛИНУС это сказал?P.S. с вашим оппонентом тоже не согласен. С вполне живет и для прикладного софта, во-первых, а во-вторых, компилятор - не прикладной софт, и причины перехода на С++ были явно далеки от вашего "кококо не подходит".
Покажите мне большие прикладные проекты на СИ которым не более 2 лет.
Покажите мне большие прикладные проекты, которым не более 2 лет.
https://github.com/linuxmint/Cinnamon
Cinnamon на си, с вами плохо похоже. СИ там только по историческим причинам ибо это форк.
Посмотрите сколько они коммитят в js и в СИ.https://github.com/languages/C - и где тут прикладные проекты которым не больше 2 лет и на си и не по историческим причинам а по объективным.
> и на си и не по историческим причинам а по объективным.Ну знаете, любые проекты - по историческим причинам. Reason: вы не можете писать на ЯП который еще даже не изобрели. Поэтому вы неизбежно будете выбирать какой-то из существующих ЯП. Си помнится первый по популярности ЯП в мире, подвинувший яву обратно на второе место. Но, конечно, лечить о том что на си все пишут только по историческим причинам это не мешает. Ведь "если факты не подтверждают теорию - от них надо избавиться!"
>> Си помнится первый по популярности ЯП в мире, подвинувший яву обратно на второе место.Это что ли по индексу Tiobe?
Не любые а только те, которым досталось в наследство гора хода, что свойственно опенсорсу.
> На русском языке говорят много плохих людей, полностью откажитесь от русского. Или
> вам надо, чтобы САМ ЛИНУС это сказал?На русском, к сожалению, говорят все меньше и меньше. Больше говорят на Олбанском, вот от него бы отказаться
Врать и придумывать сказки нехорошо. Новичков там уже лет 5 не было, разве что индусы из одного университета (где их натаскивает один из ветеранов). На C++ перешли в том числе для того, чтобы снять технический долг и привлечь новичков.
> Врать и придумывать сказки нехорошо. Новичков там уже лет 5 не было,
> разве что индусы из одного университета (где их натаскивает один из
> ветеранов). На C++ перешли в том числе для того, чтобы снять
> технический долг и привлечь новичков.Про технический долг это вы на хабре лучше расскажите. Реальная проблема gcc не технический долг, а то что там давно не наблюдается нормальных специалистов. Вообще, можно сформировать некий критерий, по которому человек, знающий си, но не знающий си++ это лучший программер, знающий и то и другое - средний, а знающий только си++ - быдлокодер.
Ох...ть! Белый - хорошо, мулат - так себе, чёрный - плохо.
Нет не так. Если у тебя родители наркоманы - ты плохой, если строители - средний, если заняты в науке - хороший. Когда кто-то придёт и станет говорить мне, что он не любит си, поскольку это отстой, не поддерживающий классы и наследование, я скажу ему, чувак, может быть ты и хороший программист, но происхождение твоих навыков весьма сомнительно. И да, оказывается, он быдлокодил на visual studio, пока те не перешли на си шарп.
Да нет, это больше похоже на "если конструктор чертит на бумаге, он крутой спец, а иначе быдлоинженерит в САПРе".
А ведь в твоих словах есть доля истины, так как после хорошого освоения карандаша с бумагой и долгим изучением текущих САПР (например, Autocad), начинаешь понимать, что в текущем их состоянии, всё их приимущества не более чем фантазия авторов сего поделия!
Ути пуси :) На спор ты тупо карандашиком хиленький А0 будешь неделб рисовать и всё равно зарубят на несоответствии\помарках. Зажралися народец то :) Что такое тушью обводить н не знает :)
> придёт и станет говорить мне, что он не любит си, поскольку
> это отстой, не поддерживающий классы и наследование, я скажу ему, чувак,
> может быть ты и хороший программист, но происхождение твоих навыков весьма сомнительно.К вопросу о программистах и их знаниях: http://ithappens.ru/story/10776
Ну что, господа программисты. Признавайтесь,
1) Кто и сколько промахов сделал бы решая эту задачу сам?
2) Кто из вас может оценить точность вычислений?
3) Кто из вас может оценить влияние различного оборудования на ответ?А казалось бы, такая простая задача...
> Вообще, можно сформировать некий критерий, по которому человек, знающий си, но не знающий си++ это лучший программер, знающий и то и другое - средний, а знающий только си++ - быдлокодер.Знать Си++, не зная Си — всё равно, что владеть кошельком, но не владеть его содержимым.
Забавное заблуждение
Почему заблуждение? Общее подмножество Си и Си++ охватывает Си почти полностью. Хочешь, не хочешь, но если ты действительно знаешь Си++, то и Си ты тоже знаешь. Согласно modus tollens, из этого следует, что если ты не знаешь Си — тщетно надеяться, что ты знаешь С++. Что и требовалось доказать.
> Почему заблуждение? Общее подмножество Си и Си++ охватывает Си почти полностью. Хочешь,
> не хочешь, но если ты действительно знаешь Си++, то и Си ты тоже знаешь.
> Что и требовалось доказать.А потом такой фрукт слегка поправляет неточности в коде старичков ... и в Debian уходит дырявая крипта :(
Дьявол в деталях детка, хелловорлд я те на любом языке напишу - и что я их все знаю?
> Забавное заблуждениеНифига. Нормальный си++'ник си знает. А вот быдлокодеры которые полагают что си мол слишком сложно, а вот си++ с его наворотами это да - они спиди гонщики. Они вообще по факту не особо понимают как их программа работает. Они буковки в редакторе расставляют. Что по факту будет сделано машиной после расставления букв такие индивиды вообще не в курсе.
> Про технический долг это вы на хабре лучше расскажите. Реальная проблема gcc
> не технический долг, а то что там давно не наблюдается нормальных
> специалистов. Вообще, можно сформировать некий критерий, по которому человек, знающий
> си, но не знающий си++ это лучший программер, знающий и то
> и другое - средний, а знающий только си++ - быдлокодер.Чем человек больше знает и умеет - тем хуже?
Вы бы свою секту чисто "Си-разработчиков", c опытом в одну курсовую закрыли бы уже.
>Чем человек больше знает и умеет - тем хуже?А ведь ты прав)
>>Чем человек больше знает и умеет - тем хуже?
> А ведь ты прав)Последнюю похвальную мысль я еще в моей хрестоматии, когда мне двенадцать лет было, читала.
> Чем человек больше знает и умеет - тем хуже?Не, тогда хуже всех был бы тот, кто знает Си и Си++ одновременно. Очевидно же!
>Вот чистый С — совсем другое дело.Чистый C хорош для ядра ОС. Пока что хорош. А вот в области гуя любители чистого C родили такого уродца, как Gtk.
Сами вы уродец, а Gtk простой как пробка, а связке с linglade/GtkBuilder вообще сводится к написанию функций для ивентов.
Все нормально с GTK, язык C там очень даже в тему. Тем более что сейчас на нем писать нет нужды, есть Vala, на котором достаточно описать логику и обработчиков, остальное делается в Glade
> Чистый C хорош для ядра ОС. Пока что хорош.И вот уже лет 40 как ничего лучше толком и не сделали.
> А вот в области гуя любители чистого C родили такого уродца, как Gtk.
Хрень как хрень. Живет себе, развивается.
> Что только не придумают, чтобы не учить C++ :)а теперь представьте, что, например, все сайты писались бы на С++. Как с серверной, так и с клиентской стороны. Загружаешь страничку, запускаешь копмилятор, и через 20 минут на страничке появляются анимация, ютуб и обработчики кликов...
И почему вообще именно С++? Тогда уж сразу, что только не придумают, чтобы не учить ассемблер, тьфу, двоичные коды.
Твой ник говорит сам за себя.
p.s. мой тоже
Ну ладно, ладно, сравнили булки с пальцем. Одно дело загрузил-отрендерил-показал, другое дело - сервис, который крутится 24*7 и молотит этих страниц тыщщи в секунду.
Плохой пример. Если бы все писалось на C++, браузер был бы для просмотра только текста, а у всех сайтов были бы десктопные-приложения. Ну как на телефонах сейчас.
не прошло и тридцати лет, как разработчики решили заняться оптимизацией питона
"релиз компилятора ..., позволяющего транслировать"
Я всю жизнь думал, что такие программы называются словом на букву т. Но, видимо, сейчас модно писать компиляторы. Почти как раньше браузеры и позже операционные системы.
В компилятор встроен транслятор, если что. Транслятор это шткуа которая транслирует из одного представления в другое.
> В компилятор встроен транслятор, если что. Транслятор это шткуа которая транслирует из
> одного представления в другое.Терминатор, это такая штука, которая терминирует нечто, то есть превращает из обычного состояния в состояние терминированности.
>> В компилятор встроен транслятор, если что. Транслятор это шткуа которая транслирует из
>> одного представления в другое.
> Терминатор, это такая штука, которая терминирует нечто, то есть превращает из обычного
> состояния в состояние терминированности.Терминатор это губернатор Калифорнии.
Терминатор — это граница между дневным и ночным полушариями планеты.
> Терминатор — это граница между дневным и ночным полушариями планеты.Теперь понятно, почему 10Base2/10Base5 работали в зависимости от времени суток.
Это всё пошло с llvm.
Когда люди пытаются компилить язык с динамической типизцией, неизбежно возникает необходимость предсказания типов и перекомпиляции, в случае если изначально тип был определён неверно. Потом они говорят: ребята, давайте сделаем типизацию, дадим подсказку нашему чудо-компилеру. Так получается новый недо-язык, который имеет мало общего с исходным.А всё из-за того что люди не хотят мириться с тем, что он тормозит, вместо того чтобы учить более производитеьные решения. Каждой задаче свой язык, - это аксиома, которую должен вызубрить каждый
Беда, в том, что, как правило, при использовании более производительных решений начинает страдать скорость разработки, поэтому и появляются такие подобия.
Но, все-таки, то, как к этой проблеме подходят Scala и Go, мне кажется более правильным.
> не хотят мириться с тем, что он тормозит
> Каждой задаче свой языквы сами себе ответили. Ничего не тормозит. По крайней мере на тех задачах, на которых рационально использовать питон.
> задачах, на которых рационально использовать питон.Т.е. всякие одноразовые скриптики.
Одноразовые скриптики — это оксюморон, как горячий лёд или windows-сервер. Писать скрипт для того, чтобы использовать его один раз, а потом выбросить, нецелесообразно. Скрипты пишут тогда, когда они могут пригодиться еще не раз.
И да, какой смысл писать скрипт на python, если есть sh, perl и tcl?
>Когда люди пытаются компилить язык с динамической типизцией, неизбежно возникает необходимость предсказания типов и перекомпиляции, в случае если изначально тип был определён неверноНет. Компилятор вычисляет типы по простым правилами auto a = "str"; или решением уравнений. Функции в питоне имеет смысл обрабатывать как шаблонные функции в C++, то есть для каждого набора типов аргументов инстансцируется специализация функции и генерируется код для конкретного набора типов.
>>Когда люди пытаются компилить язык с динамической типизцией, неизбежно возникает необходимость предсказания типов и перекомпиляции, в случае если изначально тип был определён неверно
> Нет. Компилятор вычисляет типы по простым правилами auto a = "str"; или
> решением уравнений. Функции в питоне имеет смысл обрабатывать как шаблонные функции
> в C++, то есть для каждого набора типов аргументов инстансцируется специализация
> функции и генерируется код для конкретного набора типов.Это подходит только для простых типов, а что делать с объектами?
делать толстые таблицы методов на манер того, как это делается в objective C.
> Когда люди пытаются компилить язык с динамической типизцией, неизбежно возникает необходимость предсказания типов и перекомпиляции, в случае если изначально тип был определён неверноИзбежно.
#include <stdio.h>
// Упрощённая модель динамической типизации:
typedef enum type_t {NULL, INTEGER, REAL, OBJECT} type_t;
typedef struct dynamic_type {
type_t tag;
union {
long integer_value;
double real_value;
void *pointer_value;
};
} dynamic_type;int main(){
dynamic_type variable1 = {.tag = INTEGER, .integer_value = 42};
dynamic_type variable2 = {.tag = REAL, .real_value = 3.14159265358979};
printf("SUMM: %f\n", variable1.integer_value + variable2.real_value);
}
Это что, правда так сложно?
>[оверквотинг удален]
> } dynamic_type;
> int main(){
> dynamic_type variable1 = {.tag = INTEGER, .integer_value =
> 42};
> dynamic_type variable2 = {.tag = REAL, .real_value =
> 3.14159265358979};
> printf("SUMM: %f\n", variable1.integer_value + variable2.real_value);
> }
>
Не сложно, но при чём тут компиляция питона в си? Возмём код z = x + y. Теперь покажите, как сделать из этого си, если тип x и y не известен.
>[оверквотинг удален]
>> 42};
>> dynamic_type variable2 = {.tag = REAL, .real_value =
>> 3.14159265358979};
>> printf("SUMM: %f\n", variable1.integer_value + variable2.real_value);
>> }
>>
>> Это что, правда так сложно?
> Не сложно, но при чём тут компиляция питона в си? Возмём код
> z = x + y. Теперь покажите, как сделать из этого
> си, если тип x и y не известен.В С++ думаю, что это будут объекты (абстрактные типы), а не базовые типы данных, так же как в C#. Возникает ощущение, что человек изобретает велосипед -)
> Возмём код z = x + y. Теперь покажите, как сделать из этого си, если тип x и y не известен.
python_type z;
if (x.__add__.type == PYTHON__FUNC){
x.__add__(x, y, &z);
}//тем временем где-то внутри функции python_float.__add__(const python_type x, const python_type y, python_type &z):
double x_temp, y_temp;
bool result = cast_to_double(x,&x_temp);
bool result = result && cast_to_double(y,&y_temp);
if (result){
z.type = PYTHON_FLOAT;
z.float_value = x_temp + y_temp;
return SUCCESS;
} else {
fputs("Type conversion error", stderr);
return FAILURE;
}
Читаю: если x позволяет складывать, вызвать функцию add в предположении что x,y,z это double. Ну да ладно, по крайней мере есть код. Фишка в том, что это идёт в сторону cpython. Что нужно получить на выходе:double z = x + y;
А ещё лучше сразу машинный код. В случае когда есть хотя бы минимальная возможность, сделать:
int z = x + y;
Ибо целые числа работают значительно быстрее. Посему без перекомпиляции никак.
> Что нужно получить на выходе:
> double z = x + y;
> А ещё лучше сразу машинный код. В случае когда есть хотя бы минимальная возможность, сделать:
> int z = x + y;
> Ибо целые числа работают значительно быстрее. Посему без перекомпиляции никак.Нет.
Если типы x и y известны заранее, то и тип z будет известен заранее (или будет заранее известный Error), и никакая перекомпиляция не потребуется.
Если тип x или y не известен заранее, то и тип z будет неизвестен заранее, и никакая перекомпиляция не поможет.
Что непонятно?
> Не сложно, но при чём тут компиляция питона в си? Возмём код
> z = x + y. Теперь покажите, как сделать из этого
> си, если тип x и y не известен.Во-первых Вы когда примеры приводите, постарайтесь чтобы они были корректны.
Ваш код не корректен если типы x и y не известны, python вернет ошибку.Во-вторых изучите мат.часть. На лицо полное не понимание вопроса. Есть много материалов по типизации, например вот хорошая статья: http://habrahabr.ru/post/161205/
> z = x + y. Теперь покажите, как сделать из этого си, если тип x и y не известен.Для си вообще до балды на самом деле какие там типы. Значения в памяти и нии...т. Как именно вы желаете суммировать гайки с бананами - ваше дело. Технически доступиться до гаек и бананов - можно.
А вот то что некто может нисколько не сомневаясь засуммировать одно и другое и даже что-то на выход вернуть - вот это уже баг, а не фича. Т.к. програмер накосячит и не заметит нифига. Ну а что, чего-то же посчиталось!
"...Для си вообще до балды на самом деле какие там типы..."Задача не транслировать python в С, а транслировать в корректно работающую программу на C.
if <условие 1>:
x, y = "123", "456"
elif <условие 2>:
x, y = 123, 456
else:
x, y = [1, 2, 3], [4, 5, 6]z = x + y
Пример синтетический, но как это транслировать в C, которому "типы до балды"?
python_type *x, *y, *z;
if (<условие 1>){
x = new_python_string("123");
y = new_python_string("456");
} else if (<условие 2>) {
x = new_python_int(123);
y = new_python_int(456);
} else {
x = new_python_dict(new_python_int(1),new_python_int(2),new_python_int(3));
y = new_python_dict(new_python_int(4),new_python_int(5),new_python_int(6));
}
z = get_python_method(x,"__add__")(y);
Синтетическому примеру — синтетическое решение. Описания типа python_type и реализации функций не привожу, ибо принцип уже описан в примерах выше.
>Когда люди пытаются компилить язык с динамической типизцией, неизбежно возникает необходимость предсказания типов и перекомпиляции, в случае если изначально тип был определён неверно.Вы путаете слабую типизацию с динамической. Вот например в Си слабая, статическая, явная типизация. И там возможны ошибки о которых вы говорите.
А в Python строгая, динамическая, неявная типизация, и приведение одного типа к другому возможно только через специальные функции, да и то не всегда.
>А всё из-за того что люди не хотят мириться с тем, что он тормозит, вместо того чтобы учить более производитеьные решения.Да! Почти не осталось людей, которые пишут на fortran и в машинных кодах.
> Да! Почти не осталось людей, которые пишут на fortran и в машинных кодах.То-то все критичные места в кодеках и тому подобном на ассемблере выписаны. Оно и понятно - если голову засунуть в бидон то кажется что весь мир состоит только из этого бидона.
>> Да! Почти не осталось людей, которые пишут на fortran и в машинных кодах.
> То-то все критичные места в кодеках и тому подобном на ассемблере выписаны.
> Оно и понятно - если голову засунуть в бидон то кажется что весь мир состоит только из этого бидона.Кодеки пишут специально созданные для этого люди. У обычных людей в жизни совсем другая цель.
Оставим в стороне вопрос нужно/не нужно. Больше интересует насколько оно работоспособно. Раньше про проект не было слышно ничего.
вы думаете оно плохо работает? в режиме интерпретации не отличить от питона
PyPy мне кажется более перспективным
От GIL'а оно избавляется? Если нет, то толку то.
от GIL пробуют избавиться в PyPy
> От GIL'а оно избавляется? Если нет, то толку то.О Вы знаете такие слова! Для справки GIL - это такая штука, которую при желании можно просто отключить в обычном CPython, обычно в библиотеках связанных с вычислениями (numpy, scipy и т.п.) так и делают.
> Для справки GIL - это такая штука, которую при желании можно просто отключить в обычном CPython,
>обычно в библиотеках связанных с вычислениями (numpy, scipy и т.п.) так и делают.Бобёр -выдыхай!
> библиотеках связанных с вычислениямиВычисления на питоне - это что-то типа гонок на асфальтоукладчиках.
>Вычисления на питоне - это что-то типа гонок на асфальтоукладчиках.Так а чё давай сравним скорость на реальных примерах. Например нужно перемножить пару матриц содержащих комплексные числа. С тебя рабочий код на Си. Я тебе свои две строчки кода на python покажу как ты код покажешь, а то обычно такие товарищи уклоняются от прямого сравнения, и да я уверен что эти две строчки моего кода будут быстрее выполнятся особенно на больших размерностях.
Python вряд ли что-то поможет
> уже обеспечивает заметное повышение производительности итогового исполняемого файла по сравнению с CPython (опережение на 258% в тесте pystone). Тем не менее, началась работа по реализации более значительных оптимизаций, которые позволят перевести производительность на новый уровеньОхренеть... Это на каком же уровне его производительность сейчас? Всё-таки, похоже, я был прав, когда отказался от зопе/плоне/джанго/что-там-ещё-могло-быть когда выбирал основу для сайта конторы.
Скажи нам всем, что же ты выбрал вместо тормозного питона-интерпретатора? С++?
ты написал сайт на чистом C? кулибин... :)))браво, подскажи название своей "конторы", посмотреть, оценить r/s
Если даже в нашей конторке, Django на nginx + uwsgi по тестам идёт 200 r/s... должно быть у вас конкурент фейсбука?
> должно быть у вас конкурент фейсбукаСмотрите в противоположную сторону. Производительность - это ещё и возможность арендовать виртуальный сервер подешевле. А сайт не скажу, потому что всё заглохло за неимением бабок - как был у конторы сайт из пяти страничек на джумле, так и остался.
>> должно быть у вас конкурент фейсбука
> Смотрите в противоположную сторону. Производительность - это ещё и возможность арендовать
> виртуальный сервер подешевле.Можете привести пример сдачи/аренды такого сервера?
>А сайт не скажу, потому что всё заглохло
> за неимением бабок - как был у конторы сайт из пяти
> страничек на джумле, так и остался.Вот она - история успеха С++ в покорение веба.
google://аренда виртуального сервера
>google://аренда виртуального сервераНет. Нужен пример экономии.
> ты написал сайт на чистом C? кулибин... :)))Можно я скажу?
Я когда-то писал сервер на чистом basic и winsock. С нуля реализовал веб-сервер, сначала посмотрев, как работает apache, гоняя его telnet-клиентом, потом свой сервер гоняя всеми браузерами, от ie до links. Никакой документации не смотрел, да и не было её у меня. У меня был матрас, бельевая верёвка, на которой висела мышь (компьютерная). И всю основную функциональность я написал за сутки, не отвлекаясь на сон, потому что МЕНЯ ШТЫРИЛО, безо всякого компота. Потом я приделал и post-запросы и нужный мне вариант cookies, и прочее.
Тогда я изобрёл и роуты, и всё остальное, что потом встретил в python-фреймворках. В php не было главного, висения в памяти, поэтому под свои задачи я мог делать всё, что хотел. И, почти всё это, не сговариваясь, я потом получил в bottle, по иронии судьбы.
Но на те года у меня было главное - возможность получить exe-шник в несколько десятков килобайт, делающий иконку в панели windows, через которую можно управлять приложением.
Жаль только, жить в эту пору прекрасную уж не придётся ни мне, ни тебе. Но те пути, которые я смог найти, обойдя традиционную схему, и которые мне подсказывала схема новая - этому просто не могло бы быть аналогов, если бы я просто ковырял php. Начиная от висения в памяти (есть в python-фреймворках) и заканчивая некоторыми нехитрыми трюками, которые не pythonic, грязные, но которые позволяли некоторые детали делать за 10 секунд "прям здесь" вместо чего-то там с подготовкой.
Когда ты всё сделал с нуля, ты царь и бог на каждом уровне, и у тебя каждая деталюшечка под контролем, ради интересов проекта можно даже приделать грязный хак на низком уровне и не бояться. Это не в интересах программирования, но это в интересах истины. Это не разработка, это создание объекта современного искусства, "малевания", когда главное - не инструменты, а задумка в голове.
А пыхеры так и остались младенцами, которые думают, что видят весь мир, но это только потому, что весь мир у них малюсенький. Чтобы оставить младенческое, нужно вырасти. И поэтому те, кто пишут для души - только они и делают шедевры и провалы, 0.01% шедевров на 99.9% провалов. У остальных же процент шедевров и объектов искусства, бросающих вызов - ровно 0.00%. Нужно смотреть ширше, и нужно уметь видеть ширше. Для этого можно и поилку для хомячка на emacs lisp написать, а не только веб-сайт на c. Искусство - это когда ты знаешь, что творишь, и зачем творишь. Когда ты знаешь только "на чём" - это ремесло.
Кстати, веб-сайт на c - это не так уж и смешно. Есть http://www.koanlogic.com/klone/
>> ты написал сайт на чистом C? кулибин... :)))
> Кстати, веб-сайт на c - это не так уж и смешно. Есть
> http://www.koanlogic.com/klone/Есть ещё хорошая ссылка - http://en.wikipedia.org/wiki/Comparison_of_web_application_f...
Но только если сама идея вдумчиво подойти к выбору основы для будущего сайта вызывает у людей насмешку и неприятие - зачем давать им какие-то ссылки?
(кст, за ссылку спасибо ;))
>> ты написал сайт на чистом C? кулибин... :)))
> Можно я скажу?
> Я когда-то писал сервер на чистом basic и winsock. С нуля реализовал
> веб-сервер, сначала посмотрев, как работает apache, гоняя его telnet-клиентом, потом свойВ университете веб-сервер на Си писали за одну пару лабораторки.
Так что нашел чем хвастаться.> Тогда я изобрёл и роуты, и всё остальное, что потом встретил в
> python-фреймворках.Это изобрели задолго до тебя, в первом же веб-сервере, и даже до него в gopher. Так как отдавать отдельную страничку отдельной функцией это первое что приходит в голову.
> Когда ты всё сделал с нуля, ты царь и бог на каждом
> уровне, и у тебя каждая деталюшечка под контролем, ради интересов проекта
> можно даже приделать грязный хак на низком уровне и не бояться.Фигня это всё. В чём смысл если каждый напишет себе свою ОС, свой веб-сервер. Попробовать, понять как работатет - ну хорошо, понял, дальше что?
> Это не в интересах программирования, но это в интересах истины. Это
> не разработка, это создание объекта современного искусства, "малевания", когда главное
> - не инструменты, а задумка в голове.
> Кстати, веб-сайт на c - это не так уж и смешно. Есть
> http://www.koanlogic.com/klone/А еще первые CGI на нем писали. Давайте выкинем последние 30 лет развития и начнем все по новому изобретать.
> В университете веб-сервер на Си писали за одну пару лабораторки.
> Так что нашел чем хвастаться.Я не хвастаюсь, я объясняю. И главное - это не вебсервер, это платформа, чтобы можно было делать быстро, удобно и в соответствии с художественным замыслом. Я на своей платформе несколько игрушек сделал.
> Это изобрели задолго до тебя
Именно. Но сам факт, что даже я, в подвальных условиях, не являясь программистом и не зная ничего из того, что происходит, придумал схему, которая 1 в 1 повторяла - только доказывает, что это ЕСТЕСТВЕННОЕ ПОЛОЖЕНИЕ ВЕЩЕЙ. Ну, конечно, кроме программистов, у которых мозги набекрень, и для которых программирование это не средство, а процесс.
> Фигня это всё. В чём смысл если каждый напишет себе свою ОС, свой веб-сервер.
Конечно, фигня. Если каждый напишет свою "Тайную вечерю", свою "Орлеанскую деву", снимет свои "Слёзы капали". Но смысл создания - в создании. А не в элементах. На элементы нужно смотреть как на элементы - если они только часть замысла, а не весь замысел. Если для этого требуется своя ОС - нужно писать свою ОС или менять замысел. А творцы - это те, которые не слушают стереотипы, а разрушают их.
А те, кто мыслит шаблонами, тот и будет в категориях "я = все" и "все = я". Это не творец, это обезьяна. Человек немыслящий.
http://upload.wikimedia.org/wikipedia/commons/b/b6/Diogenes_...
> Попробовать, понять как работатет - ну хорошо, понял, дальше что?
Опять вы путаете искусство и ремесло. Художника и маляра. Ну рисует краска красным, и что? А разница между поделками и творениями на века - именно в деталях. И если для одной единственной детали требуется трудиться 99% времени - художник будет трудиться.
>> Кстати, веб-сайт на c - это не так уж и смешно. Есть
>> http://www.koanlogic.com/klone/
> А еще первые CGI на нем писали. Давайте выкинем последние 30 лет развития и начнем все по новому изобретать.А давайте вы не будете говорить о вещах, в которых не понимаете, не будете пытаться строить из себя то, кем не являетесь и не будете делать вид, что понимаете, о чём с вами говорят.
И писать на klone - это не проблема. Если нужны ресурсы. Всяко лучше, чем на php.
>А давайте вы не будете говорить о вещах, в которых не понимаете,Начни с себя.
>> А давайте вы не будете говорить о вещах, в которых не понимаете,
> Начни с себя.Я могу себе позволить
>>> А давайте вы не будете говорить о вещах, в которых не понимаете,
>> Начни с себя.
> Я могу себе позволитьМожешь позволить? Ну так начни не помалкивать о вещах в которых не понимаешь.
>И писать на klone - это не проблема. Если нужны ресурсы. Всяко лучше, чем на php.Писать на нём одна большая проблема. Где ORM/DAL, где языки разметки вроде markdown, это же банальный компилируемый php код на Си внутри html, вы реально не понимаете почему так делать нельзя? Вы действительно предлагаете это убожество вместо RoR,Django,Web2py,Play?
>>И писать на klone - это не проблема. Если нужны ресурсы. Всяко лучше, чем на php.
> Писать на нём одна большая проблема. Где ORM/DAL, где языки разметки вроде
> markdown, это же банальный компилируемый php код на Си внутри html,Там нормальные шаблоны. В отличие от php.
> вы реально не понимаете почему так делать нельзя? Вы действительно предлагаете
> это убожество вместо RoR,Django,Web2py,Play?Не вместо. Есть и разные подходы, и разные задачи, и разное исполнение. Сторонникам "один рейх, один фюрер" советую моментально отправиться на винду и использовать её форумы и доски.
>>>И писать на klone - это не проблема. Если нужны ресурсы. Всяко лучше, чем на php.
>> Писать на нём одна большая проблема. Где ORM/DAL, где языки разметки вроде
>> markdown, это же банальный компилируемый php код на Си внутри html,
> Там нормальные шаблоны. В отличие от php.
>> вы реально не понимаете почему так делать нельзя? Вы действительно предлагаете
>> это убожество вместо RoR,Django,Web2py,Play?
> Не вместо. Есть и разные подходы, и разные задачи, и разное исполнение.
> Сторонникам "один рейх, один фюрер" советую моментально отправиться на винду и
> использовать её форумы и доски.Так ты же сам стороник одного решения вот и вперед.
> идёт 200 r/s...А нжинкс например спокойно выдаст несколько тысяч r/s :). Так что как вы понимаете, just in case, bottleneck-ом станет ваша питонятина, а вовсе не.
>> идёт 200 r/s...
> А нжинкс например спокойно выдаст несколько тысяч r/s :). Так что как
> вы понимаете, just in case, bottleneck-ом станет ваша питонятина, а вовсе не.А проект на C выдаёт 0 r/s. Потому что не создан, или выкинут по причине "развивать некому".
А ещё у nginx есть кеширование. А ещё есть статика, которая благодаря силе http идёт отдельными запросами. А ещё есть js. И много других умных слов, которые сами по себе не средства, а только кирпичики, по которому СОЗДАТЕЛЬ СОЗДАЁТ проекты, а технарь может их только перекладывать туда сюда, чтобы выглядело круто, давало крутые цифры, но людям никак не помогало вообще и в принципе.
для просвещения невежд:https://github.com/aaugustin/django-c10k-demo
Это тебе на заметку те цифры которые были 3года назад:
Мда, анонимы-экстрасенсы вышли из отпуска))Данное число вместе с подключенной SQL БД, в которой у нас в т.ч длинные транзакции.
один сервер, под тестом, сейчас идёт наращивание и проработка функционала, и нам было интересно узнать в текущий момент времени, какую нагрузку держит код.Поверьте, мы видим под тестом узкие места и это не python.
PS:
200r/s - это более 17 000 000 хитов в сутки.
> Охренеть... Это на каком же уровне его производительность сейчас? Всё-таки, похоже, я
> был прав, когда отказался от зопе/плоне/джанго/что-там-ещё-могло-быть когда выбирал
> основу для сайта конторы.Сдаётся мне твоей конторе это не помогло :) Ибо не то меняли ...
# cat test.py
b = 0
for i in range(100):
for x in range(100):
b += i * x
print "Done"
# nuitka --exe test.py
# time ./test.exe
Donereal 0m0.064s
user 0m0.044s
sys 0m0.020s
# time python test.py
Donereal 0m0.028s
user 0m0.020s
sys 0m0.004sменяем 100 на 10000 и перезапускаем
# time ./test.exe
Donereal 0m14.777s
user 0m14.773s
sys 0m0.000s
# time python test.py
Donereal 0m28.759s
user 0m28.722s
sys 0m0.012sОтсюда следует, что не всегда оно надо.
Оно еще и exe-файлы генерит? :)
обычный исполняемый бинарник. и да, пример был из под Linux)))
> Оно еще и exe-файлы генерит? :)Есть возможность кросскомпиляции при указании опции --windows-target.
оно, может, и не надо, а вот с++, например, надо :)
$time ./test
Donereal 0m0.002s
user 0m0.000s
sys 0m0.000s$ cat main.cpp
#include <iostream>int main(int argc, char **argv) {
long x, y, b;
b = 0;
for( x=0; x<10000; x++)
{
for( y=0; y<10000; y++)
{
b += x * y;
}
}
std::cout << "Done" << std::endl;
return 0;
}
зы всегда прикалывали такие оторванные от жизни тесты)
http://en.wikipedia.org/wiki/Vectorization_(parallel_computing)
Аноним намекает, что как бы есть алгебраическое решение. Зачетно, вики осилил. На самом деле, интеловский компилятор, как и gcc, если это вынести за пределы main(), заменит на константу или число (внезапно), без всякой алгебры и прочего шаманства с циклами. Я же как бы намекнул на оторванный от реальности тест :)
>[оверквотинг удален]
> for( y=0; y<10000; y++)
> {
> b += x *
> y;
> }
> }
> std::cout << "Done" << std::endl;
> return 0;
> }
> зы всегда прикалывали такие оторванные от жизни тесты)Лучше сразу на C. А тесты и впрямь прикольные, но результат на лицо:)
#include<stdio.h>int main() {
int x, y, b = 0;
for (x = 0; x < 10000; x++) {
for (y = 0; y < 10000; y++) {
b += x * y;
}
}
printf("Done");
return 0;
}
> Лучше сразу на C. А тесты и впрямь прикольные, но результат на лицо:)Да, си сделал питона раз так в эн. Хотя нет, эн мало, лучше эм.
> # cat test.py
> b = 0
> for i in range(100):
> for x in range(100):
>
> b += i * x
> print "Done"Даже на таком примере видно, что человек от python далек.
Это может стать одним из очень немногих способов скрыть исходный код на Python. :-)
про .pyc видимо не знаем?)
pyc не скрывает код.
> pyc не скрывает код.:-) вы будуте удивлены, но таки-скрывает.
если в интернетах существуют программы типа "unpyc", то это ещё не обозначает что они работают (а не просто так занимают место на sourceforge).
а используя стандартный модуль http://docs.python.org/3/library/marshal.html -- можно прочитать байт-кодный pyc -- но толку от этого будет не сильно больше, чем например дизасемблировать C/C++-программу :-)
И всё-таки не скрывает, работают декомпиляторы. Uncompyler, во всяком случае, с Python 2.7 вполне справляется. И даже на вполне реальных текстах, а не только на "Hello, world!". Не гарантирую, что всё декомпилируется безукоризненно, но, во всяком случае, визуально код очень и очень похож на исходный. Можете проверить:
git clone https://github.com/gstarnberger/uncompyle.git
setup.py там есть, он ставит скрипт uncompiler.py.
Хотя некоторые декомпиляторы и правда только занимают место на sourceforge.
чувак, харэ лить в интернет всякую херню, иди УЧИСЬ. Хотя бы чему-нибудь. Нельзя же на каждую тему писать столько бреда.питоновский сорц транслируется в байткод почти один к одному, сравнение C <-> asm вообще близко не стоит.
> питоновский сорц транслируется в байткод почти один к одному, сравнение C
> <-> asm вообще близко не стоит.Питонисты как правило вообще ни бум-бум в структуре данных с которыми они имеют дело. То-есть, они обычно вообще не понимают как это фактически представляется. Предсказуемо разложить байтики в памяти или на диске? О, что вы, это рокетсайнс!
> Питонисты как правило вообще ни бум-бум в структуре данных с которыми они
> имеют дело. То-есть, они обычно вообще не понимают как это фактически
> представляется. Предсказуемо разложить байтики в памяти или на диске? О, что
> вы, это рокетсайнс!А зачем?
Достаточно понять логику диктов, и то, как они работают - и наступит всемирное счастье, этим можно будет пользоваться. То, что ты знаешь, как лежат в памяти данные, но не знаешь, как работают дикты (как я в детстве), не даёт тебе возможность делать простые вещи просто. И что толку от этого знания? По мне, так знать написание фразы "то есть" это гораздо более важный навык.
ps. Через pickle я могу даже знать, как эти структуры можно на стене написать, чтобы читалось. :) Шутка.
И именно поэтому я не беру в команду питонистов без знания C++. :-)
> И именно поэтому я не беру в команду питонистов без знания C++. :-)Да, вот для бейсбольной команды это действительно важно.
У Вас довольно оригинальное восприятие термина "команда" по умолчанию в контексте разработки ПО. :) Что ж, во всяком случае, это свежо.
> питонистов без знания C++. :-)это довольно странная ситуация. обычно питонисты как раз таки знают C/C++ .
хотя бы потому что Python как инструмент -- он расширяет возможности C/C++ (в Python-программе -- модули критические к производительности -- пишут на C/C++, вызывая их из Python-кода . ды и сам CPython написан на C, это важно если зохотеть поизучать его код).
а вот C/C++-программисты -- как раз не все знают как писать Python-программы :-) .
# P.S.: здесь можно вспомнить Шелдона Купера (вымышленный персонаж TBBT) который утверждает что если уж он знает как работает Теоретическая Физика (параллель: C/C++, asm, ...) , то значит он знает всё в этом мире! в том числе социально подготовлен (параллель: Python, Ruby, ...). а на практике оказывается -- что Шелдон Купер совершенно не приспособлен, и не способен сделать простую вешь простым способом.
Верно, что сиплюсплюсники обычно совершенно не умеют писать на Python, если, конечно, они не делают это регулярно. Вернее, приличные плюсплюсники начинают писать быстро и легко, но unpythonic стиль из них выбивается по полгода, а то и по году плотной работы. До этого смотреть на код глазам больно.Поверьте моему опыту, большинство питонщиков, приходящих на собеседования, знает C++ чисто номинально, на уровне простых классов, циклов и "Hello, world". И даже не всегда хорошо думает в терминах указателей. В общем, сейчас рынок вакансий сильно превышает рынок адекватных соискателей. И в последний раз ситуация была другой во время кризиса на рубеже 2008-го и 2009-го. В Питере, во всяком случае, но думаю, что не только в Питере так.
Попробуйте погуглить, скажем, слова "декомпилятор pyc". Использование .pyc может помочь только в том случае, если поставлена задача помешать простому прямому редактированию.Вообще говоря, тему .pyc можно и развить, в том числе с модификацией самого Python (что, естественно, не бином Ньютона; по правде сказать, для проекта, в контексте которого Python меня интересует, мы собираем свой Python, причём как минимум на одной из поддерживаемых платформ уже накладывам на Python патчи). При желании не так уж трудно научить его и дешифровывать модули .pyc, и проверять электронную подпись. Только расшифровать (а потом декомпилировать) модули всё равно будет можно, поскольку ключ-то будет доступен тут же. В этом смысле скомпилированный бинарный модуль может быть гораздо перспективнее.
Если хочется скрыть код, то легче интегрировать python в Си-проект. А байткод ничего не скрывает, его декомпилировать раз плюнуть.
> А байткод ничего не скрывает, его декомпилировать раз плюнуть.например, как? :)
(и да... не забываем что щаз 2013-год, если вдруг возникнет желание скопипастить совет [путём использования Интернетовской Машины Времени] из далёких времён :))
см -- #73
Это не соответствует действительности. Uncompyler вполне работоспособен. Во всяком случае, с Python 2.7 он у меня справился нормально. Про Python 3 сказать не могу, если есть желание -- проверьте сами.См. #85
> Это не соответствует действительности. Uncompyler вполне работоспособен. Во всяком случае,
> с Python 2.7 он у меня справился нормально. Про Python 3
> сказать не могу, если есть желание -- проверьте сами.
> См. #85У меня был один китайский проектик на Django под Windows с привязкой к динмаическим библиотекам, хотел перенести его под Linux ибо не гоже винду ставить, так вот все файлы в pyc, python2.6, ниодного рабочего решения для декомпиляции не нашел.
Может, давно было. Может, не повезло -- попались несколько нерабочих решений, а рабочее по случайности не попалось. А может, они чем-то обрабатывали pyc. Там в принципе можно попробовать его помучить, чтобы работоспособность байт-кода сохранилась, а конструкции Python меньше угадывались.
Скажем так: удалось декомпилировать где-то 10%.
Поиском в гугле и поиском на гитхабе владею.
Уверен что ничего не применяли.
И даже ключик -OO Питону не давали? ;-)
на опеннет в честь профессионального праздника всех наших - новая мулька? Минусы в плюсы превращаются? Откуда у меня сразу и с места +2 и +1? :)
Норм буратино написал!
оно не работает для Python 3.2 Win из-за отстутствия sys.abiflags