• Компиляция c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?

    Да.

    Каким образом происходит передача информации в [mainx] что функция printx() существует?

    Это работа линковщика связывать ссылки на неопределённые символы с определениями этих символов.
    В main.o в месте вызова printx ставится команда вызова, в секции символов заводится неопределённый символ printx а в секции релокаций заводится запись, связывающая команду вызова с символом:

    objdump -dr mainx.o
    ...
    0000000000000000 <main>:
       0:   55                      push   %rbp
    ...
      3a:   89 c7                   mov    %eax,%edi
      3c:   e8 00 00 00 00          callq  41 <main+0x41>
                            3d: R_X86_64_PLT32      _Z6printxi-0x4
      41:   b8 00 00 00 00          mov    $0x0,%eax
      46:   c9                      leaveq 
      47:   c3                      retq   
    ...


    readelf -a mainx.o
    ...
    Relocation section '.rela.text' at offset 0x580 contains 12 entries:
      Offset          Info           Type           Sym. Value    Sym. Name + Addend
    ...
    00000000003d  001400000004 R_X86_64_PLT32    0000000000000000 _Z6printxi - 4
    ...
    
    Symbol table '.symtab' contains 25 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        20: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _Z6printxi
    ...


    В printx.o в секции символов заводится символ, ассоциированный с адресом в коде, где определена функция printx:

    readelf -a printx.cpp
    ...
    Symbol table '.symtab' contains 24 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        14: 0000000000000000    75 FUNC    GLOBAL DEFAULT    1 _Z6printxi
    ...

    Здесь value == 0 -- потому что printx оказалась по адресу 0 в секции .text.

    Линковщик объединяет входные секции согласно скрипту линковки, после чего вставляет конечные адреса символов в места, которые ссылаются на них.
    Ответ написан
    Комментировать
  • Есть ли для питона IDE на подобии как Delphi?

    longclaps
    @longclaps
    Такой IDE нет.

    ps Ваш вопрос мне очень понравился, и я дам на него развёрнутый ответ. Многолетней давности рыночный успех Delphi был обусловлен нехитрым трюком: кривая обучения "программиста" в её начальной фазе была очень пологой, и одолеть её мог любой кретин. Эта лёгкость обеспечивалась именно визуальным редактором форм.
    У низкого порога вхождения, разумеется, была своя цена. Рынок наводнили говнокодеры, не отягощённые общей програмистской культурой, а содаваемые ими продукты были безнадёжно одноразовы. Код-лапша, в котором бизнес-логика упихивалась в контролы, был неподдерживаем.
    С тех пор прошли эпохи, новые поколения говнокодеров освоили концепцию MVC (вместе с паттернами, хех), но говнокодеры старой закваски всё еще не вымерли. И когда я увидел ваш вопрос, я с ностальгией вспомнил старые времена.
    Сейчас на рынке рулят IDE, поощряющие создание поддерживаемого, документированного кода. Жалобы на необходимость прописывания вручную по пол страницы кода только для создания GUI главного окна вызывают лишь снисходительную усмешку: что с него возьмёшь, он - кодер старой школы. А по аватарке не скажешь )
    Ответ написан
    12 комментариев
  • А где можно программировать в двоичных и 16-ричных системах?

    ApeCoder
    @ApeCoder
    Изучаете ассемблер
    Изучаете машинные коды
    Пишете программу на ассемблере
    Вучную транслируете в машинные коды
    Записывате их в шестнадцатеричной системе счисления
    Любым редактором который это поддерживаете.
    Получаете работающую программу.

    Можно найти какой-нибудь эмулятор старого устройства чтобы почувствовать как ветераны писали код в 1986
    Ответ написан
    2 комментария
  • Как найти последовательные совпадения в массиве?

    NYMEZIDE
    @NYMEZIDE
    резюме - ivanfilatov.ru
    Реализуй конечный автомат. Подаешь последовательность.
    Читаешь, Запоминаешь первую цифру. Двигаешь автомат вправо.
    Если цифра та же самая - увеличиваешь счетчик +1. Проверяешь счетчик, не равен ли он 3м. Двигаешь автомат вправо.
    Если счетчик стал равен 3м - то двигаешься вправо до тех пор пока не получиться другая цифра.
    Если другая цифра - то проверяешь счетчик был равен или больше 3х.
    Если да - то двигаешь автомат влево ровно сколько раз, сколько равен счетчик и "красишь цифры". После двигаешь автомат вправо на сколько же позиций.

    Ну осталось только это дело реализовать на предпочитаемом ЯП.
    Ответ написан
    1 комментарий
  • Это вообще люди делают?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Люди и стадион сделаны с софте подобном Autodesk 123D
    Машинка за исключением экрана с wareframe рендером тоже (на экране с wareframe просто замоделена).
    Часть задников сделана текстурой на скайбоксе.
    Часть людей - плоскими спрайтами с текстурой.
    Переходы - горизонтальным размытием с рандомизированной силой в зависимости от y координаты.
    Глобусов таких кучу можно найти на https://threejs.org/

    В целом выглядит стильно, но это больше заслуга дизайнеров. В технологическом плане ничего революционного. Глобус так вообще жуть тормозит - можно было и оптимальнее сделать.
    Ответ написан
    3 комментария
  • Bullshit Web - чрезмерное загромождение сайтов десятками скриптов и модулей. Можно ли решить эту проблему?

    @JunDevTest
    Контакты: thejundev@gmail.com | @juniordev
    Изначально Web задумывался как набор страниц с гиперссылками. Прошло время, мир в целом начал постепенно деградировать, вместе с ним и интернет... Когда у большинства разработчиков появились мощные компьютеры и смартфоны, они задумались над тем, как-бы разгрузить сервер и перенести нагрузку на клиент а другим хотелось меньше работать и больше зарабатывать... Как-то так родилось понятие "web-приложение" коим и является львиная доля сайтов, они являются приложениями, которые выглядят как web-страницы...
    Можете смело говорить таким разработчикам в любых спорах по этому поводу, что тяжеловесные фреймворки и библиотеки, портят концепцию сети интернет. Какими-бы полезными они не были. Web, в текущем виде, НЕ предназначен для этого.
    Ответ написан
    1 комментарий
  • Куда поступать после 9 класса мобильному разработчику?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Функционал его крайне мал

    несколько кнопок и разные списки

    пока все логично
    Я уверен, что его скачают минимум 100к раз

    разрыв логики

    Много видел, что берут на работу со стажем, а не после какого то обучения.

    Game Maker точно никому не интересен, да и 9-ти классники которые умеют сделать "несколько кнопок" тоже не особо, тем более если они уверенны, что то что они сделали кому-то нужно.

    Мой совет - идите в 10-й класс и продолжайте глубже разбираться в том что делаете. Вы сверху зацепили тему, даже не погрузившись на 1-2% в тему, а уже считаете себя успешным разработчиком. Вы соберите 100k скачиваний, потом рассказывайте об этом.
    Ответ написан
    Комментировать
  • Как поместить все файлы в один exe?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Комментировать
  • Как теория графов применяется в программировании?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Прежде всего хочу заметить, что львиная доля программистов не имеют непосредственно дел с теорией и математикой. Можно быть успешным профессионалом, так никогда и не написав собственной реализации алгоритма Дейкстры и даже не имея представления о том, как он работает. Но всё же стоит хотя бы поверхностно познакомится с графами, так как это одна из основных структур данных. Сфера их применения очень обширна, часто это алгоритмы поиска решений - кратчайшего пути по маршруту, эффективного расположения дорожек на схеме, победной игровой стратегии и т.п. Реальный пример использования графов - это sea-of-nodes JIT-компилятора. JIT-компилятор строит граф потока данных и граф потока выполнения, в которых узлы - это инструкции программы, а рёбра - это порядок вызова инструкций и порядок присвоения данных переменным, потом ищет способы этот граф оптимизировать и по оптимизированному графу генерирует бинарный код.

    int average(int a, int b) {
      return (a + b) / 2;
    }

    average.png
    Ответ написан
    Комментировать
  • Как находить и участвовать в проектах на гитхаб?

    sim3x
    @sim3x
    Делаете работу
    В процессе находите ошибку в стороннем коде
    Находите ее источник
    Пишите багрепорт и тесткей
    Так как всем пофиг
    Сами фиксите баг
    Неделю стучитесь мейнтейнеру, чтоб он принял ваш пушреквест
    Он вас посылает, тк ето не баг
    Ответ написан
    10 комментариев
  • Что делают программисты на Unity целый день на работе?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы козлам, не отмечающим…
    Любой программист в офисе 80-90% времени пьет кофе отлаживает код и возится с системой контроля версий и/или списком задач. А в промежутках между этими занятиями он пишет код.
    Ответ написан
    3 комментария
  • Как программисты "старой школы" пишут: while true или while 1?

    @haramba
    Почему вопросы о про битрикс такие тупые?
    Программисты старой школы ищут вариант не использовать while(true), а также не использовать без надобности continue и break.

    Читайте Подбельский "Программирование на языке Си",

    C Forever
    Ответ написан
    Комментировать
  • Что надо для того, чтобы игра не провалилась?

    opium
    @opium
    Просто люблю качественно работать
    Маркетинг хороший
    Ответ написан
    Комментировать
  • Какой выбрать стек для работы в GameDev?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Если цель -- это именно работа в компаниях уровня Близзард, то я бы советовал следующие:
    1) Поступить в технический университет в Мск или Спб (а ещё лучше в США или Европе), на специальность связанную с математикой, информатикой или разработкой ПО. Почему эти города? Всё просто: больше возможностей. Больше конференций и прочих мероприятий, больше компаний, ближе к развитым странам (привет программам по обмену студентами), да и уровень жизни в целом выше.
    2) Действительно учиться в этом университет и не забывать заводить полезные знакомства.
    3) Учить английский, желательно до уровня "свободно говорю".
    4) Начиная со второго курса ходить на летние стажировки в крупные и не очень компании, которые занимаются разработкой игр (если повезёт найти такие, если не повезёт, то подойдут любые другие). Рассматривать в том числе и международные компании. Этот пункт очень важен, пожалуй, он даже самый важный.
    5) Читать книги, которые вам перечислили (https://github.com/miloyip/game-programmer) и работать над своим проектом/проектами.
    6) Да, вам нужен С++, но это не основной навык, есть ещё немало составляющих, которые вы приобретёте проходя стажировки, читая книги и работая над своим проектом.

    Вообще, это универсальный набор советов, который можно применять для становления профессиональным разработчиком в любой отрасли, будь то игры, финансы, компьютерная графика и т.д. Если вам сейчас 16, то, следуя рекомендациям, годам к 25 у вас есть все шансы стать состоявшимся и востребованным специалистом.
    Ответ написан
    Комментировать
  • Video Background с видеo в 1,5 минуты и весом в 250мб. Как реализовать правильно и без глюков?

    Moskus
    @Moskus
    4. Убить дизайнера или послать куда подальше заказчика. Очевидно, что совершенно не всё, что хочет заказчик или дизайнер, возможно реализовать в имеющейся реальности условий.
    А если серьезно - замените видео слайд-шоу с переходами (cross-fade, например). Видео на фоне (да еще длиной в полторы минуты) - это все равно что анимационные обои в ОС - когда пользователь что-то делает, у него нет ни желания, ни возможности смотреть подобную хрень.
    Ответ написан
    Комментировать
  • Как сделать несколько условий в if и чтобы они все выполнялись?

    Самое логичное - вынести
    функционал который нужно исполнить в обеих независимо от результата
    из этих функций. Вы же так себе сайд эффекты делаете, из-за которых потом страдать будете.
    Ответ написан
    Комментировать
  • В чем различие между объявлением с new и без него?

    @Mercury13
    Программист на «си с крестами» и не только
    ПОЛОЖЕНИЕ В ПАМЯТИ
    Без new: static/глобальная — в сегменте данных, локальная — на стеке. В сегменте данных память отводится при компиляции линковке, создать стековый фрейм — две команды процессора.
    С new: в куче. Управление кучей — довольно сложная задача, и если этих new много, программа может начать тормозить.

    ВРЕМЯ ЖИЗНИ
    Без new: объект живёт, пока выполнение находится в данном блоке. При выходе из блока автоматически срабатывает деструктор.
    С new: уничтожаем, когда хотим.

    ИМЕНОВАНИЕ
    Без new: объект привязан к своему имени.
    С new: объект безымянный (имя только у указателя). Потому возможны структуры данных переменного размера: динамические массивы, связанные списки, деревья и прочее.

    РАЗМЕР
    Без new: задан при компиляции. То есть массив на 10 позиций, и точка, больше — только перекомпиляцией.
    С new: произвольный.
    Ответ написан
    Комментировать
  • Почему компьютер не включается с первого раза?

    @pfg21
    ex-турист
    поменяй электролитические кондеры в блоке питания и на мат.плате. похоже на них.
    скорей всего высохли и пока не "прогреются" БП не выдает сигнал "хорошее питание" - комп не запускается.
    Ответ написан
    Комментировать
  • Где найти новые детерминированные игры с полной информацией?

    @Mercury13
    Программист на «си с крестами» и не только
    Есть разумеется.
    18 век: https://en.wikipedia.org/wiki/Agon_(game)
    19 век: https://ru.wikipedia.org/wiki/Реверси
    20 век: https://ru.wikipedia.org/wiki/Перебрось_мостик
    20 век: https://ru.wikipedia.org/wiki/Гекс
    20 век: https://en.wikipedia.org/wiki/Quoridor
    21 век: https://ru.wikipedia.org/wiki/Улей_(игра)
    21 век: https://ru.wikipedia.org/wiki/Khet

    Почему таких игр крайне мало?
    1. Мы автоматически отбрасываем часть позиций как неперспективные — потому, чтобы обеспечить ту же просчитываемость, ДИсПИ должна быть намного богаче тайной или случайной. Некоторые механики придётся отбросить, поскольку, например, заимствованием стратегии доказывается, что первый выигрывает.
    2. Из двух игроков разной силы один выигрывает с вероятностью, стремящейся к 100%, игра быстро теряет интерес. А ведь как важен такой интерес для новой игры, которая пока продвигается…
    3. Продвигается исключительно гиками: сложно сыграть, например, папе с дочкой.
    UPD. 4. Крайне сложно сделать, чтобы компьютер косплеил человека. Другими словами, совершал ошибки, свойственные человеку, и при попытках подловить тупой алгоритм ходил как угодно, лишь бы по-другому.

    А насчёт шахмат — от первых упоминаний до современных правил прошло тысячелетие! Догадываетесь, какие плейтесты они прошли, чтобы из банального варгейма стать тем, чем они являются сейчас (хотя тоже, по всей видимости, были популярны в первую очередь у верхушки общества).
    Ответ написан
    5 комментариев
  • Правда ли что программистам навязывают определенные мысли?

    kotomyava
    @kotomyava
    Системный администратор
    Не прав. И в плане навязывания и в выводах. К тому же список довольно странный, часть мыслей верны, часть с потолка взяты.

    1. Это нужно везде, порой даже в разработке простенького сайтика приходится вспомнить о какой-нибудь статистике. А если говорить о серьёзном проекте, то чего только может не потребоваться, и незнание математики, порой, рождает прям-таки монстров, просто диву даёшься, что пишут. Про алгоритмы, и разумность их применения в различных условиях, просто без комментариев, это основа профессии.

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

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

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