1. C++ / Говнокод #12413

    +23

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    volatile bool b;
    
    class BoolKeeper
    {
      bool &fb;
    public:
      BoolKeeper(bool &b) 
      {
        while (b);
        b = true;
      }
      ~BoolKeeper ()
      {
        b = false;
      }  
    }
    
    void Thread1
    {
      BoolKeeper ololo(b);
      // что-то делаем
    }
    
    void Thread2
    {
      // что-то делаем
      BoolKeeper ololo(b); 
      // что-то делаем, причём в этом месте нам важен факт, что Thread1 не выполняется
    }

    http://www.gamedev.ru/flame/forum/?id=171558

    Запостил: LispGovno, 13 Января 2013

    Комментарии (219) RSS

    • Совсем сдурел: Пощу код на С++, а ищу раздел Хаскеля, которого нет.
      http://www.youtube.com/watch?v=byzGCPwtZM0
      Ответить
      • Я почему-то сразу подумал про эту песню еще до открытия ролика )
        Ответить
    • Злобный и корявый мутекс спинлок?

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

      Да и барьеров, насколько я понимаю, обращение к volatile переменной не генерирует, со всеми вытекающими последствиями... Это я к чему - а к тому, что нет гарантии того, что переменные, модифицированные перед BoolKeeper в Thread1 высрутся из кеша текущего ядра в память, и нет гарантии того, что Thread2 после прохода через BoolKeeper будет читать эти значения из памяти, а не из кеша своего ядра. В результате кровь-кишки-распидорасило получим забавные и трудноуловимые гейзенбаги...
      Ответить
      • P.S. Тарас, удачной тебе отладки ;)
        Ответить
      • > Да и барьеров, насколько я понимаю, обращение к volatile переменной не генерирует
        Даю гарантю, что не генерирует.
        Ответить
        • Про визуалку, емнип, дефекейт++ писал, что генерирует (защита от долбоёба, который полез писать свою синхронизацию не изучив теорию?). Или я гоню?
          Ответить
          • Видел асмокод старой визуалки. Ничего такого. С каких пор кресты защищают долбоёбов?
            А вот джаваба или сишарпик сделает.
            А то что ты написал - противоречит кодексу С++: 100500 заряженных ружий ради оптимизации не платишь за то, что не используешь.
            Ответить
            • Ан нет.
              >Double-checked locking can be implemented in Visual C++ 2005 and above if the pointer to the resource is declared with the C++ keyword volatile. Visual C++ 2005 guarantees that volatile variables will behave as fence instructions, as in J2SE 5.0

              http://en.wikipedia.org/wiki/Double-checked_locking
              Ответить
              • Ну, в принципе, портоёбством и прыжками в длину на визуалке никто не занимается, поэтому волэйтил в его исконном значении никому не нужен, и на производительности это никак не скажется... да и скорее всего это отключаемая фича.
                Ответить
                • Как волатил связан с прыжками в длину? Волатил необходим ещё для прерыванияёбства.
                  Ответить
                  • Не помню уже... сам эти недоисключения никогда не юзал... но вроде где-то попадалось, что переменные, которые выставляются перед самым прыжком должны быть volatile, т.к. компилятор про этот черезжопный прыжок не знает, может забыть выгрузить переменные из регистров, или вообще перенесет присваивания за прыжок и обработчик получит не те значения.

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

                        Она умеет 16 битные си или хотя бы 16битный инлайн асм? Или придется заниматься dbёбством до самого перехода в защищенный режим?
                        Ответить
                        • Заменяешь maincrtstartup своим кодом, отлинкуешь crt и напишешь свою реализацию нужных функций из crt и переменных (для загрузочного сектора ниодна не нужна, только переменная о чем то информирующая линкер).
                          Вырезаешь утилитами ненужный мусор и ими же релокейтишь на нужный адрес, подходящий для загрузочного сектора точку входа. По сути будет COM-программа. В ней будут всякие edi вместо di, но это все теже обращения в рамках одного сегмента реального режима.
                          Дальше твой yoba-сектор загружает твою yoba-программу, где реализован crt по полной тобой или кем-то ещё и дальше можно упарываться полными возможностями крестов без ограничений. Единственное не знаю есть ли реализация доморощенных crt с поддержкой исключений и fpu, но думаю должны быть и такие.
                          Ответить
                          • Смещения и иммедиэйт операнды. Они окажутся 32 битными. А еще кодировка регистров для адресации в 16 и 32битных режимаз совсем разная. Так что не взлетит.
                            Ответить
                            • А с каких пор в реальном режиме нельзя пользоваться 32хбитными операторами и смещениями? Я же не на 800086 предлагаю запускать
                              Ответить
                              • Визуалка не сгенерит префиксы, переключающие разрядность адреса и данных. До кучи покури про mod r/m. Насколько помню на его кодировку влияет только бит защищенного режима, и никакими префиксами его не уговорить. Блин 6 утра... надо в следующий раз выключать говнотифи на ночь...
                                Ответить
                                • Кажется, я догадываюсь, о чём речь.

                                  С одной стороны, есть редко используемый «нереальный режим»: можно отобразить всё ОЗУ на виртуальное адресное пространство 1:1, переключиться в реальный режим... Вуаля! Инструкция mov ax, WORD PTR [esi] может адресовать 4 гигабайта.

                                  С другой стороны, код из 32-битного сегмента может пользоваться инструкциями типа MOV eax, DWORD PRT [si], ограничивая себя 64 килобайтами, как в старые добрые времена.

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

                                  А что будет, если 32-битный код без префиксов посадить в реальный режим или 16-битный код без префиксов посадить в 32-битный сегмент? Барабанная дробь!

                                  Комп распидорасило, пишу с утюга! А всё потому, что x86 придумали хитрожопые тролли, а поэтому один и тот же mod R/M в 16-битном режиме кодирует [BX+SI], а в 32-битном — [EAX]. Как думаете, сможет ли компилятор предугадать такой поворот событий?

                                  Вот по этой причине в известных архивах Windows NT4/2000 source code отдельно лежит 16-битная версия Visual C.

                                  Существует неофициальный генератор 16-битного кода для gcc для кросс-компиляции, но код он выдаёт ужасный.
                                  Ответить
                                • Блин вот че значит отвечать спросонья.

                                  Декодирование mod r/m вполне управляется префиксом разрядности адреса, который 67h. Но один хрен визуалка эти префиксы расставлять не будет. Разве что в тулзе, нарезающей экзешник на полоски добавить расстановку префиксов и фиксап смещений в jmp'ах после этого...
                                  Ответить
                            • А мы лишние байты иммедиэйтов заштопаем нопами.
                              Ответить
                          • Всё будет хуже. Визуалка сгенерирует 32-битный код. В 16-битном режиме [edi] интерпретируется как [bx], а [ebx] как [bp+di]. Будет очень приятно.

                            А теперь мы со всем этим говном попытаемся взлететь.
                            Ответить
                            • Именно это я и имел в виду выше, говоря про mod r/m.

                              А еще визуалка, как и гцц, скорее всего любит заменять умножения и сложения на lea:
                              lea eax, [eax+eax*4+5] ;a = a*5+5
                              Этот код скомпилится в 8D 44 80 05, который 16битный режим поймет как:
                              00000000  8D4480            lea ax,[si-0x80]
                              00000003  05                db 0x05
                              Ответить
                          • Насчет упарывания вырезанием секций из экзешника и запихиванием их вместе с бутсектором на дискету - валяется у меня давнишний проектик.

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

                            Если интересно - могу вечером выложить на гитхаб.
                            Ответить
    • ты все написал али чё чего недописал? пошёл на хуй школота ебучая!
      я король а вы сосете
      иди ебись в глаза кракен
      Ответить
      • Отличный генератор случайных чисел: https://ideone.com/IbL3LQ! У меня в районе 1100000 .. 1600000 получается на двухъядерке.
        Ответить
        • "результат: ошибка компиляции"
          Ответить
          • Да это ideone не дает указать опции компилятора (или я не в курсе как это делать). Там надо -lpthread.
            Ответить
            • > не дает указать опции компилятора
              http://liveworkspace.org/
              Ответить
            • действительно не дает, я думал, достаточно зарегестрироваться, а вот хрен.
              Ответить
      • P.S. IntKeeper на тесте выдает как и положено 2кк, и судя по всему он корректен - __sync_add_and_fetch если верить ману содержит в себе full memory barrier, без которого эти спинлоки были бы бесполезны.

        P.P.S. volatile в IntKeeper можешь убрать, оно не имеет совершенно никакого отношения к многопоточности. Оно нужно для портоёбства.
        Ответить
        • Тест на х86?
          Ответить
          • Да, тестил на x86. Но по тесту нельзя судить, корректна ли многопоточная прога, по нему можно узнать только то, что она бажная (как выше).
            Ответить
      • P.P.P.S. Мутить свои примитивы синхронизации не изучив теорию - это, имхо, самый ебанутый поступок, который можно совершить в программировании.

        Потоки - это такая злая вещь, в которой нельзя все баги отловить тестированием... Даже если все работает сейчас - не факт, что код корректен, и после года работы, при удачной фазе луны и присутствии рядом девственницы, не выдаст херню... Хорошим примером является паттерн double checked locking, который с первого, да и со второго, да и даже с третьего раза мало кто реализует корректно.
        Ответить
        • > P.P.P.S. Мутить свои примитивы синхронизации не изучив теорию - это, имхо, самый ебанутый поступок, который можно совершить в программировании.

          Да там везде в теории используется хуйня, которую я даже проверить не могу, потому что этих библиотек нет в мой студии, вот и приходится лепить из чего есть.
          Ответить
          • Обнови уже студию. Хотя __sync_add_and_fetch в ней никогда не будет, майкрософт никогда не снизойдет до копипаста годных фишек из GCC, которые GCCшники, кстати, вроде как сперли из ICC. Это было бы слишком совместимо с другими компиляторами, поэтому мс так не поступит...

            Ну если хочешь запилить свой кроссплатформенный мутекс - сделай переключаемую дефайнами обертку для pthread под никсами, и для критической секции под виндой. Бустовский насколько помню так и запилен.
            Ответить
            • зачем ему студию
              у него же селерон 10 летней выдержки
              он еще небось апдейты не ставит, потому что "sp3 для xp - говнище!"
              Ответить
              • Кстати, Тарас скорее всего расстроится, т.к. 2012я студия требует фреймворк 4.5, а фреймворк 4.5 невозможно поставить на XP. Я вот расстроился, виртуалку апгрейдить до вин7 влом.
                Ответить
                • Мне кажется, зная ненависть тараса к управляемым средам, фразу можно сократить до
                  "Тарас скорее всего расстроится, т.к. студия требует фреймворк"
                  Ответить
                • >2012я студия требует фреймворк 4.5
                  >фреймворк 4.5 невозможно поставить на XP
                  Хороший повод отказаться от проприетарщины и пересесть на gcc.
                  А там глядь, и Тарас вовсе от ШИНДОШС откажется.
                  Я последний раз студию ставил лет 6 назад. Такого распухшего высера для быдлоынтырпрайза еще посикать. Сумневаюсь что они поувольняли всех индусов и VS 12 требует меньше ресурсов чем предшественники.
                  Ответить
                  • > Я последний раз студию ставил лет 7 назад
                    А я всего лишь три-четыре года ее не видел. Давно уже gcc/vim/QtCreator/eclipse.

                    Просто хотел собрать свой древний проектик, про который писал выше, ну и заодно посмотреть чего там сейчас в свежих визуалках по юзабилити.
                    Ответить
                    • Иногда попадаются проекты, где криво написан/вовсе нет makeFile, и тут же лежит проект под студию - вот великое искушение.

                      Но как вспомню, сколько там качать и потом еще джва часа её ставить, то проще полезть и разобраться в сырцах, чем ставить это говно.
                      Ответить
                      • Да там просто тулза, которая нарезает экзешник на секции, и готовит из нее загрузочный образ. Код я писал давно, код говёный и quick & dirty, поэтому не факт, что оно нормально распарсит экзешку собранную мингв.
                        Ответить
                  • лет 7 назад? это 2005 студия чтоли?
                    небось еще все галочки поставил (да-да, я хочу и басик, и шарп, и сыкал сервер, и кристал репорц, и да-да, поставьте мне мсдн на локальный диск)?

                    если на машинах в офисе стоит винда, АД, офис, на кой черт искать убогие глючные, но "свободные" редакторы (дебаггер то под виндой есть у мингв? а в 2005 году?)
                    Ответить
                    • > дебаггер то под виндой есть у мингв
                      Ну креатор дебажил, пока не начались пертурбации с нокией\троллями\дигией, и не поломали сдк к хуям. Сейчас там надо поплясать с бубном, чтобы gdb стартануло... А так быстро привыкаешь к хорошему - кутисдк, который качается и обновляется в пару кликов, да еще и работает...
                      Ответить
                    • > убогие глючные, но "свободные" редакторы
                      GNU Emacs, в отличие от XEmacs, очень стабильный редактор. Его можно месяцами не закрывать, юзая каждый день по 12 часов. Время запуска ~ секунда.
                      Крэша или некорректной работы Vim я никогда не наблюдал. Максимум - если натыкаешь по ошибке не туда, но это уже сам дурак. Месяцами не юзал, ибо запускается долисекунды.

                      Вот Eclipse - бажный отстой. Idea неплоха, но тоже частенько глючит и жрёт память.

                      А вот такого убожества, как 2008 студия для сишарпика я никогда не видел. Приходится использовать её с решарпером на не особо мощной машине. Крэшится в дебаге через раз. Отображает текст в два раза медленнее, чем я печатаю. Интерфейс контринтуитивен.

                      И конечно, все перечисленные IDE адски сливают "убогим и глючным свободным редакторам", когда дело доходит до работы с текстом, темплейтами и макросами, а не "сгенери мне ToString".
                      Ответить
                      • vim пробовал пользоваться на заре - как раз во времена 2005 студии, когда в этой конторе никто код под студию не прихорашивал
                        не прижилось
                        ассист с нормальным редактором и мышью заруливает эти мазохистские редакторы, в которых надо постоянно что-то настраивать, умение перейти из окна output с выводом компилятора в строку, где найдена ошибка - вообще событие,
                        а уж о том, чтобы предложить в качестве аргумента функции только те доступные имена, которые подходят по типу и действительно сочетаются - в vi это за пределами моих смелых фантазий
                        не исключаю, что он это таки умеет (быть может, только с последними достижениями от clang), а у меня просто кривые руки и программист мышкой головного мозга, но в 2005 году vim по удобству и интуитивности проигрывал даже фару с колорером

                        причем, по ssh мне конечно приходится читать/редактировать что-нибудь в vi, но поддерживать им проекты на 1млн строк - нет, спасибо

                        у 2008 студии тоже есть сервис паки/обновления, как и очевидно, в решарпере (не пользуюсь), и чтобы она в дебаге крашилась - может причина в сишарпе или отключенных обновлениях?

                        на моей старой слабой машине с мегаубогим хардом любая студия дико тормозила, факт
                        Ответить
                        • Кривая обучения слишком неумолима, и количество необходимых настроек достаточно велико, это верно.

                          С другой стороны, написать плагин для vc/eclipse/idea - задача не из лёгких, и я вряд ли решусь когда-нибудь на такой шаг.
                          Для "убогого" же emacs это обычно делается довольно просто (при наличии минимальных знаний elisp).

                          И, конечно, вкладки - отстой, буфера и окна рулят. А список *кликабельных* ошибок компиляции в емаксе легко получается по M-x compile/recompile, который привязывается к любимому сочетанию клавиш
                          Ответить
                      • > это 2005 студия чтоли?
                        Да. Вообще я долгое время сидел на древней VS6. Говно, знаю. Но привык к нему. Та студия не требовала гигафлопсов CPU и гигабайтов RAM.
                        05 поставил ради нового сишарпика - посмотреть чего там. Полтора часа установки меня насторожили.
                        >и сыкал сервер, и кристал репорц
                        Ну уж нет.
                        >дебаггер то под виндой есть у мингв
                        имхо, дебагеры не нужны.

                        >Вот Eclipse - бажный отстой. Idea неплоха, но тоже частенько глючит и жрёт память.
                        >А вот такого убожества, как 2008 студия для сишарпика я никогда не видел.
                        Согласен на 100%.
                        Ответить
                        • Хм, а вот я 2003ю поставил быстро и делает она всё быстро. Так что у меня есть объективная причина не ставить 2012, минусаторы сосите.
                          Ответить
                        • вот потому, что гдб - неинтуитивная хрень, и я отлаживаюсь под виндой на студии, а затем этот кроссплатформенный код работает на линухе as is
                          без дебаггера одним трейсом в лог на отладку (поиск гейзенбага) времени уходит больше, чем с дебаггером
                          Ответить
                          • >поиск гейзенбага
                            Да дебажить такое сущий ад. Не пойму что тут облегчит дебагер? Он не спасет тебя от той лютой хуйни, что в ОП-посте.

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

                            Важнее того вдумчивое и осторожное написание многопоточного кода, а не изобретение кривых велосипедов, как это делает Тарас.
                            Ответить
                            • дебагер очень полезная вещь, если существует ненулевая вероятность словить на стенде заботливыми нежными руками тестера за пару трудодней - ремоут дебаггер ждет, когда крестоложеская прога упадет, выполнит невыполнимое и допустит недопустимое, и дает к ней подсосаться
                              но, откровенно говоря, доводится этим заниматься нечасто
                              Ответить
                      • Как приучить vim понимать Scala? Все, что я смог сделать, это кривая подсветка синтаксиса (https://github.com/scriptin/scala.vim) и автодополнение в пределах файла - это не годится для нормальной работы с такой большой стандартной библиотекой. Знаю, что можно сделать автодополнение в пределах проекта с помощью ctags (руки пока не дошли разобраться), но как быть с библиотеками Scala и Java?

                        Интегрированный отладчик и подсветку ошибок в коде тоже было бы неплохо иметь.

                        Плюс дополнительная проблема - мне нужно писать на PHP, поэтому желательно иметь IDE под оба языка. Я рассматривал вариант emacs + ensime, но в emacs, говорят, проблемы с мультирежимами, а мне часто приходится поддерживать лапшу из PHP+SQL+HTML+CSS+JavaScript.

                        В итоге сейчас сижу на Eclipse. Поддержка Scala весьма хорошая (подсветка ошибок, полное автодополение, рефакторинги, брейкпоинты), но "микроредактирование" текста не такое удобное и некоторых плагинов vim'а очень не хватает. И еще очень раздражает, что все делается через тучу менюшек вместо одного файла конфигурации. *плак-плак*
                        Ответить
                        • Scala - это ад для создателей IDE. Idea осиливала даже не шибко сложный код как-то через раз, хотя апдейты к плагину выходят через день и дело движется к лучшему.

                          Вот это http://scala-ide.org я тоже пробовал, но оно, хоть и поделка typesafe, совсем не впечатлило. Код иногда понимает чуть лучше, чем Idea, но когда дело доходит до рефакторинга, оно портит код. Во всяком случае, версия 2.0 портила. На в целом терпимо. Правда, тормознутость Eclipse отбивает любое желание этим пользоваться.

                          Ensime + Emacs тоже пробовал, в целом впечатлил объём работы, проведённый автором. Многое работало, включая дополнение кода и поиск. Правдо, отжирало много памяти и иногда Ensime крэшил емакс.

                          php редактирую в основном под страхом смерти. При работе с практически любым языком предпочитаю использовать или писать билдеры разметки/запросов, позволяющие минимизировать кол-во языков, одновременно использующихся в каждом конкретном исходнике.
                          Ответить
                          • Значит придется и дальше сидеть на Eclipse. От legacy-кода мне никуда не спрятаться.
                            Ответить
            • Я не хочу обновлять, потому что вместе с поддержкой стандарта в ней будут новые свитоперделки, а они мне не нужны, мне нужна лёгкость.
              Ответить
              • VC вроде ни в одной версии лёгкостью не отличалась. Возьми sublime text/vim/emacs
                Ответить
                • Ну и чтобы удобный отладчик был, конечно.
                  Ответить
                  • gdb

                    Отладчик для настоящего хакера.
                    Ответить
                    • Торвальдс удивлен
                      Ответить
                      • Можно подумать, он пользуется другим. Он использует gdb, но не для того, чтобы дебажить, а как дизассемблер
                        http://linuxmafia.com/faq/Kernel/linus-im-a-bastard-speech.html
                        Ответить
                  • У емакса есть графический фронтенд к gdb, позволяющий ставить брейкпоинты прямо в сорцах + консольная версия в отдельном буфере. Я, правда, предпочитаю юнит-тестирование и пристальный взгляд, не люблю ковырять отладчик, это крайняя мера.
                    Ответить
              • Ну вот у меня свежий gcc 4.7, поддерживающей почти весь с++11.

                Легким движением руки я добавляю ключ -std=c++98 или -std=c89, и все лишние свистоперделки испаряются, остается только сила древних...
                Ответить
                • я про перделки среды
                  Ответить
                  • Они чем-то мешают кроме поедания памяти?
                    Ответить
                    • Скорость запуска, скорость реакции при вводе текста, скорость реакции на мои действия, не?
                      Ответить
                      • Скорость запуска значения не имеет, зачем запускать IDE больше одного раза за сеанс работы?

                        Реакция при вводе текста должна быть точно такой же. Автодополнение скорее всего такое же или быстрее, ну не будут же делать в новых версиях более медленный intellisence... Хотя тут надо проверить, это же мс, с них станется испортить его.

                        А фишки среды, скрытые в менюшках, типа интеграции с системами контроля версий, рефакторингом и анализом совсем не мешают, пока ты их не запустишь.
                        Ответить
                        • ну в словах Тараса рациональное зерно
                          я дома пробовал vs2012, не релизную еще, там заметно тормозил ввод текста
                          плюс этот самый ввод выглядел убого с какими то дополнительными мусорными перемигиваниями, подсвечивания строки курсора и т.д.
                          а дома 12Гб памяти, например
                          Ответить
                          • Все-таки испортили... а в релизе эти баги подчистили? Там же судя по всему уже sp1 есть.
                            Ответить
                            • стараюсь дома держаться от работы подальше
                              а для всего остального есть мастеркард ливвёркспэйс
                              Ответить
                          • 12гигопамяти это наверное для тестов типа govnokod.ru/12411
                            в релизной вроде бы всё плавно, ещё и рефакторинг для С++ добавили.
                            Ответить
                            • sp1 для vs2010 есть. Для 12 как-то рановато еще.
                              Ответить
                              • фига ... отвечал @bormand'у ... а ответил себе :)
                                Ответить
                              • Вы не поверите, но... http://www.microsoft.com/visualstudio/rus/downloads, там внизу раздел Visual Studio 2012 Обновление 1.
                                Ответить
                                • Надо же... во наплодили-то. Полтора м-ца назад аж. Надо обновиться на зависть Тарасу.
                                  Ответить
                            • 12 гб - это для прожорливых адобовских лайтрумов и пхотошопов (да-да, тоже ради посмотреть скачаны с торрентов)
                              Ответить
                              • а как же православный GIMP?
                                p.s. планки можно было с и манибеком взять (типа тоже посмотреть)
                                Ответить
                                • да сейчас оператива копейки стоит
                                  в отличие от мастарр калекшен или студио ултимейт рахитект тим лид едишан
                                  Ответить
                                  • что-то мне вспомнились форумы оверклокерские, где господа-товарищи в подписи пишут про 12Гб, 24ядра, коэффициент умножения и диагональ LCD...
                                    Ответить
                              • И как оно? В смысле, реально может столько мозгов съесть?
                                Ответить
                                • >мозгов съесть?
                                  http://cache2.allpostersimages.com/p/LRG/51/5103/Z6DEG00Z/posters/zombie-brains.jpg
                                  Ответить
                                • лайтрум то? ему 8 гигов съесть, как нам бутерброд с икрой (кабачковой)
                                  когда равы весят по 30 метров, и в коллекции их надо пару сотен обработать
                                  Ответить
                                  • darktable же
                                    Ответить
                                  • > их надо пару сотен обработать
                                    В таких объёмах да, конечно, сожрёт и не подавится.
                                    Но в более приземлённой области не встречал. Не для простого это пользователя.
                                    Ответить
                        • Студия не умеет в новый компилятор? Или они там приварены друг к другу?
                          Ответить
                          • Угу, компилер, отладчик, система сборки и ИДЕ прибыты гвоздями друг к другу. Vendor lock-in такой vendor lock-in
                            Ответить
                • >почти весь с++11.
                  а что не держит? 4.7.2?
                  Ответить
                  • В основном фишки связанные с мультитредингом:
                    http://gcc.gnu.org/projects/cxx0x.html
                    Ответить
                    • По-моему, Страуструп вообще всегда был против интеграции многопоточности в стандарт.
                      p.s. какие неожиданности оказывается в фичах языка присутствуют "Minimal support for garbage collection and reachability-based leak detection".
                      Ответить
              • однако ты не учитываешь, что с версией студии там серьезно улучшается оптимизатор
                Ответить
                • Хех, уже года три не видел студию... какую там сейчас качать в express edition?
                  Ответить
                  • ни разу в жизни не ставил express edition
                    ради посмотреть можно с торрентов утянуть ultimate
                    Ответить
                    • > ради посмотреть
                      а ради поработать?
                      Ответить
                      • Ради попродавать тогда уж. За поработать, как и за посмотреть, никто и никогда не докопается.

                        P.S. Экспресс хочу потому что он легче, и в нем нет фич, ненужных для беглого осмотра экспоната.
                        Ответить
                        • так без фич и экспонат неполноценный получается, чего его смотреть голого.
                          Ответить
                        • В экспрессе нет ATL, без которого многие программы скомпилировать не получится.
                          Ответить
                          • Мои древние говнопроектики не юзают ATL, так что хрен с ним.
                            Ответить
                            • но видимо хотят юзать .net4.5
                              Ответить
                              • Ненене, никакого фреймворка, только крестоблядство, только хардкор. Фреймворк хочется самой вижуалке.
                                Ответить
                • мне похер, у меня цель планшет
                  мне даже наоборот, чем хуже оптимизация под винду, тем лучше я буду видеть, где что будет на планшете
                  Ответить
              • > мне нужна лёгкость.
                кушай шоколад "воздушный"
                Ответить
            • Чем тебя не устраивают Interlocked* вызовы?
              Ответить
              • Тем что это виндоблядство, а ему надо кроссплатформу.
                Ответить
                • > виндоблядство
                  Не пугай гостя странными словами.
                  Ответить
                  • Этот гость в 2011 году говнокоды постил, у него стаж больше чем у меня...
                    Ответить
                    • а вот ещё был паренек - по хаскелю упарывался, я ему статей по немерле накидал по его просьбе. А теперь безвести пропал. Может в желтый дом попал?
                      Ответить
                      • Он выучил хаскель, и теперь пришел к успеху, у него есть свой остров, яхта и вертолет, и все девушки мечтают о нем. Что ему теперь тут делать?
                        Ответить
                      • Да, он решил лично навестить Моисея Эльевича Шейнфинкеля, одного из изобретателей каррирования, он тоже попал в психушку.
                        Ответить
      • Чем ты так упоролся перед тем как написать это сообщение и создать тот тред на гейдеве?
        Ответить
        • Ньюфагам не понять, откуда это сообщение.
          Ответить
          • Не разбирай питушка Орлова на цитаты
            Ответить
            • Фу, ньюфаг, ты даже автора не угадал
              Ответить
              • Школиё, сер.

                Слышало гумно, да не знает кто хочет подзалупного творожка отведать?
                Хотя на мой вкус орлежка гораздо сочнее был.
                Ответить
      • Почти компенсировал.
        Ответить
        • Не надо это мишустинское дерьмо компенсировать!
          Ответить
    • void Thread1
      {
        BoolKeeper ololo(b);
        // что-то делаем
        b = false; // dirty hack or epic fail?
      }
      Ответить
      • Эдак и у того же QMutex'а можно вызвать release() в обход QMutexLocker'а... и хуй себе оторвать тоже можно... но зачем?
        Ответить
        • Испортить глобальную переменную с именем в 1 символ гораздо легче, чем хуй себе оторвать. Я, конечно, не пробовал, и не собираюсь, и никому не советую )
          Ответить
    • Суть треда
      Как и предсказывал defecate-plusplus
      >возможно, когда-нибудь ты отвыкнешь от глобальных переменных и однопоточности
      здесь http://govnokod.ru/11975#comment156837
      Тарас начал изучать многопоточное программирование.
      Как и подобает Тарасу он сказал "Нахуй стандартные языковые средства, я буду писать свои костыли".
      После чего дискуссия пошла в сторону ide и отладчиков.

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

      PS> так мало того. еще на геймдеве насрали 38 страниц, пытаясь сделать из говна мьютекс. лень даже тратить время на прочтение.
      Ответить
      • > пытаясь сделать из говна мьютекс
        Ну, кстати, уже на третьей странице Тарас запостил работоспособную версию своего мутекса через __sync_add_and_fetch. На глаз в ней не видно явных багов и расовых условий, хотя и смотрится она кривовато.
        Ответить
        • Работоспособную версию мьютекса? Максимум запостил работоспособную версию спинлока.
          Ответить
          • > спинлока
            Ок, согласен. Настоящий мутекс без ядерной поддержки он все равно не запилит.
            Ответить
            • Может коллеги из Северной Кореи поделятся технологиями.
              Ответить
            • Использование спинлока в случаях когда нужен мутекс - только потеря производительности.

              В ядерных спинлоках настоящих - сначало идет спинирование, а потом уход в ожидание события.
              В случае если ядро одно, то сразу уход в ожидание событие.
              Ответить
              • > Использование спинлока в случаях когда нужен мутекс - только потеря производительности.
                Да, и наоборот. Мне там надо пару переменных-то лишь поменять (новые размеры буфера выставить), ради этого я буду лезть в ядро за мутексом? Нет, я лучше в цикле пару кругов намотаю.
                Ответить
                • В критикал секшенах виндовых и линуксовых птредах, насколько помню, при захвате мутекса несколько тактов крутится спинлок, и если не удалось - поток отдает управление ядру и засыпает.

                  Зачем так сделано? А тупо потому, что если за 10-15 тактов мутекс не отпустили, то скорее всего и не отпустят, и лучше уйти поспать. А для "поменять пару переменных" оно как раз будет работать как твой спинлок.

                  Если я конечно не туплю.
                  Ответить
                • Неблокирующие алгоритмы на CAS конечно лучше и быстрее блокирующих (если они работают правильно, что есть нетривиальная задача).
                  Но, поверь, там достаточно веревки чтобы выстрелить куда надо. Это, наверное, один из самых сложных способов писать многопоточный код. И то что в CASе не может быть дедлоков - миф.
                  Ответить
                  • Что такое ЦАС? Я знаю только ЦАК, его на нос вешают.
                    Ответить
                    • ЦАС... Хе-хе-хе. Такое написание заставляет течь кровь из моих глаз.
                      Именно твоё __sync_ololo:
                      __sync_val_compare_and_swap
                      Ответить
                      • Мютекс без ЦАСа как говнокод без Тараса.
                        Ответить
                      • Так и откуда в CAS дедлок может быть? Ну кроме как если значение упорно не желает быть ожидаемым.
                        Ответить
                        • Насчет мертвых замков на одном CAS'е - х.з. Там, имхо, надо минимум два CAS'а, чтобы их устроить.

                          А вот расовое условие и проблему АБА словить можно только так. Может быть 3.14159265 их и имел в виду?
                          Ответить
                          • Ну в моём-то расового условия нету.
                            Ответить
                          • Дедлок:

                            Достаточно 2 потока (или более, что ещё хуже) непрерывно касирующих одну переменную. Но время обработки данных у каждого потока разное. У одного много меньше, чем у другого. В результате один касирует редко, а второй часто. Так вот редко кассирующий попадает в дедлок, так как никак не может сохранить результат своих действий и продолжить работу, так как часто кассирующий постоянно меняет исходные данные.

                            Тоесть у касирующих алгоритмов есть следующая гарантия: хотябы один поток идет к прогрессу в расчетах, но нет гарантии, что данный конкретный поток хоть раз проведет успешный кас.
                            Ответить
                            • > В результате один касирует редко, а второй часто.
                              А это имхо не дедлок, имхо, а starvation, когда одному потоку не дают поработать.

                              А дедлок он все-таки мертвый и неустранимый кроме как убийством одного из тредов.

                              P.S. А еще есть live-lock, когда два потока активно дрочат синхронизацию, но при этом ни один не может продвинуться дальше.
                              Ответить
                              • > А это имхо не дедлок, имхо, а starvation, когда одному потоку не дают поработать.
                                Скорее это livelock. Только вот при использовании cas-алгоритмов - ты эту ситуацию никак урегулировать не можешь. Долгое время код работает нормально, а однажды это вылазит и приходится переписывать очень многое с lockfree на lockfull, так как переписыванием одно модуля понятное дело уже не обойдется (возможно даже весь проект переписать придется).
                                Урегулировать можно только в активные потоки вставлять слипы или критические секции, чтобы их утихомирить, но это сразу минус в эффективности и простоты управления
                                Ответить
                                • При live-lock не было бы полезной работы. А тут один из тредов ее делает, просто не дает другим.

                                  P.S. На самом деле такое CASодрочево возникнет только в одном случае - если один из потоков только и делает, что лезет к этой расшаренной структуре. Если же между операциями над структурой они занимаются какой-то достаточно долгой полезной работой - starvation маловероятен.

                                  P.P.S. А схема с постоянным дрочевом одного и того же места в одной расшаренной структуре - это уже первый шаг к херовой производительности, и тут ни lock free ни lockful не спасут.
                                  Ответить
                                  • > При live-lock не было бы полезной работы.
                                    Я знаю определения этого термина, но ближе всего к нему, если искать среди *lock'ов:
                                    > Скорее это livelock.
                                    Но это не важно. Можно назвать голоданием.
                                    Ответить
                                  • >Если же между операциями над структурой они занимаются какой-то достаточно долгой полезной работой - starvation маловероятен.
                                    Не в этом дело. Если все потоки занимаются достаточно долгой полезной работой, но период длительности обработки данных из одной и той же структуры разными потоками всегда стабильно отличается более чем в 2 раза, то происходит это самое голодание более slow потока. Это оновы concurrence
                                    Ответить
                                  • > А схема с постоянным дрочевом одного и того же места в одной расшаренной структуре - это уже первый шаг к херовой производительности
                                    А что поделать? Зачастую именно такие места заменяют на локфри, так как производительности критических секций уже не хватает.
                                    Ответить
                              • > А дедлок он все-таки мертвый и неустранимый кроме как убийством одного из тредов.
                                Устраняется легко без убийства. Анализ кода. Или throw или возврат локошибки из ожидания примитива. Только обработчики под эту ситуацию придется писать. Благо алгоритмы обнаружения возможности дедлоков известны и проработаны.
                                Ответить
                              • > а starvation, когда одному потоку не дают поработать.
                                Да-да. Гумно правильно сказал. Именно это имелось ввиду. Когда тредов несколько это не так критично.
                                Но когда их несколько десятков CAS начинает сливать лочкам, потому что они начинают друг другу мешать и больше процессорного времени каждого тратится на повторения в цикле. Получается эффект переполненного метро (или банки с огурцами), когда никто не может вылезти из вагона, потому что мешают соседи.
                                В то время как мьютекс заставляет их высторится в очередь и ждать.
                                Ответить
                          • Что-за рассовое условие? Пффф. Пользуйтесь интернациональными терминами. Race Condition. RC бывает обычно в не касовых алгоритмов, а не в них. В касовых алгоритмах RC возможно только если не везде где нужно использовать касы.

                            Хотя есть одна RC на самом деле и в касах. Удаление все ещё используемого элемента. В C# и Java этой проблемы нет, ибо сборщик мусора решае 1)и ABA 2)и RC при удалении памяти, используемой в другом потоке. Так что С++ для lockfree-алгоритмов уныл, так как требует ещё большей внимательности и концентрации при разработке, чем обычо
                            Ответить
                            • > В касовых алгоритмах RC возможно только если не везде где нужно использовать касы.

                              CAS'ы дорогие, поэтому любой уважающий себя алгоритм старается юзать минимально возможное количество CAS'ов. А от этого до race condition всего один шаг.
                              Ответить
                            • Лол. Кто-то минуснул. Неужели кто-то не согласен с тем, что разработка локфри алгоритмов на управляемых языках более удобна? Аргументы? Или просто не касались этой области, поэтому не в теме?
                              Ответить
                              • > разработка локфри алгоритмов на управляемых языках более удобна

                                Да вроде ты всё верно говоришь. Хотя и в GC-языках я наступал на ABA с nullами. Не до конца подумав пытался секономить на пустых объектах - выстрелил себе в ногу.
                                Ибо CAS не видит разницы между nullами, а вот пустые объекты затратно, но безопастно.

                                В не GC надо организовать пул таких объектов - больше работы, но и выше производительность, потому берешь из пула, а не делаешь malloc & free.

                                >CAS'ы дорогие
                                ЛолШто? Наоборот, при низкой конкуренции CAS быстрее лочки, ибо он поддерживается на уровне железа.
                                Ответить
                                • > CAS'ы дорогие
                                  По сравнению с обычными не атомарными командами же, не по сравнению с лочкой.
                                  Ответить
                                  • >По сравнению с обычными не атомарными командами же

                                    А. Ну это черезчур очевидно.
                                    Скажем по стоимости и соответственно силе они идут так:
                                    no sync<volatile<atomic(CAS)<lock(mutex)
                                    Ответить
      • > А начать с того что изучить хотя бы одну книжку или десяток статей по теме.
        Блядь, из-за гуглопидоров мне ещё и 10 статей читать, причём ещё и небось на английском? Не проще ли нагуглить функцию __sync_ololo_and_trololo, написать велосипед, запостить на пару сайтиков и отладить по комментам? Не кажется ли, что код из 10 строчек с непредсказуемыми эффектами как раз таки именно по комментам отлаживать и надо?
        Ответить
        • как человек, считающий себя программистом, не может прочитать пару статей на английском?
          ты ведь понимаешь, что по тебе рисуют образ "типичный дельфи-программист"? какой пример ты подаешь молодёжи?
          Ответить
          • Ой, уже пару, ну надо же.
            Если фреймворк требует от меня чтения поебени, дохуя далёкой от темы фреймворка, то этот фреймворк - говно.
            Если эти пидоры из гугла умудрились сделать колбека в отдельном потоке, заставляя пользователя учить потоки, то это просто лютый бешеный пиздец, впрочем, про НДК и так все знают, что это так.
            Ответить
            • Тарас, привыкай, время наивных однопоточных приложений заканчивается. Хорошее знание потоков и примитивов синхронизации нужно, как не крути. Да, это сложно. Но и очень интересно. После того, как попробуешь параллельное программирование, сложно отвыкнуть мыслить параллельно и асинхронно.
              Ответить
              • Я мыслю стейт-машинами. Я мыслю, как разбить действие на "порции действия", которые я вызываю явно, явно переключаясь между ними. И этот подход в разы надёжнее всех этих потоков.
                Ответить
                • Сопрограммы это круто, я тоже их люблю. В python, кстати, есть неплохая поддержка сопрограмм. Haskell, благодаря ленивости, по сути тоже делает из функций сопрограммы.

                  Но, к сожалению, они обычно медленней многопоточности и хуже масштабируются. Доступные машины с сотней-другой ядер (пока на видеокартах) уже есть. Товарищи из Tilera творят невероятные вещи, хоть их разработки пока довольно дороги.

                  По мне, самый удобный механизм работы с конкурентностью - акторы. Кстати, стейт-машины отлично на них ложаться.
                  Ответить
                  • > Но, к сожалению, они обычно медленней многопоточности
                    На 1 ядре - очевидно нет.
                    Ответить
                    • Нифига не очевидно. Пока один поток ждёт что-то считает, второй может ждать отклика из сети, третий ждёт, пока докрутится жёсткий диск и т.д. В компьютере достаточно много источников параллельности помимо CPU.
                      Да и GUI для ресурсоёмких задач программировать без многопоточности - садизм.
                      Ответить
                      • > Да и GUI для ресурсоёмких задач программировать без многопоточности - садизм.
                        И в то же время программировать гуй с многопоточностью - мазохизм.
                        Ответить
                  • -тся
                    Ответить
                  • > Товарищи из Tilera творят невероятные вещи, хоть их разработки пока довольно дороги.
                    А что они делают?
                    Ответить
              • Think.Async().AsParallel();
                Ответить
            • > Ой, уже пару, ну надо же.
              примитивов межпоточной и межпроцессной синхронизации не так много
              уверен на педивикии даже на русском есть
              после того, как ты ознакомишься с полным списком, надо его отфильтровать по поддерживаемыми платформой и выбрать подходящий
              я сейчас, по моему, очевидные вещи говорю, не благодари
              Ответить
              • Дело не только в примитивах, но и в парадигмах
                Ответить
                • парадигма на начальном этапе одна - заблокируй, сделай, разблокируй
                  пока ты не решаешь эффективно задачи reader/writer, частичной блокировки сложного объекта или рекурсии, её хватит
                  я тебе про буст уже говорил, по крайней мере BoolKeeper писать не пришлось бы
                  Ответить
              • ТАРАСОПРИНЦИПЫ
                Ответить
          • Дельфин, вышивка крестом.
            Ответить
        • >__sync_ololo_and_trololo, написать велосипед
          > запостить на пару сайтиков и отладить по комментам?

          >Запостил: LispGovno,
          Пиздец. И сильно тебе помогли на гкоде?
          Ответить
          • На гкоде я узнал, что я хуй, на гдеве мне сказали, что первый вариант говно, что второй вариант тоже говно, и что второй вариант всё-таки правильный.
            По-моему, КПД неплохой.
            Ответить
            • говно, сданное на анализ, всё равно говно, даже если все показатели в норме.
              Ответить
              • Я несколько часов думал, что ответить, такая тонкая аналогия, что я реально подвис.
                Когда говно сдают на анализ в поликлинику, то заранее знают, что это говно и ищут только следы болезней.
                А когда говно выкладывают на форум, то слово "говно" получается в переносном смысле и вопрос состоит не в нахождении симптомов полезней в этом "говне", а в вопросе о том, говно ли это вообще. Обычно этот тонкий нюанс не имеет роли, но именно в твоём случае он - самый важный. Поэтому твоё утверждение, применительно к коду, неверное.
                Ответить
                • >Я несколько часов думал, что ответить, такая тонкая аналогия, что я реально подвис.
                  Найди себе уже девушку наконец, а не виси над аналогиями
                  Ответить
                  • Гумно не придумало достойный ответ, поэтому решило невпопад под случайным комментарием написать "найти себе девушку".
                    Ответить
                • в целях предотвращения террористических актов анализы кала и мочи сдавать в открытых ёмкостях
                  Ответить
                  • Вопрос к гурам крестов:
                    Каким образом можно применить std::move_if_noexcept?
                    http://en.cppreference.com/w/cpp/utility/move_if_noexcept
                    Ответить
                    • ты же сам на гейдеве постил длинную статью про него
                      применять натощак, когда в твоем методе, а еще лучше, конструкторе, требуется гарантия, что move ничего не выкинет
                      даже по твоей ссылке это написано - используется вектором при ресайзе (расшифровываю - вектору хотелось бы знать, выкинет ли элемент исключение при перетаскивании его из старого буфера в новый, и если он на такое способен, то вектор от греха подальше будет пользоваться копированием всех существующих элементов в новый буфер, и лишь когда они скопируются нормально, поудаляет их в старом,
                      ну а если мув элементов обещает вести себя хорошо, то вектор их сразу будет мувом перемещать)
                      Ответить
            • > На гкоде я узнал, что я хуй
              > По-моему, КПД неплохой.
              Лучше бы ты пару статей прочитал и уже бы написал годный код, чем 4 дня висеть целый день на говнокоде и говнодеве и слушать инфу о том кто же все-таки ты такой на самом деле.
              Ответить
              • показать все, что скрытоЧитать пару статей - это два дня полностью занятого времени. Сначала мой мозг будет на 100% загружен переводом текста, при этом он будет не в состоянии понимать его смысл, потом мне этот перевод надо будет понять и распознать, причём понять требуется со 100%-точностью, иначе программа будет глючить.
                А на говнокод несколько раз за день зашёл на несколько минут, почитал комменты, всё понял, ушёл.
                Ответить
                • Ну не знаю, читать и переводить для меня сейчас совершенно разные вещи. Если я пытаюсь перевести - да, мозг на 100% загружен транскодингом в более-менее годный русский язык. Если тупо читаю, не пытаясь переводить - то читается легко и непринужденно, и смысл понятен...

                  Читай больше английских текстов, и будет тебе счастье.

                  P.S. Последнее время разочаровался в статьях на русском. Обычно или переводчик надмозг (хоть и врубается в тему), и читать в оригинале намного легче, либо переводчик нихера не понимает в теме, и переводит текст как литературный.
                  Ответить
                  • может пополнить ряды?
                    Ответить
                  • > Последнее время разочаровался в статьях на русском.
                    > читать в оригинале намного легче
                    Верной дорогой! Когда-то и мне это казалось извратом - "чтение в оригинале, фу". Прикол в том что и индус, и болгарин, и китаец, и русский, и француз, и немец - все худо-бедно поймут сраный инглиш. И потому смогут ужится на одном форуме.
                    Да и огромное количество полезной инфы (спецификации, стандарты, документация, статьи), которую никто не собирается переводить именно на англицком.
                    Хороший, простой, доступный Тарасу пример: документация на сайте MS.
                    Ответить
                    • лол, MS теперь наоборот старается подсунуть свой промтоперевод справочника
                      Ответить
                      • У вас дальтонизм, сэр?

                        ps: Борманд ниже тоже цвет не разглядел.
                        Ответить
                    • Плохой! Ужасный пример!

                      Как ни попаду на сайт мс из гугла - так мне подсовывают быдломашинный перевод, который невозможно читать, а ссылку на оригинал каждый раз забываю где искать...
                      Ответить
                    • На сайте MS всё понятно, потому что там надо знать только слова "инпут, оутпут, ретурн валуэ, констант валуэс", там тупо тенический текст, а технический текст он интернационален.
                      Ответить
                      • >На сайте MS всё понятно
                        Ок. Ты сам на каком языке его читаешь?

                        > там тупо тенический текст
                        А статьи/книжки по многопоточности не тенический текст получается?
                        "волатиле", "ЦАС", "атомис", "лоск", "мутех"

                        >Плохой! Ужасный пример!
                        Что не так?
                        Ответить
                        • http://simple.wikipedia.org/wiki/Simple_English
                          язык, на котором написана документация PSDK у MS
                          поэтому и китаец и якут и даже Тарас все прекрасно понимают
                          Ответить
                        • > Что не так?
                          Потому что "Как ни попаду на сайт мс из гугла - так мне подсовывают быдломашинный перевод, который невозможно читать, а ссылку на оригинал каждый раз забываю где искать..."

                          UPD: Хм, зашел сейчас - вверху болтается радиобокс - перевод/оригинал. Ну уже прогресс, юзать можно.
                          Ответить
                          • >вверху болтается радиобокс - перевод/оригинал.
                            Помню были разные варианты представления страницы, но возможность выбрать оригинал была всегда. Сменой страны на сайте например
                            Ответить
                            • Само собой были, но т.к. я на MSDN последнее время захожу достаточно редко, то каждый раз я терялся, и не мог сразу найти где же инглиш, а не высер робота-имбицила.
                              Ответить
                              • Еще было очень смешно когда для явно кривого текста было гордо указано "переведено вручную"
                                Ответить
                                • >"переведено руками надмозга"
                                  fixed
                                  Ответить
                                • Никогда, кстати, не понимал смысла переводных статей. Всю жизнь у меня был с две тысячи какого-то года win32.hlp и я горя с ним не знал.
                                  Ответить
                  • Да, для меня чтение и перевод вещи почти не связанные, первое даётся гораздо легче. Пробовал как-то книгу переводить, это ад. А читать очень просто.
                    На работе пытаюсь внедрять инглиш хотябы в комменты и документацию, хотя бы в проекты, за которые отвечаю я.
                    Думаю вот ещё уютненький бложик завести где-нибудь не пьянсва окаянного ради, практики инглиша для
                    Ответить
                    • А вот с англоязычной письменностью у меня очень плохо. Комменты, написанные мной, кажутся мне говном...
                      Ответить
                      • Читаю на инглише и не замечаю что на нем читаю технические тексты. Если меня спросить на каком я языке только что читал текст, то я не отвечу.

                        Как то сами смыслы предложений всплывают на русском без каких либо усилий с моей стороны.
                        Ежели меня попросить перевести текст дословно, переводя каждое слово - перегрев и зависание.

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

    Добавить комментарий