Плохое использование пустого оператора объединения?

Как я сказал здесь , я пойду для , Squeakland и известное Водят Автомобиль пример (приводимый в действие Писк ).

синтаксис Smalltalk прост, который является большим для детей.

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

И как @cpuguru и сказанный @Rotem, Царапина (также базирующийся Писк) является большой также.

8
задан Chris Dwyer 26 November 2009 в 22:03
поделиться

3 ответа

I compared the CIL of the generated code (making sure to do a Release build - with Optimize Code checked in the Project Properties, which corresponds to the /optimize switch on csc.exe). This is what I got (using VS 2008 - note that Foo.MaybeFoo() is a method that sometimes returns null, sometimes a Foo)

GetFooWithIf:

  IL_0000:  call       class Application3.Foo Application3.Foo::MaybeFoo()
  IL_0005:  stloc.0
  IL_0006:  ldloc.0
  IL_0007:  brtrue.s   IL_000f
  IL_0009:  newobj     instance void Application3.Foo::.ctor()
  IL_000e:  stloc.0
  IL_000f:  ldloc.0
  IL_0010:  ret

GetFooWithCoalescingOperator:

  IL_0000:  call       class Application3.Foo Application3.Foo::MaybeFoo()
  IL_0005:  stloc.0
  IL_0006:  ldloc.0
  IL_0007:  dup
  IL_0008:  brtrue.s   IL_0010
  IL_000a:  pop
  IL_000b:  newobj     instance void Application3.Foo::.ctor()
  IL_0010:  stloc.0
  IL_0011:  ldloc.0
  IL_0012:  ret

Thus, the same except for an extra top-of-stack-duplication and pop. If this can be made to make a measurable performance difference, I will purchase a hat specifically for the purpose of eating it; therefore, go with the one that you feel offers better readability.

(edit) oh, and the JITter might be clever enough to get rid of even that difference!

19
ответ дан 5 December 2019 в 05:45
поделиться

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

4
ответ дан 5 December 2019 в 05:45
поделиться

Я не думаю, что это плохое использование оператора объединения с нулем. При чтении кода он должен быть как можно более коротким и лаконичным, а цель кода очевидна.

Это правильно, что, используя такой оператор объединения нулей, вы всегда будете получать присваивание, но я бы не стал беспокоиться об этом. (И если это действительно окажется проблемой производительности, вы уже знаете, как это исправить).

6
ответ дан 5 December 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: