• Объясните мне на пальцах рекурсию Фибоначчи F(4, например). Это самый простой алгоритм, а я не могу понять. Что мне делать?

    @vadimr
    Вы хотите понять рекурсию, или как её обрабатывает процессор компьютера? Это разные вещи. В отладчике вы видите второе, фактически проекцию рекурсии на машинный язык, где рекурсия превращается в циклический алгоритм с использованием стека. На данном начальном этапе вы сами себя запутываете отладчиком.
    Ответ написан
    Комментировать
  • Почему у root нет Корзины (Trash)?

    @vadimr
    Потому что root, как и другие служебные учётные записи Darwin, не является пользователем macOS. А Корзина – это объект macOS, как пользовательской среды, а не Darwin (Unix).
    Ответ написан
    Комментировать
  • Как сделать кастомную раскладку языка на MacOS?

    @vadimr
    Есть программа Ukelele, позволяющая самостоятельно создавать раскладки.
    Ответ написан
    Комментировать
  • Как виртуальные машины исполняют код и как правильно это реализовать?

    @vadimr
    Ну это нормальный известный вариант – хранить представление кода в тетрадах. В основном, правда, так делают в компиляторах на промежуточном этапе, а не в виртуальных машинах, так как трёхадресная структура команды приводит к лишним издержкам на декодирование и обращение к оперативной памяти. Но для демонстрации технологии потянет. Вы же не собираетесь, наверное, ставить рекорды производительности.

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


    Это размещение в памяти типа controlled, практиковалось в качестве возможного варианта в языке PL/I.
    Ответ написан
    1 комментарий
  • Почему процессоры gpu не любят разветвлений в программе?

    @vadimr
    Процессор GPU выполняет так называемую векторно-конвейерную обработку. Это означает, что у него имеется набор конвейеров для векторов, то есть связанных между собой функциональных узлов, которые по очереди совершают однотипные операции над элементами массивов. Представьте себе конвейер на автомобильном заводе – на первом рабочем месте на шасси привинтили двигатель, потом конвейер подвинулся, стали там же прикручивать двигатель на следующее шасси, а на первое шасси в это время на втором рабочем месте устанавливают коробку передач, и т.д. Так же и в векторно-конвейерном процессоре. Он построен на том, что на каждом этапе конвейера выполняются одинаковые операции над разными элементами вектора. Компилятор разворачивает операции с массивами или простой цикл в такую конвейерную обработку. А если там будут условные операторы, всё сломается. Получится, что рабочий иногда должен монтировать двигатель, а иногда клетку с хомячком вместо него. Разброд и шатания, тем более, что эти операции могут быть разными по продолжительности. Конвейер так не работает. Поэтому условная операция будет вызывать очень длительную перенастройку контейнера на новую последовательность операций обработки.
    Ответ написан
    4 комментария
  • Почему архиваторы не эффективно сжимают одинаковые файлы?

    @vadimr
    Как архиватор поймёт, что это одинаковые куски? Ему нужно для этого проанализировать все частичные совпадения вплоть до 1.8 гигабайт, что совершенно неэффективно. Словарь для элементов такого размера построить не представляется возможным.

    Если бы вы не обладали воспоминанием, как именно вы создали этот тар, вы бы тоже ни в жизнь не заметили, что он состоит из двух одинаковых половин.
    Ответ написан
    Комментировать