Найти - Пользователи
Полная версия: На чем вы пишите высоконагруженные части системы: C++ или Cython?
Начало » Python для экспертов » На чем вы пишите высоконагруженные части системы: C++ или Cython?
1 2 3
FishHook
Koala
это лучше с/c++ или да
скажут, что вам неплохо было бы научиться внятно выражать свои мысли
Koala
OK, ТЗ понятно. Вопрос: есть ли преимущества у языка Go для высоконагруженных систем перед традиционными C/C++?
doza_and
Koala
есть ли преимущества у языка
У каждого существующего языка есть какое-то преимущество. Например ваша команда программистов его знает.

вики:
“Go! — многопоточный язык программирования, …. ориентирован на безопасное программирование и распределённость приложений”

Те следует ожидать что многопоточность будет проще делать. Ну а с С повозитесь и может будет быстрее работать.

Sanya28
запускаю удобный Qt Creator
Если он такой удобный то у вас явно есть шанс доказать это, быстро найдя в нем способ отладки в вашем случае.

Я данную ИДЕ не использую. В gdb проблем не испытываю. Я думаю потыркавшись по менюшкам вы легко найдете этот способ.

Sanya28
информативность результатов очень низкая. профайлер ругается на отсутствие отладочной информации у библиотeк Python.

Ну вы легко можете поставить отладочную версию питона. Думаю правда что это вам не надо. Вы же не питон собрались профилировать. Вам просто надо научиться пользоваться вашими инструментами и фильтровать то что вам нужно.

Из проблем вижу только необходимость отладки того что вам нагенерирует cython. Ваше ядро может просто раствориться в этой массе интерфейсного кода.
py.user.next
Koala
Вопрос: есть ли преимущества у языка Go для высоконагруженных систем перед традиционными C/C++?
Ты знаешь, что у Go даже самая мелкая программка весит мегабайт? При этом на C я могу в мегабайт засунуть десяток пакетов о-о-очень полезных программ. Знаешь, при записи на какую-нибудь микросхему, где памяти нет, или даже хостинг в инете, где за каждый мегабайт просят по $100, это имеет значение. Конечно, прекрасно, что можно в программу всё включить и она не будет ни от чего зависеть. Но в нормальной среде правильно то, когда есть выбор, как тебе сделать - включать или не включать все зависимости. В Go же выбора нет.

Я бы не смешивал C и C++, так как это абсолютно разные языки по своему развитию, по своему стилю, по своим принципам оценки качества кода. Они противоположны по синтаксису: простота и компактность C и полнота и подробность в C++. В результате одна и та же программа на C занимает три строки по пять букв, а на C++ она же занимает двадцать три строки по двести букв. Так вот Go можно сравнить с C и Go можно сравнить с C++. Сравнивая Go с C++, мы видим, что в Go нет классов и исключений, нет шаблонов, нужно изощряться, чтобы писать на нём ООПшную программу (где реальное ООП, а не просто синтаксис, похожий на ООП).

Нравится изображать, что у тебя хорошая программа и что она легко читается и что вложения внутренних циклов уезжают за край экрана из-за обязательных табуляций шириной в 8 пробелов каждая и это просто циклы такие плохие - слишком высокое цикломатическое число у них? Это обман самого себя. Я же в C просто перехожу с классических четырёх пробелов на два пробела и у меня код с любой вложенностью читаем, кто бы там его ни написал (в плане цикломатического числа).
Sanya28
Я вижу такое потенциальное решение вопроса отладки кода, в котором Python вызывает С++ (с передачей данных и возвратом результата работы):
создаются Python и C++ библиотки, в которых реализована возможность читать и писать в канал (с приостановкой программы отправителя по мере наполенения буфера канала). Тогда в обеих программах можно будет импортировать эти библиотеки, настроить целевые функции для приема / отправки данных, а потом запустить программы на Python и С++.

Должно вроде взлететь. Но возможно я не знаю уже существующих более простых решений.
vic57
Sanya28
Должно вроде взлететь. Но возможно я не знаю уже существующих более простых решений.
самое простое - subprocess и не только для С/С++
 //palindrom.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int pal(unsigned long n) {
    unsigned long v = 0;
    unsigned long m = n;
    while (1) {
        v += m%10;
        m /= 10;
        if (!m) break;
        v *= 10;
    }
    if (n == v) return 1;
    return 0;
}
int main(int argc, char** argv) {
    unsigned long start,stop;
    start = atol(argv[1]);
    stop = atol(argv[2]);
    for (unsigned long i = start; i < stop; i ++) {
        if (pal(i)) fprintf(stdout, "%lu ",i);
    }
    fprintf(stdout,"\n");
  return 0;
}
 gcc -Wall -O2 palindrom.c -o palindrom
 from subprocess import run, PIPE
from time import time
cmd = './palindrom 100 1000000'.split()
t0 = time()
p = run(cmd,stderr=PIPE,stdout=PIPE)
out = p.stdout.decode().split()
print(time() - t0,len(out))
вычисляет числа-палиндромы
doza_and
Sanya28
потенциальное решение вопроса отладки кода
Уважаемый, вам же написали что для отладки вам надо просто прочитать документацию по вашему инструменту отладки. Зачем же вы изобретаете желтого бегемота?
Sanya28
doza_and
Уважаемый, вам же написали что для отладки вам надо просто прочитать документацию по вашему инструменту отладки. Зачем же вы изобретаете желтого бегемота?

Ваше первое сообщение было настолько непрофессионально, что я решил на него никак не реагировать. Пожалуйста, больше не пишите в этой теме.
py.user.next
Sanya28
Я вижу такое потенциальное решение вопроса отладки кода
А что ты делаешь в отладчике всё время? Почему просто не покроешь код юнит-тестами?
Sanya28
py.user.next
А что ты делаешь в отладчике всё время? Почему просто не покроешь код юнит-тестами?

Как юнит- тесты помогут запустить отладку двух- уровневой системы кода?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB