Как вы мысленно справляетесь с переходом от написания до неуправляемого кода?

~ 80% кода, который я пишу, находится на С#. Другой ~ 20% находится на С++. Всякий раз, когда мне приходится переключаться с С# на С++, мне требуется довольно много времени, чтобы мысленно "переключить передачи" на мышление на С++. Я делаю простые ошибки с помощью указателей и выделения памяти, которые я бы не сделал, когда был в университете. После периода настройки я в порядке, и запись в собственном коде происходит естественным образом.

Это нормально? Кто-нибудь еще сталкивается с чем-то подобным, и если да, то что вы делаете, чтобы сократить время, которое это тратит?

Изменить: я не говорю, что я не могу работать с распределением памяти и указателями. Я удобно использую их часто в своем коде на С++. Просто не сразу после работы в С# в течение длительных периодов времени.

Ответы

Ответ 1

У меня та же проблема. Я использую совершенно разные цветовые схемы для Visual Studio (темный-на-свете для С++, свет в темноте для С# и VB).

Кажется, помогает моему мозгу облегчить переход.

Ответ 2

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

Ответ 3

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

Хорошо, там твоя проблема. Изучите С++ достаточно хорошо, чтобы увидеть, как вы можете избежать беспорядка с указателями и выделениями памяти в первую очередь.

Тогда переключение между управляемым и неуправляемым кодом становится тривиальным.

Это только проблема для вас, потому что вы переключаетесь между С#, где вам не нужно беспокоиться ни о чем, и С++, который вы не знаете достаточно хорошо, чтобы безопасно использовать.

Управление памятью на С++ не сложно. Если вы ошибаетесь, это потому, что вы не изучили его должным образом. В хорошо продуманном коде С++ это просто не проблема. Это происходит автоматически, как в С#.

Ответ 4

Я делаю это все время. Проекты С++, над которыми я работаю, имеют несколько вещей, чтобы облегчить работу с памятью/ресурсом.

a) использовать обертки RAII

b) систематически используйте boost shared_ptr

Эти 2 вещи допускают огонь и забывают программирование на динамически распределенных вещах (у нас есть хорошо определенные идиомы, которые все знают)

Плюс у нас есть хорошо отлаженная библиотека для выполнения блокировок, потоков и т.д.

Помогает много

И, конечно, время от времени я жалуюсь на

  • С++ не пытается наконец
  • С#, не имеющих детерминированных деструкторов

но - эй - это жизнь

Ответ 5

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

RAII поможет вам, если вы будете использовать его последовательно.

Ответ 6

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

Ответ 7

Я чувствую твою боль; когда я иду С# → С++, я вроде как пьяный.

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

Ответ 8

Я сам это испытал. Его не только С# для С++, но и неуправляемый. Это происходит при каждом изменении. У меня была эта проблема при переходе с VB на VС++, CС++ на С#, С# на VС++ и даже С# на VB.net(истинная история - любезность ';').

Единственное время, которое требуется для настройки, которая отличается...

Ответ 9

Это одна из причин, по которой я делаю гораздо больше работы в VB.NET, чем в С#. Я не забываю, на каком языке я нахожусь. Если у вас есть этот вариант, я рекомендую его. В С# действительно нет ничего, что вы могли бы сделать в VB.NET, и радикально отличающийся синтаксис помогает мне переключать контекст.

Ответ 10

Мне нужно все время переходить от кодирования SQL на основе SQL к Sybase-SQL.

То, что я нахожу, помогает использовать одну и ту же процедуру на моем вторичном мониторе, со всеми хорошими вещами в нем, простым курсором, настройкой proc, if-then statements.. все действующие коды на этом языке, поэтому, если я забудьте, какая среда имеет вариант ELSIF или ELSE IF, я могу проверить источник своего шаблона, чтобы узнать.

Ответ 11

Всякий раз, когда я переключаюсь с С++ на Java, я всегда все еще думаю о том, где выделяется память. Я считаю, что проще всего не переключиться на мысль о том, что память управляется... подумайте о том, где это происходит, и подумайте, куда бы вы ее выпустили, если бы вы писали ее на языке без управляемой памяти. И просто не пишите строки кода, которые вы в противном случае хотели бы.

Ответ 12

Это нормально, если проблемы переходят с одного языка на другой. С# кажется достаточно близким к С++, но на самом деле это не так.

Но имейте в виду, что в "современном" С++ большую часть времени вы не будете использовать управление памятью. Он будет скрыт от вас, поэтому я обычно не занимаюсь указателями (в худшем случае с умными указателями). Но я знаю, как они работают. И это также должно быть, может быть, вам нужно немного практиковать, поскольку другой участник сказал, что язык C имеет право.

Но в С++ есть такие вещи, как шаблоны, функторы, алгоритмы, потоки, которые нуждаются в немного мышления, потому что это не java-С#, как вы могли бы привыкнуть. И, конечно же, использование стандартной библиотеки шаблонов и, в конечном итоге, повышение.

Но хорошо, что "хороший" разработчик С++ должен знать, почему он не использует указатели:)