SlideShare a Scribd company logo
API Design for C 1st Edition Martin Reddy -
Downloadable PDF 2025
https://ebookfinal.com/download/api-design-for-c-1st-edition-martin-
reddy/
Visit ebookfinal.com today to download the complete set of
ebooks or textbooks
Here are some recommended products that we believe you will be
interested in. You can click the link to download.
RESTful Web API Design with Node js Second Edition Bojinov
https://ebookfinal.com/download/restful-web-api-design-with-node-js-
second-edition-bojinov/
Pipelined Processor Farms Structured Design for Embedded
Parallel Systems 1st Edition Martin Fleury
https://ebookfinal.com/download/pipelined-processor-farms-structured-
design-for-embedded-parallel-systems-1st-edition-martin-fleury/
Understanding and Applying Research Design 1st Edition
Martin Lee Abbott
https://ebookfinal.com/download/understanding-and-applying-research-
design-1st-edition-martin-lee-abbott/
Statistics and Experimental Design for Toxicologists and
Pharmacologists Fourth Edition Shayne C. Gad
https://ebookfinal.com/download/statistics-and-experimental-design-
for-toxicologists-and-pharmacologists-fourth-edition-shayne-c-gad/
Design of Aircraft 1st Edition Thomas C. Corke
https://ebookfinal.com/download/design-of-aircraft-1st-edition-thomas-
c-corke/
An Introduction to Continuum Mechanics 2ed. Edition Reddy
J.N.
https://ebookfinal.com/download/an-introduction-to-continuum-
mechanics-2ed-edition-reddy-j-n/
Machine Design 2010th Edition U. C. Jindal
https://ebookfinal.com/download/machine-design-2010th-edition-u-c-
jindal/
Design Theory 2nd Edition Charles C. Lindner
https://ebookfinal.com/download/design-theory-2nd-edition-charles-c-
lindner/
C 3 0 Design Patterns 1st Edition Judith Bishop
https://ebookfinal.com/download/c-3-0-design-patterns-1st-edition-
judith-bishop/
API Design for C 1st Edition Martin Reddy
API Design for C 1st Edition Martin Reddy Digital
Instant Download
Author(s): Martin Reddy
ISBN(s): 9780123850034, 0123850037
Edition: 1
File Details: PDF, 17.71 MB
Year: 2011
Language: english
API Design for C 1st Edition Martin Reddy
Acquiring Editor: Todd Green
Editorial Assistant: Robyn Day
Project Manager: André Cuello
Designer: Eric DeCicco
Morgan Kaufmann is an imprint of Elsevier
30 Corporate Drive, Suite 400, Burlington, MA 01803, USA
# 2011 Elsevier, Inc. All rights reserved.
No part of this publication may be reproduced or transmitted in any form or by any means, electronic
or mechanical, including photocopying, recording, or any information storage and retrieval system,
without permission in writing from the publisher. Details on how to seek permission, further
information about the Publisher’s permissions policies and our arrangements with organizations such
as the Copyright Clearance Center and the Copyright Licensing Agency, can be found at our
website: www.elsevier.com/permissions.
This book and the individual contributions contained in it are protected under copyright by the
Publisher (other than as may be noted herein).
Notices
Knowledge and best practice in this field are constantly changing. As new research and experience broaden
our understanding, changes in research methods or professional practices may become necessary. Practitioners
and researchers must always rely on their own experience and knowledge in evaluating and using any
information or methods described herein. In using such information or methods they should be mindful of their
own safety and the safety of others, including parties for whom they have a professional responsibility.
To the fullest extent of the law, neither the Publisher nor the authors, contributors, or editors, assume any liability for
any injury and/or damage to persons or property as a matter of products liability, negligence or otherwise, or from
any use or operation of any methods, products, instructions, or ideas contained in the material herein.
Library of Congress Cataloging-in-Publication Data
Application submitted
British Library Cataloguing-in-Publication Data
A catalogue record for this book is available from the British Library.
ISBN: 978 0 12 385003 4
Printed in the United States of America
11 12 13 14 10 9 8 7 6 5 4 3 2 1
For information on all MK publications visit our website at www.mkp.com
Foreword
I should begin by confessing that I do not consider myself a world-class API designer or software
engineer. I do, however, consider myself an expert researcher in the areas of computer graphics
and geometric modeling. It was in this line of work that I first met Martin at Pixar Animation
Studios.
As a graphics researcher I was accustomed to writing mathematically sophisticated papers. I was
also formally trained as a computer scientist at a major university and had written my share of code.
Armed with this background, when I was presented with the opportunity to lead a group of software
engineers working on a new generation of animation software for Pixar, I figured that it couldn’t be
any more difficult than research. After all, research is, by definition, the creation of the unknown,
whereas engineering is the implementation of well-understood subjects. I could not have been more
wrong.
I came to realize that software engineering was, without a doubt, the most difficult challenge
I had ever been presented with. After more years than I care to admit, I eventually gave up and went
back to graphics research.
I can’t tell you how much I would have benefitted from a book such as “API Design for C++.”
Many of the lessons we learned the hard way have been captured by Martin in this insightful,
easy-to-use book. Martin approaches the subject not from the perspective of an academic software
researcher (although he draws heavily from results and insights gained there), but from the perspec-
tive of an in-the-trenches software engineer and manager. He has experienced firsthand the importance
of good software design and has emerged as an articulate voice of what “good” means. In this book
he presents effective strategies for achieving that goal.
I particularly like that Martin is not focusing just on API design, but more broadly on software
life cycles, allowing him to cover topics such as versioning, strategies for backward compatibility,
and branching methodologies.
In short, this book should be of great value to those creating or managing software activities. It is
a comprehensive collection of best practices that have proven themselves time and time again.
Tony DeRose
Senior Scientist and Research Group Lead, Pixar Animation Studios
xv
Preface
Writing large applications in C++ is a complex and tricky business. However, designing reusable C++
interfaces that are robust, stable, easy to use, and durable is even more difficult. The best way to suc-
ceed in this endeavor is to adhere to the tenets of good Application Programming Interface (API)
design.
An API presents a logical interface to a software component and hides the internal details
required to implement that component. It offers a high-level abstraction for a module and promotes
code reuse by allowing multiple applications to share the same functionality.
Modern software development has become highly dependent on APIs, from low-level application
frameworks to data format APIs and graphical user interface (GUI) frameworks. In fact, common
software engineering terms such as modular development, code reuse, componentization, dynamic
link library or DLL, software frameworks, distributed computing, and service-oriented architecture
all imply the need for strong API design skills.
Some popular C and C++ APIs that you may already be aware of include the Standard Template
Library (STL), Boost, the Microsoft Windows API (Win32), Microsoft Foundation Classes (MFC),
libtiff, libpng, zlib, libxml++, OpenGL, MySQL++, Trolltech’s Qt, wxWidgets, GTK+, KDE, Sky-
peKit, POSIX pthreads, Intel’s Threading Building Blocks, the Netscape Plugin API, and the
Apache module API. In addition, many of Google’s open-source projects are C++, as is much of
the code on the sourceforge.net, bitbucket.org, and freshmeat.net Web sites.
APIs such as these are used in all facets of software development, from desktop applications, to
mobile computing and embedded systems, to Web development. For example, the Mozilla Firefox
Web browser is built on top of more than 80 dynamic libraries, each of which provides the imple-
mentation for one or more APIs.
Elegant and robust API design is therefore a critical aspect of contemporary software develop-
ment. One important way in which this differs from standard application development is the far
greater need for change management. As we all know, change is an inevitable factor in software
development; new requirements, feature requests, and bug fixes cause software to evolve in ways
that were never anticipated when it was first devised. However, changes to an API that is shared
by hundreds of end-user applications can cause major upheaval and ultimately may cause clients
to abandon an API. The primary goal of good API design is therefore to provide your clients with the
functionality they need while also causing minimal impact to their code ideally zero impact when
you release a new version.
WHY YOU SHOULD READ THIS BOOK
If you write C++ code that another engineer relies upon, you’re an API designer and this book has
been written for you.
Interfaces are the most important code that you write because a problem with your interface is far
more costly to fix than a bug in your implementation. For instance, an interface change may require
all of the applications based on your code to be updated, whereas an implementation-only change
can be integrated transparently and effortlessly into client applications when they adopt the new
xvii
API version. Put in more economic terms, a poorly designed interface can seriously reduce the long-
term survival of your code. Learning how to create high-quality interfaces is therefore an essential
engineering skill, and the central focus of this book.
As Michi Henning noted, API design is more important today than it was 20 years ago. This is
because many more APIs have been designed in recent years. These also provide richer and more
complex functionality and are shared by more end-user applications (Henning, 2009). Despite this
fact, no other books currently on the market concentrate on the topic of API design for C++.
It’s worth noting that this book is not meant to be a general C++ programming guide there are
already many good examples of these on the market. I will certainly cover lots of object-oriented
design material and present many handy C++ tips and tricks. However, I will focus on techniques
for representing clean modular interfaces in C++. By corollary, I will not dive as deeply into the
question of how to implement the code behind these interfaces, such as specific algorithm choices
or best practices limited to the code within the curly braces of your function bodies.
However, this book will cover the full breadth of API development, from initial design through
implementation, testing, documentation, release, versioning, maintenance, and deprecation. I will
even cover specialized API topics such as creating scripting and plugin APIs. While many of these
topics are also relevant to software development in general, the focus here will be on the particular
implications for API design. For example, when discussing testing strategies I will concentrate on
automated API testing techniques rather than attempting to include end-user application testing
techniques such as GUI testing, system testing, or manual testing.
In terms of my own credentials to write this book, I have led the development of APIs for research
code shared by several collaborating institutions, in-house animation system APIs that have been used
to make Academy Award-winning movies, and open-source client/server APIs that have been used by
millions of people worldwide. Throughout all of these disparate experiences, I have consistently wit-
nessed the need for high-quality API design. This book therefore presents a practical distillation of the
techniques and strategies of industrial-strength API design that have been drawn from a range of real-
world experiences.
WHO IS THE TARGET AUDIENCE
While this book is not a beginner’s guide to C++, I have made every effort to make the text easy to
read and to explain all terminology and jargon clearly. The book should therefore be valuable to new
programmers who have grasped the fundamentals of C++ and want to advance their design skills, as
well as senior engineers and software architects who are seeking to gain new expertise to comple-
ment their existing talents.
There are three specific groups of readers that I have borne in mind while writing this book.
1. Practicing software engineers and architects. Junior and senior developers who are working on
a specific API project and need pragmatic advice on how to produce the most elegant and
enduring design.
2. Technical managers. Program and product managers who are responsible for producing an API
product and who want to gain greater insight into the technical issues and development processes
of API design.
xviii Preface
3. Students and educators. Computer science and software engineering students who are learning
how to program and are seeking a thorough resource on software design that is informed by prac-
tical experience on large-scale projects.
FOCUSING ON C++
While there are many generic API design methodologies that can be taught skills that apply equally
well to any programming language or environment ultimately an API has to be expressed in a par-
ticular programming language. It is therefore important to understand the language-specific features
that contribute to exemplary API design. This book is therefore focused on the issues of designing
APIs for a single language (C++) rather than diluting the content to make it applicable for all
languages. While readers who wish to develop APIs for other languages, such as Java or C#, may
still gain much general insight from this text, the book is directly targeted at C++ engineers who must
write and maintain APIs for other engineers to consume.
C++ is still one of the most widely used programming languages for large software projects and
tends to be the most popular choice for performance-critical code. As a result, there are many diverse
C and C++ APIs available for you to use in your own applications (some of which I listed earlier).
I will therefore concentrate on aspects of producing good APIs in C++ and include copious source
code examples to illustrate these concepts better. This means that I will deal with C++-specific topics
such as templates, encapsulation, inheritance, namespaces, operators, const correctness, memory
management, use of STL, the pimpl idiom, and so on.
Additionally, this book will be published during an exciting time in the evolution of C++. A new
version of the C++ specification is currently working its way through the ISO/IEC standardization
process. Most C++ compilers currently aim to conform to the standard that was first published in
1998, known as C++98. A later revision of this standard was published in 2003 to correct several
defects. Since that time, the standards committee has been working on a major new version of the
specification. This version is referred to informally as C++0x, until such time that the standard is rati-
fied and the date of publication is known. By the time you read this book, the new standard will
likely have been published. However, at the time of writing, it is still referred to as C++0x.
Nonetheless, C++0x has reached an advanced stage of the standardization process, and many of
the new features can be predicted with relatively high confidence. In fact, some of the major C++
compilers have already started to implement many of the proposed new features. In terms of API
design, several of these new language features can be used to produce more elegant and sturdy inter-
faces. As such, I have endeavored to highlight and explain those areas of C++0x throughout the book.
This book should therefore remain a relevant resource for several years to come.
CONVENTIONS
While it is more traditional to employ the term “user” to mean a person who uses a software appli-
cation, such as a user of Microsoft Word or Mozilla Firefox, in the context of API design I will apply
the term to mean a software developer who is creating an application and is using an API to achieve
xix
Preface
this. In other words, I will generally be talking about API users and not application users. The term
“client” will be used synonymously in this regard. Note that the term “client,” in addition to referring
to a human user of your API, can also refer impersonally to other pieces of software that must call
functions in your API.
While there are many file format extensions used to identify C++ source and header files, such as
.cpp, .cc, .cxx, .h, .hh, and .hpp, I will standardize on the use of .cpp and .h throughout this book.
“I will also use the terms module and component” interchangeably to mean a single .cpp and .h file
pair. These are notably not equivalent to a class because a component or module may contain multi-
ple classes. I will use the term library to refer to a physical collection, or package, of components,
that is, library > module/component > class.
The term method, while generally understood in the object-oriented programming community, is
not strictly a C++ term; it originally evolved from the Smalltalk language. The equivalent C++ term is
member function, although some engineers prefer the more specific definition of virtual member
function. Because I am not particularly concerned with the subtleties of these terms in this book, I
will use method and member function interchangeably. Similarly, although the term data member
is the more correct C++ expression, I will treat the term member variable as a synonym.
In terms of typographical conventions, I will use a fixed-width font to typeset all source code
examples, as well as any filenames or language keywords that may appear in the text. Also, I will
prefer upper camel case for all class and function names in the examples that I present, that is,
CamelCase instead of camelCase or snake case, although obviously I will preserve the case for
any external code that I reference, such as std::for each(). I follow the convention of using an
“m” prefix in front of data members, for example, mMemberVar, and “s” in front of static variables,
for example, sStaticVar.
It should be pointed out that the source examples within the book are often only code snippets
and are not meant to show fully functional samples. I will also often strip comments from the exam-
ple code in the book. This is done for reasons of brevity and clarity. In particular, I will often omit
any preprocessor guard statements around a header file. I will assume that the reader is aware that
every C/C++ header should enclose all of its content within guard statements and that it’s good prac-
tice to contain all of your API declarations within a consistent namespace (as covered in Chapters 3
and 6). In other words, it should be assumed that each header file that I present is implicitly sur-
rounded by code, such as the following.
#ifndef MY MODULE H
#define MY MODULE H
// required #include files. . .
namespace apibook {
// API declarations . . .
}
#endif
xx Preface
TIP
I will also highlight various API design tips and key concepts throughout the book. These callouts are provided to
let you search quickly for a concept you wish to reread. If you are particularly pressed for time, you could simply
scan the book for these tips and then read the surrounding text to gain greater insight for those topics that interest
you the most.
BOOK WEB SITE
This book also has a supporting Web site, http://APIBook.com/. On this site you can find general
information about the book, as well as supporting material, such as the complete set of source code
examples contained within the text. Feel free to download and play with these samples yourself
they were designed to be as simple as possible, while still being useful and illustrative. I have used
the cross-platform CMake build system to facilitate compiling and linking the examples so they
should work on Windows, Mac OS X, and UNIX operating systems.
I will also publish any information about new revisions of this book and any errata on this Web
site, as well as useful links to other related API resources on the Internet, such as interesting toolkits,
articles, and utilities.
The book Web site also provides access to a utility that I wrote called API Diff. This program
lets you compare two versions of an API and review differences to code or comments in a visual
side-by-side format. You can also generate a report of everything that changed in a particular release
so that your clients know exactly what to look out for. This utility is available for Windows, Mac
OS X, and Linux.
xxi
Preface
Acknowledgments
This book has benefited greatly from the technical review and feedback of several of my esteemed
colleagues. I am indebted to them for taking the time to read early versions of the manuscript and
provide thoughtful suggestions for improvement. In particular, I thank Paul Strauss, Eric Gregory,
Rycharde Hawkes, Nick Long, James Chalfant, Brett Levin, Marcus Marr, Jim Humelsine, and Geoff
Levner.
My passion for good API design has been forged through my relationship with many great soft-
ware engineers and managers. As a result of working at several different companies and institutions,
I’ve been exposed to a range of design perspectives, software development philosophies, and
problem-solving approaches. Throughout these varied experiences, I’ve had the privilege to meet
and learn from some uniquely talented individuals. Some of these giants whose shoulders I have
stood upon include:
• SRI International: Bob Bolles, Adam Cheyer, Elizabeth Churchill, David Colleen, Brian Davis,
Michael Eriksen, Jay Feuquay, Marty A. Fischler, Aaron Heller, Lee Iverson, Jason Jenkins, Luc
Julia, Yvan G. Leclerc, Pat Lincoln, Chris Marrin, Ray C. Perrault, and Brian Tierney.
• Pixar Animation Studios: Brad Andalman, David Baraff, Ian Buono, Gordon Cameron, Ed
Catmull, Chris Colby, Bena Currin, Gareth Davis, Tony DeRose, Mike Ferris, Kurt Fleischer,
Sebastian Grassia, Eric Gregory, Tara Hernandez, Paul Isaacs, Oren Jacob, Michael Kass, Chris
King, Brett Levin, Tim Milliron, Alex Mohr, Cory Omand, Eben Osbty, Allan Poore, Chris
Shoeneman, Patrick Schork, Paul Strauss, Kiril Vidimče, Adam Woodbury, David Yu, Dirk
van Gelder, Brad West, and Andy Witkin.
• The Bakery Animation Studio: Sam Assadian, Sebastien Guichou, Arnauld Lamorlette, Thierry
Lauthelier, Benoit Lepage, Geoff Levner, Nick Long, Erwan Maigret, and Bariş Metin.
• Linden Lab: Nat Goodspeed, Andrew de Laix, Howard Look, Brad Kittenbrink, Brian McGroarty,
Adam Moss, Mark Palange, Jim Purbrick, and Kent Quirk.
In particular, I acknowledge the great impact that Yvan G. Leclerc made on my life during my
early years at SRI International. Yvan was my first manager and also a true friend. He taught me
how to be a good manager of people, how to be a rigorous scientist and engineer, and, at the same
time, how to enjoy life to its fullest. It is a great sorrow that incredible individuals such as Yvan
are taken from us too soon.
Many thanks must also go to Morgan Kaufmann Publishers for all of their work reviewing, copy
editing, typesetting, and publishing this book. This work would quite literally not exist without their
backing and energy. In particular, I acknowledge the contribution of Todd Green, Robyn Day, André
Cuello, and Melissa Revell.
Most importantly, I thank my wife, Genevieve M. Vidanes, for encouraging me to write this book
and for putting up with me while I spent many late nights hunched over the keyboard. As this is my
second book, she knew full well how much it would impact our personal life. Nonetheless, she sup-
ported me throughout the whole process, while also knowing exactly when to make me pause and
take a break. Thank you Genevieve for your constant love and support.
xxiii
Author Biography
Dr. Martin Reddy is CEO of Code Reddy Inc. He holds a Ph.D. in computer science and has over
15 years of experience in the software industry. During this time, Dr. Reddy has produced more than
40 professional publications, three software patents, and coauthored the book Level of Detail for 3D
Graphics. He is a member of the Association of Computing Machinery (ACM) and the Institute of
Electrical and Electronic Engineers (IEEE).
Dr. Reddy worked for 6 years at Pixar Animation Studios, where he was lead engineer for the
studio’s in-house animation system. This work involved the design and implementation of various
high-performance APIs to support Academy Award-winning and nominated films, such as Finding
Nemo, The Incredibles, Cars, Ratatouille, and Wall-E.
He then took on the role of engineering manager at The Bakery Animation Studio, where he led
the development of the startup studio’s animation software. This included the design and implemen-
tation of many key APIs as well as devising the overall animator workflow and user interface.
Earlier in his career, Dr. Reddy worked for 5 years at SRI International on distributed 3D terrain
visualization technologies, which involved the development of several open source geospatial APIs.
He cofounded a successful effort to create an ISO standard to represent 3D geospatial models on the
Web and was elected as a director of the Web3D Consortium for 2 consecutive years.
Through his consulting company, Dr. Reddy has provided his technical expertise to various soft-
ware companies, including Linden Lab and Planet 9 Studios. The former involved API design and
infrastructure improvements for the open source product Second Life, an online 3D virtual world that
has been used by over 16 million people around the world.
xxv
CHAPTER
Introduction
1
1.1 WHAT ARE APPLICATION PROGRAMMING INTERFACES?
An Application Programming Interface (API) provides an abstraction for a problem and specifies
how clients should interact with software components that implement a solution to that problem.
The components themselves are typically distributed as a software library, allowing them to be used
in multiple applications. In essence, APIs define reusable building blocks that allow modular pieces
of functionality to be incorporated into end-user applications.
An API can be written for yourself, for other engineers in your organization, or for the develop-
ment community at large. It can be as small as a single function or involve hundreds of classes,
methods, free functions, data types, enumerations, and constants. Its implementation can be proprie-
tary or open source. The important underlying concept is that an API is a well-defined interface that
provides a specific service to other pieces of software.
A modern application is typically built on top of many APIs, where some of these can also
depend on further APIs. This is illustrated in Figure 1.1, which shows an example application that
depends directly on the API for three libraries (1 3), where two of those APIs depend on the API
for a further two libraries (4 and 5). For instance, an image viewing application may use an API
for loading GIF images, and that API may itself be built upon a lower-level API for compressing
and decompressing data.
API development is ubiquitous in modern software development. Its purpose is to provide a logi-
cal interface to the functionality of a component while also hiding any implementation details. For
example, our API for loading GIF images may simply provide a LoadImage() method that accepts
a filename and returns a 2D array of pixels. All of the file format and data compression details
are hidden behind this simple interface. This concept is also illustrated in Figure 1.1, where client
code only accesses an API via its public interface, shown as the dark section at the top of each box.
1.1.1 Contracts and Contractors
As an analogy, consider the task of building your own home. If you were to build a house entirely on
your own, you would need to possess a thorough understanding of architecture, plumbing, electron-
ics, carpentry, masonry, and many other trades. You would also need to perform every task yourself
and keep track of the minutest of details for every aspect of the project, such as whether you have
enough wood for your floorboards or whether you have the right fasteners to fit the screws that
you have. Finally, because you are the only person working on the project, you can only perform
a single task at any point in time and hence the total time to complete the project could be very large.
API design for C++.
© 2011 Elsevier Inc. All rights reserved.
1
API Design for C 1st Edition Martin Reddy
API Design for C 1st Edition Martin Reddy
As an example of a well-known API, Microsoft’s Windows API (often referred to as the Win32
API) is a collection of C functions, data types, and constants that enable programmers to write appli-
cations that run on the Windows platform. This includes functions for file handling, process and
thread management, creating graphical user interfaces, talking to networks, and so on.
The Win32 API is an example of plain C API rather than a C++ API. While you can use a C API
directly from a C++ program, a good example of a specific C++ API is the Standard Template Library
(STL). The STL contains a set of container classes, iterators for navigating over the elements in
those containers, and various algorithms that act on those containers (Josuttis, 1999). For instance,
the collection of algorithms includes high-level operations such as std::search(), std::reverse(),
std::sort(), and std::set intersection(). The STL therefore presents a logical interface to
the task of manipulating collections of elements, without exposing any of the internal details for
how each algorithm is implemented.
TIP
An API is a logical interface to a software component that hides the internal details required to implement it.
1.2 WHAT’S DIFFERENT ABOUT API DESIGN?
Interfaces are the most important code that a developer writes. That’s because problems in an inter-
face are far more costly to fix than problems in the associated implementation code. As a result, the
process of developing shared APIs demands more attention than standard application or Graphical
User Interface (GUI) development. Of course, both should involve best design practices; however,
in the case of API development, these are absolutely critical to its success. Specifically, some of
the key differentiating factors of API development include the following.
• An API is an interface designed for developers, in much the same way that a GUI is an inter-
face designed for end users. In fact, it’s been said that an API is a user interface for program-
mers (Arnold, 2005). As such, your API could be used by thousands of developers around the
world, and it will undoubtedly be used in ways that you never intended (Tulach, 2008). You
must anticipate this in your design. A well-designed API can be your organization’s biggest
asset. Conversely, a poor API can create a support nightmare and even turn your users toward
your competitors (Bloch, 2005), just as a buggy or difficult-to-use GUI may force an end user
to switch to a different application.
• Multiple applications can share the same API. Figure 1.1 showed that a single application can
be composed of multiple APIs. However, any one of those APIs could also be reused in sev-
eral other applications. This means that while problems in the code for any given application
will only affect that one application, errors in an API can affect all of the applications that
depend on that functionality.
• You must strive for backward compatibility whenever you change an API. If you make an
incompatible change to your interface, your clients’ code may fail to compile, or worse their
code could compile but behave differently or crash intermittently. Imagine the confusion and
chaos that would arise if the signature of the printf() function in the standard C library was
4 CHAPTER 1 Introduction
different for different compilers or platforms. The simple “Hello World” program may not
look so simple any more:
#include <stdio.h>
#ifdef WIN32
#include <windows.h>
#endif
#ifdef cplusplus
#include <iostream>
#endif
int main(int, char *argv[])
{
#if STRICT ANSI
printf("Hello Worldn");
#elif defined( WIN32)
PrintWithFormat("Hello Worldn");
#elif defined( PRINTF DEPRECATED )
fprintf(stdout, "Hello Worldn");
#elif defined( PRINTF VECTOR )
const char *lines[2] {"Hello World", NULL};
printf(lines);
#elif defined( cplusplus)
std::cout << "Hello World" << std::endl;
#else
#error No terminal output API found
#endif
return 0;
}
This may seem like a contrived example, but it’s actually not that extreme. Take a look at the stan-
dard header files that come with your compiler and you will find declarations that are just as convo-
luted and inscrutable, or perhaps worse.
• Due to the backward compatibility requirement, it is critical to have a change control process
in place. During the normal development process, many developers may fix bugs or add new
features to an API. Some of these developers may be junior engineers who do not fully under-
stand all of the aspects of good API design. As a result, it is important to hold an API review
before releasing a new version of the API. This involves one or more senior engineers check-
ing that all changes to the interface are acceptable, have been made for a valid reason, and are
implemented in the best way to maintain backward compatibility. Many open source APIs
also enforce a change request process to gain approval for a change before it is added to
the source code.
• APIs tend to live for a long time. There can be a large upfront cost to produce a good API
because of the extra overhead of planning, design, versioning, and review that is necessary.
However, if done well, the long-term cost can be substantially mitigated because you have
the ability to make radical changes and improvements to your software without disrupting
your clients. That is, your development velocity can be greater due to the increased flexibility
that the API affords you.
5
1.2 What’s different about API design?
API Design for C 1st Edition Martin Reddy
• Increases longevity. Over time, systems that expose their implementation details tend to
devolve into spaghetti code where every part of the system depends on the internal details
of other parts of the system. As a result, the system becomes fragile, rigid, immobile, and vis-
cous (Martin, 2000). This often results in organizations having to spend significant effort to
evolve the code toward a better design or simply rewrite it from scratch. By investing in good
API design up front and paying the incremental cost to maintain a coherent design, your soft-
ware can survive for longer and cost less to maintain in the long run. I’ll delve much deeper
into this point at the start of Chapter 4.
• Promotes modularization. An API is normally devised to address a specific task or use case.
As such, APIs tend to define a modular grouping of functionality with a coherent focus.
Developing an application on top of a collection of APIs promotes loosely coupled and mod-
ular architectures where the behavior of one module is not dependent on the internal details of
another module.
• Reduces code duplication. Code duplication is one of the cardinal sins of software engineer-
ing and should be stamped out whenever possible. By keeping all of your code’s logic behind
a strict interface that all clients must use, you centralize the behavior in a single place. Doing
so means that you have to update only one place to change the behavior of your API for all of
your clients. This can help remove duplication of implementation code throughout your code
base. In fact, many APIs are created after discovering duplicated code and deciding to consol-
idate it behind a single interface. This is a good thing.
• Removes hardcoded assumptions. Many programs may contain hardcoded values that are
copied throughout the code, for example, using the filename myprogram.log whenever data
are written to a log file. Instead, APIs can be used to provide access to this information with-
out replicating these constant values across the code base. For example, a GetLogFilename()
API call could be used to replace the hardcoded "myprogram.log" string.
• Easier to change the implementation. If you have hidden all of the implementation details
of your module behind its public interface then you can change those implementation details
without affecting any code that depends on the API. For example, you might decide to change
a file parsing routine to use std::string containers instead of allocating, freeing, and reallo-
cating your own char * buffers.
• Easier to optimize. Similarly, with your implementation details hidden successfully, you can
optimize the performance of your API without requiring any changes to your clients’ code.
For example, you could add a caching solution to a method that performs some computation-
ally intensive calculation. This is possible because all attempts to read and write your under-
lying data are performed via your API, so it becomes much easier to know when you must
invalidate your cached result and recompute the new value.
1.3.2 Code Reuse
Code reuse is the use of existing software to build new software. It is one of the holy grails of mod-
ern software development. APIs provide a mechanism to enable code reuse.
In the early years of software development, it was common for a company to have to write all of
the code for any application they produced. If the program needed to read GIF images or parse a text
file, the company would have to write all that code in-house. Nowadays, with the proliferation of
7
1.3 Why should you use APIs?
API Design for C 1st Edition Martin Reddy
1.3.3 Parallel Development
Even if you are writing in-house software, your fellow engineers will very likely need to write code
that uses your code. If you use good API design techniques, you can simplify their lives and, by
extension, your own (because you won’t have to answer as many questions about how your code
works or how to use it). This becomes even more important if multiple developers are working in
parallel on code that depends upon each other.
For example, let’s say that you are working on a string encryption algorithm that another devel-
oper wants to use to write data out to a configuration file. One approach would be to have the other
developer wait until you are finished with your work and then he can use it in his file writer module.
However, a far more efficient use of time would be for the two of you to meet early on and agree
upon an appropriate API. Then you can put that API in place with placeholder functionality that your
colleague can start calling immediately, such as
#include <string.h>
class StringEncryptor
{
public:
/// set the key to use for the Encrypt() and Decrypt() calls
void SetKey(const std::string &key);
/// encrypt an input string based upon the current key
std::string Encrypt(const std::string &str) const;
/// decrypt a string using the current key calling
/// Decrypt() on a string returned by Encrypt() will
/// return the original string for the same key.
std::string Decrypt(const std::string &str) const;
};
You can then provide a simple implementation of these functions so that at least the module will
compile and link. For example, the associated .cpp file might look like
void StringEncryptor::SetKey(const std::string &key)
{
}
std::string StringEncryptor::Encrypt(const std::string &str)
{
return str;
}
std::string StringEncryptor::Decrypt(const std::string &str)
{
return str;
}
In this way, your colleague can use this API and proceed with his work without being held up
by your progress. For the time being, your API will not actually encrypt any strings, but that’s just
9
1.3 Why should you use APIs?
a minor implementation detail! The important point is that you have a stable interface a contract
that you both agree upon, and that it behaves appropriately, for example, Decrypt(Encrypt
("Hello")) "Hello". When you finish your work and update the .cpp file with the correct
implementation, your colleague’s code will simply work without any further changes required
on his part.
In reality, it’s likely that there will be interface issues that you didn’t anticipate before you started
writing the code and you will probably have to iterate on the API a few times to get it just right.
However, for the most part, the two of you can work in parallel with minimal holdups.
This approach also encourages test-driven, or test-first, development. By stubbing out the API
early on, you can write unit tests to validate the desired functionality and run these continuously
to make sure that you haven’t broken your contract with your colleague.
Scaling this process up to an organizational level, your project could have separate teams that
may be remote from each other, even working to different schedules. By defining each team’s depen-
dencies up front and creating APIs to model these, each team can work independently and with min-
imal knowledge of how the other teams are implementing their work behind the API. This efficient
use of resources, and the corresponding reduction in redundant communication, can correlate to a
significant overall cost saving for an organization.
1.4 WHEN SHOULD YOU AVOID APIS?
Designing and implementing an API usually requires more work than writing normal applica-
tion code. That’s because the purpose of an API is to provide a robust and stable interface for other
developers to use. As such, the level of quality, planning, documentation, testing, support, and
maintenance is far higher for an API than for software that is to be used within a single application.
As a result, if you are writing an internal module that does not require other clients to com-
municate with it, then the extra overhead of creating and supporting a stable public interface
for your module may not be worth the effort, although this is not a reason to write sloppy code. Spend-
ing the extra time to adhere to the principles of API design will not be wasted effort in the long run.
On the flip side of the coin, consider that you are a software developer who wants to use a third-
party API in your application. The previous section discussed a number of reasons why you might
want to reuse external APIs in your software. However, there may be cases where you wish to avoid
using a particular API and pay the cost to implement the code yourself or look for an alternate
solution. For example:
• License restrictions. An API may provide everything that you need functionality-wise, but
the license restrictions may be prohibitive for your needs. For example, if you want to use
an open source package that is distributed under the GNU General Public License (GPL), then
you are required to release any derived works under the GPL also. This means that using this
package in your program would require you to release the entire source code for your appli-
cation, a constraint that may not be acceptable for a commercial application. Other licenses,
such as the GNU Lesser General Public License (LGPL), are more permissive and tend to
be more common for software libraries. Another licensing aspect is that the dollar cost for
a commercial API may be too high for your project or the licensing terms may be too
restrictive, such as requiring a license fee per developer or even per user.
10 CHAPTER 1 Introduction
Another Random Scribd Document
with Unrelated Content
The text on this page is estimated to be only 17.79%
accurate
72 '-llicttf'» Öi'bot. M. jiiib 4. lejembct. Rl iDattT.
(I<>mimi>, tli»riiin;i, Priiu-i'ps, rousnl , jn-aedicator, Si Imiioras eos,
h)il biräi 0)ott reidjlid^ bc3at)lcn hie rtiam niiff erben. 'jS)aä l)eifjt
ein l)ulla, btc man auf 21 l)cubc nid)t Icin fd)icibcn '. Kt ideo fac, iil
(Icum timcas, ;^'i{)c cö .semi>or l)in Qiiff DuH bac- ciftc ijcpott. 4.
decemb. s Aiulivinuis 4 praciepta. l*iiiiia n gl)cn ©ott fclber an, 1.
parciites. 1. est 'NoM haWOjis' jc. i. e. time et fitle ileo, praetorca
Dciniiiein JC. 2. not» 'urabis, flud^, jd^njere nid)t, setl invoca, Bette,
lobe unb bände. 3. i. o. non lontomiias verbiiin et negligiis, sod
libenter ea.s, iit audire possis et disccre, 4. ut iion solum obedias eis,
sed iit pro])ter dci timoreui l)eillid^ bon l)t)n '" l^alteft et eis
conununices, (juiccjuid Imbes. Tmu promittitur tibi vita longa. 2 4
^ai bii seniper unt 2 Kulla r 10 tiiiioieiii über (inaiidatuiii) ') bie man
nur 24 Ijcube nidjt faii fc^rcibeit (oben S. 71, 31172, 12) ro educas,
quo aliis aut doctrina aut regimento conducat. Si habueris ßlium
bijnae indolis illumque negb'gis disciplina, qui possit toti regioni
prodesse, negligens illum es pessiinus patriae et regionis devastator,
qui tanto viro illam privas. 2)tD tf)uft cijncn mort^lic^en fc^aben
cijm gancjetn lanbe, feo bto e^nen gefd^idten Bon Oerfeumcft. Ita
de filia domesticae curae abrogas as iam negligens. Attendite igitur
vos potestatem habentes, ut subditos bene r^atis et educetis, sicut
subditis honor et obediencia praecipitur. Non occides. Haec
sequencia ad proximum nostri similem pertinent, priora tercia ad
deum, Quantum ad huraanas potestates. Non occidenduni neque
facto 30 neque verbo neque corde neque adfectu. Hoc j)raeceptnm
est quasi seps et 16120 Econtra Htudeant maiores in subditos
parentes sese exercere ro r recht» 18 20 Summa peiia pareiitum
pueros negligeiicium ro r links 20 suo 21l24 Si bis priva» utU ro 22
totae 23 tanto c aus tantum 25 6on(e) 26127 Attendite bi« regatu
ujU ro 27 regetis et educatis 28 Quintum Preceptum ro r 2V
pertinent erg ro au» pertinet
The text on this page is estimated to be only 20.76%
accurate
Viertes; ®ebot. 4. tt^mbtx. 73 R] Vos pareutes iteruin
cugilatc, iit vo.s erga lilieros exhil>oati8 tanquam parentoH, (juia 4.
praweptnin noininat vo.s patres et niatres, tioti tvrann«»s, bubcn et
boftuic^tcr. Ideo si pater et mater es, jo trifft bid^ biä hJort au(^, Si
es consiil jc. Et
The text on this page is estimated to be only 22.03%
accurate
74 Stierte«? unb fünfte? ®el)üt. 4. Tcicintict. Rl vel anoillas,
(5^.3 i|t bir ein gcpot aiitf bcm l)al'j, cy tnivb bir nirf)t Qcfc^cncft
tuetbcn, beim fanftU'i auf3icl)CU et non facis, tu ipsa eam perdiilisti.
Hiuc ftcl^ctä fo l)nn bcr 6I)riftenl)eit, boS Icibcr tein [taub ircig,
iuQä er ift. Non e8t levis res, si virgo bene educetur, et fit bona
matcrfamilias, quae postea pie educat libcros. Ideo vos pareutes
bene discite vos uon esse exclusos ^ ex hoc 4. pi-aecepto. Nou est
[931. 17''] iani inopia iu doctoribuß. Habetis enim isto tempore tales,
(juales olim profecto totiis nuindiis iion liabuit. [2?l. 18''] llaoc
praeeepta (^cf)cn fjiii gcc^cii bciu netieftcn, ber un§ gleid^ i[t.
Priora 4 gcl)cn über bie, bic über uiiy finb. 1. est: 'Non oecides Non
occidere est si ne(j[ue lingiia, manu, sij^juo, corde ocoideris. Hoc
praeceptum «o Wotift. 5.2ifi. clare expositum est per ipsum
Christum, Ut Matthaei 5. legis. Maximus thesaurus proximi in terris
est vita ipsius et corjnis. Hoc tnil gott gefiebert ^oben für ein»
iglicf^eu getüalt unb freüel unb mod^t t)^m mit biefeni praecepto
ein mauer [)erumb et dicit: 'Non occides'. Sic dominus curat pro
nobis, tüie er unS einen fd^u^c maä)Z i. e. ne facito ei leibe, sed
alle§ gut§, is bejd^ebige l)^n nidfit an feinem leibe nee vcrbis,
o|)eribus uec corde, (^uia hoc est etiam proximum occidere, tuenn
bu löibber l)f)n einen grotten in corde ^oft, Et quando nioritur vel
t)f)m ubel ger)et, bu l)f}n bie fauft lad^eft^ Si oranes homicidae
lapid[arentur, omnes plateae sanguine fluerent. Id est: noli ei malum
facere aut optare, Sed econtra. Si non facis, ift§ eben [o 20 biet, aU
tl^eteftu ^f)m f droben. Ideo in his praeceptis [teilen bic 6 opera
misericordiae. Si esurit, ciba, si nudus est, operi, si captus, visita ic.
vel causa es mortis ipsius, lüenn bu h}et)ren fonft ipsius periculum,
fo ifjüZ e§, si non jc. Ideo nota bene haec verba i. e. bu folt ^l^m
!etn leibe nod^ fd^oben tf)un, sed gut§ unb forberüd^ fein, bie
opera (> misericordiae finb 25 frei) i)ie ijnnen. Re
The text on this page is estimated to be only 20.85%
accurate
pnfted unb fed)fte§ ©ebot. 4. 3^cjembcr. 75 R] äurnen
contra iiroxiimnu. Si vis ein yiittcr lücibcn mit ^ouen et ftcd^cn,
greift bi(^ am elften fel6§ an, nempo beinen l)odjmnt et omnia vitia
..-uuira proximi corpus et bona. Viele no iiiveuiaris hoinicida, (juaiido
iiegligLs proximum, bem bu tüol l)elffen !anft. Quot hie sunt, qui ad
dauinum 5 proximi rident. Hie fte^et§: 'bu folt nic^t tobten'.
Quaudo tibi ineiduut malae cogitatioues, cogita: Deus mandavit, ut
ip.sum timeam, et is praecipit ut neminem occidam, neminem iniuria
afficiam. ^d) fol ben broben furchten unb foId§e§ umb feinet tüiHen
loffen. Et 5. praecei)tum inspicieudum est tamquam murus, quem
deus aedificavit contra meam irain. Vides, ere ex thoro derivari, sed
quaelibet persona alteri adhereat. Ideo ambobus tribuit propriam
naturam et corjnis ad gignendum, haec membra ne insaniant libi26
über tt|ucn steht bcfd^e^bcn *. gönnen über (t^uen) 2U Sextum
praeceptum ro r 32 et ro zwischen naturam und corpus eiw/e/'ü
The text on this page is estimated to be only 17.98%
accurate
76 Sed^ftc-J (Mcl'ot. 4. Tejcmbct. R] unb eilt, iit friic^tbnv
jci) iinb lief) niclirc. (?-3 i|t ein gvo-i trcfflirf) fegen, ben fein
menid)lidi dcrt^ nie l)at an9cfcl)en unb betDOQcn. Vult ergo
(lomimis habt-rt« l)nn 3ud)t o.r|>iis man-? *t Riciby, n solnm be§
tt)erd§ l^albcn, fonbern etiam, jjjQttii. 19,6 bog hu bein l)cr|; nidjt
an ein anbere l)engeft. 'Sit', ininiit, 'una caro', Et lo hoc propter 1.
praeoep[tiun: ileum tinie. Die: tüic tüol iä) lunbc rouitl t)Qbcn über
bie )d)nur ^U t)QUen^ tarnen quia dielt deus: Time ic. Si Caesar
nic^t erfert, ii-'^ tarnen, (pii est super ine k. Ideo die: o deus, da
gratiani, ne eadani unb baö id^ mein cl)e rein l)Qlte i. e. bu folt
leufcS^ leBcn t}nn beinern eficitanb bclibc mit Icibc, tuort, gcbcrben
et l)crlj. Ideo dedit cuilibet t5 snain nxoreni, bie iinbcm uufletigeu
funbe mag idj nidjt nennen ut ^ungfraluen [4
The text on this page is estimated to be only 19.71%
accurate
Sed^fte? unb [xehtntt^ «ebot. 4. unb 7. Itumbtx. 77 R]
optare 2C. sed f orbein, rabten, sive sit amicus sivc inimiotis. Ibi
orntiia opera misericordiae coriflmint. G. %ü folt bid^ ?euf(j^ galten
mit tüortcn et toerrfen et bct) beinern treib bleiben, eam diligere, Et
bu tijxen. 3o bu me^beft eine§ anbern tceibg, ünbö jur un,ju(^t et
fjelteft birf) cintrec^tig cum 5 tua, tum habebis deum propicium.
Qui» dieit: 'iu niulta milia', (piud i>ertinet ad oninia praecepta. [Öl.
22'^] 7. decemb. Audistis nuper 6 praeceptum. In geoere
admouendi estis, ut 1. verba discatis, deinde quid significeut. 1. 'Non
hab[ebis' i. e. bu folt ©ott furchten 10 unb l)'^m öertronjen, haB bu
tj^n ni^t öerod^teft nod^ an i){)m öeryieifclft. 2. i.e. bu folt nidjt
ftud^en, fc^tüeren, ,]aubern, sed invur-are 2c. .',. '^u folt auff ben
Sontog @otte^ rtort nirf)t oerac^ten, ja auff feinen tag, sed libenter
audire et discere. 4. i.e. tnaS nur (Jttern t)eiffen, fo( man nid^t
allein un= gefd)enbet laffen, sed tj'^nen bienen, e^ren et ^oc^
Don i)l)nen l)alten. 5. i. e. 15 noli proxirao facere damnum, sed ^ilff
Q^m unb forber l)l)n, njie er» bebarff, 6. i. e. deum time et caste
vive, unb bein e()e nic^t brechen, fonbern bein tocib lieb l^aben
[SJl. 22^] et beinen man e^ren. Ad uuumquodque praeceptum
scribe: time et confide deo. 7. praeceptum est, quod non tulit
priuceps aut Consul, sed deus tuus, qui habet vitam tuam et omuia
in manu sua, qui 20 te perdere potest. ?)nn bem fielen ift begrieffen
att forteil unb ge^ct hoc 2 6 r 9 l.r 11 2. 3. r 13 4. r 14 5. r 16 6. r
;ä 7. r 19 vitam über tuam 20 Furari r N] statu nulla condicio potest
esse sincera. Meum est praedicare contra scortacionera.
Patrumfamilias et Consulum officium est diligenter animadvertere, ne
huic flagicio consenciant, ut ego increbescere iterum audio. Summa:
Vi servemus spontaneam castitatem in thoro coniugali et adversus
proximi 35 liberos, familiam libidinari, ad id multum valet
Patrumfamilias dihgens observacio. Si qui autem virginitatem servare
vohicrint, ii suo doiK» ntautnr. gord^te got, ha^ blr beljne elje
t^alteft, etjnem anbern bay feeljne nic^t bc fd^ebigeft. Ad omnia
ergo praecepta scribendum: (^y ift goti«?' gcpott, bcii gehalten tntjtt
fe^n, Non frigida aliqua tradicio. 30 Non furaberi.s. Hoc septimuni
eciam a deo preceptum, non est frigida tradicio. Kt hoc complectitur
in se oranes falhicias, usuram, falfd^e tüi^ax, aüci, bo nil)t ic^
met)nen n^eften betrige. Sict)m groffeer 3unfft bcn bicberei).
2)icbcrcu ift ^n aEen ^anbttnergen. Sed parvi fures suspeuduutnr,
M:igui summo hoiioH' 2212s 2Dct bo rt^t jro Süittembctöf feljn bet
Ijobe fe^n totpp obbtt man non scortctur r 24 über spontaneam
steht corde et ore 2ti qui(8) 3() .S?|itimiini rroi-eptum ro r 32 Omnes
lalliicias complectitur lioc praecojitum ro r 33 Siebe»)) hai ixh{it
ttanbitotxi ro r 33134 Äe^lie /-i« sus|icnilunlm- nnl ,;.
The text on this page is estimated to be only 15.11%
accurate
78 «iobciiteÄ ©cbot. 7. Teicmbor. R] ]>r:»otis faii man
i'^leid) fo )wl brQud)cii ein biebftal, alo lücmi bii 311m fenfter
l)inbcii l)ineiii ftiecieft :c. 3[t eben fo mol geftolen, Uienn bii ba-:
flcifd) ,yi teluev k. (^c> l)ei|"t alleö gc= ftolcn, lüemi id) auf allerlei)
lueife meines nel)eftcn C[ut ]n mir bringe. Kloo ift nic^t ein
gemeiner l)anbuiercf an ff erben et groffer ^nnfft (juam furum. Et
plorunciue parvi fiires .siispenduiitur* JC. Non nie laedis, quando
tnihi furaris vel minimimi tlaniniun facis, sed deum laedis. Ideo oninis
artifex, lanius ;c. jol boä gepott auff bic luagc fc^reiben, bie mulner
auff bie fedfe, bccfer auff» brob, fdjufter auff bic leifte. Qui eoiin
furtum vult vindicare, ber ift grofe, «lui irasritui- iu 3. et 4. K. Et
econtra 2rcibftu beinen I)anbcl rcd^t et nun furaris, ;uidi deuui, (jui
dielt: bu folt reirf) et feiig luerben. Si econtra, lüirb er biiy allö ]n
ftieben. Quacrela est, ba» ci nidjt gleid; ]i ge^e. Ego monui K. beu
reid)cn tf)uftn !einen fc^aben, Sed iiie est multus paujwr populus,
foldje betrcugftu et contristas. Et tales gcljen mit tt)einenben äugen
au^j ber fc^erren^ unb ruffen gl)en f)immcl, für bencn fnrd)te bid),
ber arme l)auffe tl)ut5. Et illoruni iat-lnyinas res|)ieit deus. Et luenn
birS tüol gt)et, fo füren mic^ alle teufel tüeg, non facta cruce prae
ine. §utte bid) für bem nad^barn, ber beinen tro^ nid^t fan
aufftel^en. 2öil er§ nid^t ^aben, tüie ic^5 tüi( geben, fo (äffe er
mily. Si conteiunis deum, contemuet te, bQ§ bu bcine»
gefc^unbenen gut» nid)t braudjcn !unncn tuirft nee posteri. 3/6 Cä
iw pleruuque itnt ö 2iet biete junfft ift bic gtoftc. r 8 Parui lurcs
suspenduutur r 9/J2 Qui bis Quaerela unt 11 tcic^ Jücrben et jelig
ühtr teid^ atehl 2 über et feiig steht 1 12 De male (luaesitis Exenipla
lud. 7. r 14 contristas über betteugftu Lanii r 181 l'J aujftetien bis
miti unt 19 toil über id)^ coiiteniuet(d) 'j parvi fures suspenduntur
(oben S. 77, 34) vgl. Unsre Ausg. Bd. 16, 514, 32 u. o. ') Jodetten d.
i. Fleinchlxinke ; cgi. Unsrc Ausg. Bd. 33, 67'J zu S. 265, 17. jl]
inceduut. Ideo quodlibet opifieium vidc-at, ne furetur insidiis alium
fallendo. 2)it) flct)fc^cr fd)rei)b» uff betjne ttjoge, 5)n) fc^uftcr uff
bie lei)ften, 2)n3 ^JJtoEer uff ben facf. Time deum: si quem
defraudaveris, non homiuem solum, sed deum defraudasti, qui zelo
suo te conteret. Si autera observaveris hoc praeceptum, bona
consciencia ditesceris. Vos iuvenes discit« liaec praecepta, si maiores
iioiueriut. 2)en albe ^uube fi)nbt nid^t benbig io mod)en^ .^ucttct
euc^ Dor ber f c^ljnberei) , bo öor toarne '6) euc^. Non pro|)ti!r
me locpior ci divites loquor, h)t)r trollen bei)ner turf looll auöftel)cn,
id) lDl)l bcnnodj elju ^ert fe^n, feo btO el)n betler bift. Sed propter
paupere.s, (piorum iiinlti sinit in hac civitate, quos tu defraudas, Uli
elamant laclirimas in coelum ad deum. 21123 3etlid^ ^anbttoctg
^ott gnug m^t bifem gc^jot jw fc^affcn ro r 28179, 18 Si milii
eingulis annis 100 fl abjt^ljtibeft , 81 egu uelleiii , iiellein einere alibi,
ne oljuluni liic exponere uellcm r 28 bennocf) (nid^t) 29130 8ed bis
quos unt ro 30179, 21 2)ie atmen muffen bie f^^nbe«^ tragen bic
te^d^en fonnenS wofl atoffte^cn ro r «) aibe t)unbe f^nbt nic^t
benbifl ,^10 mad)cn vgl. Unsrc Ausg. Bd. m, 654 zti S. 616,8. Auch
Pouchs Slg. 3 ', 147 1'ic alten fdjetcf mndjc ber Icuffel benbig, alte
t)unbe etc. ; Thiele Nr. 236.
The text on this page is estimated to be only 18.40%
accurate
Siebentem föebot. 7. lejember. 79 R) Vüs fere omnes lustici
et cives esti« fures et ©c^inber. Paulus Kplu-. 4. '(^ui»»«! eti.s eam
amovere, sod dare aiit liahchitis dcum iratuii» ^c. Sic sut deus
zelotes. SBenn man be§ anbern fc^aben nii^t öorfompt, ifts aUesf
geftolen. S)iebftatt, ut dixi, ift ein gro§ med)tig ^anbhjercf^. Hinc
oriuntur l>ella, 1 ©d^inber Ephe. 4. r ö Forum, r 0 ift üöei- bit 9^10
Serui Merceiiarii r 11 ipse bis servus (1.) unt 12 Famula r 16 Söenn
bis gcftolcn nnt 1. praecep[tiim r 17 Vnde belia? r ') ^JJJeifter ^anje
ryl. oben S. 38, 17; 61, 3. "■) Oben S. 78, 5. N] Horum clamor te
perdet, certissimuin crede. Si igitiir venerit pau|)er, is in sua tuuica
habet scriptum : Ne furtum facies. Igitur aspico ijhmi. Illos 20
pauperes time. Ne dicas: ^(^ QC^c» nic!^t neI)er^ iDtjlfttü nic^t
l)aben, feo laB mt)r§, et nostri pauperes advenae et studentes hoc
maxime paciuntur. Insuper non solum defraudes, scd eciam jiauperi
adiuves. ^lid^t aÜcljnc öerbetot e» f d^tjnberet) , ^onbern bh3 folft
bem burfftigen ernadj geben. Codsiderate igitur vos mercatores
omnium rerum, ne (juem detVaudetis. Non 25 multum permanebit,
mihi crede. @§ ift ct)n morgtt, nic^t cl)ne fdjDnbcrcl).Time
pauperes in tuo emporio: ii sunt atrociss[imi hostes tuae fallaciae.
Vos servi et ancillae negligentes, inobedientes estis domino, fures
e.stis. Narn recipis ab illis mercedem, lectura, domum, vaporarium
caHdum, Nam dominus servus tuus est, qui te procurare oportet. Si
igitur (juiil iieglexeris 30 eins labore et perdideris, für eris. Ita vos
meroenarii conducti, (jui mcrcetlon« speratis, vix dimidium diem
laboratis. 22123 5Iid^t bix geben unt ro Openi lerre pauperi
praecipit hoc mandatum ro r 23124 Pauperes timendi ne
defraudeiitiir ro r 27 Serui et aiicillao fures ro r 28 in (max) 28129
Nam (2.) bis quid nnt ro 29(30 3!inftfltcdjtc ünb tiifflb« ro r 30 üUr
oiua bis merceuarii steht Wen btt) Ijn e^n fd^rte^n tjerroorneft ctjn
top ,?n>bri
The text on this page is estimated to be only 16.26%
accurate
gO Siebcnte-j ©ebot. 7. lejembet. Blfanie-s, ut por ea
auferantur mal»' parta. nain doiniiiiis i-st viiidex maloniin ;c. Sic
meroenarii funncii )id) iiid)t ivui( bcidjifjcii mnd)CU^: c]namlo(iLiH'
dinruliuin dicm potant. et blld)Cn llüd) bci^tll. Talfs vocantur et sunt
f'iires et digni, (|iii suspendereiitiir, ineiitiuiitiir dieeiites se laborare et
behalten nä)k ©CVOt ali ftunbc es i)nn bciuer gcirolt, boö bu
eibcitctc[t ober iiid;t, rtuna K. sed bellum, pestis jc. * ©ic meinen,
fic [«l 28»») ^obcn Ca rcd^t jc. Ideo quisquLe lr)cicfnici[tcr jd)reibc
auff jcin aimcrojt : 'Non furtum faeies Sic laborato, tüte bu bidj
üeibingt t)Q[t. Si nou, es für. Turca aediticat sie: Veni et hoc effice
t)nn bcn •{ tagen, gebende, ba§ i" bcr ftaü ]tef)e, si non, ben !opff
I)iniüeg. ^Jtnn mifjct l)ng ob, fo biet einer arbeiten fan. Sic Kcmani
k. ilMr finb eitel bier bentel.^ Noli furari, in(juit, uuli cuntemnere, si
fideliter laboras, vendis res tuas, foltu einen gnebigen €>r.€oi n.iöott
l)aben, ber loil bir« reidjlid) luibber geben. Salomo: 'Abominatio est
stathera dolosa' i. e. deus tani unb m[ö nic^t leiben. Eeoutra er
'^at ein m, t)er^lid^ tüolgefattcn, toenö red)t i[t. Si contraiium, fo
greiffftn nid^t einen armen man, toeib an, sed deum. Inspice verba.
Econtra placet bene deo, ergo ^aftu gut t)onbeln. e§ jol bir alaeit
befjer gefaEen ein geller cum dei 1 fanies über ut per J nid^t ül/er
flnufl Merconarii r 7 Pestis /• 10 Turca. r IJjU Noli bU Abominatio uiU
16117 o bin deum iint 17 verba mit 15 stathera durch Strich verb IS
Ib. r >) hinnen fic^ nidjt gnug bcjc^tffen machen vgl Umrc Atiag.
Bd. 34, 185, Will. *) Fehlt hei Dietzund DWtb.. rielleicht verhört vgl.
Z. 24 'bljtncn'? (xler 'bier!)elb' s. Dietz. [0. B.J N] Ita ut timeat
quilibet laboreai aliquera alicui conducere. (5pri(^t man p^nen eijn
mort^, feo lafjen fie et)nem bie arbel)t ligen. 3)iebe, ®iebe ^el)t 20
tir. Crede niiiii, tu [»lus es quam l'ur, (juia couduetus promisisti
laborem, b(.nis verbis non perfiei.s. Gi)n ic^lic^cr , njerg!mei)fter ,
^cimmerman f(^rel)b fold^S ufl bel)n mancn: Non iurtum facies. Si
autem laJjorare nolneris, noli cui te conducere. ^lei)b bot)ci)mc
l)i)nber bem offen unb brottt)e bt)rnen.^ Tales neglectore.s labori.s
Romani olim capite plectebant, si promissis suis 2-. non
.satisfecissent et ueglexissent incuria. Ideo hoc praeceptum in
omnes condiciones sese dilatat omni-scpie condicionis fures sunt
plnrimi, ideo nihil plus ditescunt, pestilencia et hostibus conterentur
tales. 6§ §ol ^un^cr frigcr hiä) tuoll bo^eljmc fudien. Nf)n prohibco,
si quis suam mermlem isto praemio vendere polest, (^ö mag ei)n
iberman ba» feeljne uffä tl)en3crft geben, 30 jy äöetflflerollje Dnb
lofltl^onet ru r 21 lnr iihtr (diues) 22123 C^n bis facies untro aebtn
jum biete machen ßulte «Dlontofle* r 24 cui (pro) 28131 Salomon
Abominacio ent deo pondus dolosa lust« autem deo placet r 29130
Non bin baä untro 30181, 18 tbeloetft Jm betrifle tmt ro ') btottl)e
btjmen ryl. Waruler Hirn Nr. 57 Va kann mehr ah Birnen braten, und
H. Sachn XII, 203 Witt nuff dem hohler sitzen bleiben, Die Hirn in
der hidiel und/reiben. Obige Frmsmig nicht Megt. t)inbet bem Cfen
fi^en ttei Wander s. r. Ofen in inekn liedemarten = mchta tun oder
au.'
The text on this page is estimated to be only 13.95%
accurate
©ifbente« imb odjff^ ©rbot. l.tnmWx. ^ Rl hoiiopliioK«.
(,iuun mit feinem cxmd bie ftnb Hol qulbcn. Wn triincf tüciii-^
taiitiini, 0 nnb luie hu fnnft. Kt Ik.c propter demn. Sir (-(.{ritt-t: 3dj
teil dc»iiiin:«f s ineae feinen fcf)aben tl)un, mm [n-opter ipsam, sed
propter ipsiim, ^ condiciouis homo, scrvus, ancilla, Mcr2'. cenarius,
Morcator hoc summo studio perpendat. Naiu deus zelntrs est.
visitabit iniquitatem tuam ulcisoens stios insontes, quos d{>fraudas.
Non dices falsum testimonium in proximum tuum. IVimum: si ox
odio et invidia ante iudicem accusamus aut alio Umioplacitum
muneribusque corrupti porversa locjuuntur, qnac vera non sunt. 30
atquo ita pauperem et insontem damnamus. Huc portinet lin^ua
monlax et blasphema, quae aperit, tegit proximi peccatun», ut
plcrumquc mnli«*n's sunt huic vicio deditae, sed ut nos pcrfecciora
membr.i tepunus inlimia, n( Paulus I.Chor. 12 argiunentatur, quod
impudica mombn» a pudiris tcjjnntnr.i «.. i. . Ita nos proximi nostri
pcccatum dcfcndamus et occultenins. Illique. ipii 19123 Abominacio
bi» fctjn nul ro 22 Summa ro r 27 Octauum Pm-rptnn. r,. r 28 alio(. .
.) :iJ (loditi Nun npericuila |in>xinii |nvcntji n» r fiut^ctö Jllkrlc. XX
*
The text on this page is estimated to be only 21.00%
accurate
^2 9lcf|tc3 öfbot. 7 3?c,Kmlier. R^ |d^h)cigcn !unncn. Sod
dehes loqul de proximo oj)tiimini in fmo. oollationiluis jc. sicut et
corain iudicio, tnenn er 311 fd^anbcn fol trcrbcn, bcdEe unb i.«or.
13, S3i grabe feinen fet)l 311. Paulus '^Jiafen unb augcn bcrfen loir
nid^t 511, bcnn fie l)ahe t)t)r et)r' K. Eetintra diligentissime
ooouliinus et operinuis meinbra inlionestiora, beun mon legt nDnicr
nil)er fo uiel au bie äugen, l)cnb unb oUe & mcmbra non
vereouiidiora alö eeontra. Qiii lihenter audit alioiuni igiutminias et
|m»l)i-a, ber ift ein foldjer, ber gern ü l)nn bc§ anbcrn l)iubcrn
feilend Coraiu iudioio locjuere veritatein , extra iiuliciuni hxjuere
optiniuni i. e. rcbe nici^t übel de proximo, sed bonuni, fo beluarcftu
bcin junge, ut non [ieoces contra lioc praeeeptuni. 8i vero locjueris
de eo nialnni, dens niinatnr 10 tibi, (juod non velit tibi eondonare. Si
eeontra, mxb er bcin gncbiger ©Ott fein unb tuirb bir^ öergclten.
Hie exeipitur hjeltlic!^ oberfeit, prebigcr, öater, Uiuter. Qnia hoc
praeeeptuni sie est servanduin, ha^ man ba^ bofe uid^t ungcftrafft
laffe, praecipitur, ne malum corpori proximi inferas, sed potestas
('^i. 27«] exeipitur. Sie parentes befd^ebigcu l)^r üuber am leib,
ben ift bi§ gebot 15 nidjt auffgclegt, qnia deus t)eifft fie eS 3C. nt
niandat deus niagistratui, ut gladiuni gerat, cum ipso non gerat. Ideo
deus reiecit Saul, quod pepereit Anialeeliitis. Sie tibi non
praeeeptuni, ut alteri auferas uxoreni. Si vero niandaretur e eelo K.
ut potestas mandatuin habet, Ideo feret bie JU et pntpter scelus
admissum aufert niarito uxorem et oeeidit. Sic nemini licet 20 ubel
reben de proximo nisi iis, quibus comniissum est. Ut Iudex et
assessores muffen fragen et testes requirere, ha§ fie e§ beffern 2C.
Et ideo etiani ordinavit deus potestatem, ut hoc agat jc. Sic pater et
mater de liberis loquuntur, fd^tücfter flogt ber mutcr über bie
fc^iüeftcr et frater de fratre jc. 3 .l.Cor. 12. r 7 über probra steht
ä)maä) l'J Beati pacifici v 73/ J4 Potestas r 17 Saul. Amalechitae. r
20J21 Sic fns est unl •) ijnn bei onberii ()inbern je^cit (unten Z.
'Jöl'Jd; S. 83, 18) vgl Thide Nr. 272. N] semper pessirae de ali(jUo
locjunntur, similes sunt illis, £)ie e^nem gctnc tjU 25 ar§ fc^en.
Summa: !5)U) folft nic^t ubel öon bequem uef)cften reben nod^
gerne ^oeren, ^onbern folft fci)nc fdjanbc ]v beden. Excipiuntur
Potestas mundi, Praedicatores et Parentes. Sicut in quinto praeeepto
exeipitur carnifex trucidans homines, ille contra 5. praeceptum non
facit. Ita parentes caedentcs pueros non faciunt contra prae- 30
ceptum dei, sed ex iussu dei faciunt, quod si intermitterent,
peccarent. Ita potestas cum violencia aliquem puniens non peccat.
Ita in hoc praeeepto Cbcrgfel)t in iudicio consistens non peccat, si
examinat, perpendit maliciam hominum. Xa§ ift l)r auipt, ha'5 fie öon
anbern ^unbcn reben. Ita parentes 26127 iito bis beden unt ro
28129 über Sicut in quinto steht Excepcio 5 praecepti ro 29 Qiii iure
pecrata alinriim tractare possunt rn r 31J34 Ita Ins t)t nnt ro
The text on this page is estimated to be only 15.07%
accurate
9ld)tfä bi^ ^rbnfea ÖJebot 7. tf^finbfr RH ^] 2ßenn man§
bQ()in tregt, ha man e-ö ftraffcn fol, hcne jif^itur. Sir, si mal«» afi:it
proxinuis, die Tonsnli, ludici k. Mattli. 1H. No (juis Hinat: ^df tDÜ
««»».i«, li«. niemonb ftraffen. Si malnni proximi 11(111 vis indif-aic
potcstati. fo f(^tt»eigc bei) bir felber [tili, benn tücnn hu c§ mit
beinern jc^cnblidjen, aintigen moul •> in onines donios tregft, fo
madjftuy iiicf)t bcffer, scd erger. Ideo indica, »do bu e§ fagen folt.
Über boS finb auä) aufgenommen bie praeer IVaedicator officio suo
fungens aliorum peecata corripiat, extra haue funcoionem tacere
debet. Summa: 5)lt) folft bie h)art)el)t tior bcm gerid^t bcfennen
iinb 2A fünft nic^t öon bel)nen ne'^cftcn bocfee^ rcbcn. Non
concupisces j)r
The text on this page is estimated to be only 13.73%
accurate
R] hutlcin*. n si prinreps :ili(|uis lihenter esset (51)urinrft
311 6ad^ffcn, Et ageivt ouni Caesare suIkIoIo [Ü^l. 28''] et
accijHMvt literas a Caosaiv et poslea eausaretur so non <1«)1(>
eirisse ?c. Tic jdjalfcit Unrb faft icc^ivt l)al)tMi luitcv ben Rubelt.
lUan tau einen fein oon feinen flutcrn bringen mit einem l)nbfd)en
titel unb falfd^em ied)t, ita ut deeeptoi- uon possit dolosus culpari.
Sie ging'S 5 mit ben Uieibein ]U. Xam in veteri testamento libellus
lepudii dabatur K. Ibi eogitabat iiebulo aliquis: vieimis mens
pnlchrani nxoreiu habet, tüte t^et id^ l)t)m, nt eani ae(jnirerein".'
I«;itiu- jtraeeeptuin est ibi, ba§ feiner bcm onbern jol fein loeib jo
mei[terlid) nbfpannen tarn pnlehra speele. In (). pnu'Cepto dicitnr
alind. ©in fold^er lüar .S>erobCy 1. vivente. deinde u> niortno
fratre. Ajmil nos non sie fit, sed qui alter! nxoreni tuil abjpannen,
(.K'eidit enni K. David RHU" Cud) in lioe delicto. Sic est mit bem
ge[inb, ^Qt einer einen fromen fned^t, magb, vicinns non favet
hero: C^nare servis linie lien»? painni dat inercedis. Sed tnni servi
erant leibeigen. Xobiscnni ;> titfl bi» ut nnt f, lAheh r.-pii.i: >■ lOjVJ
Da^uid Herodes r 11 mortiio über fratro lljl'J Apud hin dolicto unt '1
unter bcm l)Uttcin vf/1. Thiele Nr. ^'^. Gnu: (ihnlicli, auch in
(Iciiisclhen Xusnmmenluing gesagt Eil. Ausg. BI. 4.HJ: unter bcm
Schein unb .^uttcin bcö gottlidjcu '•JJamcn^. N] ftinonc^e ^n?
Uiegc brcnge, bo mi)t er i)l)n borbon brenge, ba§ er ^um ()atu^e,
15 iHcfer, tei)d)C K. fummen mag. Hae insidiae in lege Mosi
freqnentiss[imae. Ita enm uxore fiebat, qnae repndiabatur in lege.
Ibi cogitabant: Qnomodo pos.ees effieere, nt proxinii tni nxorem
formosani posses acfjnirero? Unb ^Qt fie X{)vx abgcjpnnncn, ha^j
fie bcm manne fct^n gntt t^ettc, nt daret ei lilK-llnni repidii. Talis
erat Herodes, (pii nxoreni Pliilij)]»i IVatris sni pocie- 20 batnr. Tales
snnt, (pii lioinieidio niaritnm enecant, nt uxoris snae poeiantur, unb
bennoci^ öor ber tuclt frum löollen ^C^n. Ita si vicinns vicino
ancillam, servnm k. abl'pennig mad^t, dnlcpbus verbis: Qnid vis
coram illo agere? Veni ad nie, ego te procnrabo, et tarnen non vnlt
malus indieari, (juia non potest probari enm hoc malum perpetrasse,
dicens: äßog mag ic^ be§'^ tüolbc aa boc^ bel)ne magbt bet) btjr
nid^t Bleljben. Ita si vendit agrnm dicens: Cur vendis? si nolles
vendere, non einissem. Interim tarnen suis insidiis eum ad hoc
enmpnlit. Snmma: llü jült iiicmanbc« nid)t nbfpcimig mQd)en,
Bonbern ^me ^um gutten unb frummen bcl)u(nlid) jclju. p]j)ilogns
deealogi. so Atqne haec est brevlssima deealogi exposioio, Nonne
haec satis o|)erum nobis affernnt? non opus esset nos ])ropriis et
electiciis iudulgere 16 Hae] lle(c; 17 1fi Xie e^nem boS fetjne
Qbjpennifl machen ro r 27 emissem r an» enierom 30 mtl ro :itl-i2
Hat openim in decalogo lialiCmuH ro r .'{'J (.ah) iiidiilgiT« 
The text on this page is estimated to be only 17.05%
accurate
SBejdjIiifi bet ©ebotc. 7. le jembtr. 85 R] frequenter fit, boö
einer bem niibcrn feinen fnedjt ober mac(b abjpannct et putat se
beue facere. Sed hoc est contra piaeceptum i.-tiui. Scnj|>er cojrita:
Non concupiscas servum alterius, ut tuus fiat serviis ic. Sic cinii
azino, Qc!er, QQttcn, Ut Yinca Nabotli, i. o. bu jolt if)m fein pferb,
garten k. ni(^ti Bon ji.t», ••• abfpanncn mit Uft ober rec^t, sed
i)l)m forberlic^ fein, ni n-servct. Di.-, an non !*atis bonorum operuni
liabcamiis ju t^un. Ex" conteinptji lo pnjecc|>tornni factum est, nt
alii ordiucs sint exc()g:itati. lam lüOÜen tüir QÜC praecepta jufamen
fugen tjnn ein frent^tein, ha^j teufte ijnn bah crfte. IJblq[ue haec
duo invenies, ut timeas deum et fidas deo. Si deum tinie.s, noii 10
difBdep, non blasphemabis jc. non eris Jnobediens parentibus jc.
Keenam et terrorem et promissiouem dei in negligentes et studiosos
decalogi, quae 3ü duo sunt fasciculus, bic fc^nure, bo ml)t man bcn
txanc] ^lofammen bDnbct '. Lacius decalogi exposicionem
tractavimus reliucpuntes cctcrorum cx|)osicii»nem. Sacius enim est,
ne hoc primum hiculenter tractetur ccteraipic |H>sthabeantur ad
aliud tcmpus. Vestrum erit in pnieccpti< divini^ i»« v. .-..n et
studere. 20 Quoniodo omnia sequoncia praecepta ex primo
scaturiiint ro r (Fide) l iuiun.iii 24 Sicut adfoctus marili uxorem non
fort riuuleni r Äi Minae et pnuuissu.iiM «d dec*logon datae ro r
29130 et studiosos bin bljnbft tiiä ro ') Vgl. im Großen Kuteclihm».^
Erl. Anxg. /»«/. :''. "? Tflrutnb mufet bu au6t bifft etürf lofleii öc()cii
bind) alle ®cbüt ali bic cd^iilc ober Ü
The text on this page is estimated to be only 19.33%
accurate
gjj Ifi fiflc 'lvtt(cl. lU. IlCllll>CV. R] [4*1.31''] 10. Deco
ml). Aiulistis bic elften fturfc Hon bcr (5^riftlicf)cii Icie, uvupc
iiyi.32"| (Icinn pi-aerepta. Et luomii vos dilitriiiter, ut atlliortemini
ramiliain, nt onm verhatim (li^itTcnt , Et ind»' dco ohedirent et vohis
dominis et vos (nuxiue deo ül>eraedic'ari de duodecim tidei artieuiis.
Si (|uis velit partiri, plures jc. Sed vos dividite Symboltim pnn bie
t)eiibtftuc!e, nad) bcm ba^ brcl) pcrfon finb: Pater, filius, spiritus
sanetus, (^iiia 'eredo in deiim ]iatiem' JC. bic ein föott finb, Xainod^
Ittogt l)f)r einen fonberlid^en aitidel l)nn feine ftudEc teilen. 1.
articulus docet creationein, 2. redernjitionem, ;1. saiu-tifioationem.
1. (piomodo simus creati cum omnilms ereatiiris, 2. (juomodo simus
redempti, 3. tüie tt)ir folten ^eilig, rein fein et leben unb rein
bleiben. Pueri et rüdes foHenS fo ouffö oller cin= fcltigft lernen:
Hdes habet tres articulos, 1. de patre, 2. de filio, 'S. est de 3 3
articuli Symbuli r 12,13 1. 2. 3. r 14115 3. bis Meibcn unt 15 rein Her
bleiben 76 1. 2. 3. r N) Hacterms iirirauin xaTsyio/ui articulum
tractavimus, quem omnes Parentes, doraini pueris et subditis
propouant sedulo, vosque senes docendo alios docoiores evadetis.
Nam omnibus doctoribus docendo alios doetrina augetur. Igitur
decalogon breviter complexum illis proponite, quia prohibent au et
iubent, misericordiam et penam in sese continent. CREDO IN UNUM
DEUM PATREM. Audistis olim de 12 articulis praedicari fidera, si
omnia essent pracdicanda, plures essent. Nos simplicissLime in .3
articulos secundum personas divinitatis dividimus, deinde lacius sese
spargunt in membra. 25 Primus articulus docet nos, (piomodo simus
creati. Secundus docet, quomodo redempti simus per Christum.
Tercius, quomodo sanctificati simus per spiritum sanctum. Primus
igitur patrem Creatorem, 2. filium redemptorem, 3""' Spiritum
saiKrtnm sanctificatorem. Haec est summa Siml)oli in tres part«s
divisi. m Prima igitur pars: Credo in ununi de um k. i.e. Credere
debeo, quod 23 fidem über si 26 Tres priucipales fidei articuli ro r
Primus unt ro 27 Becuiidug unt ro 2H Tercius unt ro 29(30 Priniu«
OU sauctificatyrem uiU ro 30 Status et diuihiu Öimboli ru r
The text on this page is estimated to be only 18.60%
accurate
aet ctfte attifel. 10. Ifjeinbet. 87 R] s[piritii saiido. SCßoS
l)eltc[tu de patre? res|)(niatorem habeam, non ab hominibus.
2)Qruntb lerne tc^, h)oe f)er iä) funime unb tüof)er id) alle bing
^obc. Sequitur Conclusio. Si haec omnia dei dona sunt, merito in dei
honorem 30 uti, Creatori in illis laudem dicerc. 9Bl)r tDurben ml)t
unfeern ougcn, orcn, teben, tceljp unb ünbt ic. nid^t ^o lcl)d)tlid)
feunbigcn, sed illis in gloriam et laudem dei utcrcmur. Haec continct
in sc vcrbum 'Creator Quisqui.s hunc articulum credit, in conspcctu
omnium creaturarurn illum cxcrtx't. Si 20 Creatorem celi et terrae ro
r 26128 Vita bu blnfl unt ro 38 Nos crontur* dei et omnil.us creatnris
per cieum utin.nr ro r 29 über Sequitur »Uht Secundo ro 31132
3)ct:^att.en |ol ä) >)nie bienen loüen bandtcu biib lil-cn r 32 33 In
omnibu» rrc*tiiris aguoscimuH deum rrHiidircm ro r
The text on this page is estimated to be only 20.22%
accurate
88 ^f^ f^f*"-" ""»^ itiifilc ^Irliffl. lo. Ii'jcmbi'r. R] «jiii lux-
verbiim ' C'iX'atorein ' iiitelli^iinf.' X:im nrnio illi scrvit. Omnim>
uiembris online |HX'catur in »Icuin mit lucib , finbcill, t)ofc K. 2)iunib
mag unö bcr erftc artirfel luol bcmutigcn et cvfdiretfcn, quin non
credimu^. lain hoc obseivat«-, boö id) • fuife Quffy lüOlt ' Creator' i.
c. crcdo, «|Ikm1 dederit corpus et aniinam, Ö sensus, veste.s,
futtci", lüOUUng, tücib, finb, tiif)C, odEcr. Ex hoc seijuitur, qiiod
debeaui ei servire, obedire, laudarc tl bancfcn. Qui himc erj^o
articuhiin credit, si inspexerit vaccam, «licet: Haue dedit mihi deii.s.
Sic de uxore, liberi.s. 1. articuliis in Summa docct Creationem. '2.
ivdem|>tionem, 3. >>anctiHcati(tnem. Crcationem sie i. e. j^cijft,
boö id) glciibc, baä mir töott flebcii l)ai leib, leben, üernunfft et
omnia, «juaecun(jue habeo. Non a me ipso habeo, ne superbiam.
Ego non possum darf nee servai-e. (iuare dedit et quarc credis, quod
dederit? Ut eoenobia ftifftcft ? Non, sed ut laudes, gratias agas. Muhi
dicmit illa verba 'Ci-edo' 2C. .>eil non intelligunt, (juid sibi velint. Et
in lesum Cliristnm. Aud[istis, (|iiii«l (liviilaiiius Synibohnn in 'S
artLiciilos pro siniplicib[us et pueris. 1. pars est de patre, 2. de filio,
3. de s[piritu sancto. 1. docet Creationem, 2. Redemptionen), 3.
Sanctificationem, [231. 33"] ut sie quisq[ue intelligat, 13 Multi über
dicunt 17 über pars sUht art N] videt Arborem fructus ferentera,
videt deum creatorem. Ego simplicis[sirae exponam. Von docciores
in quolibet verbo potestis excogitare: 'Credo in 20 deum Patrem
omnipotentem'. Haec studiosis relinquo pervestiganda. V08 parentes
siraplieiter Creatorem deum filiis proponite, sicut supra. Si omnes
Uuiversitates audiretis, non audiretis tantum fidei expromerc in hoc
articulo. Ita dieimt: Sd^oc^pcr, Bä^otppn, h)Q§ melier? Tu autem te
creaturam dei onmia a creatore sumeutemque crede gratiasque deo
usu illorum age. Si 25 haec scieris, doccior eris omnibus doctoribus
Universitatum. Ex hac cognicione donorum dei pellitur omuis fidueia,
tinior erga creaturas prae8umpcioque nostri. Et in lesum Christum
füium eins unicum, Dominum nostrum. In hoc articulo simplicissime
agam hoc unicum verbum in illo tractans: 3u 'Dominum nostrum'.
Interrogatus : quid sentis in 2. articulo? Responde: Credo lesuiu
Christum dominum meum , (jui mc iibei-avit a mort^', peecato 24l25
Tu bU 81 unt ro 27128 praesurapcioque c aus praesumpsioque 31
Dominum iiusitrum utit ru 3lß2 Hiesiis Christus dominus noster ru r
32189, 1 Credo bin JC. uiil ro
The text on this page is estimated to be only 24.30%
accurate
5:er ilDfilc ^ilttifcl. 10. Ititinbtx. gg K](iui<1 (licat, cum
reoer^et Synibohiin. Ego ui>i voc-abiilum 'Creatür iit, ciiiu
iiittnogari< , scias respoiiderL' sie: Ego credo, «juod denn «it
C'reati>r, artis cxpiirnnt. scilicet ita: me liberavit et rcdcmit, 'genitus
a Maria virgine, pa.«isus sub Ponjtio Pila[to' k. Haec omnia ideo
Christus fecit et passus est, ut «loniinus noster fieret nos(jue
redimorot suo proprio corpore et sanguine, ad ijuwl opus erat nasci,
idquc a virgine, ut iiuorrnptus et integer Sathanac regnum 25 (te)
onnii.i 26 pronunciat 28 Humma (Chr) 30 Hanc bU articuli unt ro 31
Quid scqutiilia indii-aiif ru r 32,33 Haec bis pri>i>riu m»j/ ro 33 («ui)
cwrpon 
The text on this page is estimated to be only 25.64%
accurate
90 ^ft ^rocite "Mrtifel. 10. Xfjcinbct. R] auä) ftucfc, bic
biefcn glauben Qu||trcid^en et ostendunt, quid Christus factus sit,
cjuid (loiniuus uoster feoerit, ut uos libcrarot, tüciv C§ t)'^n
gcftanbcu l^obc, njQÄ er bran geluagt t)Qbe. ['^i. 33^| oo ift
Zugängen: fuit conceptus c spiritu Kuu'to, sine omni peccato jc. ut
nious dominus tieret et me liborarct k. Omnia fecit, ut d(»mimis
mens fieift, quia oportet tarn Sanetus sit, bQ§ bei" » Icufcl fein xcä)i
on t)l)m fahc. Xie [tucfe geigen an, (jualis deus sit et tDo mit erö
eilroiben l)Qbe, (piod vcnio suh eins dominium, nempe per proprium
eins corpus, bo mit üot cr fein fonigreid) jugcrii^tet. Totum
Euangelium ift gcfofft ^i^n bcn artidfct. Nam Euangelium nihil aliud
est quam praedicatio de concepto, nato k. Christo. Discite igitur
apprcliendere hoc verbum lo 'dominum nostrum P^o credere debeo
et credo, (piod Christus sit dominus mens i. e. quod me redemerit,
quia 2. art[icuhis loquitur de hoc: Vicit mortem, peccatum et ab his
me liberavit. Prinuun, cum creatus essem, tjette ic^ lüol allerlei) gut,
leib K. sed serviebam peccato, morti jc. ba !am G^riftuö, qui mortem
passus, ut liberarcr a morte et fierem ipsius filius et i5 ducerer in
iu.sticiam, vitam K. .|)crr fei) ^ie fo Diel al§ erlofer 2Z. £)te anbern
ftucfe geigen, lüoburc^ er fold§e§ ifdbz aufgericljtet unb lüaä er für
ein loft baran gctuagt ^abe: Non per aurum, argentum, equitatum,
sed per seipsum, hoc est: suo proprio corpore. Ipsemet conceptus e
spiritu saneto, natus 2C. lam non phis dicam de hoc articulo, nolo
enim vos obruere. Is 20 est vere Christianus articulus, Quem neque
ludaei, Papistae nee sectarii credunt Qui enim credit per opera se
salvari, non per Christum ic. et econtra. X05 gel)ort l)nn bie onber
prebigt. Audivimus in his 2 particulis, quid a patre, filio habeamus,
nempe a patre creationem, a filio redemptionem. i/2 Cbristua
dominas noster fecerit, quid factus sit, ut nos über factus sit steht 1
2 über dominus noster ateht 2 über ut »te/U 3 5/7 Omnia büi veuio
unt SjlO Totum bvs jc. tmt Quid Euang[elium doceat. r 15ll6 et
ducerer bis vitam über a morte bis ipsius 15 Passus K. r N] posset
deprimere. Igitur unum hoc verbum: 'Dominum nostrum' observate,
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
ebookfinal.com

More Related Content

PDF
API Design for C 1st Edition Martin Reddy
PDF
Api Design Patterns Meap V07 Meap V07 Jj Geewax
PDF
Keynoteof A P I
PDF
Api design
PDF
How To Design A Good A P I And Why It Matters G O O G L E
PDF
How to Design a Good API and Why it Matters.pdf
PPTX
How to define an api
PDF
ApiDesign
API Design for C 1st Edition Martin Reddy
Api Design Patterns Meap V07 Meap V07 Jj Geewax
Keynoteof A P I
Api design
How To Design A Good A P I And Why It Matters G O O G L E
How to Design a Good API and Why it Matters.pdf
How to define an api
ApiDesign

Similar to API Design for C 1st Edition Martin Reddy (20)

PDF
API design
PPTX
OOP -interface and objects.pptx
PDF
How to design good api
ODP
Designing Good API & Its Importance
PDF
Software engineering marsic
PPTX
Chapter 1 Introduction.pptx
PPTX
Building Maintainable PHP Applications.pptx
PDF
Software Essentials Design and Construction 1st Edition Adair Dingle
PPT
Software Engineering chapter 1-about user and client communication
PDF
software engineering
PDF
Kelis king - introduction to s.e.
PDF
Designing Web Apis Building Apis That Developers Love Jin Brendasahni
PPT
Slides chapter 1
PPTX
BSC Software & Software engineering-UNIT-IV
PDF
Modern C For Software Developers Serious C Development 13 Karen Singh Garewal
PDF
Modern C For Software Developers Serious C Development 13 Karen Singh Garewal
DOC
SE-TEXT-BOOK_Material.doc
DOC
SE-TEXT-BOOK_Material.doc
PPTX
SE-L1-Introduction-NJ.pptx
PDF
Introduction to Software Engineering 2nd Edition Ronald J. Leach
API design
OOP -interface and objects.pptx
How to design good api
Designing Good API & Its Importance
Software engineering marsic
Chapter 1 Introduction.pptx
Building Maintainable PHP Applications.pptx
Software Essentials Design and Construction 1st Edition Adair Dingle
Software Engineering chapter 1-about user and client communication
software engineering
Kelis king - introduction to s.e.
Designing Web Apis Building Apis That Developers Love Jin Brendasahni
Slides chapter 1
BSC Software & Software engineering-UNIT-IV
Modern C For Software Developers Serious C Development 13 Karen Singh Garewal
Modern C For Software Developers Serious C Development 13 Karen Singh Garewal
SE-TEXT-BOOK_Material.doc
SE-TEXT-BOOK_Material.doc
SE-L1-Introduction-NJ.pptx
Introduction to Software Engineering 2nd Edition Ronald J. Leach
Ad

Recently uploaded (20)

PPTX
Pharma ospi slides which help in ospi learning
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
Mark Klimek Lecture Notes_240423 revision books _173037.pdf
PDF
Origin of periodic table-Mendeleev’s Periodic-Modern Periodic table
PDF
TR - Agricultural Crops Production NC III.pdf
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
Complications of Minimal Access Surgery at WLH
PPTX
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PDF
Classroom Observation Tools for Teachers
PDF
Insiders guide to clinical Medicine.pdf
PPTX
PPH.pptx obstetrics and gynecology in nursing
PPTX
The Healthy Child – Unit II | Child Health Nursing I | B.Sc Nursing 5th Semester
PPTX
Cell Structure & Organelles in detailed.
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Microbial disease of the cardiovascular and lymphatic systems
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
Pre independence Education in Inndia.pdf
Pharma ospi slides which help in ospi learning
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Mark Klimek Lecture Notes_240423 revision books _173037.pdf
Origin of periodic table-Mendeleev’s Periodic-Modern Periodic table
TR - Agricultural Crops Production NC III.pdf
O5-L3 Freight Transport Ops (International) V1.pdf
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Complications of Minimal Access Surgery at WLH
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Classroom Observation Tools for Teachers
Insiders guide to clinical Medicine.pdf
PPH.pptx obstetrics and gynecology in nursing
The Healthy Child – Unit II | Child Health Nursing I | B.Sc Nursing 5th Semester
Cell Structure & Organelles in detailed.
O7-L3 Supply Chain Operations - ICLT Program
Microbial disease of the cardiovascular and lymphatic systems
human mycosis Human fungal infections are called human mycosis..pptx
Pre independence Education in Inndia.pdf
Ad

API Design for C 1st Edition Martin Reddy

  • 1. API Design for C 1st Edition Martin Reddy - Downloadable PDF 2025 https://ebookfinal.com/download/api-design-for-c-1st-edition-martin- reddy/ Visit ebookfinal.com today to download the complete set of ebooks or textbooks
  • 2. Here are some recommended products that we believe you will be interested in. You can click the link to download. RESTful Web API Design with Node js Second Edition Bojinov https://ebookfinal.com/download/restful-web-api-design-with-node-js- second-edition-bojinov/ Pipelined Processor Farms Structured Design for Embedded Parallel Systems 1st Edition Martin Fleury https://ebookfinal.com/download/pipelined-processor-farms-structured- design-for-embedded-parallel-systems-1st-edition-martin-fleury/ Understanding and Applying Research Design 1st Edition Martin Lee Abbott https://ebookfinal.com/download/understanding-and-applying-research- design-1st-edition-martin-lee-abbott/ Statistics and Experimental Design for Toxicologists and Pharmacologists Fourth Edition Shayne C. Gad https://ebookfinal.com/download/statistics-and-experimental-design- for-toxicologists-and-pharmacologists-fourth-edition-shayne-c-gad/
  • 3. Design of Aircraft 1st Edition Thomas C. Corke https://ebookfinal.com/download/design-of-aircraft-1st-edition-thomas- c-corke/ An Introduction to Continuum Mechanics 2ed. Edition Reddy J.N. https://ebookfinal.com/download/an-introduction-to-continuum- mechanics-2ed-edition-reddy-j-n/ Machine Design 2010th Edition U. C. Jindal https://ebookfinal.com/download/machine-design-2010th-edition-u-c- jindal/ Design Theory 2nd Edition Charles C. Lindner https://ebookfinal.com/download/design-theory-2nd-edition-charles-c- lindner/ C 3 0 Design Patterns 1st Edition Judith Bishop https://ebookfinal.com/download/c-3-0-design-patterns-1st-edition- judith-bishop/
  • 5. API Design for C 1st Edition Martin Reddy Digital Instant Download Author(s): Martin Reddy ISBN(s): 9780123850034, 0123850037 Edition: 1 File Details: PDF, 17.71 MB Year: 2011 Language: english
  • 7. Acquiring Editor: Todd Green Editorial Assistant: Robyn Day Project Manager: André Cuello Designer: Eric DeCicco Morgan Kaufmann is an imprint of Elsevier 30 Corporate Drive, Suite 400, Burlington, MA 01803, USA # 2011 Elsevier, Inc. All rights reserved. No part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or any information storage and retrieval system, without permission in writing from the publisher. Details on how to seek permission, further information about the Publisher’s permissions policies and our arrangements with organizations such as the Copyright Clearance Center and the Copyright Licensing Agency, can be found at our website: www.elsevier.com/permissions. This book and the individual contributions contained in it are protected under copyright by the Publisher (other than as may be noted herein). Notices Knowledge and best practice in this field are constantly changing. As new research and experience broaden our understanding, changes in research methods or professional practices may become necessary. Practitioners and researchers must always rely on their own experience and knowledge in evaluating and using any information or methods described herein. In using such information or methods they should be mindful of their own safety and the safety of others, including parties for whom they have a professional responsibility. To the fullest extent of the law, neither the Publisher nor the authors, contributors, or editors, assume any liability for any injury and/or damage to persons or property as a matter of products liability, negligence or otherwise, or from any use or operation of any methods, products, instructions, or ideas contained in the material herein. Library of Congress Cataloging-in-Publication Data Application submitted British Library Cataloguing-in-Publication Data A catalogue record for this book is available from the British Library. ISBN: 978 0 12 385003 4 Printed in the United States of America 11 12 13 14 10 9 8 7 6 5 4 3 2 1 For information on all MK publications visit our website at www.mkp.com
  • 8. Foreword I should begin by confessing that I do not consider myself a world-class API designer or software engineer. I do, however, consider myself an expert researcher in the areas of computer graphics and geometric modeling. It was in this line of work that I first met Martin at Pixar Animation Studios. As a graphics researcher I was accustomed to writing mathematically sophisticated papers. I was also formally trained as a computer scientist at a major university and had written my share of code. Armed with this background, when I was presented with the opportunity to lead a group of software engineers working on a new generation of animation software for Pixar, I figured that it couldn’t be any more difficult than research. After all, research is, by definition, the creation of the unknown, whereas engineering is the implementation of well-understood subjects. I could not have been more wrong. I came to realize that software engineering was, without a doubt, the most difficult challenge I had ever been presented with. After more years than I care to admit, I eventually gave up and went back to graphics research. I can’t tell you how much I would have benefitted from a book such as “API Design for C++.” Many of the lessons we learned the hard way have been captured by Martin in this insightful, easy-to-use book. Martin approaches the subject not from the perspective of an academic software researcher (although he draws heavily from results and insights gained there), but from the perspec- tive of an in-the-trenches software engineer and manager. He has experienced firsthand the importance of good software design and has emerged as an articulate voice of what “good” means. In this book he presents effective strategies for achieving that goal. I particularly like that Martin is not focusing just on API design, but more broadly on software life cycles, allowing him to cover topics such as versioning, strategies for backward compatibility, and branching methodologies. In short, this book should be of great value to those creating or managing software activities. It is a comprehensive collection of best practices that have proven themselves time and time again. Tony DeRose Senior Scientist and Research Group Lead, Pixar Animation Studios xv
  • 9. Preface Writing large applications in C++ is a complex and tricky business. However, designing reusable C++ interfaces that are robust, stable, easy to use, and durable is even more difficult. The best way to suc- ceed in this endeavor is to adhere to the tenets of good Application Programming Interface (API) design. An API presents a logical interface to a software component and hides the internal details required to implement that component. It offers a high-level abstraction for a module and promotes code reuse by allowing multiple applications to share the same functionality. Modern software development has become highly dependent on APIs, from low-level application frameworks to data format APIs and graphical user interface (GUI) frameworks. In fact, common software engineering terms such as modular development, code reuse, componentization, dynamic link library or DLL, software frameworks, distributed computing, and service-oriented architecture all imply the need for strong API design skills. Some popular C and C++ APIs that you may already be aware of include the Standard Template Library (STL), Boost, the Microsoft Windows API (Win32), Microsoft Foundation Classes (MFC), libtiff, libpng, zlib, libxml++, OpenGL, MySQL++, Trolltech’s Qt, wxWidgets, GTK+, KDE, Sky- peKit, POSIX pthreads, Intel’s Threading Building Blocks, the Netscape Plugin API, and the Apache module API. In addition, many of Google’s open-source projects are C++, as is much of the code on the sourceforge.net, bitbucket.org, and freshmeat.net Web sites. APIs such as these are used in all facets of software development, from desktop applications, to mobile computing and embedded systems, to Web development. For example, the Mozilla Firefox Web browser is built on top of more than 80 dynamic libraries, each of which provides the imple- mentation for one or more APIs. Elegant and robust API design is therefore a critical aspect of contemporary software develop- ment. One important way in which this differs from standard application development is the far greater need for change management. As we all know, change is an inevitable factor in software development; new requirements, feature requests, and bug fixes cause software to evolve in ways that were never anticipated when it was first devised. However, changes to an API that is shared by hundreds of end-user applications can cause major upheaval and ultimately may cause clients to abandon an API. The primary goal of good API design is therefore to provide your clients with the functionality they need while also causing minimal impact to their code ideally zero impact when you release a new version. WHY YOU SHOULD READ THIS BOOK If you write C++ code that another engineer relies upon, you’re an API designer and this book has been written for you. Interfaces are the most important code that you write because a problem with your interface is far more costly to fix than a bug in your implementation. For instance, an interface change may require all of the applications based on your code to be updated, whereas an implementation-only change can be integrated transparently and effortlessly into client applications when they adopt the new xvii
  • 10. API version. Put in more economic terms, a poorly designed interface can seriously reduce the long- term survival of your code. Learning how to create high-quality interfaces is therefore an essential engineering skill, and the central focus of this book. As Michi Henning noted, API design is more important today than it was 20 years ago. This is because many more APIs have been designed in recent years. These also provide richer and more complex functionality and are shared by more end-user applications (Henning, 2009). Despite this fact, no other books currently on the market concentrate on the topic of API design for C++. It’s worth noting that this book is not meant to be a general C++ programming guide there are already many good examples of these on the market. I will certainly cover lots of object-oriented design material and present many handy C++ tips and tricks. However, I will focus on techniques for representing clean modular interfaces in C++. By corollary, I will not dive as deeply into the question of how to implement the code behind these interfaces, such as specific algorithm choices or best practices limited to the code within the curly braces of your function bodies. However, this book will cover the full breadth of API development, from initial design through implementation, testing, documentation, release, versioning, maintenance, and deprecation. I will even cover specialized API topics such as creating scripting and plugin APIs. While many of these topics are also relevant to software development in general, the focus here will be on the particular implications for API design. For example, when discussing testing strategies I will concentrate on automated API testing techniques rather than attempting to include end-user application testing techniques such as GUI testing, system testing, or manual testing. In terms of my own credentials to write this book, I have led the development of APIs for research code shared by several collaborating institutions, in-house animation system APIs that have been used to make Academy Award-winning movies, and open-source client/server APIs that have been used by millions of people worldwide. Throughout all of these disparate experiences, I have consistently wit- nessed the need for high-quality API design. This book therefore presents a practical distillation of the techniques and strategies of industrial-strength API design that have been drawn from a range of real- world experiences. WHO IS THE TARGET AUDIENCE While this book is not a beginner’s guide to C++, I have made every effort to make the text easy to read and to explain all terminology and jargon clearly. The book should therefore be valuable to new programmers who have grasped the fundamentals of C++ and want to advance their design skills, as well as senior engineers and software architects who are seeking to gain new expertise to comple- ment their existing talents. There are three specific groups of readers that I have borne in mind while writing this book. 1. Practicing software engineers and architects. Junior and senior developers who are working on a specific API project and need pragmatic advice on how to produce the most elegant and enduring design. 2. Technical managers. Program and product managers who are responsible for producing an API product and who want to gain greater insight into the technical issues and development processes of API design. xviii Preface
  • 11. 3. Students and educators. Computer science and software engineering students who are learning how to program and are seeking a thorough resource on software design that is informed by prac- tical experience on large-scale projects. FOCUSING ON C++ While there are many generic API design methodologies that can be taught skills that apply equally well to any programming language or environment ultimately an API has to be expressed in a par- ticular programming language. It is therefore important to understand the language-specific features that contribute to exemplary API design. This book is therefore focused on the issues of designing APIs for a single language (C++) rather than diluting the content to make it applicable for all languages. While readers who wish to develop APIs for other languages, such as Java or C#, may still gain much general insight from this text, the book is directly targeted at C++ engineers who must write and maintain APIs for other engineers to consume. C++ is still one of the most widely used programming languages for large software projects and tends to be the most popular choice for performance-critical code. As a result, there are many diverse C and C++ APIs available for you to use in your own applications (some of which I listed earlier). I will therefore concentrate on aspects of producing good APIs in C++ and include copious source code examples to illustrate these concepts better. This means that I will deal with C++-specific topics such as templates, encapsulation, inheritance, namespaces, operators, const correctness, memory management, use of STL, the pimpl idiom, and so on. Additionally, this book will be published during an exciting time in the evolution of C++. A new version of the C++ specification is currently working its way through the ISO/IEC standardization process. Most C++ compilers currently aim to conform to the standard that was first published in 1998, known as C++98. A later revision of this standard was published in 2003 to correct several defects. Since that time, the standards committee has been working on a major new version of the specification. This version is referred to informally as C++0x, until such time that the standard is rati- fied and the date of publication is known. By the time you read this book, the new standard will likely have been published. However, at the time of writing, it is still referred to as C++0x. Nonetheless, C++0x has reached an advanced stage of the standardization process, and many of the new features can be predicted with relatively high confidence. In fact, some of the major C++ compilers have already started to implement many of the proposed new features. In terms of API design, several of these new language features can be used to produce more elegant and sturdy inter- faces. As such, I have endeavored to highlight and explain those areas of C++0x throughout the book. This book should therefore remain a relevant resource for several years to come. CONVENTIONS While it is more traditional to employ the term “user” to mean a person who uses a software appli- cation, such as a user of Microsoft Word or Mozilla Firefox, in the context of API design I will apply the term to mean a software developer who is creating an application and is using an API to achieve xix Preface
  • 12. this. In other words, I will generally be talking about API users and not application users. The term “client” will be used synonymously in this regard. Note that the term “client,” in addition to referring to a human user of your API, can also refer impersonally to other pieces of software that must call functions in your API. While there are many file format extensions used to identify C++ source and header files, such as .cpp, .cc, .cxx, .h, .hh, and .hpp, I will standardize on the use of .cpp and .h throughout this book. “I will also use the terms module and component” interchangeably to mean a single .cpp and .h file pair. These are notably not equivalent to a class because a component or module may contain multi- ple classes. I will use the term library to refer to a physical collection, or package, of components, that is, library > module/component > class. The term method, while generally understood in the object-oriented programming community, is not strictly a C++ term; it originally evolved from the Smalltalk language. The equivalent C++ term is member function, although some engineers prefer the more specific definition of virtual member function. Because I am not particularly concerned with the subtleties of these terms in this book, I will use method and member function interchangeably. Similarly, although the term data member is the more correct C++ expression, I will treat the term member variable as a synonym. In terms of typographical conventions, I will use a fixed-width font to typeset all source code examples, as well as any filenames or language keywords that may appear in the text. Also, I will prefer upper camel case for all class and function names in the examples that I present, that is, CamelCase instead of camelCase or snake case, although obviously I will preserve the case for any external code that I reference, such as std::for each(). I follow the convention of using an “m” prefix in front of data members, for example, mMemberVar, and “s” in front of static variables, for example, sStaticVar. It should be pointed out that the source examples within the book are often only code snippets and are not meant to show fully functional samples. I will also often strip comments from the exam- ple code in the book. This is done for reasons of brevity and clarity. In particular, I will often omit any preprocessor guard statements around a header file. I will assume that the reader is aware that every C/C++ header should enclose all of its content within guard statements and that it’s good prac- tice to contain all of your API declarations within a consistent namespace (as covered in Chapters 3 and 6). In other words, it should be assumed that each header file that I present is implicitly sur- rounded by code, such as the following. #ifndef MY MODULE H #define MY MODULE H // required #include files. . . namespace apibook { // API declarations . . . } #endif xx Preface
  • 13. TIP I will also highlight various API design tips and key concepts throughout the book. These callouts are provided to let you search quickly for a concept you wish to reread. If you are particularly pressed for time, you could simply scan the book for these tips and then read the surrounding text to gain greater insight for those topics that interest you the most. BOOK WEB SITE This book also has a supporting Web site, http://APIBook.com/. On this site you can find general information about the book, as well as supporting material, such as the complete set of source code examples contained within the text. Feel free to download and play with these samples yourself they were designed to be as simple as possible, while still being useful and illustrative. I have used the cross-platform CMake build system to facilitate compiling and linking the examples so they should work on Windows, Mac OS X, and UNIX operating systems. I will also publish any information about new revisions of this book and any errata on this Web site, as well as useful links to other related API resources on the Internet, such as interesting toolkits, articles, and utilities. The book Web site also provides access to a utility that I wrote called API Diff. This program lets you compare two versions of an API and review differences to code or comments in a visual side-by-side format. You can also generate a report of everything that changed in a particular release so that your clients know exactly what to look out for. This utility is available for Windows, Mac OS X, and Linux. xxi Preface
  • 14. Acknowledgments This book has benefited greatly from the technical review and feedback of several of my esteemed colleagues. I am indebted to them for taking the time to read early versions of the manuscript and provide thoughtful suggestions for improvement. In particular, I thank Paul Strauss, Eric Gregory, Rycharde Hawkes, Nick Long, James Chalfant, Brett Levin, Marcus Marr, Jim Humelsine, and Geoff Levner. My passion for good API design has been forged through my relationship with many great soft- ware engineers and managers. As a result of working at several different companies and institutions, I’ve been exposed to a range of design perspectives, software development philosophies, and problem-solving approaches. Throughout these varied experiences, I’ve had the privilege to meet and learn from some uniquely talented individuals. Some of these giants whose shoulders I have stood upon include: • SRI International: Bob Bolles, Adam Cheyer, Elizabeth Churchill, David Colleen, Brian Davis, Michael Eriksen, Jay Feuquay, Marty A. Fischler, Aaron Heller, Lee Iverson, Jason Jenkins, Luc Julia, Yvan G. Leclerc, Pat Lincoln, Chris Marrin, Ray C. Perrault, and Brian Tierney. • Pixar Animation Studios: Brad Andalman, David Baraff, Ian Buono, Gordon Cameron, Ed Catmull, Chris Colby, Bena Currin, Gareth Davis, Tony DeRose, Mike Ferris, Kurt Fleischer, Sebastian Grassia, Eric Gregory, Tara Hernandez, Paul Isaacs, Oren Jacob, Michael Kass, Chris King, Brett Levin, Tim Milliron, Alex Mohr, Cory Omand, Eben Osbty, Allan Poore, Chris Shoeneman, Patrick Schork, Paul Strauss, Kiril Vidimče, Adam Woodbury, David Yu, Dirk van Gelder, Brad West, and Andy Witkin. • The Bakery Animation Studio: Sam Assadian, Sebastien Guichou, Arnauld Lamorlette, Thierry Lauthelier, Benoit Lepage, Geoff Levner, Nick Long, Erwan Maigret, and Bariş Metin. • Linden Lab: Nat Goodspeed, Andrew de Laix, Howard Look, Brad Kittenbrink, Brian McGroarty, Adam Moss, Mark Palange, Jim Purbrick, and Kent Quirk. In particular, I acknowledge the great impact that Yvan G. Leclerc made on my life during my early years at SRI International. Yvan was my first manager and also a true friend. He taught me how to be a good manager of people, how to be a rigorous scientist and engineer, and, at the same time, how to enjoy life to its fullest. It is a great sorrow that incredible individuals such as Yvan are taken from us too soon. Many thanks must also go to Morgan Kaufmann Publishers for all of their work reviewing, copy editing, typesetting, and publishing this book. This work would quite literally not exist without their backing and energy. In particular, I acknowledge the contribution of Todd Green, Robyn Day, André Cuello, and Melissa Revell. Most importantly, I thank my wife, Genevieve M. Vidanes, for encouraging me to write this book and for putting up with me while I spent many late nights hunched over the keyboard. As this is my second book, she knew full well how much it would impact our personal life. Nonetheless, she sup- ported me throughout the whole process, while also knowing exactly when to make me pause and take a break. Thank you Genevieve for your constant love and support. xxiii
  • 15. Author Biography Dr. Martin Reddy is CEO of Code Reddy Inc. He holds a Ph.D. in computer science and has over 15 years of experience in the software industry. During this time, Dr. Reddy has produced more than 40 professional publications, three software patents, and coauthored the book Level of Detail for 3D Graphics. He is a member of the Association of Computing Machinery (ACM) and the Institute of Electrical and Electronic Engineers (IEEE). Dr. Reddy worked for 6 years at Pixar Animation Studios, where he was lead engineer for the studio’s in-house animation system. This work involved the design and implementation of various high-performance APIs to support Academy Award-winning and nominated films, such as Finding Nemo, The Incredibles, Cars, Ratatouille, and Wall-E. He then took on the role of engineering manager at The Bakery Animation Studio, where he led the development of the startup studio’s animation software. This included the design and implemen- tation of many key APIs as well as devising the overall animator workflow and user interface. Earlier in his career, Dr. Reddy worked for 5 years at SRI International on distributed 3D terrain visualization technologies, which involved the development of several open source geospatial APIs. He cofounded a successful effort to create an ISO standard to represent 3D geospatial models on the Web and was elected as a director of the Web3D Consortium for 2 consecutive years. Through his consulting company, Dr. Reddy has provided his technical expertise to various soft- ware companies, including Linden Lab and Planet 9 Studios. The former involved API design and infrastructure improvements for the open source product Second Life, an online 3D virtual world that has been used by over 16 million people around the world. xxv
  • 16. CHAPTER Introduction 1 1.1 WHAT ARE APPLICATION PROGRAMMING INTERFACES? An Application Programming Interface (API) provides an abstraction for a problem and specifies how clients should interact with software components that implement a solution to that problem. The components themselves are typically distributed as a software library, allowing them to be used in multiple applications. In essence, APIs define reusable building blocks that allow modular pieces of functionality to be incorporated into end-user applications. An API can be written for yourself, for other engineers in your organization, or for the develop- ment community at large. It can be as small as a single function or involve hundreds of classes, methods, free functions, data types, enumerations, and constants. Its implementation can be proprie- tary or open source. The important underlying concept is that an API is a well-defined interface that provides a specific service to other pieces of software. A modern application is typically built on top of many APIs, where some of these can also depend on further APIs. This is illustrated in Figure 1.1, which shows an example application that depends directly on the API for three libraries (1 3), where two of those APIs depend on the API for a further two libraries (4 and 5). For instance, an image viewing application may use an API for loading GIF images, and that API may itself be built upon a lower-level API for compressing and decompressing data. API development is ubiquitous in modern software development. Its purpose is to provide a logi- cal interface to the functionality of a component while also hiding any implementation details. For example, our API for loading GIF images may simply provide a LoadImage() method that accepts a filename and returns a 2D array of pixels. All of the file format and data compression details are hidden behind this simple interface. This concept is also illustrated in Figure 1.1, where client code only accesses an API via its public interface, shown as the dark section at the top of each box. 1.1.1 Contracts and Contractors As an analogy, consider the task of building your own home. If you were to build a house entirely on your own, you would need to possess a thorough understanding of architecture, plumbing, electron- ics, carpentry, masonry, and many other trades. You would also need to perform every task yourself and keep track of the minutest of details for every aspect of the project, such as whether you have enough wood for your floorboards or whether you have the right fasteners to fit the screws that you have. Finally, because you are the only person working on the project, you can only perform a single task at any point in time and hence the total time to complete the project could be very large. API design for C++. © 2011 Elsevier Inc. All rights reserved. 1
  • 19. As an example of a well-known API, Microsoft’s Windows API (often referred to as the Win32 API) is a collection of C functions, data types, and constants that enable programmers to write appli- cations that run on the Windows platform. This includes functions for file handling, process and thread management, creating graphical user interfaces, talking to networks, and so on. The Win32 API is an example of plain C API rather than a C++ API. While you can use a C API directly from a C++ program, a good example of a specific C++ API is the Standard Template Library (STL). The STL contains a set of container classes, iterators for navigating over the elements in those containers, and various algorithms that act on those containers (Josuttis, 1999). For instance, the collection of algorithms includes high-level operations such as std::search(), std::reverse(), std::sort(), and std::set intersection(). The STL therefore presents a logical interface to the task of manipulating collections of elements, without exposing any of the internal details for how each algorithm is implemented. TIP An API is a logical interface to a software component that hides the internal details required to implement it. 1.2 WHAT’S DIFFERENT ABOUT API DESIGN? Interfaces are the most important code that a developer writes. That’s because problems in an inter- face are far more costly to fix than problems in the associated implementation code. As a result, the process of developing shared APIs demands more attention than standard application or Graphical User Interface (GUI) development. Of course, both should involve best design practices; however, in the case of API development, these are absolutely critical to its success. Specifically, some of the key differentiating factors of API development include the following. • An API is an interface designed for developers, in much the same way that a GUI is an inter- face designed for end users. In fact, it’s been said that an API is a user interface for program- mers (Arnold, 2005). As such, your API could be used by thousands of developers around the world, and it will undoubtedly be used in ways that you never intended (Tulach, 2008). You must anticipate this in your design. A well-designed API can be your organization’s biggest asset. Conversely, a poor API can create a support nightmare and even turn your users toward your competitors (Bloch, 2005), just as a buggy or difficult-to-use GUI may force an end user to switch to a different application. • Multiple applications can share the same API. Figure 1.1 showed that a single application can be composed of multiple APIs. However, any one of those APIs could also be reused in sev- eral other applications. This means that while problems in the code for any given application will only affect that one application, errors in an API can affect all of the applications that depend on that functionality. • You must strive for backward compatibility whenever you change an API. If you make an incompatible change to your interface, your clients’ code may fail to compile, or worse their code could compile but behave differently or crash intermittently. Imagine the confusion and chaos that would arise if the signature of the printf() function in the standard C library was 4 CHAPTER 1 Introduction
  • 20. different for different compilers or platforms. The simple “Hello World” program may not look so simple any more: #include <stdio.h> #ifdef WIN32 #include <windows.h> #endif #ifdef cplusplus #include <iostream> #endif int main(int, char *argv[]) { #if STRICT ANSI printf("Hello Worldn"); #elif defined( WIN32) PrintWithFormat("Hello Worldn"); #elif defined( PRINTF DEPRECATED ) fprintf(stdout, "Hello Worldn"); #elif defined( PRINTF VECTOR ) const char *lines[2] {"Hello World", NULL}; printf(lines); #elif defined( cplusplus) std::cout << "Hello World" << std::endl; #else #error No terminal output API found #endif return 0; } This may seem like a contrived example, but it’s actually not that extreme. Take a look at the stan- dard header files that come with your compiler and you will find declarations that are just as convo- luted and inscrutable, or perhaps worse. • Due to the backward compatibility requirement, it is critical to have a change control process in place. During the normal development process, many developers may fix bugs or add new features to an API. Some of these developers may be junior engineers who do not fully under- stand all of the aspects of good API design. As a result, it is important to hold an API review before releasing a new version of the API. This involves one or more senior engineers check- ing that all changes to the interface are acceptable, have been made for a valid reason, and are implemented in the best way to maintain backward compatibility. Many open source APIs also enforce a change request process to gain approval for a change before it is added to the source code. • APIs tend to live for a long time. There can be a large upfront cost to produce a good API because of the extra overhead of planning, design, versioning, and review that is necessary. However, if done well, the long-term cost can be substantially mitigated because you have the ability to make radical changes and improvements to your software without disrupting your clients. That is, your development velocity can be greater due to the increased flexibility that the API affords you. 5 1.2 What’s different about API design?
  • 22. • Increases longevity. Over time, systems that expose their implementation details tend to devolve into spaghetti code where every part of the system depends on the internal details of other parts of the system. As a result, the system becomes fragile, rigid, immobile, and vis- cous (Martin, 2000). This often results in organizations having to spend significant effort to evolve the code toward a better design or simply rewrite it from scratch. By investing in good API design up front and paying the incremental cost to maintain a coherent design, your soft- ware can survive for longer and cost less to maintain in the long run. I’ll delve much deeper into this point at the start of Chapter 4. • Promotes modularization. An API is normally devised to address a specific task or use case. As such, APIs tend to define a modular grouping of functionality with a coherent focus. Developing an application on top of a collection of APIs promotes loosely coupled and mod- ular architectures where the behavior of one module is not dependent on the internal details of another module. • Reduces code duplication. Code duplication is one of the cardinal sins of software engineer- ing and should be stamped out whenever possible. By keeping all of your code’s logic behind a strict interface that all clients must use, you centralize the behavior in a single place. Doing so means that you have to update only one place to change the behavior of your API for all of your clients. This can help remove duplication of implementation code throughout your code base. In fact, many APIs are created after discovering duplicated code and deciding to consol- idate it behind a single interface. This is a good thing. • Removes hardcoded assumptions. Many programs may contain hardcoded values that are copied throughout the code, for example, using the filename myprogram.log whenever data are written to a log file. Instead, APIs can be used to provide access to this information with- out replicating these constant values across the code base. For example, a GetLogFilename() API call could be used to replace the hardcoded "myprogram.log" string. • Easier to change the implementation. If you have hidden all of the implementation details of your module behind its public interface then you can change those implementation details without affecting any code that depends on the API. For example, you might decide to change a file parsing routine to use std::string containers instead of allocating, freeing, and reallo- cating your own char * buffers. • Easier to optimize. Similarly, with your implementation details hidden successfully, you can optimize the performance of your API without requiring any changes to your clients’ code. For example, you could add a caching solution to a method that performs some computation- ally intensive calculation. This is possible because all attempts to read and write your under- lying data are performed via your API, so it becomes much easier to know when you must invalidate your cached result and recompute the new value. 1.3.2 Code Reuse Code reuse is the use of existing software to build new software. It is one of the holy grails of mod- ern software development. APIs provide a mechanism to enable code reuse. In the early years of software development, it was common for a company to have to write all of the code for any application they produced. If the program needed to read GIF images or parse a text file, the company would have to write all that code in-house. Nowadays, with the proliferation of 7 1.3 Why should you use APIs?
  • 24. 1.3.3 Parallel Development Even if you are writing in-house software, your fellow engineers will very likely need to write code that uses your code. If you use good API design techniques, you can simplify their lives and, by extension, your own (because you won’t have to answer as many questions about how your code works or how to use it). This becomes even more important if multiple developers are working in parallel on code that depends upon each other. For example, let’s say that you are working on a string encryption algorithm that another devel- oper wants to use to write data out to a configuration file. One approach would be to have the other developer wait until you are finished with your work and then he can use it in his file writer module. However, a far more efficient use of time would be for the two of you to meet early on and agree upon an appropriate API. Then you can put that API in place with placeholder functionality that your colleague can start calling immediately, such as #include <string.h> class StringEncryptor { public: /// set the key to use for the Encrypt() and Decrypt() calls void SetKey(const std::string &key); /// encrypt an input string based upon the current key std::string Encrypt(const std::string &str) const; /// decrypt a string using the current key calling /// Decrypt() on a string returned by Encrypt() will /// return the original string for the same key. std::string Decrypt(const std::string &str) const; }; You can then provide a simple implementation of these functions so that at least the module will compile and link. For example, the associated .cpp file might look like void StringEncryptor::SetKey(const std::string &key) { } std::string StringEncryptor::Encrypt(const std::string &str) { return str; } std::string StringEncryptor::Decrypt(const std::string &str) { return str; } In this way, your colleague can use this API and proceed with his work without being held up by your progress. For the time being, your API will not actually encrypt any strings, but that’s just 9 1.3 Why should you use APIs?
  • 25. a minor implementation detail! The important point is that you have a stable interface a contract that you both agree upon, and that it behaves appropriately, for example, Decrypt(Encrypt ("Hello")) "Hello". When you finish your work and update the .cpp file with the correct implementation, your colleague’s code will simply work without any further changes required on his part. In reality, it’s likely that there will be interface issues that you didn’t anticipate before you started writing the code and you will probably have to iterate on the API a few times to get it just right. However, for the most part, the two of you can work in parallel with minimal holdups. This approach also encourages test-driven, or test-first, development. By stubbing out the API early on, you can write unit tests to validate the desired functionality and run these continuously to make sure that you haven’t broken your contract with your colleague. Scaling this process up to an organizational level, your project could have separate teams that may be remote from each other, even working to different schedules. By defining each team’s depen- dencies up front and creating APIs to model these, each team can work independently and with min- imal knowledge of how the other teams are implementing their work behind the API. This efficient use of resources, and the corresponding reduction in redundant communication, can correlate to a significant overall cost saving for an organization. 1.4 WHEN SHOULD YOU AVOID APIS? Designing and implementing an API usually requires more work than writing normal applica- tion code. That’s because the purpose of an API is to provide a robust and stable interface for other developers to use. As such, the level of quality, planning, documentation, testing, support, and maintenance is far higher for an API than for software that is to be used within a single application. As a result, if you are writing an internal module that does not require other clients to com- municate with it, then the extra overhead of creating and supporting a stable public interface for your module may not be worth the effort, although this is not a reason to write sloppy code. Spend- ing the extra time to adhere to the principles of API design will not be wasted effort in the long run. On the flip side of the coin, consider that you are a software developer who wants to use a third- party API in your application. The previous section discussed a number of reasons why you might want to reuse external APIs in your software. However, there may be cases where you wish to avoid using a particular API and pay the cost to implement the code yourself or look for an alternate solution. For example: • License restrictions. An API may provide everything that you need functionality-wise, but the license restrictions may be prohibitive for your needs. For example, if you want to use an open source package that is distributed under the GNU General Public License (GPL), then you are required to release any derived works under the GPL also. This means that using this package in your program would require you to release the entire source code for your appli- cation, a constraint that may not be acceptable for a commercial application. Other licenses, such as the GNU Lesser General Public License (LGPL), are more permissive and tend to be more common for software libraries. Another licensing aspect is that the dollar cost for a commercial API may be too high for your project or the licensing terms may be too restrictive, such as requiring a license fee per developer or even per user. 10 CHAPTER 1 Introduction
  • 26. Another Random Scribd Document with Unrelated Content
  • 27. The text on this page is estimated to be only 17.79% accurate 72 '-llicttf'» Öi'bot. M. jiiib 4. lejembct. Rl iDattT. (I<>mimi>, tli»riiin;i, Priiu-i'ps, rousnl , jn-aedicator, Si Imiioras eos, h)il biräi 0)ott reidjlid^ bc3at)lcn hie rtiam niiff erben. 'jS)aä l)eifjt ein l)ulla, btc man auf 21 l)cubc nid)t Icin fd)icibcn '. Kt ideo fac, iil (Icum timcas, ;^'i{)c cö .semi>or l)in Qiiff DuH bac- ciftc ijcpott. 4. decemb. s Aiulivinuis 4 praciepta. l*iiiiia n gl)cn ©ott fclber an, 1. parciites. 1. est 'NoM haWOjis' jc. i. e. time et fitle ileo, praetorca Dciniiiein JC. 2. not» 'urabis, flud^, jd^njere nid)t, setl invoca, Bette, lobe unb bände. 3. i. o. non lontomiias verbiiin et negligiis, sod libenter ea.s, iit audire possis et disccre, 4. ut iion solum obedias eis, sed iit pro])ter dci timoreui l)eillid^ bon l)t)n '" l^alteft et eis conununices, (juiccjuid Imbes. Tmu promittitur tibi vita longa. 2 4 ^ai bii seniper unt 2 Kulla r 10 tiiiioieiii über (inaiidatuiii) ') bie man nur 24 Ijcube nidjt faii fc^rcibeit (oben S. 71, 31172, 12) ro educas, quo aliis aut doctrina aut regimento conducat. Si habueris ßlium bijnae indolis illumque negb'gis disciplina, qui possit toti regioni prodesse, negligens illum es pessiinus patriae et regionis devastator, qui tanto viro illam privas. 2)tD tf)uft cijncn mort^lic^en fc^aben cijm gancjetn lanbe, feo bto e^nen gefd^idten Bon Oerfeumcft. Ita de filia domesticae curae abrogas as iam negligens. Attendite igitur vos potestatem habentes, ut subditos bene r^atis et educetis, sicut subditis honor et obediencia praecipitur. Non occides. Haec sequencia ad proximum nostri similem pertinent, priora tercia ad deum, Quantum ad huraanas potestates. Non occidenduni neque facto 30 neque verbo neque corde neque adfectu. Hoc j)raeceptnm est quasi seps et 16120 Econtra Htudeant maiores in subditos parentes sese exercere ro r recht» 18 20 Summa peiia pareiitum pueros negligeiicium ro r links 20 suo 21l24 Si bis priva» utU ro 22 totae 23 tanto c aus tantum 25 6on(e) 26127 Attendite bi« regatu ujU ro 27 regetis et educatis 28 Quintum Preceptum ro r 2V pertinent erg ro au» pertinet
  • 28. The text on this page is estimated to be only 20.76% accurate Viertes; ®ebot. 4. tt^mbtx. 73 R] Vos pareutes iteruin cugilatc, iit vo.s erga lilieros exhil>oati8 tanquam parentoH, (juia 4. praweptnin noininat vo.s patres et niatres, tioti tvrann«»s, bubcn et boftuic^tcr. Ideo si pater et mater es, jo trifft bid^ biä hJort au(^, Si es consiil jc. Et
  • 29. The text on this page is estimated to be only 22.03% accurate 74 Stierte«? unb fünfte? ®el)üt. 4. Tcicintict. Rl vel anoillas, (5^.3 i|t bir ein gcpot aiitf bcm l)al'j, cy tnivb bir nirf)t Qcfc^cncft tuetbcn, beim fanftU'i auf3icl)CU et non facis, tu ipsa eam perdiilisti. Hiuc ftcl^ctä fo l)nn bcr 6I)riftenl)eit, boS Icibcr tein [taub ircig, iuQä er ift. Non e8t levis res, si virgo bene educetur, et fit bona matcrfamilias, quae postea pie educat libcros. Ideo vos pareutes bene discite vos uon esse exclusos ^ ex hoc 4. pi-aecepto. Nou est [931. 17''] iani inopia iu doctoribuß. Habetis enim isto tempore tales, (juales olim profecto totiis nuindiis iion liabuit. [2?l. 18''] llaoc praeeepta (^cf)cn fjiii gcc^cii bciu netieftcn, ber un§ gleid^ i[t. Priora 4 gcl)cn über bie, bic über uiiy finb. 1. est: 'Non oecides Non occidere est si ne(j[ue lingiia, manu, sij^juo, corde ocoideris. Hoc praeceptum «o Wotift. 5.2ifi. clare expositum est per ipsum Christum, Ut Matthaei 5. legis. Maximus thesaurus proximi in terris est vita ipsius et corjnis. Hoc tnil gott gefiebert ^oben für ein» iglicf^eu getüalt unb freüel unb mod^t t)^m mit biefeni praecepto ein mauer [)erumb et dicit: 'Non occides'. Sic dominus curat pro nobis, tüie er unS einen fd^u^c maä)Z i. e. ne facito ei leibe, sed alle§ gut§, is bejd^ebige l)^n nidfit an feinem leibe nee vcrbis, o|)eribus uec corde, (^uia hoc est etiam proximum occidere, tuenn bu löibber l)f)n einen grotten in corde ^oft, Et quando nioritur vel t)f)m ubel ger)et, bu l)f}n bie fauft lad^eft^ Si oranes homicidae lapid[arentur, omnes plateae sanguine fluerent. Id est: noli ei malum facere aut optare, Sed econtra. Si non facis, ift§ eben [o 20 biet, aU tl^eteftu ^f)m f droben. Ideo in his praeceptis [teilen bic 6 opera misericordiae. Si esurit, ciba, si nudus est, operi, si captus, visita ic. vel causa es mortis ipsius, lüenn bu h}et)ren fonft ipsius periculum, fo ifjüZ e§, si non jc. Ideo nota bene haec verba i. e. bu folt ^l^m !etn leibe nod^ fd^oben tf)un, sed gut§ unb forberüd^ fein, bie opera (> misericordiae finb 25 frei) i)ie ijnnen. Re
  • 30. The text on this page is estimated to be only 20.85% accurate pnfted unb fed)fte§ ©ebot. 4. 3^cjembcr. 75 R] äurnen contra iiroxiimnu. Si vis ein yiittcr lücibcn mit ^ouen et ftcd^cn, greift bi(^ am elften fel6§ an, nempo beinen l)odjmnt et omnia vitia ..-uuira proximi corpus et bona. Viele no iiiveuiaris hoinicida, (juaiido iiegligLs proximum, bem bu tüol l)elffen !anft. Quot hie sunt, qui ad dauinum 5 proximi rident. Hie fte^et§: 'bu folt nic^t tobten'. Quaudo tibi ineiduut malae cogitatioues, cogita: Deus mandavit, ut ip.sum timeam, et is praecipit ut neminem occidam, neminem iniuria afficiam. ^d) fol ben broben furchten unb foId§e§ umb feinet tüiHen loffen. Et 5. praecei)tum inspicieudum est tamquam murus, quem deus aedificavit contra meam irain. Vides, ere ex thoro derivari, sed quaelibet persona alteri adhereat. Ideo ambobus tribuit propriam naturam et corjnis ad gignendum, haec membra ne insaniant libi26 über tt|ucn steht bcfd^e^bcn *. gönnen über (t^uen) 2U Sextum praeceptum ro r 32 et ro zwischen naturam und corpus eiw/e/'ü
  • 31. The text on this page is estimated to be only 17.98% accurate 76 Sed^ftc-J (Mcl'ot. 4. Tejcmbct. R] unb eilt, iit friic^tbnv jci) iinb lief) niclirc. (?-3 i|t ein gvo-i trcfflirf) fegen, ben fein menid)lidi dcrt^ nie l)at an9cfcl)en unb betDOQcn. Vult ergo (lomimis habt-rt« l)nn 3ud)t o.r|>iis man-? *t Riciby, n solnm be§ tt)erd§ l^albcn, fonbern etiam, jjjQttii. 19,6 bog hu bein l)cr|; nidjt an ein anbere l)engeft. 'Sit', ininiit, 'una caro', Et lo hoc propter 1. praeoep[tiun: ileum tinie. Die: tüic tüol iä) lunbc rouitl t)Qbcn über bie )d)nur ^U t)QUen^ tarnen quia dielt deus: Time ic. Si Caesar nic^t erfert, ii-'^ tarnen, (pii est super ine k. Ideo die: o deus, da gratiani, ne eadani unb baö id^ mein cl)e rein l)Qlte i. e. bu folt leufcS^ leBcn t}nn beinern eficitanb bclibc mit Icibc, tuort, gcbcrben et l)crlj. Ideo dedit cuilibet t5 snain nxoreni, bie iinbcm uufletigeu funbe mag idj nidjt nennen ut ^ungfraluen [4
  • 32. The text on this page is estimated to be only 19.71% accurate Sed^fte? unb [xehtntt^ «ebot. 4. unb 7. Itumbtx. 77 R] optare 2C. sed f orbein, rabten, sive sit amicus sivc inimiotis. Ibi orntiia opera misericordiae coriflmint. G. %ü folt bid^ ?euf(j^ galten mit tüortcn et toerrfen et bct) beinern treib bleiben, eam diligere, Et bu tijxen. 3o bu me^beft eine§ anbern tceibg, ünbö jur un,ju(^t et fjelteft birf) cintrec^tig cum 5 tua, tum habebis deum propicium. Qui» dieit: 'iu niulta milia', (piud i>ertinet ad oninia praecepta. [Öl. 22'^] 7. decemb. Audistis nuper 6 praeceptum. In geoere admouendi estis, ut 1. verba discatis, deinde quid significeut. 1. 'Non hab[ebis' i. e. bu folt ©ott furchten 10 unb l)'^m öertronjen, haB bu tj^n ni^t öerod^teft nod^ an i){)m öeryieifclft. 2. i.e. bu folt nidjt ftud^en, fc^tüeren, ,]aubern, sed invur-are 2c. .',. '^u folt auff ben Sontog @otte^ rtort nirf)t oerac^ten, ja auff feinen tag, sed libenter audire et discere. 4. i.e. tnaS nur (Jttern t)eiffen, fo( man nid^t allein un= gefd)enbet laffen, sed tj'^nen bienen, e^ren et ^oc^ Don i)l)nen l)alten. 5. i. e. 15 noli proxirao facere damnum, sed ^ilff Q^m unb forber l)l)n, njie er» bebarff, 6. i. e. deum time et caste vive, unb bein e()e nic^t brechen, fonbern bein tocib lieb l^aben [SJl. 22^] et beinen man e^ren. Ad uuumquodque praeceptum scribe: time et confide deo. 7. praeceptum est, quod non tulit priuceps aut Consul, sed deus tuus, qui habet vitam tuam et omuia in manu sua, qui 20 te perdere potest. ?)nn bem fielen ift begrieffen att forteil unb ge^ct hoc 2 6 r 9 l.r 11 2. 3. r 13 4. r 14 5. r 16 6. r ;ä 7. r 19 vitam über tuam 20 Furari r N] statu nulla condicio potest esse sincera. Meum est praedicare contra scortacionera. Patrumfamilias et Consulum officium est diligenter animadvertere, ne huic flagicio consenciant, ut ego increbescere iterum audio. Summa: Vi servemus spontaneam castitatem in thoro coniugali et adversus proximi 35 liberos, familiam libidinari, ad id multum valet Patrumfamilias dihgens observacio. Si qui autem virginitatem servare vohicrint, ii suo doiK» ntautnr. gord^te got, ha^ blr beljne elje t^alteft, etjnem anbern bay feeljne nic^t bc fd^ebigeft. Ad omnia ergo praecepta scribendum: (^y ift goti«?' gcpott, bcii gehalten tntjtt
  • 33. fe^n, Non frigida aliqua tradicio. 30 Non furaberi.s. Hoc septimuni eciam a deo preceptum, non est frigida tradicio. Kt hoc complectitur in se oranes falhicias, usuram, falfd^e tüi^ax, aüci, bo nil)t ic^ met)nen n^eften betrige. Sict)m groffeer 3unfft bcn bicberei). 2)icbcrcu ift ^n aEen ^anbttnergen. Sed parvi fures suspeuduutnr, M:igui summo hoiioH' 2212s 2Dct bo rt^t jro Süittembctöf feljn bet Ijobe fe^n totpp obbtt man non scortctur r 24 über spontaneam steht corde et ore 2ti qui(8) 3() .S?|itimiini rroi-eptum ro r 32 Omnes lalliicias complectitur lioc praecojitum ro r 33 Siebe»)) hai ixh{it ttanbitotxi ro r 33134 Äe^lie /-i« sus|icnilunlm- nnl ,;.
  • 34. The text on this page is estimated to be only 15.11% accurate 78 «iobciiteÄ ©cbot. 7. Teicmbor. R] ]>r:»otis faii man i'^leid) fo )wl brQud)cii ein biebftal, alo lücmi bii 311m fenfter l)inbcii l)ineiii ftiecieft :c. 3[t eben fo mol geftolen, Uienn bii ba-: flcifd) ,yi teluev k. (^c> l)ei|"t alleö gc= ftolcn, lüemi id) auf allerlei) lueife meines nel)eftcn C[ut ]n mir bringe. Kloo ift nic^t ein gemeiner l)anbuiercf an ff erben et groffer ^nnfft (juam furum. Et plorunciue parvi fiires .siispenduiitur* JC. Non nie laedis, quando tnihi furaris vel minimimi tlaniniun facis, sed deum laedis. Ideo oninis artifex, lanius ;c. jol boä gepott auff bic luagc fc^reiben, bie mulner auff bie fedfe, bccfer auff» brob, fdjufter auff bic leifte. Qui eoiin furtum vult vindicare, ber ift grofe, «lui irasritui- iu 3. et 4. K. Et econtra 2rcibftu beinen I)anbcl rcd^t et nun furaris, ;uidi deuui, (jui dielt: bu folt reirf) et feiig luerben. Si econtra, lüirb er biiy allö ]n ftieben. Quacrela est, ba» ci nidjt gleid; ]i ge^e. Ego monui K. beu reid)cn tf)uftn !einen fc^aben, Sed iiie est multus paujwr populus, foldje betrcugftu et contristas. Et tales gcljen mit tt)einenben äugen au^j ber fc^erren^ unb ruffen gl)en f)immcl, für bencn fnrd)te bid), ber arme l)auffe tl)ut5. Et illoruni iat-lnyinas res|)ieit deus. Et luenn birS tüol gt)et, fo füren mic^ alle teufel tüeg, non facta cruce prae ine. §utte bid) für bem nad^barn, ber beinen tro^ nid^t fan aufftel^en. 2öil er§ nid^t ^aben, tüie ic^5 tüi( geben, fo (äffe er mily. Si conteiunis deum, contemuet te, bQ§ bu bcine» gefc^unbenen gut» nid)t braudjcn !unncn tuirft nee posteri. 3/6 Cä iw pleruuque itnt ö 2iet biete junfft ift bic gtoftc. r 8 Parui lurcs suspenduutur r 9/J2 Qui bis Quaerela unt 11 tcic^ Jücrben et jelig ühtr teid^ atehl 2 über et feiig steht 1 12 De male (luaesitis Exenipla lud. 7. r 14 contristas über betteugftu Lanii r 181 l'J aujftetien bis miti unt 19 toil über id)^ coiiteniuet(d) 'j parvi fures suspenduntur (oben S. 77, 34) vgl. Unsre Ausg. Bd. 16, 514, 32 u. o. ') Jodetten d. i. Fleinchlxinke ; cgi. Unsrc Ausg. Bd. 33, 67'J zu S. 265, 17. jl] inceduut. Ideo quodlibet opifieium vidc-at, ne furetur insidiis alium fallendo. 2)it) flct)fc^cr fd)rei)b» uff betjne ttjoge, 5)n) fc^uftcr uff bie lei)ften, 2)n3 ^JJtoEer uff ben facf. Time deum: si quem
  • 35. defraudaveris, non homiuem solum, sed deum defraudasti, qui zelo suo te conteret. Si autera observaveris hoc praeceptum, bona consciencia ditesceris. Vos iuvenes discit« liaec praecepta, si maiores iioiueriut. 2)en albe ^uube fi)nbt nid^t benbig io mod)en^ .^ucttct euc^ Dor ber f c^ljnberei) , bo öor toarne '6) euc^. Non pro|)ti!r me locpior ci divites loquor, h)t)r trollen bei)ner turf looll auöftel)cn, id) lDl)l bcnnodj elju ^ert fe^n, feo btO el)n betler bift. Sed propter paupere.s, (piorum iiinlti sinit in hac civitate, quos tu defraudas, Uli elamant laclirimas in coelum ad deum. 21123 3etlid^ ^anbttoctg ^ott gnug m^t bifem gc^jot jw fc^affcn ro r 28179, 18 Si milii eingulis annis 100 fl abjt^ljtibeft , 81 egu uelleiii , iiellein einere alibi, ne oljuluni liic exponere uellcm r 28 bennocf) (nid^t) 29130 8ed bis quos unt ro 30179, 21 2)ie atmen muffen bie f^^nbe«^ tragen bic te^d^en fonnenS wofl atoffte^cn ro r «) aibe t)unbe f^nbt nic^t benbifl ,^10 mad)cn vgl. Unsrc Ausg. Bd. m, 654 zti S. 616,8. Auch Pouchs Slg. 3 ', 147 1'ic alten fdjetcf mndjc ber Icuffel benbig, alte t)unbe etc. ; Thiele Nr. 236.
  • 36. The text on this page is estimated to be only 18.40% accurate Siebentem föebot. 7. lejember. 79 R) Vüs fere omnes lustici et cives esti« fures et ©c^inber. Paulus Kplu-. 4. '(^ui»»«! eti.s eam amovere, sod dare aiit liahchitis dcum iratuii» ^c. Sic sut deus zelotes. SBenn man be§ anbern fc^aben nii^t öorfompt, ifts aUesf geftolen. S)iebftatt, ut dixi, ift ein gro§ med)tig ^anbhjercf^. Hinc oriuntur l>ella, 1 ©d^inber Ephe. 4. r ö Forum, r 0 ift üöei- bit 9^10 Serui Merceiiarii r 11 ipse bis servus (1.) unt 12 Famula r 16 Söenn bis gcftolcn nnt 1. praecep[tiim r 17 Vnde belia? r ') ^JJJeifter ^anje ryl. oben S. 38, 17; 61, 3. "■) Oben S. 78, 5. N] Horum clamor te perdet, certissimuin crede. Si igitiir venerit pau|)er, is in sua tuuica habet scriptum : Ne furtum facies. Igitur aspico ijhmi. Illos 20 pauperes time. Ne dicas: ^(^ QC^c» nic!^t neI)er^ iDtjlfttü nic^t l)aben, feo laB mt)r§, et nostri pauperes advenae et studentes hoc maxime paciuntur. Insuper non solum defraudes, scd eciam jiauperi adiuves. ^lid^t aÜcljnc öerbetot e» f d^tjnberet) , ^onbern bh3 folft bem burfftigen ernadj geben. Codsiderate igitur vos mercatores omnium rerum, ne (juem detVaudetis. Non 25 multum permanebit, mihi crede. @§ ift ct)n morgtt, nic^t cl)ne fdjDnbcrcl).Time pauperes in tuo emporio: ii sunt atrociss[imi hostes tuae fallaciae. Vos servi et ancillae negligentes, inobedientes estis domino, fures e.stis. Narn recipis ab illis mercedem, lectura, domum, vaporarium caHdum, Nam dominus servus tuus est, qui te procurare oportet. Si igitur (juiil iieglexeris 30 eins labore et perdideris, für eris. Ita vos meroenarii conducti, (jui mcrcetlon« speratis, vix dimidium diem laboratis. 22123 5Iid^t bix geben unt ro Openi lerre pauperi praecipit hoc mandatum ro r 23124 Pauperes timendi ne defraudeiitiir ro r 27 Serui et aiicillao fures ro r 28 in (max) 28129 Nam (2.) bis quid nnt ro 29(30 3!inftfltcdjtc ünb tiifflb« ro r 30 üUr oiua bis merceuarii steht Wen btt) Ijn e^n fd^rte^n tjerroorneft ctjn top ,?n>bri
  • 37. The text on this page is estimated to be only 16.26% accurate gO Siebcnte-j ©ebot. 7. lejembet. Blfanie-s, ut por ea auferantur mal»' parta. nain doiniiiiis i-st viiidex maloniin ;c. Sic meroenarii funncii )id) iiid)t ivui( bcidjifjcii mnd)CU^: c]namlo(iLiH' dinruliuin dicm potant. et blld)Cn llüd) bci^tll. Talfs vocantur et sunt f'iires et digni, (|iii suspendereiitiir, ineiitiuiitiir dieeiites se laborare et behalten nä)k ©CVOt ali ftunbc es i)nn bciuer gcirolt, boö bu eibcitctc[t ober iiid;t, rtuna K. sed bellum, pestis jc. * ©ic meinen, fic [«l 28»») ^obcn Ca rcd^t jc. Ideo quisquLe lr)cicfnici[tcr jd)reibc auff jcin aimcrojt : 'Non furtum faeies Sic laborato, tüte bu bidj üeibingt t)Q[t. Si nou, es für. Turca aediticat sie: Veni et hoc effice t)nn bcn •{ tagen, gebende, ba§ i" bcr ftaü ]tef)e, si non, ben !opff I)iniüeg. ^Jtnn mifjct l)ng ob, fo biet einer arbeiten fan. Sic Kcmani k. ilMr finb eitel bier bentel.^ Noli furari, in(juit, uuli cuntemnere, si fideliter laboras, vendis res tuas, foltu einen gnebigen €>r.€oi n.iöott l)aben, ber loil bir« reidjlid) luibber geben. Salomo: 'Abominatio est stathera dolosa' i. e. deus tani unb m[ö nic^t leiben. Eeoutra er '^at ein m, t)er^lid^ tüolgefattcn, toenö red)t i[t. Si contraiium, fo greiffftn nid^t einen armen man, toeib an, sed deum. Inspice verba. Econtra placet bene deo, ergo ^aftu gut t)onbeln. e§ jol bir alaeit befjer gefaEen ein geller cum dei 1 fanies über ut per J nid^t ül/er flnufl Merconarii r 7 Pestis /• 10 Turca. r IJjU Noli bU Abominatio uiU 16117 o bin deum iint 17 verba mit 15 stathera durch Strich verb IS Ib. r >) hinnen fic^ nidjt gnug bcjc^tffen machen vgl Umrc Atiag. Bd. 34, 185, Will. *) Fehlt hei Dietzund DWtb.. rielleicht verhört vgl. Z. 24 'bljtncn'? (xler 'bier!)elb' s. Dietz. [0. B.J N] Ita ut timeat quilibet laboreai aliquera alicui conducere. (5pri(^t man p^nen eijn mort^, feo lafjen fie et)nem bie arbel)t ligen. 3)iebe, ®iebe ^el)t 20 tir. Crede niiiii, tu [»lus es quam l'ur, (juia couduetus promisisti laborem, b(.nis verbis non perfiei.s. Gi)n ic^lic^cr , njerg!mei)fter , ^cimmerman f(^rel)b fold^S ufl bel)n mancn: Non iurtum facies. Si autem laJjorare nolneris, noli cui te conducere. ^lei)b bot)ci)mc l)i)nber bem offen unb brottt)e bt)rnen.^ Tales neglectore.s labori.s Romani olim capite plectebant, si promissis suis 2-. non
  • 38. .satisfecissent et ueglexissent incuria. Ideo hoc praeceptum in omnes condiciones sese dilatat omni-scpie condicionis fures sunt plnrimi, ideo nihil plus ditescunt, pestilencia et hostibus conterentur tales. 6§ §ol ^un^cr frigcr hiä) tuoll bo^eljmc fudien. Nf)n prohibco, si quis suam mermlem isto praemio vendere polest, (^ö mag ei)n iberman ba» feeljne uffä tl)en3crft geben, 30 jy äöetflflerollje Dnb lofltl^onet ru r 21 lnr iihtr (diues) 22123 C^n bis facies untro aebtn jum biete machen ßulte «Dlontofle* r 24 cui (pro) 28131 Salomon Abominacio ent deo pondus dolosa lust« autem deo placet r 29130 Non bin baä untro 30181, 18 tbeloetft Jm betrifle tmt ro ') btottl)e btjmen ryl. Waruler Hirn Nr. 57 Va kann mehr ah Birnen braten, und H. Sachn XII, 203 Witt nuff dem hohler sitzen bleiben, Die Hirn in der hidiel und/reiben. Obige Frmsmig nicht Megt. t)inbet bem Cfen fi^en ttei Wander s. r. Ofen in inekn liedemarten = mchta tun oder au.'
  • 39. The text on this page is estimated to be only 13.95% accurate ©ifbente« imb odjff^ ©rbot. l.tnmWx. ^ Rl hoiiopliioK«. (,iuun mit feinem cxmd bie ftnb Hol qulbcn. Wn triincf tüciii-^ taiitiini, 0 nnb luie hu fnnft. Kt Ik.c propter demn. Sir (-(.{ritt-t: 3dj teil dc»iiiin:«f s ineae feinen fcf)aben tl)un, mm [n-opter ipsam, sed propter ipsiim, ^ condiciouis homo, scrvus, ancilla, Mcr2'. cenarius, Morcator hoc summo studio perpendat. Naiu deus zelntrs est. visitabit iniquitatem tuam ulcisoens stios insontes, quos d{>fraudas. Non dices falsum testimonium in proximum tuum. IVimum: si ox odio et invidia ante iudicem accusamus aut alio Umioplacitum muneribusque corrupti porversa locjuuntur, qnac vera non sunt. 30 atquo ita pauperem et insontem damnamus. Huc portinet lin^ua monlax et blasphema, quae aperit, tegit proximi peccatun», ut plcrumquc mnli«*n's sunt huic vicio deditae, sed ut nos pcrfecciora membr.i tepunus inlimia, n( Paulus I.Chor. 12 argiunentatur, quod impudica mombn» a pudiris tcjjnntnr.i «.. i. . Ita nos proximi nostri pcccatum dcfcndamus et occultenins. Illique. ipii 19123 Abominacio bi» fctjn nul ro 22 Summa ro r 27 Octauum Pm-rptnn. r,. r 28 alio(. . .) :iJ (loditi Nun npericuila |in>xinii |nvcntji n» r fiut^ctö Jllkrlc. XX *
  • 40. The text on this page is estimated to be only 21.00% accurate ^2 9lcf|tc3 öfbot. 7 3?c,Kmlier. R^ |d^h)cigcn !unncn. Sod dehes loqul de proximo oj)tiimini in fmo. oollationiluis jc. sicut et corain iudicio, tnenn er 311 fd^anbcn fol trcrbcn, bcdEe unb i.«or. 13, S3i grabe feinen fet)l 311. Paulus '^Jiafen unb augcn bcrfen loir nid^t 511, bcnn fie l)ahe t)t)r et)r' K. Eetintra diligentissime ooouliinus et operinuis meinbra inlionestiora, beun mon legt nDnicr nil)er fo uiel au bie äugen, l)cnb unb oUe & mcmbra non vereouiidiora alö eeontra. Qiii lihenter audit alioiuni igiutminias et |m»l)i-a, ber ift ein foldjer, ber gern ü l)nn bc§ anbcrn l)iubcrn feilend Coraiu iudioio locjuere veritatein , extra iiuliciuni hxjuere optiniuni i. e. rcbe nici^t übel de proximo, sed bonuni, fo beluarcftu bcin junge, ut non [ieoces contra lioc praeeeptuni. 8i vero locjueris de eo nialnni, dens niinatnr 10 tibi, (juod non velit tibi eondonare. Si eeontra, mxb er bcin gncbiger ©Ott fein unb tuirb bir^ öergclten. Hie exeipitur hjeltlic!^ oberfeit, prebigcr, öater, Uiuter. Qnia hoc praeeeptuni sie est servanduin, ha^ man ba^ bofe uid^t ungcftrafft laffe, praecipitur, ne malum corpori proximi inferas, sed potestas ('^i. 27«] exeipitur. Sie parentes befd^ebigcu l)^r üuber am leib, ben ift bi§ gebot 15 nidjt auffgclegt, qnia deus t)eifft fie eS 3C. nt niandat deus niagistratui, ut gladiuni gerat, cum ipso non gerat. Ideo deus reiecit Saul, quod pepereit Anialeeliitis. Sie tibi non praeeeptuni, ut alteri auferas uxoreni. Si vero niandaretur e eelo K. ut potestas mandatuin habet, Ideo feret bie JU et pntpter scelus admissum aufert niarito uxorem et oeeidit. Sic nemini licet 20 ubel reben de proximo nisi iis, quibus comniissum est. Ut Iudex et assessores muffen fragen et testes requirere, ha§ fie e§ beffern 2C. Et ideo etiani ordinavit deus potestatem, ut hoc agat jc. Sic pater et mater de liberis loquuntur, fd^tücfter flogt ber mutcr über bie fc^iüeftcr et frater de fratre jc. 3 .l.Cor. 12. r 7 über probra steht ä)maä) l'J Beati pacifici v 73/ J4 Potestas r 17 Saul. Amalechitae. r 20J21 Sic fns est unl •) ijnn bei onberii ()inbern je^cit (unten Z. 'Jöl'Jd; S. 83, 18) vgl Thide Nr. 272. N] semper pessirae de ali(jUo locjunntur, similes sunt illis, £)ie e^nem gctnc tjU 25 ar§ fc^en.
  • 41. Summa: !5)U) folft nic^t ubel öon bequem uef)cften reben nod^ gerne ^oeren, ^onbern folft fci)nc fdjanbc ]v beden. Excipiuntur Potestas mundi, Praedicatores et Parentes. Sicut in quinto praeeepto exeipitur carnifex trucidans homines, ille contra 5. praeceptum non facit. Ita parentes caedentcs pueros non faciunt contra prae- 30 ceptum dei, sed ex iussu dei faciunt, quod si intermitterent, peccarent. Ita potestas cum violencia aliquem puniens non peccat. Ita in hoc praeeepto Cbcrgfel)t in iudicio consistens non peccat, si examinat, perpendit maliciam hominum. Xa§ ift l)r auipt, ha'5 fie öon anbern ^unbcn reben. Ita parentes 26127 iito bis beden unt ro 28129 über Sicut in quinto steht Excepcio 5 praecepti ro 29 Qiii iure pecrata alinriim tractare possunt rn r 31J34 Ita Ins t)t nnt ro
  • 42. The text on this page is estimated to be only 15.07% accurate 9ld)tfä bi^ ^rbnfea ÖJebot 7. tf^finbfr RH ^] 2ßenn man§ bQ()in tregt, ha man e-ö ftraffcn fol, hcne jif^itur. Sir, si mal«» afi:it proxinuis, die Tonsnli, ludici k. Mattli. 1H. No (juis Hinat: ^df tDÜ ««»».i«, li«. niemonb ftraffen. Si malnni proximi 11(111 vis indif-aic potcstati. fo f(^tt»eigc bei) bir felber [tili, benn tücnn hu c§ mit beinern jc^cnblidjen, aintigen moul •> in onines donios tregft, fo madjftuy iiicf)t bcffer, scd erger. Ideo indica, »do bu e§ fagen folt. Über boS finb auä) aufgenommen bie praeer IVaedicator officio suo fungens aliorum peecata corripiat, extra haue funcoionem tacere debet. Summa: 5)lt) folft bie h)art)el)t tior bcm gerid^t bcfennen iinb 2A fünft nic^t öon bel)nen ne'^cftcn bocfee^ rcbcn. Non concupisces j)r
  • 43. The text on this page is estimated to be only 13.73% accurate R] hutlcin*. n si prinreps :ili(|uis lihenter esset (51)urinrft 311 6ad^ffcn, Et ageivt ouni Caesare suIkIoIo [Ü^l. 28''] et accijHMvt literas a Caosaiv et poslea eausaretur so non <1«)1(> eirisse ?c. Tic jdjalfcit Unrb faft icc^ivt l)al)tMi luitcv ben Rubelt. lUan tau einen fein oon feinen flutcrn bringen mit einem l)nbfd)en titel unb falfd^em ied)t, ita ut deeeptoi- uon possit dolosus culpari. Sie ging'S 5 mit ben Uieibein ]U. Xam in veteri testamento libellus lepudii dabatur K. Ibi eogitabat iiebulo aliquis: vieimis mens pnlchrani nxoreiu habet, tüte t^et id^ l)t)m, nt eani ae(jnirerein".' I«;itiu- jtraeeeptuin est ibi, ba§ feiner bcm onbern jol fein loeib jo mei[terlid) nbfpannen tarn pnlehra speele. In (). pnu'Cepto dicitnr alind. ©in fold^er lüar .S>erobCy 1. vivente. deinde u> niortno fratre. Ajmil nos non sie fit, sed qui alter! nxoreni tuil abjpannen, (.K'eidit enni K. David RHU" Cud) in lioe delicto. Sic est mit bem ge[inb, ^Qt einer einen fromen fned^t, magb, vicinns non favet hero: C^nare servis linie lien»? painni dat inercedis. Sed tnni servi erant leibeigen. Xobiscnni ;> titfl bi» ut nnt f, lAheh r.-pii.i: >■ lOjVJ Da^uid Herodes r 11 mortiio über fratro lljl'J Apud hin dolicto unt '1 unter bcm l)Uttcin vf/1. Thiele Nr. ^'^. Gnu: (ihnlicli, auch in (Iciiisclhen Xusnmmenluing gesagt Eil. Ausg. BI. 4.HJ: unter bcm Schein unb .^uttcin bcö gottlidjcu '•JJamcn^. N] ftinonc^e ^n? Uiegc brcnge, bo mi)t er i)l)n borbon brenge, ba§ er ^um ()atu^e, 15 iHcfer, tei)d)C K. fummen mag. Hae insidiae in lege Mosi freqnentiss[imae. Ita enm uxore fiebat, qnae repndiabatur in lege. Ibi cogitabant: Qnomodo pos.ees effieere, nt proxinii tni nxorem formosani posses acfjnirero? Unb ^Qt fie X{)vx abgcjpnnncn, ha^j fie bcm manne fct^n gntt t^ettc, nt daret ei lilK-llnni repidii. Talis erat Herodes, (pii nxoreni Pliilij)]»i IVatris sni pocie- 20 batnr. Tales snnt, (pii lioinieidio niaritnm enecant, nt uxoris snae poeiantur, unb bennoci^ öor ber tuclt frum löollen ^C^n. Ita si vicinns vicino ancillam, servnm k. abl'pennig mad^t, dnlcpbus verbis: Qnid vis coram illo agere? Veni ad nie, ego te procnrabo, et tarnen non vnlt malus indieari, (juia non potest probari enm hoc malum perpetrasse,
  • 44. dicens: äßog mag ic^ be§'^ tüolbc aa boc^ bel)ne magbt bet) btjr nid^t Bleljben. Ita si vendit agrnm dicens: Cur vendis? si nolles vendere, non einissem. Interim tarnen suis insidiis eum ad hoc enmpnlit. Snmma: llü jült iiicmanbc« nid)t nbfpcimig mQd)en, Bonbern ^me ^um gutten unb frummen bcl)u(nlid) jclju. p]j)ilogns deealogi. so Atqne haec est brevlssima deealogi exposioio, Nonne haec satis o|)erum nobis affernnt? non opus esset nos ])ropriis et electiciis iudulgere 16 Hae] lle(c; 17 1fi Xie e^nem boS fetjne Qbjpennifl machen ro r 27 emissem r an» enierom 30 mtl ro :itl-i2 Hat openim in decalogo lialiCmuH ro r .'{'J (.ah) iiidiilgiT« 
  • 45. The text on this page is estimated to be only 17.05% accurate SBejdjIiifi bet ©ebotc. 7. le jembtr. 85 R] frequenter fit, boö einer bem niibcrn feinen fnedjt ober mac(b abjpannct et putat se beue facere. Sed hoc est contra piaeceptum i.-tiui. Scnj|>er cojrita: Non concupiscas servum alterius, ut tuus fiat serviis ic. Sic cinii azino, Qc!er, QQttcn, Ut Yinca Nabotli, i. o. bu jolt if)m fein pferb, garten k. ni(^ti Bon ji.t», ••• abfpanncn mit Uft ober rec^t, sed i)l)m forberlic^ fein, ni n-servct. Di.-, an non !*atis bonorum operuni liabcamiis ju t^un. Ex" conteinptji lo pnjecc|>tornni factum est, nt alii ordiucs sint exc()g:itati. lam lüOÜen tüir QÜC praecepta jufamen fugen tjnn ein frent^tein, ha^j teufte ijnn bah crfte. IJblq[ue haec duo invenies, ut timeas deum et fidas deo. Si deum tinie.s, noii 10 difBdep, non blasphemabis jc. non eris Jnobediens parentibus jc. Keenam et terrorem et promissiouem dei in negligentes et studiosos decalogi, quae 3ü duo sunt fasciculus, bic fc^nure, bo ml)t man bcn txanc] ^lofammen bDnbct '. Lacius decalogi exposicionem tractavimus reliucpuntes cctcrorum cx|)osicii»nem. Sacius enim est, ne hoc primum hiculenter tractetur ccteraipic |H>sthabeantur ad aliud tcmpus. Vestrum erit in pnieccpti< divini^ i»« v. .-..n et studere. 20 Quoniodo omnia sequoncia praecepta ex primo scaturiiint ro r (Fide) l iuiun.iii 24 Sicut adfoctus marili uxorem non fort riuuleni r Äi Minae et pnuuissu.iiM «d dec*logon datae ro r 29130 et studiosos bin bljnbft tiiä ro ') Vgl. im Großen Kuteclihm».^ Erl. Anxg. /»«/. :''. "? Tflrutnb mufet bu au6t bifft etürf lofleii öc()cii bind) alle ®cbüt ali bic cd^iilc ober Ü
  • 46. The text on this page is estimated to be only 19.33% accurate gjj Ifi fiflc 'lvtt(cl. lU. IlCllll>CV. R] [4*1.31''] 10. Deco ml). Aiulistis bic elften fturfc Hon bcr (5^riftlicf)cii Icie, uvupc iiyi.32"| (Icinn pi-aerepta. Et luomii vos dilitriiiter, ut atlliortemini ramiliain, nt onm verhatim (li^itTcnt , Et ind»' dco ohedirent et vohis dominis et vos (nuxiue deo ül>eraedic'ari de duodecim tidei artieuiis. Si (|uis velit partiri, plures jc. Sed vos dividite Symboltim pnn bie t)eiibtftuc!e, nad) bcm ba^ brcl) pcrfon finb: Pater, filius, spiritus sanetus, (^iiia 'eredo in deiim ]iatiem' JC. bic ein föott finb, Xainod^ Ittogt l)f)r einen fonberlid^en aitidel l)nn feine ftudEc teilen. 1. articulus docet creationein, 2. redernjitionem, ;1. saiu-tifioationem. 1. (piomodo simus creati cum omnilms ereatiiris, 2. (juomodo simus redempti, 3. tüie tt)ir folten ^eilig, rein fein et leben unb rein bleiben. Pueri et rüdes foHenS fo ouffö oller cin= fcltigft lernen: Hdes habet tres articulos, 1. de patre, 2. de filio, 'S. est de 3 3 articuli Symbuli r 12,13 1. 2. 3. r 14115 3. bis Meibcn unt 15 rein Her bleiben 76 1. 2. 3. r N) Hacterms iirirauin xaTsyio/ui articulum tractavimus, quem omnes Parentes, doraini pueris et subditis propouant sedulo, vosque senes docendo alios docoiores evadetis. Nam omnibus doctoribus docendo alios doetrina augetur. Igitur decalogon breviter complexum illis proponite, quia prohibent au et iubent, misericordiam et penam in sese continent. CREDO IN UNUM DEUM PATREM. Audistis olim de 12 articulis praedicari fidera, si omnia essent pracdicanda, plures essent. Nos simplicissLime in .3 articulos secundum personas divinitatis dividimus, deinde lacius sese spargunt in membra. 25 Primus articulus docet nos, (piomodo simus creati. Secundus docet, quomodo redempti simus per Christum. Tercius, quomodo sanctificati simus per spiritum sanctum. Primus igitur patrem Creatorem, 2. filium redemptorem, 3""' Spiritum saiKrtnm sanctificatorem. Haec est summa Siml)oli in tres part«s divisi. m Prima igitur pars: Credo in ununi de um k. i.e. Credere debeo, quod 23 fidem über si 26 Tres priucipales fidei articuli ro r Primus unt ro 27 Becuiidug unt ro 2H Tercius unt ro 29(30 Priniu« OU sauctificatyrem uiU ro 30 Status et diuihiu Öimboli ru r
  • 47. The text on this page is estimated to be only 18.60% accurate aet ctfte attifel. 10. Ifjeinbet. 87 R] s[piritii saiido. SCßoS l)eltc[tu de patre? res|)(niatorem habeam, non ab hominibus. 2)Qruntb lerne tc^, h)oe f)er iä) funime unb tüof)er id) alle bing ^obc. Sequitur Conclusio. Si haec omnia dei dona sunt, merito in dei honorem 30 uti, Creatori in illis laudem dicerc. 9Bl)r tDurben ml)t unfeern ougcn, orcn, teben, tceljp unb ünbt ic. nid^t ^o lcl)d)tlid) feunbigcn, sed illis in gloriam et laudem dei utcrcmur. Haec continct in sc vcrbum 'Creator Quisqui.s hunc articulum credit, in conspcctu omnium creaturarurn illum cxcrtx't. Si 20 Creatorem celi et terrae ro r 26128 Vita bu blnfl unt ro 38 Nos crontur* dei et omnil.us creatnris per cieum utin.nr ro r 29 über Sequitur »Uht Secundo ro 31132 3)ct:^att.en |ol ä) >)nie bienen loüen bandtcu biib lil-cn r 32 33 In omnibu» rrc*tiiris aguoscimuH deum rrHiidircm ro r
  • 48. The text on this page is estimated to be only 20.22% accurate 88 ^f^ f^f*"-" ""»^ itiifilc ^Irliffl. lo. Ii'jcmbi'r. R] «jiii lux- verbiim ' C'iX'atorein ' iiitelli^iinf.' X:im nrnio illi scrvit. Omnim> uiembris online |HX'catur in »Icuin mit lucib , finbcill, t)ofc K. 2)iunib mag unö bcr erftc artirfel luol bcmutigcn et cvfdiretfcn, quin non credimu^. lain hoc obseivat«-, boö id) • fuife Quffy lüOlt ' Creator' i. c. crcdo, «|Ikm1 dederit corpus et aniinam, Ö sensus, veste.s, futtci", lüOUUng, tücib, finb, tiif)C, odEcr. Ex hoc seijuitur, qiiod debeaui ei servire, obedire, laudarc tl bancfcn. Qui himc erj^o articuhiin credit, si inspexerit vaccam, «licet: Haue dedit mihi deii.s. Sic de uxore, liberi.s. 1. articuliis in Summa docct Creationem. '2. ivdem|>tionem, 3. >>anctiHcati(tnem. Crcationem sie i. e. j^cijft, boö id) glciibc, baä mir töott flebcii l)ai leib, leben, üernunfft et omnia, «juaecun(jue habeo. Non a me ipso habeo, ne superbiam. Ego non possum darf nee servai-e. (iuare dedit et quarc credis, quod dederit? Ut eoenobia ftifftcft ? Non, sed ut laudes, gratias agas. Muhi dicmit illa verba 'Ci-edo' 2C. .>eil non intelligunt, (juid sibi velint. Et in lesum Cliristnm. Aud[istis, (|iiii«l (liviilaiiius Synibohnn in 'S artLiciilos pro siniplicib[us et pueris. 1. pars est de patre, 2. de filio, 3. de s[piritu sancto. 1. docet Creationem, 2. Redemptionen), 3. Sanctificationem, [231. 33"] ut sie quisq[ue intelligat, 13 Multi über dicunt 17 über pars sUht art N] videt Arborem fructus ferentera, videt deum creatorem. Ego simplicis[sirae exponam. Von docciores in quolibet verbo potestis excogitare: 'Credo in 20 deum Patrem omnipotentem'. Haec studiosis relinquo pervestiganda. V08 parentes siraplieiter Creatorem deum filiis proponite, sicut supra. Si omnes Uuiversitates audiretis, non audiretis tantum fidei expromerc in hoc articulo. Ita dieimt: Sd^oc^pcr, Bä^otppn, h)Q§ melier? Tu autem te creaturam dei onmia a creatore sumeutemque crede gratiasque deo usu illorum age. Si 25 haec scieris, doccior eris omnibus doctoribus Universitatum. Ex hac cognicione donorum dei pellitur omuis fidueia, tinior erga creaturas prae8umpcioque nostri. Et in lesum Christum füium eins unicum, Dominum nostrum. In hoc articulo simplicissime agam hoc unicum verbum in illo tractans: 3u 'Dominum nostrum'.
  • 49. Interrogatus : quid sentis in 2. articulo? Responde: Credo lesuiu Christum dominum meum , (jui mc iibei-avit a mort^', peecato 24l25 Tu bU 81 unt ro 27128 praesurapcioque c aus praesumpsioque 31 Dominum iiusitrum utit ru 3lß2 Hiesiis Christus dominus noster ru r 32189, 1 Credo bin JC. uiil ro
  • 50. The text on this page is estimated to be only 24.30% accurate 5:er ilDfilc ^ilttifcl. 10. Ititinbtx. gg K](iui<1 (licat, cum reoer^et Synibohiin. Ego ui>i voc-abiilum 'Creatür iit, ciiiu iiittnogari< , scias respoiiderL' sie: Ego credo, «juod denn «it C'reati>r, artis cxpiirnnt. scilicet ita: me liberavit et rcdcmit, 'genitus a Maria virgine, pa.«isus sub Ponjtio Pila[to' k. Haec omnia ideo Christus fecit et passus est, ut «loniinus noster fieret nos(jue redimorot suo proprio corpore et sanguine, ad ijuwl opus erat nasci, idquc a virgine, ut iiuorrnptus et integer Sathanac regnum 25 (te) onnii.i 26 pronunciat 28 Humma (Chr) 30 Hanc bU articuli unt ro 31 Quid scqutiilia indii-aiif ru r 32,33 Haec bis pri>i>riu m»j/ ro 33 («ui) cwrpon 
  • 51. The text on this page is estimated to be only 25.64% accurate 90 ^ft ^rocite "Mrtifel. 10. Xfjcinbct. R] auä) ftucfc, bic biefcn glauben Qu||trcid^en et ostendunt, quid Christus factus sit, cjuid (loiniuus uoster feoerit, ut uos libcrarot, tüciv C§ t)'^n gcftanbcu l^obc, njQÄ er bran geluagt t)Qbe. ['^i. 33^| oo ift Zugängen: fuit conceptus c spiritu Kuu'to, sine omni peccato jc. ut nious dominus tieret et me liborarct k. Omnia fecit, ut d(»mimis mens fieift, quia oportet tarn Sanetus sit, bQ§ bei" » Icufcl fein xcä)i on t)l)m fahc. Xie [tucfe geigen an, (jualis deus sit et tDo mit erö eilroiben l)Qbe, (piod vcnio suh eins dominium, nempe per proprium eins corpus, bo mit üot cr fein fonigreid) jugcrii^tet. Totum Euangelium ift gcfofft ^i^n bcn artidfct. Nam Euangelium nihil aliud est quam praedicatio de concepto, nato k. Christo. Discite igitur apprcliendere hoc verbum lo 'dominum nostrum P^o credere debeo et credo, (piod Christus sit dominus mens i. e. quod me redemerit, quia 2. art[icuhis loquitur de hoc: Vicit mortem, peccatum et ab his me liberavit. Prinuun, cum creatus essem, tjette ic^ lüol allerlei) gut, leib K. sed serviebam peccato, morti jc. ba !am G^riftuö, qui mortem passus, ut liberarcr a morte et fierem ipsius filius et i5 ducerer in iu.sticiam, vitam K. .|)crr fei) ^ie fo Diel al§ erlofer 2Z. £)te anbern ftucfe geigen, lüoburc^ er fold§e§ ifdbz aufgericljtet unb lüaä er für ein loft baran gctuagt ^abe: Non per aurum, argentum, equitatum, sed per seipsum, hoc est: suo proprio corpore. Ipsemet conceptus e spiritu saneto, natus 2C. lam non phis dicam de hoc articulo, nolo enim vos obruere. Is 20 est vere Christianus articulus, Quem neque ludaei, Papistae nee sectarii credunt Qui enim credit per opera se salvari, non per Christum ic. et econtra. X05 gel)ort l)nn bie onber prebigt. Audivimus in his 2 particulis, quid a patre, filio habeamus, nempe a patre creationem, a filio redemptionem. i/2 Cbristua dominas noster fecerit, quid factus sit, ut nos über factus sit steht 1 2 über dominus noster ateht 2 über ut »te/U 3 5/7 Omnia büi veuio unt SjlO Totum bvs jc. tmt Quid Euang[elium doceat. r 15ll6 et ducerer bis vitam über a morte bis ipsius 15 Passus K. r N] posset deprimere. Igitur unum hoc verbum: 'Dominum nostrum' observate,
  • 52. Welcome to our website – the ideal destination for book lovers and knowledge seekers. With a mission to inspire endlessly, we offer a vast collection of books, ranging from classic literary works to specialized publications, self-development books, and children's literature. Each book is a new journey of discovery, expanding knowledge and enriching the soul of the reade Our website is not just a platform for buying books, but a bridge connecting readers to the timeless values of culture and wisdom. With an elegant, user-friendly interface and an intelligent search system, we are committed to providing a quick and convenient shopping experience. Additionally, our special promotions and home delivery services ensure that you save time and fully enjoy the joy of reading. Let us accompany you on the journey of exploring knowledge and personal growth! ebookfinal.com