Slashdot Mirror


Essential .NET, Volume I

hmobius writes "In a world where developers are baying for customers' attentions, very few people can claim to command that of the developer. Their blogs may be the only clue to the higher level of thinking that they operate at, creating the answers to why and when code works in addition to the perennial how. Whether he likes it or not, Don Box is one such system-meister. He may dislike writing books, but when one comes out, people pay attention and read. His first foray into text, Essential COM, was the book to explain how COM worked, and his latest, Essential .NET, takes the .NET Framework's Common Language Runtime (CLR), and does exactly the same." Read on for the rest of hmobius' review. Essential .NET, Volume One author Don Box with Chris Sells pages 400 publisher Addison Wesley rating 8/10 reviewer Dan Maharry ISBN 0201734117 summary Great in-depth look at the CLR, but not for developers aiming to better their skills.

After chapter one's history of the evolution from COM to the CLR, the book takes a bottom-up approach to the CLR, starting with a deep and detailed six chapter look into the core elements of the platform. Chapter two begins with assemblies, the programmatic units in the CLR, and the implications of their construction. We learn how they are versioned, loaded and built, and why therefore they may be written in as many .NET languages as required. There's real depth to the material here -- you really do touch the bottom of the abyss, so to speak -- but it's countered with occasional levity that keeps this a readable book instead of a dense reference manual. The same is true of all the text. To wit, there's even some irony; "To allow old dogs to avoid learning new tricks, there is finalization," he declares in the next section on the Common Type System.

It's here that we discover how different types and interfaces are distinguished from themselves and from one another, and how their variations and relationships are kept separate by the CLR. It's refreshing to note that the proverbial big picture is never very far away from the commentary. After taking time to explore the avenues for types and interfaces, Box notes that types themselves aren't very interesting until you start working with instances of those types, and we're off again working through another thirty pages on how object instances preserve a sense of identity, how they are cast into other types and how they incorporate themselves into the concepts of reflection and metadata. Only then do we look at the actual lifecycle of an object, its creation, modification and disposal. The attention to detail is great, and there's little ambiguity in the text, but with that comes a slowness to this section that may leave readers frustrated.

One recurring theme of the book is the idea that while there is a very proper way and set of rules for doing things, there will always be circumstances in application development which call for exceptions to be made to those rules and made possible by .NET. This is true at a small scale and, as chapters six and seven prove, at a large one too, covering as they do how the CLR calls and runs methods first on a single machine and then over a wire. How does the runtime treat methods called explicitly, implicitly through a delegate, asynchronously, or as a combination of the three? How do remote calls and types bridge whatever gaps they must cross and activate the remote objects and methods they're targeting? The answers are here.

Essential .NET reflects Box's pride in .NET and also his slight dissatisfaction with it. You can sense that while he knows .NET version 1 is an improvement over COM, it's not as good as it could be and things are still be done in v2 and beyond. Chapter eight's look at AppDomains and in particular its discourse on threading within and through AppDomains is a good example of this. Meanwhile, we finally come full circle in our investigation of the CLR, seeing how the assemblies we built in Chapter 2 are resolved and executed within AppDomains. Exceptions to rules being included, we also see how objects references are marshaled across AppDomains for inter-application communication if this is required.

The last two chapters look at wider topics around the CLR in as much detail as they can for topics which have entire books dedicated to just them. Chapter nine covers code-access security and chapter ten topics which are not of the CLR but which be can be addressed from within a .NET application: explicit memory management, using p/invoke to import COM methods from DLLs and so on. Both are concisely written and to the point, but unsurprisingly leave you feeling like there's more to these topics than is covered here. Chapter nine is a great and clear introduction to code-level security, for example, but you'll get a lot more out of Michael Howard's book, Writing Secure Code if you want to know more.

Essential .NET isn't an easy read but everyone should try to read it at least once. Focusing on the CLR itself and how it deals with the components of an application means that it truly is aimed at the community of .NET developers as a whole (including those building and using alternate implementations of the CLR). The provided code examples are expressed in C#, but this is incidental, really, and won't stop VB.NET, J# or any other developers getting a great deal out of this book.

This is a dense, complex volume that requires a fair amount of effort to understand and use, and to some extent this may put people off. On the other hand, it is so packed with great nuggets of information that they may be inspired to keep reading. Of course, there is the question of whether this book will actually improve your .NET development skills, but in riposte, you can honestly say that no volume details the CLR and its potential so well, and that this alone is worth the book's cover price.

You can purchase Essential .NET, Volume One from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

23 of 286 comments (clear)

  1. Slashbot book review. by rkz · · Score: 3, Informative

    This one is a great addition to the book shelf, you all know how to do certain things with .NET languages but this book clarifies nicely why you are actually doing it. Also, it introduces nice new .NET library/bytecode concepts which hardcore Visual basic 6/VC++ 6 users might not have come across before.

  2. Nice review by Acidic_Diarrhea · · Score: 2, Informative
    This is an excellent book. Richter's "Applied .NET Framework Programing" covers the CLR from the programmers point of view. Lidin's "Inside Microsoft .NET IL Assembler" is a detailed guide to IL, ilasm and the managed PE file format. Don Box's excellent "Essential .NET Volume 1" bridges the gap-- leveraging your knowledge of the CLS to present interesting internal, runtime aspects of the CLR.

    The first couple of chapters do rehash the metadata structure (that is, assemblies, modules and members), which anyone who has been using .NET should already have covered in the text you've been using up until this point. Obviously these chapters will prove tedious if you are already familiar with the concepts, however they are probably too terse to serve as a useful introduction. There are better texts for getting up to speed on that.

    However the latter two thirds of the book are excellent. I particularly enjoyed the precise, informative discussion of contexts, MarshalByRefObject, ContextBoundObject and method call interception. The book occasionally delves into implementation details of the Microsoft's CLR 1.0. These are extremely interesting and practically useful insights.

    That said, there are occasionally annoying typographical mistakes in the figures.

    --
    I hate liberals. If you are a liberal, do not reply.
    1. Re:Nice review by Anonymous Coward · · Score: 1, Informative

      acidic_leaking@hotmail.com is a moron who always karma whores so he can then troll. At least mods, be useful and mod him down a little...

  3. Re:If it's the essentials... by hmobius · · Score: 2, Informative

    Apparently volume 2 will deal with service oriented architectures. Web services, remoting.... that kind of thing

  4. MS hijacks the name of a top-level domain... by Anonymous Coward · · Score: 2, Informative

    ...The idea of some marketing guy noticing that his ISP's address ends in ".net" and thinking "Gee, what a cool way to align my marketing message with the corporate flavor-of-the-week"--or however it originated--is so intensely irritating to me that .NET could be the greatest thing in the world and I still wouldn't want to learn about it.

    I never did find out what "Microsoft BackOffice" and digital_nervous_system were supposed to mean. My guess is that I won't need to find out what .NET means, either.

    Actually, isn't Microsoft de-emphasizing ".NET" and calling it something else in order to call less attention to the community's general lack of interest in it?

    I wonder what Volume II will be called?

  5. Box on .NET by mrkurt · · Score: 3, Informative


    You can sense that while he [Don Box] knows .NET version 1 is an improvement over COM, it's not as good as it could be and things are still be done in v2 and beyond


    This could be an interesting read. The reviewer's comment on Box's impression of .NET confirms the wisdom of my decision not to be an early adopter of .NET, if I take it up at all. Although Box is a MS-centric developer, he discusses the issues involved in app development with candor as well as detail.



    --
    Always look on the briight side of life! (whistle, whistle)
  6. Re:Don't Flame So Fast by JeanBaptiste · · Score: 5, Informative
    When you write a .NET web application you use the same code (meaning VB.NET, C# etc, as opposed to ASP, or VB Script) that you would use when writing a desktop app,


    I also like .NET, it is the first good thing they have put in a while, it beats the hell out of COM...
    but your statement is not quite correct, unless I am not fully informed which is definately a possibility.... I have been finding more and more differences between programming for .aspx versus a standard desktop application... Still it beats the heck out of VS6...
  7. Also available on safari by FiggyBottom · · Score: 2, Informative
    --
    --- P,L,G
  8. Event Based Page Model by Anonymous Coward · · Score: 5, Informative

    The big difference between the ASP.NET paradigm and that of, say, Java Servlet Pages, or XSP, etc. lies in the event-based nature of ASP.NET pages.

    Each ASP.NET page is an instance of the "Page" class, or one of its sub-classes. The "Page Lifecycle" defines the various phases that apply each time a page is accessed. The "Page" is simply the top-level node in the "control tree", and each control in the tree does the following for all its children (recursively):
    1. initialization
    2. handle postback data
    3. state management
    4. handle events
    5. pre-render stuff
    6. render to HTML (or whatever)
    7. clean up

    Most of your code will pertain to numbers 4 and 5 above, if done correctly.

    It's not immediately intuitive, coming from a Web App developer's perspective, but does provide a good general structure and mechanism.

    In addition, each Page is split into its actual class (the so-called "code-behind page"), and its representation as markup (the .aspx page). The .aspx page is parsed on each request, but the code-behing is pre-compiled.

    ASP.NET provides a robust programming model for web applications, but it also provides a lot of built-in mechanisms for doing common stuff. Authentication, Authorization, Caching, DataBinding, XML, conditional rendering, templating, data access through ADO.NET, internationalization, Debugging and Tracing utilities, and more.

    That said, I find the event-based programming model quite difficult to master. If used improperly, you can end up running the same code many times; for instance of you populate a given control (say a dropdown) from a database, and do so in response to many different events. Better to flag things and then fetch just once from the DB prior to rendering.

    Thoughts?

    PS: At the moment, you can't mix multiple languages (C#, VB.NET) within a single Web App.

    1. Re:Event Based Page Model by gludington · · Score: 4, Informative

      The big difference between the ASP.NET paradigm and that of, say, Java Servlet Pages, or XSP, etc. lies in the event-based nature of ASP.NET pages.

      Each ASP.NET page is an instance of the "Page" class, or one of its sub-classes.

      This is not a new invention of .NET, as these concepts go at least as far back as Java Server Pages. Every JSP page implements JspPage (or HttpJspPage), and follows roughly the same lifecycle. The container typically provides that JspPage class, though a developer can roll his/her own, as well. (Before people jump all over me, yes, in the Java world, people rarely put the page as the top controlling object, preferring to use a Servlet as the controller and the JSPs only to render the final view.)

      This is not to take anything away from .aspx -- some of it is quite nifty -- but the basic concept of a "Page" object and "Page Lifecycle" is not new to .NET; Java has had it for a while, and I am sure some geek out there will point out even older examples.

  9. Results not suprising. Java is the incumbant. by btakita · · Score: 2, Informative

    Java wins the "buzz word war" outright because it is an inucmbant platform with solid marketing for the past 5+ years. .NET is a new platform (about 1 year after release) that has not been adopted by most of the Microsoft clientelle.

    Lets revisit these results in two years.
    Considering M$'s deep pockets and commitment to .NET, I think an "upset" is in order.

  10. Java is a standard by SuperKendall · · Score: 4, Informative

    You can pick up a description of the VM and write one from scratch if you are so inclined, and the JCP controls how the platform develops - in all ways that matter, Java is a standard.

    Have a look at www.jcp.org if you want to see a more developer accessible standards process.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  11. Re:It *is* cross platform! by Anonymous Coward · · Score: 1, Informative

    http://www.go-mono.org/

  12. *they dont* have any by Anonymous Coward · · Score: 1, Informative

    they have on some other parts of .net like windows.forms, ASP.NET and ADO.NET ... but not C# the language. the slashdot community is so pathetically ill informed. check out the mono faq for more info: http://go-mono.com/faq.html#patents

  13. Fritz chips for your info how it works by ratfynk · · Score: 1, Informative

    Just for your further info here is some of the way it is being done;

    Trusted Computing Frequently Asked Questions
    - TCPA / Palladium / NGSCB / TCG
    Version 1.0
    Ross Anderson

    Translations into German, Spanish, Italian, Dutch, Chinese, Norwegian, Swedish, Finnish, Hungarian, Hebrew and French. This document is released under the GNU Free Documentation License.

    Additions since July 2002 are at the foot of this document. See also the Economics and Security Resource Page which gives a lot of background to the issues raised here.

    Microsoft has renamed Palladium NGSCB - for `Next Generation Secure Computing Base' and pronounced `enscub', while TCPA has been renamed (somewhat brusquely) as TCG - for the Trusted Computing Group. Meanwhile, opposition is mounting. Expect further twists and turns as the battle develops. And read on ...

    1. What are TCPA and Palladium?

    TCPA stands for the Trusted Computing Platform Alliance, an initiative led by Intel. Their stated goal is `a new computing platform for the next century that will provide for improved trust in the PC platform.' Palladium is software that Microsoft says it plans to incorporate in future versions of Windows; it will build on the TCPA hardware, and will add some extra features. Palladium has recently been renamed NGSCB while TCPA has been renamed TCG; however I'll continue to refer to them here by their original names as they are still more widely used.

    2. What does TCPA / Palladium do, in ordinary English?

    It provides a computing platform on which you can't tamper with the applications, and where these applications can communicate securely with the vendor. The obvious application is digital rights management (DRM): Disney will be able to sell you DVDs that will decrypt and run on a Palladium platform, but which you won't be able to copy. The music industry will be able to sell you music downloads that you won't be able to swap. They will be able to sell you CDs that you'll only be able to play three times, or only on your birthday. All sorts of new marketing possibilities will open up.

    TCPA / Palladium will also make it much harder for you to run unlicensed software. Pirate software can be detected and deleted remotely. It will also make it easier for people to rent software rather than buying it; and if you stop paying the rent, then not only does the software stop working but so may the files it created. For years, Bill Gates has dreamed of finding a way to make the Chinese pay for software: Palladium could be the answer to his prayer.

    There are many other possibilities. Governments will be able to arrange things so that all Word documents created on civil servants' PCs are `born classified' and can't be leaked electronically to journalists. Auction sites might insist that you use trusted proxy software for bidding, so that you can't bid tactically at the auction. Cheating at computer games could be made more difficult.

    There is a downside too. There will be remote censorship: the mechanisms designed to delete pirated music under remote control may be used to delete documents that a court (or a software company) has decided are offensive - this could be anything from pornography to writings that criticise political leaders. Software companies can also make it harder for you to switch to their competitors' products; for example, Word could encrypt all your documents using keys that only Microsoft products have access to; this would mean that you could only read them using Microsoft products, not with any competing word processor.

    3. So I won't be able to play MP3s on my PC any more?

    With existing MP3s, you may be all right for some time. Microsoft says that Palladium won't make anything suddenly stop working. But a recent software update for Windows Media Player has caused controversy by insisting that users agree to future anti-piracy measures, which may include measures that delete pirated content found on your computer. Also, some programs

    --
    OH THE SHAME I fell off the wagon and use sigs again!
  14. Re:Don't Flame So Fast by grungeKid · · Score: 2, Informative

    Re: developer communities size, I find that there exists countless sites, blogs, newsgroups and mailinglist that cover all angles of .NET development.

    Apart from MSDN, I often find answers to my questions at gotdotnet.com, codeproject.com, www.dotnet247.com and the microsoft newsgroups. Brad Adams' and Chris Brumme's are very helpful for the low-level aspects of the .NET framework.

  15. free shipping by Anonymous Coward · · Score: 1, Informative
  16. Good book. by miguel · · Score: 5, Informative

    This is one of the best .NET books, the first of a series of pretty good books, by those involved deeply with the framework.

    This book covers the technicalities in the .NET framework, and is of special interest if you are interested in the advanced features of the Common Language Runtime like method interception, transparent proxies, application domains and metadata.

    Compiler writers, framework developers and those who need to get the most out of the framework will be interested in this title.

    I can not recommend this book enough. Don has done a fantastic job. It helped the Mono developers understand the low-level technical features of the framework.

    Miguel.

  17. Re:It *is* cross platform! by miguel · · Score: 5, Informative

    Mono is an implementation of the ECMA 334 and 335 standards which are available for anyone to implement (no patent strings attached, check the Mono FAQ for details).

    On top of that Mono implements plenty of class libraries: both the non-standarized class libraries from Microsoft, as well as our own universe of class libraries that take advantage of Unix-specific features.

    Here is a link: Mono Map (abridged).

    Miguel.

  18. Re:Essential Mono by miguel · · Score: 5, Informative

    Various publishers are working on books about Mono that will cover exactly what you want.

    But everything you learn in Don's Essential .NET book applies directly to Mono. In fact, before Don joined Microsoft, he was kind enough to let us preview his book, and that helped us understand various internals of the .NET framework.

    Miguel.

  19. Re:Java is also in trouble by alext · · Score: 2, Informative

    Nope, Kaffe is the open source one that isn't based on Sun code. I suspect that there are a few clean-room embedded VMs out there too, but I can't prove it.

    Perhaps more relevant to the Linux users here is the huge growth in Java on Linux due to the commercial (but generally free) JVM implementations from BEA, IBM and Sun. This is what places Java-on-Linux head and shoulders above Mono.

    I agree, however, that there are valid alternatives to both, and people with a desire to do something creative rather than just cloning stuff might like to help out with Parrot, the Perl 6 VM, also targeting a bunch of other languages.

  20. Don Box works for Microsoft by Anonymous Coward · · Score: 1, Informative
    Since Jan 7, 2002

    No surprise he can get good info on .NET.

  21. "Innovative"-right... languages for the java vm: by AndersDahlberg · · Score: 2, Informative
    Everything you write in Java has to be written in Java. I know there are Java purists out there who may think that rocks, but it could be beneficial to be able to pick and choose languages for the task at hand. The multi-language innovation is really neat to me. Some languages make string processing a snap, some don't.

    Sorry to bring you the news, but you really should get out more :)

    http://grunge.cs.tu-berlin.de/~tolk/vmlanguages.ht ml
    Among the most interesting of those you find
    • jython (python running on the java vm - the fastest python implementation?)
    • eiffel
    • smalltalk
    • nice (indeed a very nice ;) language - a little bloated syntax though)
    • sather
    • ada
    • ruby
    • javascript (rhino)
    • aspectj (first AOP language)
    • forth
    • fortran and last but not least a very promising language called
    • Kava http://www.research.ibm.com/people/d/dfb/papers.ht ml#Bacon01Kava
    So, again, your point about .net's language innovation was?