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

    +18

    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
    #include <iostream>
     
    int main() {
        // Инициализируй меня... полностью.
        void (*(&(*omg[])())[1]) (void (*)(void (*(*[])())())) = { [] () ->
        void (*(&)[1]) (void (*)(void (*(*[])())())) { static void (*f[])
        (void (*)(void (*(*[])())())) = { [] (void (*f)(void (*(*[])())())) {
        static void (*(*ff[])())() = { [] () -> void (*)() { return [] () {
        std::cout << "Test OK" << std::endl; }; } }; f(ff); } }; return f; } };
     
        // Вызывай, вызывай меня... полностью.
        omg[0]()[0]([] (void (*(*f[])())()) { f[0]()(); });
     
        return 0;
    }

    http://ideone.com/gvg1B7

    Говнокоду http://govnokod.ru/12066 посвящается.

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

    С++ это простой и наглядный язык.

    Запостил: bormand, 07 Ноября 2012

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

    • Говнокод, посвященный говнокоду. Сильно.
      void (*(&(*omg[])())[1]) (void (*)(void (*(*[])())())) = 
      {
      	[] () -> void (*(&)[1]) (void (*)(void (*(*[])())())) 
      	{ 
      		static void (*f[])(void (*)(void (*(*[])())())) =
      		{ 
      			[] (void (*f)(void (*(*[])())())) 
      			{
      				static void (*(*ff[])())() = 
      				{
      					[] () -> void (*)() 
      					{ 
      						return [] () 
      						{
      							std::cout << "Test OK" << std::endl; 
      						}; 
      					} 
      				}; 
      				f(ff); 
      			} 
      		}; 
      		return f; 
      	}
      };
      Тарас, сколько в отступе нужно пробелов, чтобы код стал читаем на крестах?
      Ответить
      • Насколько было бы проще, если бы в крестах был вывод типов:
        auto omg = 
        {
        	[] () -> auto 
        	{ 
        		static auto f(auto a) =
        		{ 
        			[] (auto f) 
        			{
        				static auto ff() = 
        				{
        					[] () -> auto 
        					{ 
        						return [] () 
        						{
        							std::cout << "Test OK" << std::endl; 
        						}; 
        					} 
        				}; 
        				f(ff); 
        			} 
        		}; 
        		return f; 
        	}
        };

        PS: За корректностью не следил.
        Ответить
        • Элсо, если не считать того, что за корректностью не следил и это псведосинтаксис, то можно как-то:
          auto omg[] = 
          {
          	[] () -> auto 
          	{ 
          		return [] (auto f) 
          		{
          			return f([] () -> auto 
          			{ 
          				return [] () 
          				{
          					std::cout << "Test OK" << std::endl; 
          				}; 
          			}); 
          		} 
          	}
          };
          По стандарту лямбда без списка захвата кастится до функции.
          Ответить
          • по идее компилятор должен самостоятельно выводить возвращаемый лямбдой тип исходя из её return
            отдельно надо будет указывать, если компилятор не смог разобраться
            Ответить
            • вот, нашел пункт в своей копии стандарта:
              5.1.2/4
              ...If a lambda-expression does not include a trailing-return-type, it is as if the trailing-return-type denotes the following type:
                 — if the compound-statement is of the form
                       { attribute-specifier-seq-opt return expression; }
                    the type of the returned expression after lvalue-to-rvalue conversion (4.1), array-to-pointer conversion (4.2), and function-to-pointer conversion (4.3);
                 — otherwise, void.
              т.е. компилятор вправе считать, что лямбда возвращает void, если написано if (foo) return a; else return b; - что приведет к ошибке компиляции
              Ответить
              • А чем своя копия стандарта отличается от чужой?
                Ответить
                • показать все, что скрытоВидимо он распечатан...

                  ... Дефекейт не спеша подошел к стеллажу и снял с полки толстый старинный том. Окинув книгу взглядом и стряхнув с нее пылинку, Дефекейт аккуратно положил ее на стол. На черной как смоль обложке тома виднелась загадочная надпись ISO/IEC 14882:2011.

                  Дефекейт бережно открыл книгу, опытным взглядом пробежал по содержанию...
                  Ответить
                • В своей копии должен стоять автограф Саттера и Страус трупа.
                  Ответить
                  • все банальней
                    на моей копии написано draft Replica, а у страус трупа - Desert Eagle .50
                    Ответить
            • -> auto надо писать обязательно, если хочешь, чтобы вывод типов сработал. По дефолту компилятор считает, что:
              [] () { эквивалентна [] () -> void {
              также если выражений в лямбде больше чем одно, он опять же вывод типов в крестах пошлет кодописателя на ху
              В результате у нас в отделе появились некоторые дейтели, дейтельность которых стоит отправить как нибудь на говнокод, а именно:
              они начинают записывать if как "?:" , а выражения через ",".
              например как-то так (код не проверял):
              auto fac = [](int a) -> auto
              {
              	return (cerr<<"\n fac debug " << a), a<=1 ? 1 : a*fac(a-1);
              };

              Ну и конечно у этих дейтелей код подлинее.
              Ответить
              • Точнее наверное как-то так, а то не скомпилируется рекурсия:
                std::function<int(int)> fac = [](int a) -> auto {
                Ответить
              • что же этим деятелям неймется?
                компиляторы еще не поддерживают новый стандарт - значит не production ready
                как они бедные страдали предыдущие 15 лет то, без лямбд
                я вот например не собираюсь ловить тонны лулзов, если у заказчика по причине беты компилятора что-нибудь наебнется в новогоднюю ночь, а ты виноват
                Ответить
                • Они уже новый стандарт вовсю пилят, теперь банановый
                  Ответить
                  • ну новый планируют к 2017 году

                    а кем ты себя видишь, анон, через 5 лет?
                    Ответить
                    • Видимо, через 5 лет C++ догонит по фичам D, но синтаксические правила станут настолько сложными, что проще будет
                      # fuck backward compatibility
                      committee@iso$ mv /comp/lang/d /comp/lang/c++
                      Ответить
                      • фу мерзость
                        Ответить
                        • Если есть серьёзные претензии к D (кроме подозрительного обожания объекта некоторыми субъектами), было бы очень интересно узнать ваше мнение.
                          Ответить
                          • D замена разве что нативному сишарпику. На низкоуровневый инструмент не тянет.
                            Ответить
                          • слишком неторопливый убийца с++ - за 13 лет так и не обзавелся стабильными, быстрыми и удобными компиляторами, дебаггерами, средствами разработки

                            успел сменить целое поколение, объявив все старое deprecated

                            обречен на провал, т.к. гугл по запросу D находит всё что угодно, но не помощь по языку (не сравнить с тегом c++)

                            все это обжевывалось бесплатными тестерами на гамедев (как они кололись и плакали - см тут http://www.gamedev.ru/flame/forum/?id=164293, http://www.gamedev.ru/flame/forum/?id=167199) - так что пробовать что-то лично и тратить время - вовсе нет желания

                            ну и чисто меркантильная причина - работы на D в москве еще многие годы будет ровно 0 вакансий, а и у с++ последние пару лет явный ренессанс, плюс в упор не вижу что такого киллер-фичного может мне предложить D, чтобы я его терпел и переводил на него свои миллионы строк (и кто мне буст на D подарит?)
                            Ответить
                            • Спасибо. Действительно, не стоит тратить на это время. Выгода сомнительна, будущее туманно.
                              Ответить
                              • В вакууме D лучше чем C++, но в реальном мире D - говно.
                                Ответить
                            • Дефевата в своём стиле: лично пробовать не пробовал, но, раз гейдевки обосрали, то осуждаю
                              Ответить
                      • Ну как, стало проще?
                        Ответить
                      • > Видимо, через 5 лет C++ догонит по фичам D

                        Нет, не догнал, даже через 11 лет. Аналога "mixin" в крестопараше как не было, так и нет.
                        Ответить
              • Говорят в новом стандарте появится автовывод для параметров лямбд:
                [] (auto f) {
                //синоним для
                template<class T>
                [] (T f) {
                Ответить
                • Что соответственно есть:
                  class Lambda
                  {
                     ctors;
                     template<class T>
                     operator()(T f) -> decltype(body)
                     {
                       body;
                     }
                  }
                  Ответить
                  • Но ведь это по человечески все равно использовать нельзя, тк конструкция
                    std::function<auto(auto)>

                    не возможна.
                    Ответить
                    • показать все, что скрытоТихо сам с собою я веду беседу.

                      > std::function<auto(auto)>
                      Ну да, как это потом вызывать? Все auto должны разрулиться во время компиляции.
                      Ответить
                      • >Тихо сам с собою я веду беседу.
                        Так я надеюсь, что меня умные люди услышат.

                        >Ну да, как это потом вызывать?
                        Получается такую лямбду не удастся передать в функцию. То есть фактически не возможна функция высшего порядка, в которую передали лямбду с автовыводом типов. Поэтому я не знаю, на что рассчитывают создатели стандарта. Игрушка какая-то. Не примут наверное опять. Так у крестов и не появится нормальных лямбд.
                        Ответить
                        • А ведь ты прав. В течении всей этой ветки дерева - разговаривал сам с собой. :( Только вот ты вклинился. :)
                          Ответить
            • показать все, что скрыто> отдельно надо будет указывать, если компилятор не смог разобраться
              Так и есть, указывал его только в неочевидных местах.
              Ответить
              • >указывал его только в неочевидных местах.
                То есть очевидные места только здесь: :D
                return [] () 
                {
                	std::cout << "Test OK" << std::endl; 
                };
                Ответить
    • Инициализация массива указателей на функции, возвращающих ссылку на массив указателей на функции принимающие указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию ничего не принимающую и ничего не возвращающую.

      Русский это простой и понятный язык.
      Ответить
    • К счастью, ничего даже близкого к этому в реальной жизни практически не встречается (я видел миллионы строк сишного кода). Если очень хочется астрала - тайпдефы и структуры в помощь (можно использовать структуры, содержащие коллбэки с хорошими именами, как в юниксовой vfs, а список обработчиков событий один фиг лучше делать связным списком).
      Но в целом - да, с декларацией типа в сишке перемудрили. Мне лично очень нравятся декларации типа в Haskell.
      Ответить
    • http://bitly.com/UwmLWv
      в одном месте, где pointer to array (cdecl не понимает reference, а с++decl они не запилили) надо поменять с * на &

      ну и задача, кстати, в условии поставлена не полностью - слово "функция" употреблено 4 раза, а слова "принимающая" и "возвращающая" - по три
      Ответить
    • Где здесь C++?!
      Судя по обилию скобок это помесь пёрла и лиспа, вперемешку с ключевым словом void, которое обозначает пустоту.
      Ответить
      • Выглядит довольно синтетичненько, кстати.
        Ответить
        • Вот поэтому я и минуснул. О кстати, я уже не один такой.

          Человеческий мозг падок на безумные конструкции, можно городить и усложнять косвенность адресации до бесконечности.
          В чем провинился С++ осталось непонятным.
          @Steve_Brown выше выразил ту же мысль чуть иначе.
          Ответить
          • показать все, что скрыто> Где здесь C++?!
            Компилируется, выводит результат, с++ тут на месте.

            > В чем провинился С++ осталось непонятным.
            Ну не зря же я подсветил фразу зеленым ;) Steve_Brown понял сарказм в этой фразе и написал прекрасный ответ.

            > Вот поэтому я и минуснул.
            Все правильно сделал. Оценки для того и сделаны, чтобы сообщить автору интересен ли его пост, и что ему стоит делать\не делать в будущем. Я за честные, объективные оценки, пусть даже это будет "да ты ебанулся что-ли?".

            P.S. Писал пост под впечатлением вчерашнего обсуждения сишных деклараций. Если же посмотреть трезвым взглядом - да, в реальном коде на с++ такие конструкции никто не пишет, а если пишут, то все завернуто в тайпдефы...
            Ответить
    • Так на любом языке можно говно написать. Даже на HQ9:
      HH99HQ9H99QH9Q99HQ9HQ9H9Q9HQ9H9QH9Q9HQ9H9Q9HQ9H9Q9HQ99999HQ99HQ9H9Q9HQ
      Ответить
      • HQ9 устарел, его используют только бородатые старпёры, не осилившие ООП. Нормальные люди пишут на HQ9+.
        Впрочем, в HQ9-коде есть некоторый старомодный шарм, да.
        Ответить
        • Ололо! ООП не нужно. Любую программу на языке HQ9+ можно переписать на HQ9 и она скорее всего станет короче, быстрее и более понятной. ООП - не нужно.
          Ответить
          • Да ты просто не писал большие проекты. Ты хоть раз видел многомегабайтный код на HQ9? Ты хоть понимаешь, какой это пиздец - каждый раз на HQ9 вручную делать то, что на HQ9+ встроено в язык?
            Ответить
            • Ну да ну да.

              Между прочим ядро Hinuq написано на HQ9, а его исходники занимают 300 мб.

              Также на HQ9 написано большинство приложений проекта HNU. А это значит, что HQ9 отлично подходит для больших проектов.

              А язык HQ9+ слишком сложен, из-за этого до сих пор не существует компилятора, поддерживающего все возможности, описанные в стандарте.

              Hinuq - отслыка на Linux. HNU - GNU. Соответственно HQ9 - сишка.
              Ответить
    • Не хочу изучать кресты, боюсь за свой мозг.
      Ответить
      • Я изучил, всё ок. Мозги на месте. Знание С++ ни на питоне ни на хаскелле программировать не мешает.
        Ответить
      • Это черный пиар.
        Стоит быть объективным:
        на плюсах написано гораздо больше хорошего софта, чем на дэ, обжективе, дельфях, бейсике и аде вместе взятых.
        Ответить
      • показать все, что скрытоИзучай, с мозгом ничего не станет. Почти все, что мы тут рассматриваем о крестах на ГК - это тонкости с которыми рядовой программист столкнется раз в жизни.
        Ответить
        • В чем преимущество плюсов и их главный недостаток - множество парадигм, правил и фич языка.
          Можно писать практически в любом стиле, в т.ч. мешать всё подряд и получать новые уникальные говностили.
          Но лучший аргумент "за" в любом споре - на крестах пишет даже Тарас.
          Ответить
      • Да никто тебя не заставляет, брат ты наш меньший, нам сишникам часто деньги платят, чтоб мы для вас писали скриптовые интрепритаторы, джава машины, и даже те уютненькие айдие в которых вы набираете свой код.
        Ответить
        • > джава машины
          А ты много жабамашин написал?

          > сишникам часто деньги платят ... (за) скриптовые интрепритаторы
          Особенно много бабла отбашляли Гвидо за Python, ещё больше хапнул Мацумото за Ruby а Борн просто стал миллиардером

          > уютненькие айдие
          самая лучшая IDE написана на жабе
          Ответить
          • кстати, насчет иде-флейма
            если это был наброс про idea, так лично у меня она безбожно тормозила
            впрочем, как и эклипс
            удалил без сожаления

            то ли дело ide, писанные на lisp
            Ответить
            • Emacs не годиться для серьёзной разработки на Java или Scala (я, конечно, могу в нём писать код, даже в больших проектах, но продуктивность, конечно, гораздо ниже, да и рефакторинг мучительней, Ensime безбожно тормозит, жрёт память и крэшится).
              Eclipse убог и ненавидим мной всей душой.
              Единственная IDE, которая мне понравилась - Idea. Если отключить неиспользуемые плагины, она потребляет весьма вменяемое количество памяти, и работает достаточно быстро даже на моём далеко не топовом ноуте. fuzzy-search у меня тоже работает очень быстро, качество рефакторинга тоже очень радует. Ребята из JetBrains молодцы. Ещё бы шрифты в линупсе починили... Но там вроде бы жабопроблемы.
              Ответить
            • Смотря на чем писать...
              Последние серьезные попытки что-то делать для Явы в Эмаксе закончились, судя по всему с появлением Эклипса, т.е. судя по дефолтным настройкам в JDEE, они писались в эпоху когда JDK был то ли 1.1, то ли 1.3 но не позже.
              Эмакс долгое время морально отставал от других редакторов потому, что распознавание синтаксиса было построено на регулярных выражениях. Не совсем, конечно, но чего-то такого как MPS в Эмаксе не было. Одна из причин - в нем очень просто слепить подсветку синтаксиса пользуяс font-lock + regexp. Но в итоге, она будет иногда неправильной.
              В 23-й версии решили интегрировать CEDET, а главное, его модуль Semantic. Это полноценный парсер + лексер, на базе которых можно строить и рефакторинг и кодогенерацию и т.п. В 24-й версии начали подтягиваться остальные, и переписывать под использование Семантика, но это долгий процесс.
              Что хорошо работает, на мой неискушенный взгляд - cc-mode. Что интересно, Ява, очевидно, получит новое развитие, т.как в CEDET над этим работают, чего-то добавляют и т.д.
              Что, конечно, нехорошо, так это то, что, над CEDETом работают полтора инвалида, в сравнении с тем же Эклипсом / Идеей, которых поддерживают монстры типа IBM, Adobe и т.п.
              И тем не менее, даже при таком раскладе, есть много вещей, которые таки получилось сделать лучше :) Я немного знаком с MPS, и как бы могу изнутри сравнить даже... MPS - идеологически недоразвитое существо. Как бы и сколько бы человек над ним не работало, там изначальные задумки херовые. MPS по отношению к Semantic, примерно как XSD по отношению к RELAX NC.
              Еще, объективный недостаток, к сожалению, для продуктивной работы нужно хорошо знать как редактор работает, и, практически, программировать редактор - необходимость. Новичку гораздо лучше дать Эклипс, да даже не обязательно новичку, если человеку влом заморачиваться, то Эмакс ему будет только мешать.
              Да, и еще интересный момент: жабоскрипт в Эмаксе просто офигеть на каком уровне, даже по сравнению с MSVS / Aptana и т.п.
              Ответить
              • Говорят, у semantic ощутимые проблемы с производительностью, особенно на крупных проектах (в частности, плюсовых).
                Ответить
                • Проблемы скорее потому, что нужно хорошо знать из чего он состоит, и как использовать так, чтобы проблем не возникало... Т.е. просто еще нет инфраструктуры вокруг, которая сделает все эти настройки вместо пользователей, которые не знают, как это сделать. На это нужно время и люди, которые бы этим занялись. По-сути кроме Эрика над ним никто и не работает. За исключением случайных патчей от других людей, там практически все написано одним человеком.
                  Я скоро доберусь до того, чтобы разбираться с wisent'ом, тогда и тесты буду делать. Пока я точно не знаю, но в любом случае, на принципиальном уровне, система задумана лучше. Если она сейчас работает медленно, то это дело времени и оптимизаций.
                  Ответить
          • Я не написал ни одной джава машины, а вот в написание скриптовых интерпритаторов в комерческих продуктах иногда встречается - так что ирония тут несовсем в кассу.
            P.S. Самая лутшая IDE - наверное только в мечтах существует.
            Ответить
            • показать все, что скрыто> Я не написал ни одной джава машины
              У вас все еще впереди.

              Сишник должен написать джава машину, разработать скриптовый интрепритатор, и построить уютненькую IDE.
              Ответить
              • посадить интерпретатор, воспитать джава-машину и построить IDE

                Функциональщик должен посадить зрение, воспитать джуниора и построить динамическую опердень
                Ответить
            • > P.S. Самая лутшая IDE - наверное только в мечтах существует.

              Я запилил себе лучшую IDE в виде связки Sublime Text 2 (с изменённой конфигурацией) и пачки компиляторов/интерпретаторов.

              (GCC, G++, Python2.8/3.2, GHC)

              Работает как часы.

              Автодополнение - не нужно (ни для С++, ни для С подребности не было, для жабы или сисярпа думаю нужно).
              Дебагером пользуются только тупые уроды (с).
              Ответить
              • показать все, что скрыто> Автодополнение - не нужно
                В жабе без него вообще никак. В с и с++ тоже не помешает.
                Ответить
                • >> ни для С++, ни для С подребности не было
                  >> для жабы или сисярпа думаю нужно
                  Ответить
                  • если потребности не было - значит не обломает писать и без подсветки и автоотступов
                    а раз не обломает - значит не обломает и без мультитабов
                    отсюда вывод - достаточно блокнота
                    компилировать - набирать руками каждый раз полные команды со всеми ключами
                    Ответить
                    • Скорость набора кода и избавление от рутинных операций для меня важна.

                      А вот, чтобы IDE считала, что я сотню классов из стандартной библиотеки не могу запомнить - такого не надо.
                      Ответить
                      • > сотню классов из стандартной библиотеки
                        Со всеми методами, разумеется? Да и приложения не пишутся силами только стандартной библиотеки.
                        Ответить
                        • Вы мне сейчас хотите доказать, что мне непременно нужно автодополнение?
                          Ответить
                    • показать все, что скрытоЛет 7 назад, когда я писал свою первую программу под J2ME (отправлялку халявных смс через Mail Agent), я для начала поставил эклипс. Потыкался, попытался понять как создать проект... Забил и сделал все в блокноте, запуская компиляцию руками, набирая каждый раз полные команды со всеми ключами через батник.

                      Так что когда проект маленький, а свободного времени много - блокнота достаточно.
                      Ответить
                      • У меня был недокомпилятор недоязыка jap на 5к строк кода (~40 файлов на C++).
                        Понимаю, что не много, но дошёл же как-то до этих 5к.

                        Может Вам и не понять, но отсутствие постоянного напоминания как у тебя в проекте что называется заставляет более осмысленно называть сущности.
                        Ответить
                        • Зато возможность безболезненно переименовывать сущности позволяет легко исправлять свои и чужие ошибки...
                          Я не спорю, что-то в этом есть, сам когда-то был против IDE и писал даже жабокод в vim. А теперь обленился :(
                          Ответить
                          • В данном случае вообще глупо спорить.

                            Я сам не против умного автодополнения и дебагера, просто для себя считаю это ненужным.

                            А наличие одной "IDE" для +5 языков для меня - киллер-фича.

                            Плюс конечно, благодаря некоторым изменениям конфигурации у меня есть возможность осществлять любые действия по одной универсальной горячей клавише.
                            Ответить
                            • Мне тоже нравится ST2, я к нему уже больше полугода присматриваюсь, но переехать решился только недавно (видел как-то в коммитах Линуса к uemacs сообщение "My fingers can not be retrained"). Скорость работы, кроссплатформенность и очень простая и удобная поддержка работы с проектами порадовали.
                              Пока не знаю, станет ли он моим ежедневным инструментом или нет.
                              Ответить
                              • Я сделал себе небольшую фичу. Меню по ctrl+shift+p перебиндил на alt+e ( очень удобно нажимать ) и загнал туда оочень много фич, на которые сложно запомнить горячие клавиши.

                                И теперь к примеру так решаются все проблемы:

                                1. Проблема - в текстовом файле все отступы набраны табами, хочу заменить их на пробелы.
                                2. УНИВЕРСАЛЬНОЕ ДЕЙСТВИЕ - нажимаю alt+e.
                                3. Набираю to spa(ces).
                                4. Выполняю команду "Convert Identation To Spaces"

                                Всё!

                                Также есть клавиша alt+q - для навигации по файлам, alt+w - для перехода в режим "distraction free".

                                Всё остальное делаю через универсаьное меню "alt+e".

                                Также со временем вырабатываются очень эффективные акронимы. Например:

                                alt+e + "nf" => New File
                                alt+e + "cf" => Close File
                                alt+e + "op" => Open Project
                                alt+e + "rea" => Reindent All
                                alt+e + "pain" => Package Control: Install Package

                                Нарадоваться не могу.
                                Ответить
              • Да такую самоделку можно запилить из любого текстового редактора, умеющего запускать скрипты, хоть Notepad++, а вот удобная навигация по дереву исходников, добавление новых ресурсов проект, гибкий поск по листингам и пректу, высокая производительность (шоб интерфейс не лагал когда вес проекта 10-15 гб), простое управление конфигурациями сборки, поддержка многих языков программирования (не на уровне подсветки синтаксиса, а чтоб к примеру могла показать откуда импортирован этот обьект) и чтоб можно было добавлять свои, еще желательна втроенная клиенска сторона систем контроля версия, просмотровщик репозиториев на серваке, ах да оперативное отслеживание всех модификаций, чтоб у прогера не вырабатывался рефлекс при появлении неясных глюков проводить стопроцентный перебилд проекта - потому что редактор гдето забыл какой-то файл модифиированый в обьектник пересобрать. Да и былобы не плохо - функциональный встроенный отладчик, чтоб там кто про него не думал
                Ответить
                • >шоб интерфейс не лагал когда вес проекта 10-15 гб
                  Чего?
                  10 гигабайт исходников? Вы в своём уме?
                  Если же 9.9 Гб занимают ресурсы, то при правильных настройках лагать не должна ни одна из известных науке IDE.
                  Ответить
                  • показать все, что скрыто> 10 гигабайт исходников
                    Я даже не представляю сколько человеко-лет нужно потратить, чтобы написать столько говнокода.
                    Ответить
                    • Больше убило
                      > ах да оперативное отслеживание всех модификаций, чтоб у прогера не вырабатывался рефлекс при появлении неясных глюков проводить стопроцентный перебилд проекта - потому что редактор гдето забыл какой-то файл модифиированый в обьектник пересобрать
                      Ответить
                      • показать все, что скрытоНу а что, эклипс явовские файлы пересобирает сразу при сохранении.

                        P.S. Тарас тут одно время жаловался, что у него иногда протухают файлы, и приходится пересобирать.
                        Ответить
                        • Это в IDE. IDE следят за всеми файлами, а в редакторах проще написать простенький Makefile и это будет уже его забота (есть например tup, который очень умно и быстро собирает проекты с минимальными изменениями).
                          http://gittup.org/tup/
                          Ответить
                    • Ну 10 гигов это весь репозиторий, но поверьте >100 мегабайт исходников (нужных и не очень комманде отвественной за целевую платформу), это запросто.
                      Ответить
                      • Что-же там за проект такой, если не секрет?
                        Ответить
                        • Геймдевовский, вот лежат у вас к примеру файлы-текстуры скажем в Тарга, файлы модели из 3ДС, любой файл особенно текстурный у нас считается маленьким если весит меньше 100 мегабайт, плюс скрипты написаные на перле/питоне/руби, иногда на всем сразу (для нармальной часто требуют пихания сторонних библиотек к себе), которые конвертируют текстуры/модели в форматы понятные игровому движку, пакуют все это добро сперва в зип, но потом могут модифицировать архив, генерят соответствующие ресурсам настройки конфигурационых файлов игры, корректируют .h файлы (добавляют новые енамы и макросы с айдишниками тех или иных ресурсов).
                          Ответить
                          • Игра, кроссплатформенная, на C++, с текстурами на 10 гб и кучей скриптов, чтобы гонять из одного формата в другой.

                            Проект коммерческий?
                            Ответить
                          • + документация по проекту, ее много но писал КЭП, очевидных вещей много, а вот для нужных вопросов ответов там нет.
                            Ответить
                          • показать все, что скрытоДа хоть 50 гигабайт исходников текстур. Максимум на что это повлияет - на скорость их перегонки в конечный формат, ну и на время генерации ашек, описывающих эти ресурсы. На IDE это никак не скажется.

                            Поэтому исходники текстур и моделей к исходникам не относим. Вы ведь правите их соответствующими редакторами, а не текстовым редактором с подсветкой, верно?

                            P.S. Если все это добавлено в проект, то тут уже важнее не размер ресурсов, а их количество - т.к. от количества файлов в проекте IDE действительно может начать тупить.
                            Ответить
                            • Может всё это вообще в каком-нибуть gameMaker'e делается?
                              Ответить
                            • >>>На IDE это никак не скажется.
                              Скажется, я неоднократно наблюдал как студия к примеру не могла кореектно отловить модификации ашки из вне и при сборке пересобрать все файлы к которым этот файл подключен. Кроме того я же еще и утверждал что при больших обьемах исходников (ресурсы, ладно отбросим, но ведь 100 мб тоже не мало), производительность IDE падает, если студия просто полагивает то икскод (особенно после 4 версии) еще и начинает безбожно жрать оперативку.
                              Ответить
                              • показать все, что скрытоНу, имхо, тут сказывается большое число ресурсов, которые приходится контролировать IDE, а не их размер.

                                100Мб исходников, которые нужно парсить + тысячи файлов с ресурсами в одном проекте это серьезная нагрузка на IDE, не спорю. И эти циферки пореальнее чем 10 гиг исходников, поэтому я склонен им верить ;)
                                Ответить
                                • Не 10гиг исходников, а вес всего проекта игры (может быть куда больше), а вес солюшена для IDE как части проекта куда меньше, но развеж это значит что мало.
                                  Ответить
                      • показать все, что скрыто> >100 мегабайт исходников
                        А вот в это я верю. 100-200 мегабайт это вполне реальная цифра для большого проекта.
                        Ответить
                        • 1600 MiB самое большое что я видел. И это просто ГИГАНТСКИЙ проект, и я не думаю, что Psionic работает над одним из таких при этом не зная про больших и маленьких индейцев и заходя на говнокод, чтобы запостить говнореализацию преобразования из BE в LE.
                          Ответить
                          • Я видел похожего поциента в реале.
                            Рассказывал про 8 гиг софта написанного своими руками в том числе своя ОС. Причем тут Денис Попов?
                            При этом не понимал разницу между javaScript и Java.
                            А всё что я видел из его софта - какое-то говно на Дельфях и мускуле.
                            Ответить
                            • Ну как же. Долг кажого уважающего себя хелоувордщика рассказать всем какой он крутой.
                              Я например написал (в одиночку и на голом ассемблере):
                              1. ОС - Ubuntu (500 ГБ исходников)
                              2. Компилятор - GCC (250 ГБ исходников)
                              3. Сайт - Google (320 ГБ исходников)

                              Заметьте, всё на голом ассемблере и без единого jmp'а!
                              Ответить
                            • хм

                              https://govnokod.ru/16055#comment233434

                              есть ли связь
                              Ответить
                            • &gt;Рассказывал про 8 гиг софта написанного своими руками

                              Типа чувак гордится тем, что написал 8 гигабайт текста?
                              Ответить
                          • Я до этого дня и недогадывался BE/LE, просто расбирая псд наткнулся на такую странность.
                            Ответить
                    • > даже не представляю сколько человеко-лет нужно потратить
                      Генерированный код! Вдвойне страшней.
                      Ответить
                  • показать все, что скрытоДа-да-да, парень, мы не любим изобретать велосипеды - есть готовые решения, поэтому в солюшен мы пихаем 100500 фраймворков, правда пох что в текущей конфигруции сборки половина тамошних исходников нах-нах не нужна, а еще неиспользуемые исходники предназначенные для компиляции проекта под другие платформы, а еще куча скриптов обеспечивающих генерацию ресурсов/криптование, с которыми тоже нужно работать.
                    Ответить
                    • показать все, что скрытоИ судя по размеру кода эти фреймворки - фаерфоксовый XUL, хромиум и опенофис.

                      > куча скриптов
                      Этак гигабайт-два.
                      Ответить
                      • А ещё они, видимо, используют немного жабо-классов, для чего компиляют жабо-машину и вызывают её через JNI
                        Ответить
                        • Да ладно вам.
                          > а еще неиспользуемые исходники предназначенные для компиляции проекта под другие платформы

                          Наверняка там еще Луникс с кучей пакетов, дабы работало на платформах без установленной ОС.
                          Ну чтобы велосипеды не изобретать.
                          Ответить
                          • >> Наверняка там еще Луникс с кучей пакетов
                            LiveCD чтобы быстро можно было запилить с супер-прогой.
                            Ответить
                            • они пилят half-life 3, очевидно же
                              Ответить
                              • Пусть сначала третий эпизод ко второй допилят
                                Ответить
                                • Да что вы?
                                  Они ведь не умеют считать до трёх!
                                  Ответить
                                  • Вот как будет на самом деле:
                                    1. Half Life
                                    2. Half Life 2
                                    3. Half Life 2: Episode 1
                                    4. Half Life 2: Episode 2
                                    5. Half Life 2: Episode 2: Something 1
                                    6. Half Life 2: Episode 2: Something 2
                                    5. Half Life 2: Episode 2: Something 2: Part 1
                                    6. Half Life 2: Episode 2: Something 2: Part 2
                                    Ответить
                                • Half-Life 2.71828182846
                                  Ответить
                        • показать все, что скрытоА еще у них там лежат исходники всего линукса и всего софта, который под него можно собрать. На всякий случай, вдруг пригодится.
                          Ответить
                          • Просто всё, что есть на github. Там как раз на 10 гигов наберётся.
                            Ответить
                      • Человек тут пишет код гигабайтами, а вы издеваетесь. Стыдно должно быть.
                        Ответить
                • > удобная навигация по дереву исходников
                  + Есть киллер фича. Fuzzy-files-search и дерево проекта сбоку
                  > добавление новых ресурсов проект
                  - Вот это ручками
                  > гибкий поск по листингам и пректу
                  + Поиск в ST2 лучше чем во всех IDE и редакторах вместе взятых
                  > высокая производительность
                  + Открывается за пол секунды, вместо 20-30 (NetBeans)
                  + Работал через него с kernel и искал объявление функции (300 мб исходников)
                  > простое управление конфигурациями сборки
                  + Очень простое и очень гибкое.
                  + Конфигурируется ST2 вообще очень хорошо.
                  > поддержка многих языков программирования
                  + Подсветка, снипеты, готовые системы сборки есть для +40 языков.
                  > а чтоб к примеру могла показать откуда импортирован этот обьект
                  - Нету ни для одного, сторонними плагинами возможно установить для 10-15 популярных языков.
                  > и чтоб можно было добавлять свои
                  + Можно добавить ВСЁ, от снипетов, до систем сборки и снипетов.
                  > втроенная клиенска сторона систем контроля версия
                  + git, svn, hg устанавливаются за 3 клика (из самой проги, не из браузера)
                  > просмотровщик репозиториев на серваке
                  - Нету, возможно добавляется плагинцами (в стандартном GUI git'a такое уже есть, нахрен такое в редакторе - не знаю), но такого нет - так что минус
                  > потому что редактор гдето забыл какой-то файл модифиированый в обьектник пересобрать
                  ОЛОЛО! Таким редакторы не занимаются. Этим занимается система make.
                  > функциональный встроенный отладчик
                  - Нету. Отладчик нужен опять же для обезьян, которые сначала говнокод пишут, а потом головой думать не хотят.

                  Плюсов 10/14. (из тех критериев, что ты смог придумать, неспецифичных для редакторов)

                  Помимо этого есть просто куча киллер-фич, для быстрого и удобного редактирования, никакой рутины в наборе кода.
                  Ответить
                  • > ОЛОЛО! Таким редакторы не занимаются. Этим занимается система make.
                    т.е. когда ты модифицируешь файл, но не сохраняешь его, а нажимаешь build - мейк заставит редактор сохранить файл принудительно и соберет его?
                    Ответить
                    • у меня сублайм запускает команду make -j4 в папке ${project_path}
                      При нажатии Ctrl+B - все изменённые файлы перед сборкой автоматом сохраняются.
                      Ответить
                      • ну вот видишь - значит редактор участвует в сборке не только банальным запуском мейка
                        это нормальное поведение любого редактора-ide, об этом речь и идёт, на то она и ide
                        Ответить
                        • IDE отслеживает файлы и затавляет компилятор по-одному их собирать в объектные модули. Неизменённые файлы не собирает (использует старые версии .o-файлов).

                          Редактор же этим не занимается, а всего-лишь запускает make (или лучше tup), а уж он делает всю работу.

                          А IDE типа как не умеет сохранять изменённые файлы при сборке?

                          Проблема автора в том, что часто изменив h-файл (например с шаблоном) IDE не пересобирает другие модули. И в итоге, изменения не вносятся в бинарник.

                          Таким образом иногда в некоторых IDE нужно делать полную пересборку проекта, даже если была изменена одна строчка.
                          Ответить
                          • минусатор
                            IDE - integrated development environment
                            среда, позволяющая не выходя из нее редактировать, собирать и отлаживать код (а некоторые - еще и деплоить, собирать инсталляторы и тестировать)
                            на то и integrated

                            например, вижуал студия ничего не отслеживает - её дело сохранить все модифицированные файлы перед сборкой и запустить msbuild (или её более древний аналог), который как и make по датам изменения/отсутствию файлов построит дерево зависимостей и пересоберет всё чего не хватает/было промодифицировано

                            т.е. как конкретно будет происходить процесс сборки - не важно, главное, что она запускается прямо в среде, и в среде же есть результаты компиляции - список ошибок, навигация в конкретное место в файле и т.д.
                            если этого всего нет - а есть просто недоскрипт, запускающий внешнюю сборку, значит это нихрена не integrated
                            Ответить
                            • Тогда приношу извинения. Заканчиваю редактосрач.

                              P.S. Плюсану обратно из-под виртуала.
                              Ответить
                            • Кстати "и в среде же есть результаты компиляции - список ошибок, навигация в конкретное место в файле и т.д."

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

                              Но я не хочу больше доказывать что мне нравится редактор.

                              ОН МНЕ НРАВИТСЯ БЛЖАД! ОН ЗАЕБИСЬ!

                              За остальными вопросами идите в википедию, на офф сайт редактора или обращайтесь к roman-kashitsyn
                              Ответить
                              • показать все, что скрытоКинь ссылку на тред автору сублайма, может быть даст тебе бесплатную лицензию за рекламу его продукта ;)
                                Ответить
                                • ох, так он еще и платный)
                                  Ответить
                                  • показать все, что скрыто$60
                                    Ответить
                                    • ну судя по скриншотам, работа выполнена немалая
                                      но умеет ли он в то, что умеет вижуал ассист?
                                      как у него с gdb?
                                      как у него с ведением файлов "проекта" и "солюшена" - писать систему сборки руками? хочу мышкой
                                      Ответить
                                  • Бесплатная версия без ограничений. Лицензия (на неограниченное число машин) стоит 59$
                                    Ответить
                                    • просто признай, что ты воруешь результат его труда, прикрываясь тем, что у тебя evaluation затянулся на несколько месяцев
                                      на неограниченное число машин - 50+ licenses: USD $40 / license
                                      Ответить
                                      • Каюсь. Обещаю купить. А пока буду писать в vim'е
                                        Ответить
                                      • > ты воруешь результат его труда
                                        Не буду оправдывать пиратов (хотя именно это я всегда и делаю), но есть только один способ сделать так, чтобы произведение не украли.
                                        Именно - запереть единственный экземпляр в сейфе и построить над ним ещё один форт нокс.
                                        Ответить
            • >а вот в написание скриптовых интерпритаторов в комерческих продуктах иногда встречается
              Вместо того чтобы взять готовый интерпретатор некоторые умудряются захапать время и деньги у заказчика на изготовления своего.
              Ответить
              • > а вот в написание скриптовых интерпритаторов в комерческих продуктах иногда встречается
                > Да-да-да, парень, мы не любим изобретать велосипеды
                Ответить
          • > самая лучшая IDE написана на жабе

            ДВЕ лучшие IDE написаны на жабе. Остальные либо на чистой сишке, либо на C#.

            Это всё крестоблядствопринципы.
            Ответить
            • блять, читаю постоянно как Fike

              нахуй так делать?
              Ответить
          • показать все, что скрыто>>А ты много жабамашин написал?
            меня больше интересует как он их скомпилировал
            http://govnokod.ru/22545#comment377458
            Ответить
    • Из кoлeи выбилo кaпитaльнo и, приeхaв нa aвтoбусe oбрaтнo в Oзёры, купил в мaгaзинe вoдки, нaпился дoмa, в oднo лицo, дo свинскoгo сoстoяния.
      Ответить
    • Извини Борманд, но какая задача -- такой и код. Используй тайпдефы может?
      Ответить

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