Re: [PATCH kvm-unit-tests 2/4] Introduce a C++ wrapper for the kvm APIs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/24/2010 07:41 PM, Gleb Natapov wrote:
On Wed, Nov 24, 2010 at 07:39:39PM +0200, Avi Kivity wrote:
>  On 11/24/2010 07:33 PM, Gleb Natapov wrote:
>  >>
>  >>   But I don't see the point.  If you look at my repository, there's
>  >The point is that C++ is ugly language. The short code Avi sent remind
>  >me perl (aka line noise). It is almost impossible to parse it into
>  >what code it actually does. Most symbols are there for C++ syntax not
>  >functionality.
>
>  No.  They're there for error handling.  A C++ wrapper, doesn't add
>  any functionality, so you can say that all of the lines of codes do
>  nothing and are just syntax.  But they do allow you to pair init and
>  uninit (in the constructor and destructor).  When you use the
>  wrapper (as opposed to the bare C interface) you get the value by
>  not having to code long error handling sequences (with a high
>  probability of getting them wrong and never finding out in testing).
>
So how errors are handled there? By throwing exceptions? Sorry this is
not error "handling".

It's not in this code, but in it's callers.

  kvm::system sys;
  kvm::vm vm(sys);
  kvm::vcpu vcpu(vm, 0);
  mutex::guard guard(some_mutex);
  some_other_object blah;
  return do_something();

If an exception happens in any of these places, whatever's already constructed is rolled back and destroyed. Contrast with

  struct kvm_system sys;
  struct kvm_vm vm;
  struct kvm_vcpu vcpu;
  struct some_other_object object;
  int r;

  r = kvm_system_init(&sys);
  if (r < 0)
      goto out_1;
  r = kvm_vm_init(&vm, &sys);
  if (r < 0)
      goto out_2;
  r = kvm_vcpu_init(&vcpu, &vm, 0);
  if (r < 0)
      goto out_3;
  mutex_aquire(&some_mutex);
  r = some_other_object_init(&object);
  if (r < 0)
      goto out_4;
  r = do_something();
  some_other_object_destroy(&object);
out_4:
  mutex_release(&mutex);
out_3:
  kvm_vcpu_destroy(&vcpu);
out_2:
  kvm_vm_destroy(&vm);
out_1:
  kvm_system_destroy(&sys);
  return r;

Which, in your opinion, is more readable?

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux