• Зависит ли оптимизация программ от языков программирования?

    @Zanak
    Давайте по порядку:
    1. Что такое оптимизация программы?
    Есть такое понятие, как алгоритмическая оптимизация. В простых случаях - это, например, вынос присваивания неизменяемого в цикле значения за его рамки, сохранение промежуточных результатов вычислений, при обработке сложного выражения, развертывание цикла, да и много чего еще, что умеют делать современные компилеры с исходниками. Другое дело, что это, в той или иной мере стараются делать все языки, и скриптовые, и компилируемые, ну, может быть кроме асма, там что напишеш, то и получешь, на сколько мне известно.
    Кроме оптимизации алгоритмической, есть еще оптимизация под целевую платформу. Компилируемые в нативный код процессора языки стараются эту оптимизацию делать, но, на сколько глубоко, скорее всего зависит от конкретного языка. Например Цэ может вылизать каждый байт результата компиляции, а Go приходится помнить и про сборщик мусора, и про планировщик горутин, кроме собственно оптимизации целевого кода. Для скриптовых языков об этой оптимизации можно говорить только в случае поддержки ими jit компиляции, что есть не у всех из них.
    2. Деление на высокоуровневые и низкоуровневые языки достаточно условно.
    Первй критерий, который припоминается - это возможность работы с железом напрямую. Во времена DOS это были асм и цэ, хотя, смутно припоминается, что и паскаль и даже бейсик позволяли скинуть значение в порт или прочитать его. Сейчас, в большинстве случаев, ОС работает в защищенном режиме, и пользовательское приложение прямого доступа к железу не имеет. Особняком стоят языки, которые умеют порождать код, стартующий на голом железе, и здесь кроме асма и це можно, к примеру, вспомнить про erlang, который, хоть и скриптовой, но вроде как умеет стартовать без присутствия ОС, ну или новомодный раст, тоже достойный вариант для рассмотреия.
    3. Отличия между языками - это прежде всего по задачам, для которых они предназначены. Например, большинство языков имеет ограниченную точность математики, и для проведения высокоточных расчетов приходится привлекать внешние библиотеки, но есть фортран, который изначально создавался для проведения расчетов, и он прекрасно справляется с этим сам. Другой пример, на асме можно написать текстовый редактор, только это будет долго по времени, в отличии, того же Цэ с плюсами, но если речь зайдет про отладчик программ, то здесь без асма ни как. Ну и на последок, Lua, который популярен у разработчиков игр как встраиваемый в платформу язык, благодаря своей достаточной скорости при небольшом размере среды исполнения.

    Про джаву ни чего сказать не могу, потому как знаком с ней только по продукции jetbrains и на примере эклипса или нетбинса.
    Ответ написан
    Комментировать
  • Материал для изучения сервер-клиент?

    @Zanak
    Я бы начал изучение разработки для сети с изучения C/C++ в качестве языка. Rust, на мой взгляд, для людей, которые уже попробовали это на других языках. Да и уровень входа, для освоения какого нибудь tokio способен напрочь убить и желание вести разработку для сети, и интерес к самому языку, если адепт сильно начинающий. Познакомится с Go можно, но много чего в нем реализованно из коробки, и мотивации лезть под капот не всем хватает.
    Далее стоит посмотреть на устройство tcp/ip в часности, и модель OSI в целом. На практике освоить api для работы с tcp соединениями и udp датаграммами. Здесь замечательная книжка Стивенса "Unix: разработка сетевых приложений" вам в помощ.
    Далее можно, в качестве тренировки, реализовать собственный протокол взаимодействия, используя tcp или udp в качестве транспорта. Protobuf можно попробовать, но после полноценной попытки запилить свой прикладной протокол руками, правда это чисто мое мнение, которого вы придерживаться совсем не обязаны. :)
    Далее можно пристальнее посмотреть на тему специфики выбранной вами платформы и инструментов.
    И только теперь можно взглянуть на другие языки. :)

    Примерно такой план изучения данной темы я бы вам посоветовал. :)
    Ответ написан
    Комментировать
  • Особенности рантайма (любой язык)?

    @Zanak
    1. Ответ на ваш вопрос специфичен для конкретного языка. Например Цэ, на сколько я знаю, не несет дополнительного оверхеада во время выполнения, в то время как golang имеет свой рантайм, что связано с управлением памятью и поддержкой специфичных для языка возможностей. У скриптовых языков рантайм еще более тяжел, и потому они они дольше стартуют, даже если далее подключается jit компиляция и полезная нагрузка исполняется бодро.
    2 + 3. В подавляющем большинстве ответ нет, заменить загруженную в память программу нельзя. Erlang вроде как умеет штатно, но и там это высший пилотаж.
    Ответ написан
    Комментировать
  • Как использовать "requests" рядом с "grequests"?

    @Zanak
    Обернуть отправку асинхронного запроса в функцию, если этого не сделано, и импортировать grequests локально, внутри функции.
    Ответ написан
    Комментировать
  • Как на python сделать таймер?

    @Zanak
    Еще можно как - то так:
    import signal, os
    
    def handler(signum, frame):
        print 'Signal handler called with signal', signum
        exit()
    
    signal.signal(signal.SIGALRM, handler)
    signal.alarm(5)
    
    for i in range(0, 1000000):
        print "i: %s\n" % (i)
    Ответ написан
    Комментировать
  • Библиотека aiohttp. Параллельность обработки запросов возможна?

    @Zanak
    Параллельность не есть асинхронность.
    Паралельное исполнение заданий подразумевает, что они исполняются одновременно, ну, почти одновременно.
    Асинхронное выполнение - это выполнение, при котором процессор может поработать над другой задачей, пока текущая ожидает завершения долгой операции, типа передачи по сети, ну или работы с диском, например.
    aiohttp асинхронный фреймворк, или я что-то упустил?
    Ответ написан
    Комментировать
  • Как выбрать протокол для API?

    @Zanak
    По поводу json есть и стандарт, я про https://ru.wikipedia.org/wiki/JSON-RPC. Возможно и не один, просто этот вспомнился первым.
    Ответ написан
    Комментировать