Имбирь - твой спиритический овощ. Войти !bnw Сегодня Клубы
УНЯНЯ. У нас есть немножечко инфы об этом пользователе. Мы знаем, что он понаписал, порекомендовал и даже и то и другое сразу. А ещё у нас есть RSS.
Теги: Клубы:

http://ache.vniz.net/demos.html охуительная история:

Своеобразный программисткий подвиг совершил Дима Бурков. В то время начали появляться первые PC. Unix на них выглядел неубедительно. Linux еще не появился, зато повился Venix. Хачить его было невозможно - не было исходных текстов ядра. Дима Бурков реассемблировал ядро, потом писал программы на Си, которые давали тот же текст ассемблера - так появились тексты ядра на Си ... работа не для слабонервных.

#FBAN47 (0) / @j123123 / 4058 дней назад

Проверял GCC на предмет того, как он умеет рекурсию оптимизировать.
Вот такая штука

unsigned int plus(unsigned int a, unsigned int b)
{
  if (b == 0) return a;
  return plus (a+1, b-1);
}

Относительно успешно сворачивается сложение. Получается такая шняга:

movl %edi, %eax
addl %esi, %eax
ret

Хотя в идеале можно было бы обойтись

leal (%rsi,%rdi), %eax
ret

Что касается умножения, там ситуация более печальная

inline unsigned long int product_0(const unsigned int a, const unsigned int b, const unsigned long int tmp)
{
  if (b == 0) return tmp;
  return product_0(a, b-1, tmp+a);
}

unsigned long int product(const unsigned int a, const unsigned int b)
{
  return product_0(a, b, 0);
}

В ассемблере получается такая фигня

product:
.LFB34:
.cfi_startproc
    xorl %eax, %eax
    testl %esi, %esi
    je .L7
    leal -1(%rsi), %eax
    mov %edi, %edi
    addq $1, %rax
    imulq %rdi, %rax
.L7:
    rep
    ret
.cfi_endproc

Тут оно зачем-то зануляет значение регистра, в котором хранится возврашемое из функции значение и сравнивает с нулем значение регистра, в котором в функцию передается число. Если ноль то прыгаем в конец функции, возвращая 0. Тогда внезапно появляется смысл в этом rep ret http://repzret.org/p/repzret/

Why? Because “The processor is unable to apply a branch prediction to the single-byte near-return form (opcode C3h) of the ret instruction.” Thus, “Use of a two-byte near-return can improve performance”, because it is not affected by this shortcoming.

Ну а дальше через leal из регистра rsi число копируется в eax, уменьшаясь при этом на 1 (нахрена?) и потом из регистра edi двигается в edi (НАХРЕНА??), увеличиваем rax на 1 через addq (ну тут понятно зачем, перед этим ведь оно было непонятно зачем уменьшено на 1, но нахрена уменьшать и потом увеличивать? И вообще, для увеличения на 1 лучше incq использовать) ну и в итоге компилятор таки вставляет инструкцию imulq. Распознать умножение в этой рекурсивной хрени компилятор смог, но при этом как-то через жопу все, нагенерировал кучу говна всякого. Можно было намного проще сделать

movl %esi, %eax
imull %edi, %eax

gcc version 4.5.1 если что

#3BR06J (1+1) / @j123123 / 4078 дней назад

Я всерьез подумываю насчет того, чтобы пойти работать программистом. Но тут проблема вот в чем. Чаще всего, работа программиста подразумевает создание проприетарного ПО с передачей всех прав заказчику, и даже иногда требуют подписывать какие-то NDA. Меня такая ситуация совершенно не устраивает, я хочу разрабатывать Free Software. Т.е. я категорически не хочу разрабатывать какое бы то ни было проприетарное ПО. Трудно ли мне будет искать работу при таком раскладе? Какие технологии в таком случае стоит изучать?
(менять свои убеждения я не намерен)

#NYF44F (26+3) / @j123123 / 4133 дня назад

http://govnokod.ru/13470#comment189390

А я ассемблерщика знаю. Пишет биосы. Играет с ботами в квейк. С работы уходит последним. В 40 живет с мамой.

Прямо таки герои нашего времени...

#UK66KH (0) / @j123123 / 4156 дней назад

https://i.imgur.com/8DQTtCs.png
Процесс обучения сишкоасмоебству. Указатели на функции. Watcom Debugger. XP. Виртуалка.
http://ideone.com/W1XMHh - код

#HEFX8X (0) / @j123123 / 4159 дней назад

http://www.stolyarov.info/books/asm_unix#comment-242

Инженеры сказали "мы не можем сделать процессор вдвое мощнее", на что манагеры им объяснили, что если они не сделают процессор вдвое мощнее, то будут кушать баланду. Поскольку баланда — аргумент убедительный, инженеры почесали репу и придумали некий протез — два ядра на одном камне, потом четыре, потом восемь... А программисты проприетарных компаний им в этом помогли, создавая год от года всё более и более тормознутый софт и создавая тем самым у конечного потребителя ложное ощущение необходимости перманентного апгрейда. Вот это я и называю потреблядством — не когда удовлетворяются имеющиеся потребности, а когда искусственно создаётся ощущение потребности там, где никакой потребности и рядом не лежало.
Итог всего этого мракобесия в том, что 99,9999% всех процессоров в мире простаивает (ничего не делает) в течение 99,9999% времени, но при этом на изготовление этих процессоров тратится немерянное количество ресурсов, потом на их питание на холостом ходу тратится прорва электричества, и оплата всего этого влетает конечным пользователям в несуразно гигантское количество денег.

#62NHAX (56) / @j123123 / 4161 день назад

http://www.stolyarov.info/guestbook/archive/1#comment-717

Я тут на одном форуме видел обсуждение моей книжки по C++, так там на полном серьёзе кто-то задал вопрос, а если в книжке не рассматривается стандартная библиотека C++, то о чём же тогда вообще книжка? Больше того, мне встречались случаи, когда человек пишет в резюме "имею большой опыт программирования на C++", при этом на собеседовании не знает, что такое конструктор, и не только не знает, но и возмущается, что это кого-то интересует: зачем, мол, это вам надо, программировать можно без этого, я вот столько-то лет уже на C++ программирую, и совершенно замечательно без этих ваших конструкторов обхожусь. Собственно говоря, я в таком положении вещей даже не вижу ничего особенно удивительного при господствующих ныне "методиках" изучения оного C++.

#9FAS2Q (19+4) / @j123123 / 4162 дня назад

http://i.imgur.com/q7If6qw.png

#BSUP81 (0+1) / @j123123 / 4169 дней назад

http://ideone.com/NlMluL
Умножение двух 16-битных беззнаковых чисел с получением 32-битного беззнакового, без условных переходов

#CQFUUP (7) / @j123123 / 4173 дня назад

https://research.microsoft.com/en-us/um/people/simonpj/papers/ndp/haskell-beats-C.pdf

Abstract
Stream fusion [6] is a powerful technique for automatically transforming high-level sequence-processing functions into efficient implementations. It has been used to great effect in Haskell libraries for manipulating byte arrays, Unicode text, and unboxed vectors. However, some operations, like vector append, still do not perform well within the standard stream fusion framework. Others, like SIMD computation using the SSE and AVX instructions available on modern x86 chips, do not seem to fit in the framework at all.
In this paper we introduce generalized stream fusion, which solves these issues. The key insight is to bundle together multiple stream representations, each tuned for a particular class of stream consumer. We also describe a stream representation suited for ef ficient computation with SSE instructions. Our ideas are implemented in modified versions of the GHC compiler and vector library. Benchmarks show that high-level Haskell code written using our compiler and libraries can produce code that is faster than both compiler- and hand-vectorized C.

На ассемблере такие вещи надо делать. Алсо, тут http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=gcc&lang2=ghc&data=u64q хаскель сливает сишке почти по всем пунктам. И я бы не сказал, что кода на х-е сильно меньше, чем кода на Си

#BAHBZO (7) / @j123123 / 4178 дней назад

http://gcc.1065356.n5.nabble.com/Ways-to-fill-the-stack-td912561.html#none
Если через запятую объявлять члены массива из char в C и откомпилить это в GCC, оно это запишет как куча mov-ов по байтику
sztfg - я

#SG2QH2 (6) / @j123123 / 4178 дней назад

http://www.youtube.com/watch?v=tXvEiW1ibZQ
Очередные наноинновации

#G6UF07 (3) / @j123123 / 4179 дней назад

http://dump.bitcheese.net/images/ycazoki/Будь_имбой,_сука.png
Тут один знакомый-через-жаббер сделал такую пикчу с литературой по программированию. Он сам не полностью согласен с ней (да и я). Суть цветов на светофорах в том, что красный это сложно, желтый - средне, зеленый - легко.

#RZBPOR (6+1) / @j123123 / 4199 дней назад

https://imageshack.us/a/img254/6120/12900173256014.png
Программисты катятся в сраное говно

#MR5FQY (8+1) / @j123123 / 4199 дней назад

Я тут надумал свою змейку https://github.com/j123123/snake_Xlib переписать с xlib на XCB, заодно переписав саму логику, ибо там неидеально всё. Ну и нашел такой вот пример http://cgit.freedesktop.org/xcb/demo/
Скачал его гитом из git://anongit.freedesktop.org/xcb/demo
На генте не скомпилировалось, выдало какие-то ошибки undefined reference. На несвежей опенсусе скомпилировалось нормально. Там рисовалка Множества Жюлиа есть, интересная штука. Еще там есть прога xneko, только вот она ни на генте, ни на опенсусе не скомпилировалась. Но в генте я зато заемержил oneko (типа улучшенное xneko ). Суть этой штуки в том, что там всякая фигня может за курсором бегать, можно выставлять скорость разную. Немного поигрался с этим. http://dump.bitcheese.net/images/umamomy/oneko.png
Вообще, в XCB на логотипе тоже котик https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Xcb_logo.svg/640px-Xcb_logo.svg.png
Ехал котик через котик...

#XC9H6Z (2) / @j123123 / 4213 дней назад

http://www.stolyarov.info/guestbook/archive/1#comment-482

Ощущение сильного колдунства в тылу для программиста противопоказано. Разумеется, принцип ровно тот же, просто система программирования любезно скрыла с ваших глаз долой всю "низуху". Для опытных программистов это удобно, для тех, кто только учится — смертельно.

#TJTNPT (0) / @j123123 / 4215 дней назад

Тут я отвечу на вопрос "Зачем нормальный программист должен знать ассемблер?" но сначала пятиминутка ненависти

Ну собственно, есть такая тема, что люди, которые не то что ассемблера, даже сишку толком не пробовавшие, пишут на своих жабоскриптах такую дикую хуиту с точки зрения оптимизации, что просто пиздец. Ибо нет нифига понимания(даже примерного) в какие такие машинные инструкции будет оттранслирована та хуерга, которую наплодили эти "программисты".
Раньше мой дед на целероне 400 мгц 256 метрами ОЗУ успешно смотрел интернет на несвежем дистрибутиви GNU/Linux. Но потом тупые индусы понаделали тормозных жабаскриптов и дед начал жаловаться на появление какого-то непонятного окошка "скрипт недоступен". Он еще начал интересоваться, что такое скрипт и на что он должен отвечать. Ну типа типичные последствия. Вообще, дофига сайтов адово тормозят от этих говен, поэтому у меня NoScript всегда наготове, ибо от этого говна тормозятся даже современные браузеры на современном железе. Это ж надо было дойти до того, чтобы делать абгрейд из-за того, что какие-то *** понаписали быдлокода на JS? Если вы у себя на сервер-сайде ворочаете всякие тормозные питоны, похопе и Node.js то это ваши личные половые проблемы. Но вот когда вы кормите этим JS-говном МОЙ процессор, тут уж я на это вынужден применять меры, вроде NoScript
http://www.opennet.ru/opennews/art.shtml?num=36962 вот на такое клиенд-сайд веб программирование (если его сильно запаковать в сандбокс) я согласен. Есть еще такая тема, как asm.js http://habrahabr.ru/post/171561/ но это всё полумеры.

А теперь по теме, нафига вообще ASM. Любой (за исключением CUDA и прочей GPU-ускоренной хреноты) код на любом ЯП в итоге транслитуется в опкоды и переваривается центральным процессором (всякие CUDA и опенжл передаются в видеокарту и перевариваются через GPU). Я лично не против, чтобы кто-нибудь писал на языках, подобных Java, JavaScript, Python, Ruby и что там еще... Вся беда в том, что для эффективного программирования даже на таких ВЫСОКОУРОВНЕВЫХ ЯП как эти, необходимо хотя бы примерно представлять, в какой машинный код преобразуются ваши высокоуровневые конструкции.
Иногда приходится смотреть на сгенерированный сишным компилятором код, чтобы понять причины тормозов. Чтение ассемблерного выхлопа GCC позволило мне выявить хреновую оптимизацию записывания байтиков в стек, вот http://gcc.1065356.n5.nabble.com/Ways-to-fill-the-stack-td912561.html почитайте (да, я знаю, у меня плохой английский)

Понимание архитектуры ЭВМ, недостатков некоторых вещей (типа NULL-terminated string http://www.joelonsoftware.com/articles/fog0000000319.html ) позволяет избегать ошибок на более высоких уровнях.
Меня тут обвиняли что я статейки какие-то даю, так вот тут я их действительно выдам
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
https://lwn.net/Articles/250967/
http://www.insidepro.com/kk/145/145r.shtml
https://savannah.nongnu.org/projects/pgubook/

И вот типа цитата, но я не вполне согласен с ней. Иногда ASM нужен именно для написания

Целью обучения программированию на асме, как ни странно, не может быть само по себе программирование на асме, это навык (если его рассматривать с профессионально-коммерческой точки зрения) абсолютно бессмысленный. Никто никогда не пишет на асме. Но при этом опыт такого писания жизненно необходим, чтобы примерно представлять себе, что на самом деле происходит при выполнении программы. И с этой колокольни, вообще говоря, пофигу, какой ассемблер и под какой процессор изучать. Ну, допустим, процессор всё-таки желательно использовать живой и реально существующий, чтобы не оставалось ощущения, что «с настоящим точно не получится», но и только.

Критика приветствуется

#GHU55Z (53+3) / @j123123 / 4220 дней назад

И еще об образовании, продолжение #J0JQHY
http://ru.euronews.com/2013/05/03/the-serious-side-of-playing-games/
Предлагается использовать специальные обучающие игры. Идея не нова, во мне интерес к программированию пробудили такие игры, как Transport Tycoon (сейчас есть опенсорсный OpenTTD) и The Incredible Machine ( выгдялит так https://upload.wikimedia.org/wikipedia/en/c/c4/The_Incredible_Machine_3.png )
Некоторые другие игры, которые мне понравились(флеш): http://www.kongregate.com/games/PleasingFungus/manufactoria/ http://www.kongregate.com/games/krispykrem/kohctpyktop-engineer-of-the-people
Вот кстати, эта штука http://www.drgeo.eu/home отлично подойдет для изучения геометрии, там есть пример с механикой. Правда GUI у нее весьма необычен

Вообще, учиться программированию можно дома самостоятельно, это вам не какая-нибудь химия, где нужно кучу реактивов для опытов, вытяжка, оборудование для химических опытов и прочее, достаточно просто компа, интернета и много свободного времени. http://ru.euronews.com/2013/04/05/the-mooc-movement-learning-for-all/

Там вообще много интетесного про образование http://ru.euronews.com/programs/learning-world

#0KNBCA (5) / @j123123 / 4232 дня назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.