• Apple уведомила владельцев iPhone 5, чтобы они срочно обновили iOS или их устройства будут лишены части функций
    +2
    Однако, данная проблема все еще может затронуть совсем незначительное количество пользователей iPhone 5. По данным Apple, по состоянию на 15 октября 2019 года, только на девяти процентах работающих устройствах установлены iOS ниже двенадцатой версии.

    Есть проблемка: для iPhone 5 последняя поддерживаемая версия iOS 10.3.4. Так что эта проблема затронет не «незначительное количество пользователей iPhone 5», а всех пользователей iPhone 5.

  • PHP, почём абстракции для народа?
    0
    В качестве входного файла по традиции возьмём php-src/Zend/zend_vm_execute.h на ~70 тысяч строк.

    Сделайте пожалуйста ссылкой, чтобы можно было проверить у себя.

  • Cython: более чем 30-кратное ускорение Python-кода
    +13

    Разгадка, если кому интересно.


    В оригинальном посте на Медиуме была ошибка, из-за которой результат функции всегда был ноль!


    def test(x):
        y = 1
        for i in range(x):
            y *= i
        return y

    Замеры были сделаны именно для этой версии, и тут нет длинной арифметики.


    Автор оригинального поста решил не париться и убрал неверный код и результаты, оставив голословные утверждения о 36-кратном приросте производительности непонятно чего и упоминание некой таблицы, которой в посте нет:


    Check out the table below which shows how much speed Cython gave us for different factorial values. We got over 36X speedup with Cython!

    Авторы же перевода видимо захотели исправить код, получили работающую в тысячи раз медленнее версию на питоне и неверно работающую версию на Cython.

  • Cython: более чем 30-кратное ускорение Python-кода
    +2

    Если вы имели в виду, что результат должен быть типа double (то есть y = 1.0), то результат будет бесконечность уже для test(171).

  • Cython: более чем 30-кратное ускорение Python-кода
    +24

    Боже, что вы намерили? Результат функции test(100000) — это число с 456574 знаками. Не число 456574, а число с 456574 знаками.


    $ ipython
    Python 3.7.3 (default, Apr  3 2019, 19:16:38) 
    Type 'copyright', 'credits' or 'license' for more information
    IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: def test(x): 
       ...:     y = 1 
       ...:     for i in range(1, x+1): 
       ...:         y *= i 
       ...:     return y 
       ...:                                                                                                                         
    
    In [2]: %time a = test(100000)                                                                                                  
    CPU times: user 1.76 s, sys: 3.57 ms, total: 1.76 s
    Wall time: 1.76 s
    
    In [3]: len(str(a))                                                                                                             
    Out[3]: 456574

    Время работы от увеличения количество итераций должно расти явно не линейно, так как длина арифметики тоже увеличивается. Каким образом у вас это заняло 2 миллисекунды?


    А в Cython тип int — это 32-bit signed integer: https://nyu-cds.github.io/python-cython/01-syntax/
    Соответственно результат работы функции на Cython просто неверный.

  • Размер директорий не стоит наших усилий
    0

    Если создавать не из баша, а хотя бы из питона, то создается за ≈30 секунд, удаляется за ≈17. ext4

  • Как выбрать случайное число от 1 до 10
    0

    Выше я привел код и результат

  • Как выбрать случайное число от 1 до 10
    +1

    Недостаток вашего метода в том, что нужно знать веса случайного распределения. А как насчет примитивной реализации, которая не требует такого знания?


    from random import random
    
    def sample1():
        s = random() ** 2
        return int(s * 10)
    
    def sampleN(n=10):
        return sum(sample1() for _ in range(n)) % 10

    Результат, мне кажется, более чем удовлетворительный:


    >>> from collections import Counter
    >>> Counter(sample1() for _ in range(10000))
    Counter({0: 3250,
             1: 1258,
             2: 989,
             3: 832,
             4: 753,
             5: 676,
             6: 656,
             7: 564,
             8: 520,
             9: 502})
    
    >>> Counter(sampleN() for _ in range(10000))
    Counter({0: 984,
             1: 1067,
             2: 1037,
             3: 997,
             4: 957,
             5: 979,
             6: 1030,
             7: 979,
             8: 993,
             9: 977})
  • 5 распространенных ошибок начинающих программистов на Python
    0

    Испания?

  • 5 распространенных ошибок начинающих программистов на Python
    0

    Язык, который «плюётся ошибкой» на правильный, но делающий не то что вам нужно код — пока что недостижимый уровнь.

  • 5 распространенных ошибок начинающих программистов на Python
    0
    WTF?! Почему я могу достучаться до переменной i вне блока, её объявившего?

    Ну потому что цикл не создает никакого «блока», где объявляются переменны (в отличие от def или class).


    for i in range(10):
        a = 2
    print(a)
  • Действительно ли Python GIL уже мертв?
    +1
    Время запуска CPython даже без no-site составляет 100-200 мс (загляните на https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b, чтобы узнать больше).

    Но в стать время запуска в зависимости от версии от 18 до 35 мс. И это не «даже без no-site», а просто «без no-site», потому что с no-site еще значительно быстрее:


    $ time python3.7 -S -c ""
    real    0m0.012s
    
    $ time python2.7 -S -c ""
    real    0m0.007s

    И вообще не понятно, при чем тут время запуска интерпретатора, если мультипроцессинг запускается форком.

  • Нужно ли чистить строки в JavaScript?
    +3

    Нельзя:


    > [" string ", ''].join(" ").trim();
    < "string"
  • Реализация целого типа в CPython
    +3
    во второй версии языка был отдельный тип «обычных» целых, которые могли переполняться

    Не могли. При переполнении int становился long.

  • Мегафон провел техническое обновление… названия сети
    +2

    Спасибо большое за скриншот

  • LLVM с точки зрения Go
    0
    Соответственно нельзя скомпилировать код с INT64 на платформу, где его нет

    Конечно же можно, если платформа является Тьюринг-полной (все платформы являются).


    Возможно LLVM не умеет компилировать LLVM IR-код с INT64 на платформу, где его нет. Но это ограничение LLVM, а не кода и не есть признак платформозависимого кода.


    Просто автор не понимает, что значат термины.

  • LLVM с точки зрения Go
    0
    Решение о представлении типа Go int принимается при создании LLVM IR-кода. Это — одна из многих причин того, что LLVM IR-код не является, как многие думают, платформенно-независимым.

    Тут у меня мозг немного сломался. В LLVM IR как раз у всех переменных тип проставлен явно: i64. i64 останется i64 вне зависимости от платформы. То есть полученный код как раз является платформонезависимым (как минимум по этому вопросу), в отличие от int в Go, который, как утверждается, будет зависеть от платформы.


    Такой код, созданный для одной платформы, нельзя просто взять и скомпилировать для другой платформы

    Конечно же можно, если платформа является Тьюринг-полной.

  • Интро Newton Protocol: что можно уместить в 4 килобайта
    0

    Объясните пожалуйста, как можно посмотреть это вживую в браузере?


    На странице работы нет ссылки посмотреть, есть только скачать. Локально не запускается из-за ограничений безопасности. Залил на хост:
    https://ucarecdn.com/160c5fb6-23c4-4422-bd7a-c2d456e1a890/hbc00017newton_protocol.html


    Все равно ни в одном браузере не запускается, везде разные ошибки после небольшой прогрузки.

  • Чётные числа Фибоначчи
    –1
    Вот сейчас сижу и думаю, наверное все-таки из-за Фибоначчи пролетел

    Я так и не понял, почему. Если задача действительно стояла так, как описано в письме (выбрать все четные числа Фибоначчи в диапазоне от 1 до 10000), то решение пишется за две минуты:


    def fib():
        a, b = 1, 1
        yield a
        while True:
            yield b
            a, b = b, a + b
    
    def even_fib(n=10000):
        for i in fib():
            if i > n:
                return
            if i % 2 == 0:
                yield i

    И именно такое решени, написанное за две минуты, является верным и самым подходящим, потому что корректно решает задачу минимальными ресурсами. И даже выполняется за смешное время:


    In [3]: %time list(even_fib())
    Wall time: 15.7 µs
    Out[3]: [2, 8, 34, 144, 610, 2584]

    Даже для больши́х значений:


    In [5]: %time list(even_fib(10**30))
    Wall time: 54.8 µs
    Out[5]: [2, 8, 34, 144, 610, 2584, 10946, 46368, 196418, 832040, 3524578, 14930352, 63245986, 267914296, 1134903170, 4807526976, 20365011074, 86267571272, 365435296162, 1548008755920, 6557470319842, 27777890035288, 117669030460994, 498454011879264, 2111485077978050, 8944394323791464, 37889062373143906, 160500643816367088, 679891637638612258, 2880067194370816120, 12200160415121876738, 51680708854858323072, 218922995834555169026, 927372692193078999176, 3928413764606871165730, 16641027750620563662096, 70492524767089125814114, 298611126818977066918552, 1264937032042997393488322, 5358359254990966640871840, 22698374052006863956975682, 96151855463018422468774568, 407305795904080553832073954, 1725375039079340637797070384, 7308805952221443105020355490, 30960598847965113057878492344, 131151201344081895336534324866, 555565404224292694404015791808]

    Без дополнительных условий, любые исследования и попытки оптимизировать — бесполезная трата рабочего времени.


    Что конечно не уменьшет интересность статьи, если отойти от просто решения тестового задания.

  • Мы включили TLS 1.3. Почему вам стоит сделать то же самое
    0

    А где и сколько хранится эта кука на сервере?

  • Нужно ли чистить строки в JavaScript?
    +1
    Как вся фигня, к которой нет доступа в строках, помещается в строку?

    Ну подождите, а как в строку помещается вся фигня, к которой есть доступ в строках? Вы это понимаете? Там не скрытое что?


    Как вся фигня, к которой нет доступа в функциях, помещается в функцию, понятно: скрытый объект.

    Удивительно, что вам это понятно. Там же объект! А какой у него класс? Какие методы? Время жизни? Ваше объяснение, которе вас удовлетворяет для функций, на самом деле не объясняет вообще ничего, о том, как это устроено. Но почему-то точно такое же объяснение для строк (там скрытая ссылка на родительский объект) вас вдруг ставит в тупик.

  • Нужно ли чистить строки в JavaScript?
    +1
    Я ответил, что "так не бывает"

    Вы живете в каком-то выдуманном мире. Вам объясняют, как это устроено, вы отвечаете «так не бывает». Ваше дело, конечно.

  • Нужно ли чистить строки в JavaScript?
    +2

    Еще раз, вы путаете спецификацию (интерфейс) и реализацию. Спецификация описывает, как должен себя вести тот или иной объект, а не как он должен быть устроен. Указанное требование «ordered sequence of zero or more …» никак не нарушается данной реализацией.

  • Шейдерный эффект дудла
    +8
    Для воссоздания эффекта дудла нам сначала нужно понять, как он работает и какие техники в нём применяются.

    Все-таки кажется, что для воссоздания эффекта дудла сначала нужно объяснить, что это вообще такое.

  • Нужно ли чистить строки в JavaScript?
    +2

    Проверил на node v8.10.0 и результат отличается в зависимости от содержимого строки.


    Если строка состоит из ASCII символов, то кодирование в utf8 и utf16 занимает примерно одно время:


    > str = "w".repeat(15).repeat(1024);
    
    > start = new Date(); for(var i = 0; i < 10000; i++) { Buffer.from(str, 'utf8').toString('utf8') }; (new Date() - start)
    319
    
    > start = new Date(); for(var i = 0; i < 10000; i++) { Buffer.from(str, 'utf16le').toString('utf16le') }; (new Date() - start)
    330

    Но если диапазон значений шире, то utf8 замедляется в 8 раз, а utf16 ускоряется в три. В результате utf16 быстрее в 26 раз.


    > str = "ш".repeat(15).repeat(1024);
    
    > start = new Date(); for(var i = 0; i < 10000; i++) { Buffer.from(str, 'utf8').toString('utf8') }; (new Date() - start)
    2615
    
    > start = new Date(); for(var i = 0; i < 10000; i++) { Buffer.from(str, 'utf16le').toString('utf16le') }; (new Date() - start)
    101

    Очевидно, что в V8 внутреннее представление строки меняется в зависимости от его содержимого. В общем случае utf16 предпочтительнее.

  • Нужно ли чистить строки в JavaScript?
    –1

    То есть запишем в удачное решение?

  • Нужно ли чистить строки в JavaScript?
    –1

    Глобальность любых переменных по умолчанию?

  • Нужно ли чистить строки в JavaScript?
    0

    ascii не может быть кодировкой для произвольной строки, только для специфических строк. Диапазон ascii 128 значений, диапазон внутреннего представления строк в JS — 65 тысяч.

  • Нужно ли чистить строки в JavaScript?
    0

    А попробуйте еще для верности UTF-16. Это внутреннее представление строк в JS (обязательное условие, прописанное в спеке) и возможно будет сильно быстрее.

  • Нужно ли чистить строки в JavaScript?
    +2
    Здесь:

    Вы очень своеобразно интерпретируете свой вопрос и этот ответ. Вас заверяют, что «ссылка не хранится в привязанном объекте типа [[Scope]] для функции», но вы почему-то прочитали это как «такого скоупа у строки нет». Одно с другим логически никак не связано.


    А где именно?

    А что вы рассчитываете получить в ответ? Описание структуры на Си? Ну посмотрите в исходниках движка. Какая разница как, сути это не меняет: строка small содержит внутри себя ссылку на строку huge.


    Знаю только, как устроена строка по спеке.

    Вы путаете описание интерфейса (спека) с тем, как устроено внутри (реализация).

  • Нужно ли чистить строки в JavaScript?
    +2
    Но меня заверяют, что такого скоупа у строки нет

    Помилуйте, где вас в чем-то подобном заверяют?


    а ссылка вдруг где-то есть. Мол, "в самой строке"

    Но так и есть.


    Хотя строка — это иммутабельный инстанс типа String в виде массива байтов со списочным доступом к каждому. В нём технически не может быть никакой ссылки.

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

  • Нужно ли чистить строки в JavaScript?
    +4

    Нет, так написать вы не можете. То, что ссылка остается, не означает, что она доступна где-то из пользовательского кода. Точно так же недоступны ссылки на дефолтные аргументы и локальные константы функций, на переменные замыканий, на много чего еще, но они все равно есть.

  • Нужно ли чистить строки в JavaScript?
    +2

    Исходные строки по 15 мегабайт создаются хоть в FF, хоть в Хроме. Разница в том, что в FF они как и любые созданные объекты, освобождаются, когда приходит сборщик мусора (но не раньше, поэтому успевают накопиться 200-250мб), а в Хроме нет, потому что на них остаются формально живые ссылки.


    Если в будете использовать в FF clearString(), это никак не поможет, потому что исходные строки по 15 мегабайт все еще будут создаваться.

  • PHP GR8: повысит ли JIT производительность PHP 8
    –3
    привык к строгости Java/C#/PHP, где один файл — один класс

    Не могу перестать удивляться с вашего комментария. В приведенном вами в пример файле ровно один класс.


    Но вы не задумывались отчего в PHP (про остальные не скажу) такая строгость (один файл — один класс)? Она там далеко не от излишнего удобства. Просто в PHP есть такое понятие, как автолоад. Если класс не будет лежать в строго определенном месте, он просто не будет найден.


    В питоне такой проблемы нет, код может быть организован так, как удобно разработчику. А благодаря импортам в родительские модули, может быть доступен из мест, более удобных для пользователя.

  • PHP GR8: повысит ли JIT производительность PHP 8
    0

    Что такое «попахивает магическими константами»? Там либо есть магические константы, либо нет. В данном случае я ничего такого не вижу. Если вам «попахивает магическими константами», возможно это где-то рядом с вами чем-то пахнет.

  • PHP GR8: повысит ли JIT производительность PHP 8
    0

    «Нет, с ним всё в порядке, проблем никаких, делает то, что нужно, неудобств не доставляет. Но всё равно плохой.»


    Так и скажите, что не нравится, но ещё не придумали, почему.

  • PHP GR8: повысит ли JIT производительность PHP 8
    0

    Так вроде кричите

  • PHP GR8: повысит ли JIT производительность PHP 8
    0
    засирания глобального пространства процедурками в Django

    Что? В Питоне нет глобального пространства имен, все имена в модулях.

  • Ускоряем JavaScript-код с использованием типа данных Set
    +8
    то может быть и ключ/значение

    Нет не может. Set не позволяет получить значения по ключу, а именно это и имеется в виду под key-value хранилище.

  • Настало ли время для URL, содержащих эмодзи?
    0

    Заголовок: «настало ли время для URL», по факту разговор только про домены. Нехорошо обманывать