Ответы пользователя по тегу C++
  • Можно ли на знаниях С++ ориентироваться и кодить в Unity пока не изучу С#?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Так-с. Дайте-ка подумать. Гравитация, сильное взаимодействие, слабое взаимодействие, третий закон Ньютона, преобразования Лоренца, квантовая неопределённость, стандартная модель... Эм, не знаю в общем никаких физических законов, которые не позволили бы изучать какую-либо технологию в процессе работы с ней. Даже более того, это единственный эффективный способ начать её изучать.

    Си++, C#, Java, Python, JavaScript... Да как вы надоели с этой хренью, честно. Никто не удивится, если ты понятия не имеешь, что такое рефлексия, зачем нужны лямбда-функции, почему так много споров о сборщике мусора. И тем более такие мелочи, как порядок инициализации или особенности области видимости в VC++98. Вопрос не то, чтобы плохой. Он глупый и неправильный. Unity это про иерархию объектов на сцене, их менеджемент, операции с матрицами, работа с графикой в реальном времени, однако, в основном - это про то, как перетащить объект из ассетов на сцену и поколдовать над его свойствами. Unity это про стейт-машины и формальную логику (например, предикаты), UI/UX и оптимальное программирование, но в большей степени это артисты рисующие модельки, текстуры и спрайты, озвучивающие и анимирующие их. Наконец, надо разбираться в предметной области в сфере, по которой создаётся игра, но для хэлоу ворлдов хватит и восьмого класса.

    Так что хватит загрязнять тостер с этой фигнёй. Тут очень слабое ранжирование хороших вопросов в отличии от stackoverflow, таких вопросов уже тьма задавали. Хватит!
    Ответ написан
    5 комментариев
  • Чем отличаются нейронные сети?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Нейронные сети это довольно старое направление, сугубо математическое, которое получило в последнее время очень мощный пинок под зад благодаря сильно возросшей производительности. Однако, материал по ней очень разношёрстный, очень много дезинформации. И разобраться в этом довольно сложно, особенно учитывая, что она слабо систематизирована и отрасль очень быстро развивается.

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

    И так, что мы имеем? Математический аппарат. Цель. И средства. Ну вот, это уже похоже на прогресс. Но чего нет? Адекватной классификации, большого количества хорошего материала, долгой и стабильной учебной практики. Зато вроде есть красивые материалы.

    Ну а вообще, есть отличный сборник вопросов на которые можно попробовать по отвечать. А правильно заданный вопрос - половина ответа.
    Ответ написан
    6 комментариев
  • Python vs C++ что достойно внимания?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Python скорее не язык, а набор спецификаций. C, Java, .Net, да хоть сам Python. Так что выбор и очевиден. И непонятен, собственно, о чём вообще вопрос.
    Ответ написан
    Комментировать
  • Область применения C, C++, C#?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну ничего себе. C++ только на ПК? Серьёзно?

    Android, iOS (тот же Си, только сбоку), web. Вообще, на Си почти всё вокруг, всё что незаметно (и чуть больше) - это Си. Или Си++. Или Objective C. Ну а C# - это мелкомягкие, они его продвигают. Очень. Вся экосистема на C# завязана. Включая Windows Phone.

    Ну и сами по себе плюсы очень фундаментальны. Хотя начинать обучение с них - очень плохая идея, до сих пор изучение в РФ начинают с них из-за историчности и фундаментальноси. Зная их освоить другое проблем не будет. А если начнутся проблемы с осваиванием плюсов, возможно стоит посмотреть на другие области: юриспруденция, графический дизайн, а может даже спорт.
    Ответ написан
    6 комментариев
  • Как перехватить сигнал с видеокарты?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну и какой мы хотим сигнал перехватить? Экран? Для этого есть фрейм граберы. А можно подключить композит и отдельной платой собирать аналог. Да и цифровой HDMI пусть и передаёт цифру, таки физика всё равно остаётся - снимаем напряжение и дело в шляпе, разве только делать это придётся очень быстро, да ещё и ошибки корректировать. Из софта можно хукнуть directx или opengl, но там скорее всего не будет шейдеров - издержки конвейера, или же создать виртуальный монитор, но здесь сложности с аппаратным ускорением. Есть более специализированные методы, вроде отслеживания участка памяти или общение с видеокартой посредством одного из множества API. Но эти способы очень платформозависимые.
    Ответ написан
    9 комментариев
  • Сколько бы у вас ушло времени на написание подобного приложения?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Нисколько. Я бы такое даже не попытался бы написать.

    Почему?
    1) ТЗ мутное.
    2) ТЗ мутное.
    3) ТЗ мутное.
    4) ???
    5) а где, блджад, профит?
    Ответ написан
    6 комментариев
  • А какой ваш путь изучения ЯП?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Оглянись! Эй, да отверни ты голову от монитора. Зеркало видишь? Подойди и посмотри туда. Видишь странного парня? Поздравляю, ты найден! Есть ещё вариант. Выключаем монитор. Смотрим в него. Снова видим себя! Ещё варианты?

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

    Удачи!
    Ответ написан
    Комментировать
  • Проигрывает ли ООП в Python по сравнению с C#, С++ или Java?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Странный вопрос, поскольку по сути модификаторы доступа имеют очень слабое отношение к инкапсуляции. Инкапсуляцию следует понимать не так, что это вообще чёрный ящик (хотя идеал именно такой, но мы же знаем, что идеалов не бывает). Инкапсуляция, это когда такой код:

    class Foo:
    	A = None
    
    
    foo = Foo()
    # some code here
    if foo.A is not  None:
    	# continue execute right way
    else:
    	exit(1)


    становиться каким-то таким:
    class Foo:
    	class PropertyUsedBeforeInit(Exception):
    		pass
    	_a = None
    	@property
    	def a(self):
    		if self._a is not None:
    			return self._a
    		else:
    			raise self.PropertyUsedBeforeInit()
    	@property.setter
    	def a(self, val):
    		self._a = val
    
    try:
    	foo = Foo()
    	# just write ur code here
    except Foo.PropertyUsedBeforeInit:
    	exit(1)
    finally:
    	exit(0)


    Этот пример довольно синтетический, поэтому "лучший" вариант больше в размерах, однако, полезно заметить, что стоит добавить классов, добавить свойств, добавить вариантов вылета, как второй вариант внезапно становиться...

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

    Ну, а по поводу того, кто круче. На моё "ИМХО", Python таки в чём-то круче. В нём реализованы те вещи, которых нет в C++ и Java вместе взятые и при этом они реализованы лаконично и прозрачно. Взять те же декораторы: очень простая штука. Ну просто невероятно простая. А имеем что? Очень мощный инструмент. Плюсам и джавам потребовалось бы невероятное усилие, чтобы реализовать что-то подобное. Да что там, они анонимную функцию делали сто лет.
    Ответ написан
    Комментировать
  • В чем отличия C++ и C# ?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Тут все пишут про отличия. Рискну написать про сходства.

    Во-первых, о чём бы ни писала Елена и Си++ и C# - оба языки общего назначения. Даже больше, оказывается - C# ни разу не заточён под объёмную библиотеку (или фреймворк) .NET, однако с ним намного, много проще. Но если таки учитывать .NET, то для Си++ есть Boost и Qt, так что здесь скорее паритет - библиотек для обоих хватает.
    Во-вторых, сложность разработки на Си++ часто преувеличена. Разве только дисциплины надо поболее - выстрелить в ногу здесь попроще. Однако при этом Си++ будет чутка более гибкий и без танцев с бубнами unmanaged код не запустить на C#. Если внезапно потребуется.
    В-третьих, оба языка, раз они общего назначения, таки мультипарадигмальные. То есть они реализуют большинство практик. И хотя Си++ развивается довольно медленно, сейчас Си++ резко догнал C# в плане нереализованных фич (здесь как минимум лямбды). Ну и метапрограммирования у Си++ поболее будет (наглая ложь).
    В-четвёртых, оба языка кроссплатформеные. Впрочем, C# будет более кроссплатформенный, чем Си++. Разве только тот же Qt резко стёр границы, но это не значит почти ничего - C# компилируется в тот же самый CIL для всех платформ, Си++ - в совершенно разный код для разных платформ (i386, amd64, ARM Cortex-AXX).
    Наконец, в пятых, синтаксис у них действительно очень похож. Оба языка принадлежат к семейству Алгол-подобных, так что и брейсы, и остальные скобки здесь имеют примерно одно предназначение.

    Различия, которые казалось бы делают языки совершенно разными, таки не столь принципиальны на том уровне абстракции, на котором был задан вопрос. А различия действительно колоссальны: C# - managed код, что означает, что скомпилированный код будет исполнятся не на прямую в CPU, а на специальной виртуальной машине. Это съедает производительность, но сильно облегчает перенос кода. Ну и потом, C# - полупроприетарный ответ Java (что интересно, так как получается, что C# - более свободный, чем Java), которая была создана как замена сложному и небезопасному C++ в том числе.

    В общем, как человек, который начал давно с C#, продолжив C++ и по пути изучив Python, Java, D и другую ООП-чушь могу с уверенностью сказать, что разницы в общем-то и нет... То есть придётся немного проникнуться в чуть другую философию и выяснить, какие проблемы более новый язык пытался решить. Но если подходить к этому, как подошёл lookid, то это скорее не как изучать языки одной языковой группы, а как изучать один и тот же язык в разное время или в разных сферах.

    Почему так? Потому что ООП... Оно как бы ООП, ничего сверхъестесственного ни один язык не предлагает, это не Haskell, и тем более не Brainfuck. Так что принципиально общие вещи в них будут. То подмножество, что реализует машину Тьюринга - у них общие. Сами посмотрите: циклы, ветвления, передача аргументов, арифметика... С небольшими правками всё совершенно одинаковое. Да, Дмитрий совершенно прав, traits на C# не повторишь, ибо та аналогия будет уже не traits, однако... Это уже [programming_language] related, то есть это попытка совладать с особенностями.

    Немного пруфов: лично я ходящий пруф. Зная C++ и C# и немного Java я просто начал программировать на Python. При том, что Python даже алголоподобным не принадлежит. А всё потому, что логика одна и та же, хотя различий между Python и C(++|#) намного, много больше. Но не читая почти никаких туториалов, пройдясь галопом по европам с документацией сейчас я знаю python достаточно для серьёзного проекта.

    UPD. По поводу метапрограммирования... Таки рантайм рефлекшн шарпа тащит. И хотя ни макросов, ни шаблонов, ничего. Но изменять код на лету - это уже очень круто. По дефолту плюсы так не умеют, и хотя шаблоны с макросами тащат, сильно, очень сильно тащат и вытаскивают его, Си++, со дна, надо признать - рефлешн у шарпа будет поинтереснее. Извиняюсь за дезу.
    Ответ написан
    6 комментариев
  • Как зашифровать строку алгоритмом rsa?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ну Вам вообще-то было бы не плохо познакомится с длинной арифметикой. Ну, и загоняете в неё данные, ведь данные - это просто биты, вектор единичек и нулей. А char - это вектор бит длины 8. В длинной арифметике предела нет и всё ограничивается модулем. Как-то так.
    Ответ написан
    Комментировать
  • С++.Работа с сокетами?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    А что за реализация и какой API? Банально потому, что C++ по дефолту (стандарту) не умеет работать с сокетами. Особенно, если учесть некоторые различия в их (сокетах) реализациях на разных платформах (будучи POSIX на unix'ах, POSIX-like на linux'ах и что-то забавное и на Windows и kolibri OS. В общем, сокеты Беркли должны помочь, наверное. А вообще, неблагодарное это дело - юзать сокеты из Си++ вне фреймворков. Лучше C#.NET, Java, Python: здесь всё для людей. Ну а если важны плюсы при Си, то можно воспользоваться невероятным Qt.
    Ответ написан
    Комментировать
  • Qt. Стоит ли с С++ переходить на Python?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Забавные эти вопросы. Стоит ли изучать $programming_language1, чем лучше $programming_languageA $programming_languageB, etc. Просто забавны. Не то чтобы они не нужны - каждому делу свой инструмент. Сложно забивать гвозди отвёрткой, а вилкой вырезать по дереву (хотя и можно).

    Так вот, внесу свою лепту - конечно стоит! И даже не стоит, а требуется. Пайтон уверенно просачивается в жизнь и часто требуется специалист C++ со знанием (знакомством) пайтона. Немного расширяет кругозор - всё же динамическое программирование с небольшой функциональщиной.

    Но не стоит думать, что есть инструмент на все случаи жизни. Пайтон идеален там, где есть идея и больше ничего, хорош он и для прототипирования, очень не плох в научной среде. Но противопоказан для дальнейшего масштабирования, плох он и в стресс-тестированиях, в общем продакшн из него так себе, примерно как и у C++. Впрочем, он близок к средней по больнице.

    Я проходил этот путь. Было время, когда достаточно хорошо я знал только Си++ (даже не Си). И в этом были свои проблемы. Теперь я полиглот. Из плюсов - очень быстро учиться что-то новое. Буквально сразу цепляю различия и могу скопипастить целый проект - этот навык сложно переоценить. Уже сотни раз писали, что пайтон хорош для прототипирования - повторюсь: вбиваешь в терминал python и печатаешь. В лаборатории сразу появляются формулы, графики, отчёты. У стартапа сразу появляется UI, логика, прототип. Но... Есть огромные минусы: в какой-то момент без хорошей документации очень тяжело идти дальше - виной очень крутая динамическая типизация. try: catch'и: и тут и там - снова она, ибо никогда не знаешь что тебе подадут в аргументах. Теперь священные воины пробелы vs табы (аля K&R vs BSD) могут обрушить весь проект вместе со сроками.

    Ну и да. pyqt ужасен. Лучше использовать что-нибудь другое (хотя ничего другого особо и нет). Гейзенбаги (те, которые то появляются, то исчезают) - тысячи их. И та самая интерактивность сводиться на нет, дай только проекту разраститься до 100 строк - а это очень быстро произойдёт, никакой pythonic-way не поможет. Так померло много проектов, не успев начаться.

    Наконец, если хотим кросс-платформы, с горечью вспоминаются ночи (!) проведённые за попытками скомпилировать какую-то полузаброшенную boost-подобную либу-зависимость какого-то гика на гите, который единственный подумал скинуть пару примеров использования всеми забытого протокола.

    Зато все слухи про низкую производительность python'а - чушь и клевета. Эта @#$% очень быстра, по крайне менее, если писать подобающе, а не проходиться по словарям в миллионы элементов в сотый раз (если такие словари, пора уже БД подключать, наверное).
    Ответ написан
    Комментировать
  • Что можно реализовать на разных языках программирования? С++ Java Python на какие ОС?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Бессмысленный вопрос. Программировать можно на чём угодно. И всё это бред про "начинать стоит с основ".
    Сделать следует две вещи. Порядок не важен!

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

    Посмотрите на разные языки программирования. Здесь, наверное, следует исключить эзотерику и функциональщину, ибо с ними сложно что-то толковое сделать не имея опухоли мозга (шучу, конечно). Их много: python, c++, java, go, ecmascript, nasm, c# (mono)... Список огромен. Большинство из них распространились на огромные области. Не важно: геймдев, вебдизайн, банки, транспорт - в каждой из них можно применить практически любой инструмент. Более того, в каждой из них применяется часто сразу несколько инструментов. Так что первый выбор почти не на что не повлияет.

    Тут стоит сразу пару моментов осветить.
    Во-первых, матанозированность различна. Наименьшая она в вебе. Наибольшая, наверное, в банках. Где-то посредине геймдизайн, хотя не так давно, он был куда более матаноёмкий, сегодня большая часть матана закралась где-то в библиотеках (впрочем, с логикой всё равно придётся подружиться).
    Во-вторых, платформа. Некоторые языки заточены под одну платформу (c - *nix, c# - ms), что, в прочем, не запрещает их использовать на других платформах, там есть свои особенности (нормального чисто win'ового компайлера Си под вином до сих пор нет, а его WinAPI на Си убого чуть более чем полностью, тогда как порт c# - mono - имеет множество особенностей при работе на неродных платформах). А ECMAScript (js) вообще одно время работал только под браузером, хотя сегодня делать native-приложения на нём довольно затруднительно (если, конечно, ОС - это НЕ браузер), да и возможности его ограничены API браузеров, которые часто различаются между собой.

    Но это всё детали. Они есть везде. Можно делать backend на c++, можно на python, можно на node.js. Можно писать игры на C# (XNA/Unity/monogame), можно на js (браузерные игры сегодня распоряжаются и webgl). Так что что больше нравиться, то и изучайте. И не стоит с основ. И тем более не стоит отождествлять Си и "основы основ".
    Ответ написан
    Комментировать