• Для чего вообще существует ассемблер?

    mikhanoid
    @mikhanoid
    1. Нужно текстовое представление машинного кода, чтобы с ним можно было удобно работать, а не править битики в hexdump-ах.

    2. Если вам надо писать прям очень оптимизированный код, вы будете делать это на intrinsic-конструкциях в Си или Си++, но это почти тот же ассемблер с щепоткой синтаксического сахара.

    3. Хоть и считается, что у Си или Rust нет никакого runtime, но он там есть, как минимум, нужно настроить стеки, вектора прерываний и всякое такое прочее, машинно зависимое. И это придётся писать на ассемблере.

    4. В компиляторах и процессорах бывают баги. И чтобы понять, в чём они заключаются, нужно текстовое представление машинного кода.

    Как минимум, для всего этого ассемблер нужен.
    Ответ написан
  • Почему квадрантовое дерево медленнее брутфорса?

    mikhanoid
    @mikhanoid
    Возможно, время пожирается рекурсией. Вы множество раз пересобираете массив found из кусочков. Это можно полечить, если found сделать параметром-аккумулятором в рекурсии.
    Ответ написан
  • Существует ли статически типизированный гомоиконный язык программирования?

    mikhanoid
    @mikhanoid
    Компилятор или интерпретатор любого языка представляет код, как данные, в процессе обработки. Но не всегда эти данные доступны программисту для свободной работы с ними. Гомоиконность означает всего лишь то, что код и данные "выглядят" одинаково. Поэтому, вопрос: вам для чего гомоиконность?

    Если, чтобы была, тогда надо смотреть на языки семейства Lisp. Если для практических каких-то целей, вроде написания макросов, то можно смотреть на Rust, Haskell или Scala, в которых такие возможности есть в некотором виде, или на любой другой язык программирования и думать, как вытащить представление кода на этапе компиляции для программиста. Не такая простая задача для классического статически типизированного языка, потому что надо как-то убеждаться, что преобразования кода не сломают типы.

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

    Julia примерно так и устроен. Компилятор является частью среды исполнения, поэтому сложно сказать, статическая типизация у Julia или нет. В любом случае, скомпилированный код работает быстро, порой даже быстрее аналогичного кода на Си.

    Typed Racket сделан поверх Racket, как набор макросов, и система типов там не обычная, а occurence typing - намного более сложная штука, чем традиционные системы статической типизации. Есть ещё Typed Clojure, сделанный по мотивам Typed Scheme, которая тоже из этой категории.

    Наконец, есть относительно сырой, но относительно работоспособный Lisp со статической типизацией: carp-lang. В котором тоже приходится, фактически, иметь два языка: динамический язык для работы с макросами, и статический основной язык. Выглядят они одинаково, но семантика разная.

    Может быть, Вы что-нибудь придумаете на этот счёт. Удачи в изысканиях!
    Ответ написан
  • Датите мысль как упростить код магазина?

    mikhanoid
    @mikhanoid
    Коллекцию из персонажей сделать: массив, список, хэш, ..?
    Ответ написан
  • Посоветуйте читалку с E-ink дисплеем

    mikhanoid
    @mikhanoid
    У меня Pocketbook 301, таскаю его с собой везде, корпус уже изрядно поистёрся, бывал он у меня и при -30 градусах. Возраст устройства — 2 года. И ничего, экран живой ещё. Правда опять же, не садился непосредственно на книжку. Но опирался на неё локтями несколько раз, забыв, что она у меня в сумке лежит. Такой вот опыт. Лично у меня Pocketbook'и вызывают доверие.
    Ответ написан
  • Linux, OpenMP и GCC: многопоточная программа в 5-6 раз медленнее однопоточной?

    mikhanoid
    @mikhanoid
    Так у вас же там стоит atomic перед k++. На каждой итерации нити будут синхронизовываться, чтобы друг за дружкой сделать k++. Естественно, оно будет сильно медленней.
    Ответ написан
  • Вы видели где-нибудь использование кириллических доменов?

    mikhanoid
    @mikhanoid
    Навалом. Только выглядят они весьма глупо, потому что, софт-то не кирилизованный: инновационныйцентр.рф/node/add/project — типа такого… Эх. Дурошлёпство.
    Ответ написан
  • Как бороться (найти и уничтожить) с руткитом на Linux-сервере (в моём случае, Ubuntu Server)?

    mikhanoid
    @mikhanoid
    Надо бы ещё настроить SSH, если по уму: отключите протокол версии 1, отключите вход для root, отключите авторизацию по паролю и оставьте только по ключам. Займитесь настройкой прав доступа: уберите всех пользователей из группы wheel (в идеале, вообще оставьте каждого пользователя в своей группе), удалите sudo.

    Посмотреть за rootkit'ом, если он в ядро не пролез, можно при помощи утилиты lsof — в Linux сложно скрыть работу с какими-нибудь файлами, ищите всякие записи, вроде (deleted), может и повезёт. Но если взломщик получил root'а, то он, скорее всего засунул модуль в ядро, который способен скрываться, что достаточно просто и студенты делают за месяц, как бы, мощь Linux тут против него играет. От этого Вас спасёт только переустановка. И берегите root в дальнейшем, как зеницу ока.
    Ответ написан
  • Процессоры: Частоты. HyperThreading?

    mikhanoid
    @mikhanoid
    Лучше смотреть совсем на другие характеристики. Лучше не на частоту ориентироваться и количество ядер, а на пропускную способность памяти, объём кэша, всё такое. У вас серверы друг от друга не зависят, поэтому, например, два двухъядерных процессора с QPI были бы эффективнее одного четырёхядерного.

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

    Поэтому, действительно лучше купить ещё один процессор, появиться дополнительный кэш и дополнительная полоса доступа к памяти.
    Ответ написан
  • Работа в терминале (linux ssh) через плохой интернет

    mikhanoid
    @mikhanoid
    Можно попробовать отказаться от mc. Bash и readline — вполне комфортная среда для работы. И требуют гораздо меньше пропускной способности от канала. Плюс в итоге, можно проникнуться джедайским духом, и вообще работать без постоянного ssh-соединения, запуская нужные команды как-то так: ssh abcd.xyz find /dev -iname '*tty*' | (grep 12 && echo BINGO).
    Ответ написан
  • Хабр скукожился

    mikhanoid
    @mikhanoid
    Да. Читать стало удобнее — однозначно. Просто поля сделать — будет супер (читаю на 1600x...).
    Ответ написан
  • Художественная литература. Что Вы читаете?

    mikhanoid
    @mikhanoid
    А я читаю Модель для Сборки: слушаю очередной случайный рассказ из собрания записей передачи, если нравится, то иду искать книги этого автора. Так открыл для себя Паоло Бачигалупи и Пола ди Филиппо — шикарные, imho, современные философские фантасты. Руди Рюкер, Александр Тюрин, Хорхе Луис Борхес, Леонид Каганов — про них тоже из МДС узнал. Так что, Владу Коппу и DJ Инкогнито — великий, могучий, публичный respect.
    Ответ написан
  • Математика для программиста

    mikhanoid
    @mikhanoid
    Зависит, от того, чем Вы занимаетесь. Намример, в системном программировании нужна матлогика, теория информации и алгоритмов, теория вероятности, алгоритмы от Кнута, теория чисел. Если распознавание образов, то теория вероятности, функциональный анализ вещественный и комплексный. Если символьное исчисление, то алгебра, теория представлений. В общем, от места приложения Ваших талантов зависит. Если моделирование, то численные методы.

    Общего знаменателя тут особо и нет, наверное. Хотя, по опыту, теория вероятностей и теория информации всегда полезны, ну и базовые алгоритмы из книжки Винера 'Алгоритмы и структуры данных'.
    Ответ написан
  • Именование переменных: "removeSmth" vs "deleteSmth"?

    mikhanoid
    @mikhanoid
    IMHO, вообще, если мы посмотрим на привязки английских слов к английским, а русских к русским, то разницу увидим. Удалять — это не уничтожать, не освобождать, не разрушать. В русском удалять — это удалять, отодвигать далеко. Remove, в принципе, немного соответствует слову удалять. Потому что есть такие термины removable media, или ещё что-то. Но тут нет оттенка: разрушаемый носитель. Он именно удаляемый, вынимаемый всё такое.

    Так что, remove и удалить — это нечто вроде 'убрать с глаз долой'. Поэтому, как бы и команда rm в UNIX — это же не стирание файла, а стирание ссылки на него из директории, типа — не хочу тебя видеть.

    Delete — это другое. Это некая противоположность к let. И как раз носит смысл: разрушить, то что возникло, или стереть с доски, вычеркнуть из текста. Всё такое.

    Опять же find и search они тоже не переводятся, как поиск, если искать смысловые привязки в английском. search — это нечто связанное с изучением, потому что research, или там научный поиск, или поиск решения. Это нечто такое, продолжающееся, не обязательно с нужным результатом. А find (второе значение основать) это нечто такое, связанное с получением результата, с обретением чего-то такого.

    Вот. Можете поприменять это к программам. Мой опыт: не использую remove и delete. Использую такие выражения: form и drop. Первое от сформировать, что более соответсвует по смыслу созданию объекта в памяти, a drop — это выбросить, тоже вполне понятно, без всяких там тонкостей, да и смыслу более соответствует. Когда мы избавляемся от объекта в программе, то мы же не стираем его, не разрушаем память, в которой он находится, мы как бы просто забываем о нём, выбрасываем ссылку. Да и писать короче и ровнее: )

    formSmth
    dropSmth

    Ну. И в программах и в своих структурах данных я всегда делаю find в структурах данных, а search — это скорее как существительное, и прилагательное, когда надо назвать нечто поисковое: searchbot или там linesearch (при распознавании образов).
    Ответ написан
  • Мат. алгоритм: патентование, вопрос авторства?

    mikhanoid
    @mikhanoid
    Вообще, патентование не запрещено, если я правильно понимаю ГК-4. Но, разрешено патентовать только, вроде, какие-нибудь инженерные макеты. То есть, алгоритм просто не подпадает в категорию того, что можно запатентовать. И это правильно. Потому что, через полгода, кто-нибудь другой догадается до этого алгоритма, и нельзя ему запрещать это делать.

    Если Вам нужно признание авторства — просто публикуйтесь. В плагиате (или в незнании related works) потом всегда можно будет супостата уличить, сославшись на соответствующую статью.
    Ответ написан