Stepanov–Musser and other generic programming paradigms.

Generic programming is defined in as follows, Generic programming paradigm is an approach to software decomposition whereby fundamental requirements on types are abstracted from across concrete examples of algorithms and data structures and formalized as concepts, analogously to the abstraction of algebraic theories in abstract algebra. Early examples of this programming approach were implemented in Scheme and Ada, although the best known example is the Standard Template Library (STL), which developed a theory of iterators that is used to decouple sequence data structures and the algorithms operating on them.  For example, given "N" sequence data structures, e.g. singly linked list, vector etc., and "M" algorithms to operate on them, e.g. find, sort etc., a direct approach would implement each algorithm specifically for each data structure, giving combinations to implement. However, in the generic programming approach, each data structure returns a model of an iterator concept (a simple value type that can be dereferenced to retrieve the current value, or changed to point to another value in the sequence) and each algorithm is instead written generically with arguments of such iterators, e.g. a pair of iterators pointing to the beginning and end of the subsequence or "range" to process. Thus, only data structure-algorithm combinations need be implemented. Several iterator concepts are specified in the STL, each a refinement of more restrictive concepts e.g. forward iterators only provide movement to the next value in a sequence (e.g. suitable for a singly linked list or a stream of input data), whereas a random-access iterator also provides direct constant-time access to any element of the sequence (e.g. suitable for a vector). An important point is that a data structure will return a model of the most general concept that can be implemented efficiently—computational complexity requirements are explicitly part of the concept definition. This limits the data structures a given algorithm can be applied to and such complexity requirements are a major determinant of data structure choice. Generic programming similarly has been applied in other domains, e.g. graph algorithms.  Note that although this approach often utilizes language features of compile-time genericity/templates, it is in fact independent of particular language-technical details. Generic programming pioneer Alexander Stepanov wrote,  Bjarne Stroustrup noted, Other programming paradigms that have been described as generic programming include "Datatype generic programming" as described in "Generic Programming — an Introduction". The approach is a lightweight generic programming approach for Haskell.  In this article we distinguish the high-level programming paradigms of "generic programming", above, from the lower-level programming language "genericity mechanisms" used to implement them (see Programming language support for genericity). For further discussion and comparison of generic programming paradigms, see.

Programming language support for genericity.

Genericity facilities have existed in high-level languages since at least the 1970s in languages such as ML, CLU and Ada, and were subsequently adopted by many object-based and object-oriented languages, including BETA, C++, D, Eiffel, Java, and DEC's now defunct Trellis-Owl language.  Genericity is implemented and supported differently in various programming languages; the term "generic" has also been used differently in various programming contexts. For example, in Forth the compiler can execute code while compiling and one can create new "compiler keywords" and new implementations for those words on the fly. It has few "words" that expose the compiler behaviour and therefore naturally offers "genericity" capacities that, however, are not referred to as such in most Forth texts. Similarly, dynamically typed languages, especially interpreted ones, usually offer "genericity" by default as both passing values to functions and value assignment are type-indifferent and such behavior is often utilized for abstraction or code terseness, however this is not typically labeled "genericity" as it's a direct consequence of dynamic typing system employed by the language. The term has been used in functional programming, specifically in Haskell-like languages, which use a structural type system where types are always parametric and the actual code on those types is generic. These usages still serve a similar purpose of code-saving and the rendering of an abstraction.  Arrays and structs can be viewed as predefined generic types. Every usage of an array or struct type instantiates a new concrete type, or reuses a previous instantiated type. Array element types and struct element types are parameterized types, which are used to instantiate the corresponding generic type. All this is usually built-in in the compiler and the syntax differs from other generic constructs. Some extensible programming languages try to unify built-in and user defined generic types.  A broad survey of genericity mechanisms in programming languages follows. For a specific survey comparing suitability of mechanisms for generic programming, see.

In object-oriented languages.

When creating container classes in statically typed languages, it is inconvenient to write specific implementations for each datatype contained, especially if the code for each datatype is virtually identical. For example, in C++, this duplication of code can be circumvented by defining a class template:  template <typename T> class List {  List<Animal> list_of_animals; List<Car> list_of_cars;  Above, T is a placeholder for whatever type is specified when the list is created. These "containers-of-type-T", commonly called templates, allow a class to be reused with different datatypes as long as certain contracts such as subtypes and signature are kept. This genericity mechanism should not be confused with "inclusion polymorphism", which is the algorithmic usage of exchangeable sub-classes: for instance, a list of objects of type Moving_Object containing objects of type Animal and Car. Templates can also be used for type-independent functions as in the Swap example below: // "&" passes parameters by reference template <typename T> void Swap(T& a, T& b) {  std::string hello = "World!"; std::string world = "Hello, "; Swap(world, hello); std::cout « hello « world « std::endl; // Output is "Hello, World!". The C++ template construct used above is widely cited as the genericity construct that popularized the notion among programmers and language designers and supports many generic programming idioms. The D programming language also offers fully generic-capable templates based on the C++ precedent but with a simplified syntax. The Java programming language has provided genericity facilities syntactically based on C++'s since the introduction of J2SE 5.0.  C# 2.0, Oxygene 1.5 (also known as Chrome) and Visual Basic.NET 2005 have constructs that take advantage of the support for generics present in the Microsoft.NET Framework since version 2.0.

Generics in Ada.

Ada has had generics since it was first designed in 1977–1980. The standard library uses generics to provide many services. Ada 2005 adds a comprehensive generic container library to the standard library, which was inspired by C++'s standard template library.  A "generic unit" is a package or a subprogram that takes one or more "generic formal parameters".  A "generic formal parameter" is a value, a variable, a constant, a type, a subprogram, or even an instance of another, designated, generic unit. For generic formal types, the syntax distinguishes between discrete, floating-point, fixed-point, access (pointer) types, etc. Some formal parameters can have default values.  To "instantiate" a generic unit, the programmer passes "actual" parameters for each formal. The generic instance then behaves just like any other unit. It is possible to instantiate generic units at run-time, for example inside a loop.

Example.

The specification of a generic package: Instantiating the generic package:  Using an instance of a generic package:

Advantages and limitations.

The language syntax allows precise specification of constraints on generic formal parameters. For example, it is possible to specify that a generic formal type will only accept a modular type as the actual. It is also possible to express constraints "between" generic formal parameters; for example: In this example, Array_Type is constrained by both Index_Type and Element_Type. When instantiating the unit, the programmer must pass an actual array type that satisfies these constraints.  The disadvantage of this fine-grained control is a complicated syntax, but, because all generic formal parameters are completely defined in the specification, the compiler can instantiate generics without looking at the body of the generic.  Unlike C++, Ada does not allow specialised generic instances, and requires that all generics be instantiated explicitly. These rules have several consequences:

Templates in C++.

C++ uses templates to enable generic programming techniques. The C++ Standard Library includes the Standard Template Library or STL that provides a framework of templates for common data structures and algorithms. Templates in C++ may also be used for template metaprogramming, which is a way of pre-evaluating some of the code at compile-time rather than run-time. Using template specialization, C++ Templates are considered Turing complete.

Technical overview.

There are two kinds of templates: function templates and class templates. A "function template" is a pattern for creating ordinary functions based upon the parameterizing types supplied when instantiated. For example, the C++ Standard Template Library contains the function template max(x, y) that creates functions that return either "x" or "y," whichever is larger. codice_1 could be defined like this: template <typename T> T max(T x, T y) {  "Specializations" of this function template, instantiations with specific types, can be called just like an ordinary function: std::cout « max(3, 7); // Outputs 7. The compiler examines the arguments used to call max and determines that this is a call to max(int, int). It then instantiates a version of the function where the parameterizing type T is int, making the equivalent of the following function: int max(int x, int y) {  This works whether the arguments x and y are integers, strings, or any other type for which the expression x < y is sensible, or more specifically, for any type for which operator< is defined. Common inheritance is not needed for the set of types that can be used, and so it is very similar to duck typing. A program defining a custom data type can use operator overloading to define the meaning of < for that type, thus allowing its use with the max() function template. While this may seem a minor benefit in this isolated example, in the context of a comprehensive library like the STL it allows the programmer to get extensive functionality for a new data type, just by defining a few operators for it. Merely defining < allows a type to be used with the standard sort(), stable_sort(), and binary_search() algorithms or to be put inside data structures such as sets, heaps, and associative arrays.  C++ templates are completely type safe at compile time. As a demonstration, the standard type complex does not define the < operator, because there is no strict order on complex numbers. Therefore, max(x, y) will fail with a compile error, if "x" and "y" are complex values. Likewise, other templates that rely on < cannot be applied to complex data unless a comparison (in the form of a functor or function) is provided. E.g.: A complex cannot be used as key for a map unless a comparison is provided. Unfortunately, compilers historically generate somewhat esoteric, long, and unhelpful error messages for this sort of error. Ensuring that a certain object adheres to a method protocol can alleviate this issue. Languages which use compare instead of < can also use complex values as keys.  The second kind of template, a "class template," extends the same concept to classes. A class template specialization is a class. Class templates are often used to make generic containers. For example, the STL has a linked list container. To make a linked list of integers, one writes list<int>. A list of strings is denoted list<string>. A list has a set of standard functions associated with it, that work for any compatible parameterizing types.

Template specialization.

A powerful feature of C++'s templates is "template specialization". This allows alternative implementations to be provided based on certain characteristics of the parameterized type that is being instantiated. Template specialization has two purposes: to allow certain forms of optimization, and to reduce code bloat.  For example, consider a sort() template function. One of the primary activities that such a function does is to swap or exchange the values in two of the container's positions. If the values are large (in terms of the number of bytes it takes to store each of them), then it is often quicker to first build a separate list of pointers to the objects, sort those pointers, and then build the final sorted sequence. If the values are quite small however it is usually fastest to just swap the values in-place as needed. Furthermore, if the parameterized type is already of some pointer-type, then there is no need to build a separate pointer array. Template specialization allows the template creator to write different implementations and to specify the characteristics that the parameterized type(s) must have for each implementation to be used.  Unlike function templates, class templates can be partially specialized. That means that an alternate version of the class template code can be provided when some of the template parameters are known, while leaving other template parameters generic. This can be used, for example, to create a default implementation (the "primary specialization") that assumes that copying a parameterizing type is expensive and then create partial specializations for types that are cheap to copy, thus increasing overall efficiency. Clients of such a class template just use specializations of it without needing to know whether the compiler used the primary specialization or some partial specialization in each case. Class templates can also be "fully specialized," which means that an alternate implementation can be provided when all of the parameterizing types are known.

Advantages and disadvantages.

Some uses of templates, such as the max() function, were previously filled by function-like preprocessor macros (a legacy of the C programming language). For example, here is a possible max() macro: Macros are expanded by preprocessor, before compilation proper; templates are expanded at compile time. Macros are always expanded inline; templates can also be expanded as inline functions when the compiler deems it appropriate. Thus both function-like macros and function templates have no run-time overhead.  However, templates are generally considered an improvement over macros for these purposes. Templates are type-safe. Templates avoid some of the common errors found in code that makes heavy use of function-like macros, such as evaluating parameters with side effects twice. Perhaps most importantly, templates were designed to be applicable to much larger problems than macros.  There are four primary drawbacks to the use of templates: supported features, compiler support, poor error messages, and code bloat:  The extra instantiations generated by templates can also cause debuggers to have difficulty working gracefully with templates. For example, setting a debug breakpoint within a template from a source file may either miss setting the breakpoint in the actual instantiation desired or may set a breakpoint in every place the template is instantiated.  Also, because the compiler needs to perform macro-like expansions of templates and generate different instances of them at compile time, the implementation source code for the templated class or function must be available (e.g. included in a header) to the code using it. Templated classes or functions, including much of the Standard Template Library (STL), if not included in header files, cannot be compiled. (This is in contrast to non-templated code, which may be compiled to binary, providing only a declarations header file for code using it.) This may be a disadvantage by exposing the implementing code, which removes some abstractions, and could restrict its use in closed-source projects.

Templates in D.

The D programming language supports templates based in design on C++. Most C++ template idioms will carry over to D without alteration, but D adds some additional functionality:  Templates in D use a different syntax than in C++: whereas in C++ template parameters are wrapped in angular brackets (Template<param1, param2>), D uses an exclamation sign and parentheses: Template!(param1, param2). This avoids the C++ parsing difficulties due to ambiguity with comparison operators. If there is only one parameter, the parentheses can be omitted.  Conventionally, D combines the above features to provide compile-time polymorphism using trait-based generic programming. For example, an input range is defined as any type that satisfies the checks performed by isInputRange, which is defined as follows: template isInputRange(R) A function that accepts only input ranges can then use the above template in a template constraint: auto fun(Range)(Range range)

Code generation.

In addition to template metaprogramming, D also provides several features to enable compile-time code generation:  Combining the above allows generating code based on existing declarations. For example, D serialization frameworks can enumerate a type's members and generate specialized functions for each serialized type to perform serialization and deserialization. User-defined attributes could further indicate serialization rules.  The import expression and compile-time function execution also allow efficiently implementing domain-specific languages. For example, given a function that takes a string containing an HTML template and returns equivalent D source code, it is possible to use it in the following way: // Import the contents of example.htt as a string manifest constant. enum htmlTemplate = import("example.htt");  // Transpile the HTML template to D code. enum htmlDCode = htmlTemplateToD(htmlTemplate);  // Paste the contents of htmlDCode as D code. mixin(htmlDCode);

Genericity in Eiffel.

Generic classes have been a part of Eiffel since the original method and language design. The foundation publications of Eiffel, use the term "genericity" to describe the creation and use of generic classes.

Basic/Unconstrained genericity.

Generic classes are declared with their class name and a list of one or more "formal generic parameters". In the following code, class codice_2 has one formal generic parameter codice_3 class feature -- Access feature -- Element change  The formal generic parameters are placeholders for arbitrary class names that will be supplied when a declaration of the generic class is made, as shown in the two "generic derivations" below, where codice_4 and codice_5 are other class names. codice_4 and codice_5 are considered "actual generic parameters" as they provide real class names to substitute for codice_3 in actual use.  Within the Eiffel type system, although class codice_9 is considered a class, it is not considered a type. However, a generic derivation of codice_9 such as codice_11 is considered a type.

Constrained genericity.

For the list class shown above, an actual generic parameter substituting for codice_3 can be any other available class. To constrain the set of classes from which valid actual generic parameters can be chosen, a "generic constraint" can be specified. In the declaration of class codice_13 below, the generic constraint dictates that any valid actual generic parameter will be a class that inherits from class codice_14. The generic constraint ensures that elements of a codice_13 can in fact be sorted. class

Generics in Java.

Support for the "generics", or "containers-of-type-T" was added to the Java programming language in 2004 as part of J2SE 5.0. In Java, generics are only checked at compile time for type correctness. The generic type information is then removed via a process called type erasure, to maintain compatibility with old JVM implementations, making it unavailable at runtime. For example, a List<String> is converted to the raw type List. The compiler inserts type casts to convert the elements to the String type when they are retrieved from the list, reducing performance compared to other implementations such as C++ templates.

Genericity in.NET [C#, VB.NET].

Generics were added as part of.NET Framework 2.0 in November 2005, based on a research prototype from Microsoft Research started in 1999. Although similar to generics in Java,.NET generics do not apply type erasure, but implement generics as a first class mechanism in the runtime using reification. This design choice provides additional functionality, such as allowing reflection with preservation of generic types, as well as alleviating some of the limitations of erasure (such as being unable to create generic arrays). This also means that there is no performance hit from runtime casts and normally expensive boxing conversions. When primitive and value types are used as generic arguments, they get specialized implementations, allowing for efficient generic collections and methods. As in C++ and Java, nested generic types such as Dictionary<string, List<int» are valid types, however are advised against for member signatures in code analysis design rules. .NET allows six varieties of generic type constraints using the where keyword including restricting generic types to be value types, to be classes, to have constructors, and to implement interfaces. Below is an example with an interface constraint: using System;  class Sample  The MakeAtLeast() method allows operation on arrays, with elements of generic type T. The method's type constraint indicates that the method is applicable to any type T that implements the generic IComparable<T> interface. This ensures a compile time error, if the method is called if the type does not support comparison. The interface provides the generic method CompareTo(T).  The above method could also be written without generic types, simply using the non-generic Array type. However, since arrays are contravariant, the casting would not be type safe, and compiler may miss errors that would otherwise be caught while making use of the generic types. In addition, the method would need to access the array items as objects instead, and would require casting to compare two elements. (For value types like types such as int this requires a boxing conversion, although this can be worked around using the Comparer<T> class, as is done in the standard collection classes.)  A notable behavior of static members in a generic.NET class is static member instantiation per run-time type (see example below).

Genericity in Delphi.

Delphi's Object Pascal dialect acquired generics in the Delphi 2007 release, initially only with the (now discontinued).NET compiler before being added to the native code in the Delphi 2009 release. The semantics and capabilities of Delphi generics are largely modelled on those had by generics in.NET 2.0, though the implementation is by necessity quite different. Here's a more or less direct translation of the first C# example shown above: program Sample;  uses  type  class procedure TUtils.MakeAtLeast<T>(Arr: TArray<T>; const Lowest: T; var begin end;  class procedure TUtils.MakeAtLeast<T>(Arr: TArray<T>; const Lowest: T); begin end;  var begin end. As with C#, methods as well as whole types can have one or more type parameters. In the example, TArray is a generic type (defined by the language) and MakeAtLeast a generic method. The available constraints are very similar to the available constraints in C#: any value type, any class, a specific class or interface, and a class with a parameterless constructor. Multiple constraints act as an additive union.

Genericity in Free Pascal.

Free Pascal implemented generics before Delphi, and with different syntax and semantics. However, since FPC version 2.6.0, the Delphi-style syntax is available when using the {$mode Delphi} language mode. Thus, Free Pascal programmers are able to use generics in whichever style they prefer.  Delphi and Free Pascal example:  // Delphi style unit A;  interface  type  implementation  function TGenericClass<T>.Foo(const AValue: T): T; begin end;  end.  // Free Pascal's ObjFPC style unit B;  interface  type  implementation  function TGenericClass.Foo(const AValue: T): T; begin end;  end.  // example usage, Delphi style program TestGenDelphi;  uses  var begin end.  // example usage, ObjFPC style program TestGenDelphi;  uses  // required in ObjFPC type var begin end.

Functional languages.

Genericity in Haskell.

The type class mechanism of Haskell supports generic programming. Six of the predefined type classes in Haskell (including Eq, the types that can be compared for equality, and Show, the types whose values can be rendered as strings) have the special property of supporting "derived instances." This means that a programmer defining a new type can state that this type is to be an instance of one of these special type classes, without providing implementations of the class methods as is usually necessary when declaring class instances. All the necessary methods will be "derived" – that is, constructed automatically – based on the structure of the type. For instance, the following declaration of a type of binary trees states that it is to be an instance of the classes Eq and Show: data BinTree a = Leaf a | Node (BinTree a) a (BinTree a) This results in an equality function (==) and a string representation function (show) being automatically defined for any type of the form BinTree T provided that T itself supports those operations.  The support for derived instances of Eq and Show makes their methods == and show generic in a qualitatively different way from para-metrically polymorphic functions: these "functions" (more accurately, type-indexed families of functions) can be applied to values of various types, and although they behave differently for every argument type, little work is needed to add support for a new type. Ralf Hinze (2004) has shown that a similar effect can be achieved for user-defined type classes by certain programming techniques. Other researchers have proposed approaches to this and other kinds of genericity in the context of Haskell and extensions to Haskell (discussed below).

PolyP.

PolyP was the first generic programming language extension to Haskell. In PolyP, generic functions are called "polytypic". The language introduces a special construct in which such polytypic functions can be defined via structural induction over the structure of the pattern functor of a regular datatype. Regular datatypes in PolyP are a subset of Haskell datatypes. A regular datatype t must be of kind "* → *", and if "a" is the formal type argument in the definition, then all recursive calls to "t" must have the form "t a". These restrictions rule out higher-kinded datatypes as well as nested datatypes, where the recursive calls are of a different form. The flatten function in PolyP is here provided as an example:

Generic Haskell.

Generic Haskell is another extension to Haskell, developed at Utrecht University in the Netherlands. The extensions it provides are: The resulting type-indexed value can be specialized to any type.  As an example, the equality function in Generic Haskell:

Clean.

Clean offers generic programming based PolyP and the generic Haskell as supported by the GHC>=6.0. It parametrizes by kind as those but offers overloading.

Other languages.

The ML family of programming languages support generic programming through parametric polymorphism and generic modules called "functors." Both Standard ML and OCaml provide functors, which are similar to class templates and to Ada's generic packages. Scheme syntactic abstractions also have a connection to genericity – these are in fact a superset of templating à la C++.  A Verilog module may take one or more parameters, to which their actual values are assigned upon the instantiation of the module. One example is a generic register array where the array width is given via a parameter. Such the array, combined with a generic wire vector, can make a generic buffer or memory module with an arbitrary bit width out of a single module implementation.  VHDL, being derived from Ada, also has generic capabilities.

Generic programming is a style of computer programming in which algorithms are written in terms of types "to-be-specified-later" that are then "instantiated" when needed for specific types provided as parameters. This approach, pioneered by ML in 1973, permits writing common functions or types that differ only in the set of types on which they operate when used, thus reducing duplication. Such software entities are known as "generics" in Python, Ada, C#, Delphi, Eiffel, F#, Java, Nim, Rust, Swift, TypeScript and Visual Basic.NET. They are known as "parametric polymorphism" in ML, Scala, Julia, and Haskell (the Haskell community also uses the term "generic" for a related but somewhat different concept); "templates" in C++ and D; and "parameterized types" in the influential 1994 book "Design Patterns".

泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Visual Basic.NET 称之为泛型(generics);ML、Scala 和 Haskell 称之为参数多态(parametric polymorphism);C++ 和 D称之为模板。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。


联合国安全理事会第1441号决议

Passage of resolution.

The resolution itself never mentioned a war and only required Iraq to support inspections by UNMOVIC and IAEA.  On 12 September 2002, U.S. President George W. Bush addressed the General Assembly and outlined a catalogue of complaints against the Iraqi government. These included:  Following the speech, intensive negotiations began with other members of the Security Council. In particular, three permanent members (with veto power) of the Council were known to have misgivings about an invasion of Iraq: Russia, China, and France.  In the meantime, Iraq, while denying all charges, announced that it would permit the re-entry of United Nations arms inspectors into Iraq. The United States characterized this as a ploy by Iraq and continued to call for a Security Council resolution which would authorize the use of military force.  The resolution text was drafted jointly by the United States and the United Kingdom, the result of eight weeks of tumultuous negotiations, particularly with Russia and France. France questioned the phrase "serious consequences" and stated repeatedly that any "material breach" found by the inspectors should not automatically lead to war; instead the UN should pass another resolution deciding on the course of action. In favour of this view is the fact that previous resolutions legitimizing war under Chapter VII used much stronger terms, like "...all necessary means..." in Resolution 678 in 1990 and that Resolution 1441 stated that the Security Council shall "remain seized of the matter."

Security Council vote.

On 8 November 2002, the Security Council passed Resolution 1441 by a unanimous 15–0 vote; Russia, China, France, and Arab states such as Syria voted in favor, giving Resolution 1441 wider support than even the 1990 Gulf War resolution.  While some politicians have argued that the resolution could authorize war under certain circumstances, the representatives in the meeting were clear that this was not the case. The United States Ambassador to the United Nations, John Negroponte, said:  The ambassador for the United Kingdom, the co-sponsor of the resolution, said:  The message was further confirmed by the ambassador for Syria:

Implementation.

Iraq agreed to the Resolution on 13 November. Weapons inspectors returned on 27 November, led by Hans Blix of UNMOVIC and Mohamed ElBaradei of the International Atomic Energy Agency. The inspectors had been absent from Iraq since December 1998 when they were withdrawn immediately prior to Operation Desert Fox.  Inspectors began visiting sites where WMD production was suspected, but found no evidence of such activities, except for 18 undeclared 122mm chemical rockets that were destroyed under UNMOVIC supervision. As was discovered after the invasion of Iraq, no production of WMDs was taking place, and no stockpiles existed. U.N. inspectors also found that the Al-Samoud 2 and Al-fatah missiles violated U.N. range restrictions, the former also being partially destroyed under UNMOVIC supervision. Debate about Resolution 1441 therefore turns on whether, despite the absence of WMDs and the acceptance of inspections, Iraq failed to comply with the terms of the Resolution, and whether an invasion was justified in the absence of any further UN Security resolutions on the subject.  On 7 December 2002, Iraq filed its 12,000-page weapons declaration with the UN in order to meet requirements for this resolution. The five permanent members of the Security Council received unedited versions of the report, while an edited version was made available for other UN Member States. On 19 December, Hans Blix reported before the United Nations and stated in regards to Iraq's 7 December report (unedited version): "During the period 1991–1998, Iraq submitted many declarations called full, final and complete. Regrettably, much in these declarations proved inaccurate or incomplete or was unsupported or contradicted by evidence. In such cases, no confidence can arise that proscribed programmes or items have been eliminated." By March, Blix declared that the 7 December report had not brought any new documentary evidence to light.  Iraq continued to fail to account for substantial chemical and biological stockpiles which UNMOVIC inspectors had confirmed as existing as late as 1998. Iraq claimed that it had disposed of its anthrax stockpiles at a specific site, but UNMOVIC found this impossible to confirm since Iraq had not allowed the destruction to be witnessed by inspectors as required by the pertinent Resolutions. Chemical testing done at the site was unable to show that any anthrax had been destroyed there.  Hans Blix and Mohamed ElBaradei presented several reports to the UN detailing Iraq's level of compliance with Resolution 1441. On 27 January 2003 Chief UN Weapons Inspector Blix addressed the UN Security Council and stated "Iraq appears not to have come to a genuine acceptance–not even today–of the disarmament, which was demanded of it and which it needs to carry out to win the confidence of the world and to live in peace." Blix went on to state that the Iraqi regime had allegedly misplaced "1,000 tonnes" of VX nerve agent—one of the most toxic ever developed.  By mid-February the issues of anthrax, the nerve agent VX and long-range missiles remained unresolved. Blix's 7 March report stated "Iraq, with a highly developed administrative system, should be able to provide more documentary evidence about its proscribed weapons programmes. Only a few new such documents have come to light so far and been handed over since we began inspections."  Blix's report also stated:  At this point, the US Administration asserted that Iraq remained in material breach of the UN Resolutions, and that, under 1441, this meant the Security Council had to convene immediately "in order to consider the situation and the need for full compliance with all of the relevant Council resolutions in order to secure international peace and security".  Before the meeting took place, French president Jacques Chirac declared on 10 March that France would veto any resolution which would automatically lead to war. This caused open displays of dismay by the U.S. and British governments. The drive by Britain for unanimity and a "second resolution" was effectively abandoned at that point.  In the leadup to the meeting, it became apparent that a majority of UNSC members would oppose any resolution leading to war. As a result, no such resolution was put to the Council.  At the Azores conference of 16 March, Tony Blair, George W. Bush, Spanish prime minister José María Aznar as well as Portuguese prime minister José Manuel Barroso who hosted the meeting, announced the imminent deadline of 17 March for complete Iraqi compliance, with statements such as "Tomorrow is a moment of truth for the world". On the 17th, speeches by Bush and UK Foreign Secretary Jack Straw explicitly declared the period of diplomacy to be over, as declared by Resolution 1441's prohibition on giving Iraq new opportunities for compliance, and that no further authorization from the UN would be sought before an invasion of Iraq (see 2003 invasion of Iraq). The USA and Britain, while admitting that such a resolution was diplomatically desirable, insisted that Iraq had now been given enough time (noting also the time since the first disarmament resolutions of 1991) to disarm or provide evidence thereof, and that war was legitimized by 1441 and previous UN resolutions. Non-permanent Security Council member Spain declared itself with the USA and Britain. Nevertheless, this position taken by the Bush administration and its supporters, has been and still is being disputed by numerous legal experts. According to most members of the Security Council, it is up to the council itself, and not individual members, to determine how the body's resolutions are to be enforced.  More information is found in United Nations actions regarding Iraq.

Aftermath.

The Bush administration commissioned the Iraq Survey Group to determine whether in fact any WMD existed in Iraq. After a year and half of meticulously combing through the country, the administration's own inspectors reported:  The review was conducted by Charles A. Duelfer and the Iraq Survey Group. In October 2004, Bush said of Duelfer's analysis: "The chief weapons inspector, Charles Duelfer, has now issued a comprehensive report that confirms the earlier conclusion of David Kay that Iraq did not have the weapons that our intelligence believed were there."

United Nations Security Council Resolution 1441 is a United Nations Security Council resolution adopted unanimously by the United Nations Security Council on 8 November 2002, offering Iraq under Saddam Hussein "a final opportunity to comply with its disarmament obligations" that had been set out in several previous resolutions (Resolutions 660, 661, 678, 686, 687, 688, 707, 715, 986, and 1284). It provided a justification for what was subsequently termed the US invasion of Iraq.

联合国安全理事会第1441号决议,于2002年11月8日通过。决议重申第660号、第661号、第678号、第686号、第687号、第688号、第707号、第715号、第986号、第1284号十个安理会决议。决议宣称提供给萨达姆·侯赛因政权“最后一次裁军的机会”。


Naming.

Ogg is derived from "ogging", jargon from the computer game "Netrek", which came to mean doing something forcefully, possibly without consideration of the drain on future resources. Although it is sometimes assumed that the name "Ogg" comes from the character of Nanny Ogg in Terry Pratchett's "Discworld" novels, the format's developers say that is not true. At its inception, the Ogg project was thought to be somewhat ambitious given the limited power of the PC hardware of the time. Still, to quote the same reference: "Vorbis, on the other hand is named after the Terry Pratchett character from the book "Small Gods"".  The Ogg Vorbis project started in 1993. It was originally named "Squish" but that name was already trademarked, so the project underwent a name change. The new name, "OggSquish", was used until 2001 when it was changed again to "Ogg". Ogg has since come to refer to the container format, which is now part of the larger Xiph.org multimedia project. Today, "Squish" (now known as "Vorbis") refers to a particular audio coding format typically used with the Ogg container format.

File format.

The "Ogg" bitstream format, spearheaded by the Xiph.Org Foundation, has been created as the framework of a larger initiative aimed at developing a set of components for the coding and decoding of multimedia content, which are available free of charge and freely re-implementable in software.  The format consists of chunks of data each called an "Ogg page". Each page begins with the characters, "OggS", to identify the file as Ogg format.  A "serial number" and "page number" in the page header identifies each page as part of a series of pages making up a bitstream. Multiple bitstreams may be multiplexed in the file where pages from each bitstream are ordered by the seek time of the contained data. Bitstreams may also be appended to existing files, a process known as "chaining", to cause the bitstreams to be decoded in sequence.  A BSD-licensed library, called "libvorbis", is available to encode and decode data from "Vorbis" streams. Independent Ogg implementations are used in several projects such as RealPlayer and a set of DirectShow filters.  Mogg, the "Multi-Track-Single-Logical-Stream Ogg-Vorbis", is the multi-channel or multi-track Ogg file format.

Page structure.

The following is the field layout of an Ogg page header:  The segments provide a way to group segments into packets, which are meaningful units of data for the decoder. When the segment's length is indicated to be 255, this indicates that the following segment is to be concatenated to this one and is part of the same packet. When the segment's length is 0–254, this indicates that this segment is the final segment in this packet. Where a packet's length is a multiple of 255, the final segment is length 0.  Where the final packet continues on the next page, the final segment value is 255, and the continuation flag is set on the following page to indicate that the start of the new page is a continuation of last page.

Metadata.

VorbisComment is a base-level Metadata format initially created for use with Ogg Vorbis. It has since been adopted in the specifications of Ogg encapsulations for other Xiph.Org codecs including Theora, Speex, FLAC and Opus. "VorbisComment" is the simplest and most widely-supported mechanism for storing metadata with Xiph.Org codecs.  Notably, one or more METADATA_BLOCK_PICTURE=... in a "VorbisComment" for thumbnails and cover art have Base64-encoded values of the corresponding FLAC METADATA_BLOCK_PICTURE. In other words, FLAC stores thumbnails and cover art in binary blocks—outside of the FLAC tags in a little-endian METADATA_BLOCK_VORBIS_COMMENT.  Other existing and proposed mechanisms are:

History.

The Ogg project began with a simple audio compression package as part of a larger project in 1993. The software was originally named "Squish" but due to an existing trade mark it was renamed to "OggSquish". This name was later used for the whole Ogg project. In 1997, the Xiphophorus OggSquish was described as "an attempt both to create a flexible compressed audio format for modern audio applications as well as to provide the first audio format that is common on any and every modern computer platform". The OggSquish was in 2000 referred to as "a group of several related multimedia and signal processing projects". In 2000, two projects were in active development for planned release: Ogg Vorbis format and libvorbis - the reference implementation of Vorbis. Research also included work on future video and lossless audio coding. In 2001, OggSquish was renamed to "Ogg" and it was described as "the umbrella for a group of several related multimedia and signal processing projects". Ogg has come to stand for the file format, as part of the larger Xiph.org multimedia project. Squish became just the name of one of the Ogg codecs. In 2009, Ogg is described as "a multimedia container format, and the native file and stream format for the Xiph.org multimedia codecs".  Ogg reference implementation was separated from Vorbis on September 2, 2000.  In May 2003, two Internet RFCs were published relating to the format. The Ogg bitstream was defined in RFC 3533 (which is classified as 'informative') and its Internet content type (codice_1) in RFC 3534 (which is,, a proposed standard protocol). In September 2008, RFC 3534 was obsoleted by RFC 5334, which added content types codice_2, codice_3 and filename extensions.ogx,.ogv,.oga,.spx.

OGM.

In 2002, the lack of formal video support in Ogg resulted in the creation of the "OGM" file format, a hack on Ogg that allowed embedding of video from the Microsoft DirectShow framework into an Ogg-based wrapper. OGM was initially supported only by closed source Windows-only tools, but the code base was subsequently opened. Later, video (and subtitle) support were formally specified for Ogg but in a manner incompatible with OGM. Independently, the Matroska container format reached maturity and provided an alternative for people interested in combining Vorbis audio and arbitrary video codecs. As a result, OGM is no longer supported or developed and is formally discouraged by Xiph.org. Today, video in Ogg is found with the.ogv file extension, which is formally specified and officially supported. Software and codecs that support.ogm files are available without charge.

2006.

Although Ogg had not reached anywhere near the ubiquity of the MPEG standards (e.g., MP3/MP4),, it was commonly used to encode free content (such as free music, multimedia on Wikimedia Foundation projects and Creative Commons files) and had started to be supported by a significant minority of digital audio players. Also supporting the Ogg format were many popular video game engines, including Doom 3, Unreal Tournament 2004,, Jets n Guns,,, Stepmania,, Lineage 2, Vendetta Online, Battlefield 2, and the Grand Theft Auto engines, as well as the audio files of the Java-based game, Minecraft. The more popular Vorbis codec had built-in support on many software players, and extensions were available for nearly all the rest.

2007.

On May 16, 2007, the Free Software Foundation started a campaign to increase the use of Vorbis "as an ethically, legally and technically superior audio alternative to the proprietary MP3 format." People were also encouraged to support the campaign by adding a web button to their website or blog. For those who don't want to download and use FSF's suggested Ogg player (VLC), the Xiph.Org Foundation had an official codec for QuickTime-based applications in Windows and Mac OS X, such as iTunes players and iMovie applications; and Windows users could install a Windows Media Player Ogg codec.

2009.

By June 30, 2009, the Ogg container, through the use of the Theora and Vorbis, was the only container format included in Firefox 3.5 web browser's implementation of the HTML 5 codice_4 and codice_5 elements. This was in accordance with the original recommendation outlined in, but later removed from, the HTML 5 draft specification (see Ogg controversy).

2010.

On March 3, 2010, a technical analysis by an FFmpeg developer was critical about the general purpose abilities of Ogg as a multimedia container format. The creator of Ogg later responded to these claims in an article of his own.

Ogg codecs.

Ogg is only a container format. The actual audio or video encoded by a codec is stored inside an Ogg container. Ogg containers may contain streams encoded with multiple codecs, for example, a video file with sound contains data encoded by both an audio codec and a video codec.  Being a container format, Ogg can embed audio and video in various formats (such as Dirac, MNG, CELT, MPEG-4, MP3 and others) but Ogg was intended to be, and usually is, used with the following Xiph.org free codecs:

Media types.

Ogg audio media is registered as IANA media type audio/ogg with file extensions.oga,.ogg, and.spx. It is a proper subset of the Ogg video media type video/ogg with file extension.ogv. Other Ogg applications use media type application/ogg with file extension.ogx, this is a superset of video/ogg. The Opus media type audio/opus with file extension.opus was registered later in RFC and.

Ogg is a free, open container format maintained by the Xiph.Org Foundation. The creators of the Ogg format state that it is unrestricted by software patents and is designed to provide for efficient streaming and manipulation of high-quality digital multimedia. Its name is derived from "ogging", jargon from the computer game "Netrek".

Ogg是一个自由且开放标准的多媒体文件格式,由Xiph.Org基金会所维护。Ogg格式并不受到软件专利的限制,并设计用于有效率地串流媒体和处理高品质的数码多媒体。


Evolution.

The oldest fossils of even-toed ungulates date back to the early Eocene (about 53 million years ago). Since these findings almost simultaneously appeared in Europe, Asia, and North America, it is very difficult to accurately determine the origin of artiodactyls. The fossils are classified as belonging to the family Dichobunidae; their best-known and best-preserved member is "Diacodexis". These were small animals, some as small as a hare, with a slim build, lanky legs, and a long tail. Their hind legs were much longer than their front legs. The early to middle Eocene saw the emergence of the ancestors of most of today's mammals. Two formerly widespread, but now extinct, families of even-toed ungulates were Enteledontidae and Anthracotheriidae. Entelodonts existed from the middle Eocene to the early Miocene in Eurasia and North America. They had a stocky body with short legs and a massive head, which was characterized by two humps on the lower jaw bone. Anthracotheres had a large, porcine (pig-like) build, with short legs and an elongated muzzle. This group appeared in the middle Eocene up until the Pliocene, and spread throughout Eurasia, Africa, and North America. Anthracotheres are thought to be the ancestors of hippos, and, likewise, probably led a similar aquatic lifestyle. Hippopotamuses appeared in the late Miocene and occupied Africa and Asia – they never got to the Americas.  The camels (Tylopoda) were, during large parts of the Cenozoic, limited to North America; early forms like Cainotheriidae occupied Europe. Among the North American camels were groups like the stocky, short-legged Merycoidodontidae. They first appeared in the late Eocene and developed a great diversity of species in North America. Only in the late Miocene or early Pliocene did they migrate from North America into Eurasia. The North American varieties became extinct around 10,000 years ago.  Suina (including pigs) have been around since the Eocene. In the late Eocene or the Oligocene, two families stayed in Eurasia and Africa; the peccaries, which became extinct in the Old World, exist today only in the Americas.  South America was settled by even-toed ungulates only in the Pliocene, after the land bridge at the Isthmus of Panama formed some three million years ago. With only the peccaries, lamoids (or llamas), and various species of capreoline deer, South America has than other continents, except Australia, which has no native species.

Taxonomy and phylogeny.

The classification of artiodactyls was hotly debated because the ocean-dwelling cetaceans evolved from the land-dwelling even-toed ungulates. Some semiaquatic even-toed ungulates (hippopotamuses) are more closely related to the ocean-dwelling cetaceans than to the other even-toed ungulates.  This makes the Artiodactyla as traditionally defined a paraphyletic taxon, since it includes animals descended from a common ancestor, but does not include all of its descendants. Phylogenetic classification only recognizes monophyletic taxa; that is, groups that descend from a common ancestor and include all of its descendants. To address this problem, the traditional order Artiodactyla and infraorder Cetacea are sometimes subsumed into the more inclusive Cetartiodactyla taxon. An alternative approach is to include both land-dwelling even-toed ungulates and ocean-dwelling cetaceans in a revised Artiodactyla taxon.

Research history.

In the 1990s, biological systematics used not only morphology and fossils to classify organisms, but also molecular biology. Molecular biology involves sequencing an organism's DNA and RNA and comparing the sequence with that of other living beings – the more similar they are, the more closely they are related. Comparison of even-toed ungulate and cetaceans genetic material has shown that the closest living relatives of whales and hippopotamuses is the paraphyletic group Artiodactyla.  Dan Graur and Desmond Higgins were among the first to come to this conclusion, and included a paper published in 1994. However, they did not recognize hippopotamuses and classified the ruminants as the sister group of cetaceans. Subsequent studies established the close relationship between hippopotamuses and cetaceans; these studies were based on casein genes, SINEs, fibrinogen sequences, cytochrome and rRNA sequences, IRBP (and vWF) gene sequences, adrenergic receptors, and apolipoproteins.  In 2001, the fossil limbs of a "Pakicetus" (amphibioid cetacean the size of a wolf) and "Ichthyolestes" (an early whale the size of a fox) were found in Pakistan. They were both archaeocetes ("ancient whales") from about 48 million years ago (in the Eocene). These findings showed that archaeocetes were more terrestrial than previously thought, and that the special construction of the talus (ankle bone) with a double-rolled joint surface, previously thought to be unique to even-toed ungulates, were also in early cetaceans. The mesonychids, another type of ungulate, did not show this special construction of the talus, and thus was concluded to not have the same ancestors as cetaceans.  The oldest cetaceans date back to the early Eocene (53 million years ago), whereas the oldest known hippopotamus dates back only to the Miocene (15 million years ago). Some doubts have arisen regarding the relationship between the two, as there is a 40 million year gap between their first appearances in the fossil record. It seems unlikely that there were ancestral hippos that left no remains, given the high number of even-toed ungulate fossils. Some studies proposed the late emergence of hippos is because they are relatives of peccaries and split recently, but molecular findings contradict this. Research is therefore focused on anthracortheres (family Anthracotheriidae); one dating from the Eocene to Miocene was declared to be "hippo-like" upon discovery in the 19th century. A study from 2005 showed that the anthracotheres and hippopotamuses have very similar skulls, but differed in the adaptations of their teeth. It was nevertheless believed that cetaceans and anthracothereres descended from a common ancestor, and that hippopotamuses developed from anthracotheres. A study published in 2015 was able to confirm this, but also revealed that hippopotamuses were derived from older anthracotheriens. The newly introduced genus "Epirigenys" from eastern Africa is thus the sister group of hippos.

Morphological classification of Artiodactyla.

Linnaeus postulated a close relationship between camels and ruminants as early as the mid-1700s. Henri de Blainville recognized the similar anatomy of the limbs of pigs and hippos, and British zoologist Richard Owen coined the term "even-toed ungulates" and the scientific name "Artiodactyla" in 1848.  Internal morphology (mainly the stomach and the molars) were used for classification. Suines (including pigs) and hippopotamuses have molars with well-developed roots and a simple stomach that digests food. Thus, they were grouped together as non-ruminants (Porcine). All other even-toed ungulates have molars with a selenodont construction (crescent-shaped cusps) and have the ability to ruminate, which requires regurgitating food and re-chewing it. Differences in stomach construction indicated that rumination evolved independently between tylopods and ruminants; therefore, tylopods were excluded from Ruminantia.  The taxonomy that was widely accepted by the end of the 20th century was:

Morphological classification of Cetacea.

Modern cetaceans are highly adapted sea creatures which, morphologically, have little in common with land mammals; they are similar to other marine mammals, such as seals and sea cows, due to convergent evolution. However, they evolved from originally terrestrial mammals. The most likely ancestors were long thought to be mesonychids — large, carnivorous animals from the early Cenozoic (Paleocene and Eocene), which had hooves instead of claws on their feet. Their molars were adapted to a carnivorous diet, resembling the teeth in modern toothed whales, and, unlike other mammals, have a uniform construction.  The suspected relations can be shown as follows:

Inner systematics.

Molecular findings and morphological indications suggest that artiodactyls as traditionally defined are paraphyletic with respect to cetaceans. Cetaceans are deeply nested within the former; the two groups together form a monophyletic taxon, for which the name Cetartiodactyla is sometimes used. Modern nomenclature divides Artiodactyla (or Cetartiodactyla) in four subordinate taxa: camelids (Tylopoda), pigs and peccaries (Suina), ruminants (Ruminantia), and hippos plus whales (Whippomorpha).  The presumed lineages within Artiodactyla can be represented in the following cladogram:  The four summarized Artiodactyla taxa are divided into ten extant families:  Although deer, musk deer, and pronghorns have traditionally been summarized as cervids (Cervioidea), molecular studies provide different -– and inconsistent – results, so the question of phylogenetic systematics of infraorder Pecora (the horned ruminants) for the time being, cannot be answered.

Anatomy.

Artiodactyls are generally quadrupeds. Two major body types are known: Suinids and hippopotamuses are characterized by a stocky body, short legs, and a large head; camels and ruminants, though, have a more slender build and lanky legs. Size varies considerably; the smallest member, the mouse deer, often reaches a body length of only and a weight of. The largest member, the hippopotamus, can grow up to in length and weigh, and the giraffe can grow to be tall and in body length. All even-toed ungulates display some form of sexual dimorphism: the males are consistently larger and heavier than the females. In deer, only the males boast antlers, and the horns of bovines are usually small or not present in females. Male Indian antelopes have a much darker coat than females.  Almost all even-toed ungulates have fur, with an exception being the nearly hairless hippopotamus. Fur varies in length and coloration depending on the habitat. Species in cooler regions can shed their coat. Camouflaged coats come in colors of yellow, gray, brown, or black tones.

Limbs.

Even-toed ungulates bear their name because they have an even number of toes (two or four) – in some peccaries, the hind legs have a reduction in the number of toes to three. The central axis of the leg is between the third and fourth toe. The first toe is missing in modern artiodactyls, and can only be found in now-extinct genera. The second and fifth toes are adapted differently between species: When camels have only two toes present, the claws are transformed into nails (while both are made of keratin, claws are curved and pointed while nails are flat and dull). These claws consist of three parts: the plate (top and sides), the sole (bottom), and the bale (rear). In general, the claws of the forelegs are wider and blunter than those of the hind legs, and the gape is farther apart. Aside from camels, all even-toed ungulates put just the tip of the foremost phalanx on the ground.  In even-toed ungulates, the bones of the stylopodium (upper arm or thigh bone) and zygopodiums (tibia and fibula) are usually elongated. The muscles of the limbs are predominantly localized, which ensures that artiodactyls often have very slender legs. A clavicle is never present, and the scapula is very agile and swings back and forth for added mobility when running. The special construction of the legs causes the legs to be unable to rotate, which allows for greater stability when running at high speeds. In addition, many smaller artiodactyls have a very flexible body, contributing to their speed by increasing their stride length.

Head.

Many even-toed ungulates have a relatively large head. The skull is elongated and rather narrow; the frontal bone is enlarged near the back and displaces the parietal bone, which forms only part of the side of the cranium (especially in ruminants).

Horns and antlers.

Four families of even-toed ungulates have cranial appendages. These Pecora, (with the exception of the musk deer), have one of four types of cranial appendages: true horns, antlers, ossicones, or pronghorns.  "True horns" have a bone core that is covered in a permanent sheath of keratin, and are found only in the bovids. "Antlers" are bony structures that are shed and replaced each year; they are found in deer (members of the family Cervidae). They grow from a permanent outgrowth of the frontal bone called the pedicle and can be branched, as in the white-tailed deer ("Odocoileus virginianus"), or palmate, as in the moose ("Alces alces"). "Ossicones" are permanent bone structures that fuse to the frontal or parietal bones during an animal's life and are found only in the Giraffidae. "Pronghorns", while similar to horns in that they have keratinous sheaths covering permanent bone cores, are deciduous.  All these cranial appendages can serve for posturing, battling for mating privilege, and for defense. In almost all cases, they are sexually dimorphic, and often found only on the males.

Teeth.

There are two trends in terms of teeth within Artiodactyla. The Suina and hippopotamuses have a relatively large number of teeth (with some pigs having 44); their dentition is more adapted to a squeezing mastication, which is characteristic of omnivores. Camels and ruminants have fewer teeth; there is often a yawning diastema, a designated gap in the teeth where the molars are aligned for crushing plant matter.  The incisors are often reduced in ruminants, and are completely absent in the upper jaw. The canines are enlarged and tusk-like in the Suina, and are used for digging in the ground and for defense. In ruminants, the males' upper canines are enlarged and used as a weapon in certain species (mouse deer, musk deer, water deer); species with frontal weapons are usually missing the upper canines. The lower canines of ruminants resemble the incisors, so that these animals have eight uniform teeth in the frontal part of the lower jaw.  The molars of porcine have only a few bumps. In contrast, the camels and ruminants have bumps that are crescent-shaped cusps (selenodont).

Senses.

Artiodactyls have a well-developed sense of smell and sense of hearing. Unlike many other mammals, they have a poor sense of sight – moving objects are much easier to see than stationary ones. Similar to many other prey animals, their eyes are on the sides of the head, giving them an almost panoramic view.

Digestive system.

The ruminants (Ruminantia and Tylopoda) ruminate their food – they regurgitate and re-chew it. Ruminants' mouths often have additional salivary glands, and the oral mucosa is often heavily calloused to avoid injury from hard plant parts and to allow easier transport of roughly chewed food. Their stomachs are divided into three to four sections: the rumen, the reticulum, the omasum, and the abomasum. After the food is ingested, it is mixed with saliva in the rumen and reticulum and separates into layers of solid versus liquid material. The solids lump together to form a bolus (also known as the cud); this is regurgitated by reticular contractions while the glottis is closed. When the bolus enters the mouth, the fluid is squeezed out with the tongue and re-swallowed. The bolus is chewed slowly to completely mix it with saliva and to break it down. Ingested food passes to the "fermentation chamber" (rumen and reticulum), where it is kept in continual motion by rhythmic contractions. Cellulytic microbes (bacteria, protozoa, and fungi) produce cellulase, which is needed to break down the cellulose found in plant material. This form of digestion has two advantages: plants that are indigestible to other species can be digested and used, and the duration of the actual food consumption shortened; the animal spends only a short time out in the open with his head to the ground – rumination can take place later, in a sheltered area.  Tylopoda (camels, llamas, and alpacas) and chevrotains have three-chambered stomachs, while the rest of Ruminantia have four-chambered stomachs. The handicap of a heavy digestive system has increased selective pressure towards limbs that allow the animal to quickly escape predators. Most species within Suina have a simple two-chambered stomach that allows an omnivorous diet. The babirusa, however, is an herbivore, and has extra maxillary teeth to allow for proper mastication of plant material. Most of the fermentation occurs with the help of cellulolytic microorganisms within the caecum of the large intestine. Peccaries have a complex stomach that contains four compartments. Their fore stomach has fermentation carried out by microbes and has high levels of volatile fatty acid; it has been proposed that their complex fore stomach is a means to slow digestive passage and increase digestive efficiency. Hippopotamuses have three-chambered stomachs and do not ruminate. They consume around of grass and other plant matter each night. They may cover distances up to to obtain food, which they digest with the help of microbes that produce cellulase. Their closest living relatives, the whales, are obligate carnivores.  Unlike other even-toed ungulates, pigs have a simple sack-shaped stomach. Some artiodactyla, such as white-tailed deer, lack a gall bladder.

Genitourinary system.

The penises of even-toed ungulates have an S-shape at rest and lie in a pocket under the skin on the belly. The corpora cavernosa is only slightly developed; and an erection mainly causes this curvature to extend, which leads to an extension, but not a thickening, of the penis. Cetaceans have similar penises. In some even-toed ungulates, the penis contains a structure called the "urethral process."  The testicles are located in the scrotum and thus outside the abdominal cavity. The ovaries of many females descend – as testicles descend of many male mammals – and are close to the pelvic inlet at the level of the fourth lumbar vertebra. The uterus has two horns (uterus bicornis).

Other.

The number of mammary glands is variable and correlates, as in all mammals, with litter size. Pigs, which have the largest litter size of all even-toed ungulates, have two rows of teats lined from the armpit to the groin area. In most cases, however, even-toed ungulates have only one or two pairs of teats. In some species, these form an udder in the groin region.  Secretory glands in the skin are present in virtually all species and can be located in different places, such as in the eyes; behind the horns, the neck, or back; on the feet; or in the anal region.

Lifestyle.

Distribution and habitat.

Artiodactyls are native to almost all parts of the world, with the exception of Oceania and Antarctica. Humans have introduced different artiodactyls worldwide as hunting animals. Artiodactyls inhabit almost every habitat, from tropical rainforests and steppes to deserts and high mountain regions. The greatest biodiversity prevails in open habitats such as grasslands and open forests.

Social behavior.

The social behavior of even-toed ungulates varies from species to species. Generally, there is a tendency to merge into larger groups, but some live alone or in pairs. Species living in groups often have a hierarchy, both among males and females. Some species also live in harem groups, with one male, several females, and their common offspring. In other species, the females and juveniles stay together, while males are solitary or live in bachelor groups and seek out females only during mating season.  Many artiodactyls are territorial and mark their territory, for example, with glandular secretions or urine. In addition to year-round sedentary species, there are animals that migrate seasonally.  There are diurnal, crepuscular, and nocturnal artiodactyls. Some species' pattern of wakefulness varies with season or habitat.

Reproduction and life expectancy.

Generally, even-toed ungulates tend to have long gestation periods, smaller litter sizes, and more highly developed newborns. As with many other mammals, species in temperate or polar regions have a fixed mating season, while those in tropical areas breed year-round. They carry out polygynous mating behavior, meaning a male mates with several females and suppresses all competition.  The length of the gestation period varies from four to five months for porcine, deer, and musk deer; six to ten months for hippos, deer, and bovines; ten to thirteen months with camels; and fourteen to fifteen months with giraffes. Most deliver one or two babies, but some pigs can deliver up to ten.  The newborns are precocial (born relatively mature) and come with open eyes and are hairy (with the exception of the hairless hippos). Juvenile deer and pigs have striped or spotted coats; the pattern disappears as they grow older. The juveniles of some species spend their first weeks with their mother in a safe location, where others may be running and following the herd within a few hours or days.  The life expectancy is typically twenty to thirty years; as in many mammals, smaller species often have a shorter lifespan than larger species. The artiodactyls with the longest lifespans are the hippos, cows, and camels, which can live 40 to 50 years.

Predators and parasites.

Artiodactyls have different natural predators depending on their size and habitat. There are several carnivores that would prey on such animals, including as large cats (e.g., lions) and bears. Other predators are crocodiles, wolves, large raptors, and for small species and young animals, large snakes.  Parasites include nematodes, botflies, fleas, lice, or flukes, but they have debilitating effects only when the infestation is severe.

Interactions with humans.

Domestication.

Artiodactyls have been hunted by primitive humans for various reasons: for meat or fur, as well as to use their bones and teeth as weapons or tools. Their domestication began around 8000 BCE. To date, humans have domesticated goats, sheep, cattle, camels, llamas, alpacas, and pigs. Initially, livestock was used primarily for food, but they began being used for work activities around 3000 BCE. Clear evidence exists of antelope being used for food 2 million years ago in the Olduvai Gorge, part of the Great Rift Valley. Cro-Magnons relied heavily on reindeer for food, skins, tools, and weapons; with dropping temperatures and increased reindeer numbers at the end of the Pleistocene, they became the prey of choice. Reindeer remains accounted for 94% of bones and teeth found in a cave above the Céou River that was inhabited around 12,500 years ago.  Today, artiodactyls are kept primarily for their meat, milk, and wool, fur, or hide for clothing. Domestic cattle, the water buffalo, the yak, and camels are used for work, as rides, or as pack animals.

Threats.

The endangerment level of each even-toed ungulate is different. Some species are synanthropic (such as the wild boar) and have spread into areas that they are not indigenous to, either having been brought as farm animals or having run away as people's pets. Some artiodactyls also benefit from the fact that their predators (e.g. the Tasmanian tiger) were severely decimated by ranchers, who saw them as competition.  Conversely, many artiodactyls have declined significantly in numbers, and some have even gone extinct, largely due to over-hunting, and, more recently, habitat destruction. Extinct species include several gazelles (such as the Arabian gazelle), the Malagasy hippopotamus, the bluebuck, and Schomburgk's deer. Two species, the Scimitar-horned oryx and Pere David's deer, are extinct in the wild. Fourteen species are considered critically endangered, including the addax, the kouprey, the Bactrian camel, Przewalski's gazelle, the saiga, and the pygmy hog. Twenty-four species are considered endangered.

The even-toed ungulates (Artiodactyla, ) are ungulates – hoofed animals – which bear weight equally on two (an even number) of their five toes: the third and fourth. The other three toes are either present, absent, vestigial, or pointing posteriorly. By contrast, odd-toed ungulates bear weight on one (an odd number) of the five toes: the third toe. Another difference between the two is that even-toed ungulates digest plant cellulose in one or more stomach chambers rather than in their intestine as the odd-toed ungulates do.

偶蹄目(学名:Artiodactyla)是哺乳动物中的一个目,约220种,其中包括许多对人类生活很重要的动物。偶蹄目动物是现代进步的繁盛的有蹄类,90%的现存有蹄动物都是偶蹄动物。其中又以牛科最为繁盛。除了陆地上的种类,四足已经高度特化的海洋动物鲸豚类也是属于这一演化支。


Etymology.

The name of Sevastopolis was originally chosen in the same etymological trend as other cities in the Crimean peninsula; it was intended to express its ancient Greek origins. It is a compound of the Greek adjective, ("sebastos",'venerable') and the noun ("pólis") ('city'). is the traditional Greek equivalent (Sebastian) of the Roman honorific "Augustus", originally given to the first emperor of the Roman Empire, Augustus and later awarded as a title to his successors.  Despite its Greek origin, the name is not from Ancient Greek times. The city was probably named after Empress ("Augusta") Catherine II of the Russian Empire who founded Sevastopol in 1783. She visited the city in 1787, accompanied by Joseph II, the Emperor of Austria, and other foreign dignitaries.  In the west of the city, there are well-preserved ruins of the ancient Greek port city of Chersonesos, founded in the 5th (or 4th) century BC by settlers from Heraclea Pontica. This name means "peninsula", reflecting its immediate location. It is not related to the ancient Greek name for the Crimean Peninsula as a whole: "Chersonēsos Taurikē" ("the Taurian Peninsula").  The name of the city is spelled as:

History.

In the 6th century BC, a Greek colony was established in the area of the modern-day city. The Greek city of Chersonesus existed for almost two thousand years, first as an independent democracy and later as part of the Bosporan Kingdom. In the 13th and 14th centuries, it was sacked by the Golden Horde several times and was finally totally abandoned. The modern day city of Sevastopol has no connection to the ancient and medieval Greek city, but the ruins are a popular tourist attraction located on the outskirts of the city.

Part of the Russian Empire.

Sevastopol was founded in June 1783 as a base for a naval squadron under the name Akhtiar ("White Cliff"), by Rear Admiral Thomas MacKenzie (Foma Fomich Makenzi), a native Scot in Russian service; soon after Russia annexed the Crimean Khanate. Five years earlier, Alexander Suvorov ordered that earthworks be erected along the harbour and Russian troops be placed there. In February 1784, Catherine the Great ordered Grigory Potemkin to build a fortress there and call it Sevastopol. The realisation of the initial building plans fell to Captain Fyodor Ushakov who in 1788 was named commander of the port and of the Black Sea squadron. It became an important naval base and later a commercial seaport. In 1797, under an edict issued by Emperor Paul I, the military stronghold was again renamed to Akhtiar. Finally, on 29 April (10 May), 1826, the Senate returned the city's name to Sevastopol.  One of the most notable events involving the city is the Siege of Sevastopol (1854–55) carried out by the British, French, Piedmontese, and Turkish troops during the Crimean War, which lasted for 11 months. Despite its efforts, the Russian army had to leave its stronghold and evacuate over a pontoon bridge to the north shore of the inlet. The Russians chose to sink their entire fleet to prevent it from falling into the hands of the enemy and at the same time to block the entrance of the Western ships into the inlet. When the enemy troops entered Sevastopol, they were faced with the ruins of a formerly glorious city.  A panorama of the siege originally was created by Franz Roubaud. After its destruction in 1942 during World War II, it was restored and is currently housed in a specially constructed circular building in the city. It portrays the situation at the height of the siege, on 18 June 1855.

World War II.

During World War II, Sevastopol withstood intensive bombardment by the Germans in 1941–42, supported by their Italian and Romanian allies during the Battle of Sevastopol. German forces used railway artillery—including history's largest-ever calibre railway artillery piece in battle, the 80-cm calibre "Schwerer Gustav"—and specialised mobile heavy mortars to destroy Sevastopol's extremely heavy fortifications, such as the Maxim Gorky Fortresses. After fierce fighting, which lasted for 250 days, the supposedly untakable fortress city finally fell to Axis forces in July 1942. It was intended to be renamed to ""Theoderichshafen"" (in reference to Theoderic the Great and the fact that the Crimea had been home to Germanic Goths until the 18th or 19th century) in the event of a German victory against the Soviet Union, and like the rest of the Crimea was designated for future colonisation by the Third Reich. It was liberated by the Red Army on 9 May 1944 and was awarded the Hero City title a year later.

Sevastopol as part of Ukrainian SSR.

During the Soviet era, Sevastopol became a so-called "closed city". This meant that any non-residents had to apply to the authorities for a temporary permit to visit the city.  On 29 October 1948, the Presidium of Supreme Council of the Russian SFSR issued a "ukase" (order) which confirmed the special status of the city. Soviet academic publications since 1954, including the Great Soviet Encyclopedia, indicated that Sevastopol, Crimean Oblast was part of the Ukrainian SSR ("Great Soviet Encyclopedia" 1976, Vol.23. pp 104).  In 1954, under Nikita Khrushchev, both Sevastopol and the remainder of the Crimean peninsula were administratively transferred from being territories within the Russian SFSR to being territories administered by the Ukrainian SSR. Administratively, Sevastopol was a municipality excluded from the adjacent Crimean Oblast. The territory of the municipality was 863.5 km2 and it was further subdivided into four raions (districts). Besides the City of Sevastopol proper, it also included two towns—Balaklava (having had no status until 1957), Inkerman, urban-type settlement Kacha, and 29 villages.  At the 1955 Ukrainian parliamentary elections on 27 February, Sevastopol was split into two electoral districts, Stalinsky and Korabelny (initially requested three Stalinsky, Korabelny, and Nakhimovsky). Eventually, Sevastopol received two people's deputies of the Ukrainian SSR elected to the Verkhovna Rada A. Korovchenko and M. Kulakov.  In 1957, the town of Balaklava was incorporated into Sevastopol.

After Soviet dissolution.

On 10 July 1993, the Russian parliament passed a resolution declaring Sevastopol to be "a federal Russian city". At the time, many supporters of the president, Boris Yeltsin, had ceased taking part in the Parliament's work. On 20 July 1993 the United Nations Security Council denounced the decision of the Russia parliament. According to Anatoliy Zlenko, it was for the first time that the council had to review actions and come up with qualification of them for a legislative body.  On 14 April 1993, the Presidium of the Crimean Parliament called for the creation of the presidential post of the Crimean Republic. A week later, the Russian deputy, Valentin Agafonov, stated that Russia was ready to supervise the referendum on Crimean independence and include the republic as a separate entity in the CIS. On 28 July 1993, one of the leaders of the Russian Society of Crimea, Viktor Prusakov, stated that his organisation was ready for an armed mutiny and establishment of the Russian administration in Sevastopol.  In September, the commander of the joint Russian-Ukrainian Black Sea Fleet,, accused Ukraine of converting some of his fleet and conducting an armed assault on his personnel, and threatened to take countermeasures of placing the fleet on alert. (In June 1992, the Russian president Boris Yeltsin and the Ukrainian president Leonid Kravchuk had agreed to divide the former-Soviet Black Sea Fleet between Russia and Ukraine. Eduard Baltin had been appointed commander of the Black Sea Fleet by Yeltsin and Kravchuk on 15 January 1993.)  In May 1997, Russia and Ukraine signed the Peace and Friendship Treaty, ruling out Moscow's territorial claims to Ukraine. A separate agreement established the terms of a long-term lease of land, facilities, and resources in Sevastopol and the Crimea by Russia. The ex-Soviet Black Sea Fleet and its facilities were divided between Russia's Black Sea Fleet and the Ukrainian Naval Forces. The two navies co-used some of the city's harbours and piers, while others were demilitarised or used by either country. Sevastopol remained the location of the Russian Black Sea Fleet headquarters with the Ukrainian Naval Forces Headquarters also in the city. A judicial row periodically continued over the naval hydrographic infrastructure both in Sevastopol and on the Crimean coast (especially lighthouses historically maintained by the Soviet or Russian Navy and also used for civil navigation support).  As in the rest of the Crimea, Russian remained the predominant language of the city, although following the independence of Ukraine there were some attempts at Ukrainisation with very little success. The Russian society in general and even some outspoken government representatives never accepted the loss of Sevastopol and tended to regard it as temporarily separated from the homeland.  In July 2009, the chairman of the Sevastopol city council, Valeriy Saratov (Party of Regions) stated that Ukraine should increase the amount of compensation it is paying to the city of Sevastopol for hosting the foreign Russian Black Sea Fleet, instead of requesting such obligations from the Russian government and the Russian Ministry of Defense in particular.  On 27 April 2010, Russia and Ukraine ratified the Russian Ukrainian Naval Base for Gas treaty, extending the Russian Navy's lease of Crimean facilities for 25 years after 2017 (through 2042) with an option to prolong the lease in 5-year extensions. The ratification process in the Ukrainian parliament encountered stiff opposition and erupted into a brawl in the parliament chamber. Eventually, the treaty was ratified by a 52% majority vote—236 of 450. The Russian Duma ratified the treaty by a 98% majority (without incident).  Sevastopol was annexed by Russia in 2014 with the rest of Crimea and since then has been administered as the federal city of Sevastopol.

Geography.

The city of Sevastopol is located at the southwestern tip of the Crimean peninsula in a headland known as Heracles peninsula on a coast of the Black Sea. The city is designated a special city-region of Ukraine which besides the city itself includes several of its outlying settlements. The city itself is concentrated mostly at the western portion of the region and around the long Bay of Sevastopol. This bay is a ria, a river canyon drowned by Holocene sea-level rise, and the outlet of Chorna River. Away in a remote location southeast of Sevastopol is located the former city of Balaklava (since 1957 incorporated within Sevastopol), the bay of which in Soviet times served as a main port for the Soviet diesel-powered submarines.  The coastline of the region is mostly rocky, in a series of smaller bays, a great number of which are located within the Bay of Sevastopol. The biggest of them are the Southern Bay (within Bay of Sevastopol), the Archer Bay, a gulf complex that consists of the Deergrass Bay, the Bay of Cossack, the Salty Bay, and many others. There are over thirty bays in the immediate region.  Through the region flow three rivers: the Belbek, Chorna, and Kacha. All three mountain chains of Crimean mountains are represented in Sevastopol, the southern chain by the Balaklava Highlands, the inner chain by the Mekenziev Mountains, and the outer chain by the Kara-Tau Upland (Black Mountain).

Climate.

Sevastopol has a humid subtropical climate (Köppen climate classification: "Cfa"), due to summer mean straddling that is bordering on a four-season oceanic climate, with cool winters and warm to hot summers.  The average yearly temperature is during the day and around at night. In the coldest months, January and February, the average temperature is during the day and around at night. In the warmest months, July and August, the average temperature is around during the day and around at night. Generally, summer/holiday season lasts 5 months, from around mid-May and into September, with the temperature often reaching or more in the first half of October.  The average annual temperature of the sea is, ranging from in February to in August. From June to September, the average sea temperature is greater than. In the second half of May and first half of October; the average sea temperature is about. The average rainfall is about per year. There are about 2,345 hours of sunshine duration per year.

Politics and government.

On 18 March 2014, the Kremlin announced that Sevastopol would become the third federal city in the Russian Federation, the two others being Moscow and St. Petersburg.

City State Administration.

The executive power of Sevastopol is exercised by the Sevastopol City State Administration led by a chairman. Since April 2014 the executive power is held by the Government of Sevastopol, led by the City Governor.

Legislature.

Before 2014, the Sevastopol City Council was the legislature of Sevastopol and the mayor of Sevastopol was appointed by the Ukrainian central government. However, during the 2014 Crimean crisis, the pro-Russian City Council threw its support behind Russian citizen Alexei Chaly as the "people's mayor" and said it would not recognise orders from Kiev.  After the Accession of Crimea to the Russian Federation, the Legislative Assembly of Sevastopol replaced the City Council and the mayor is appointed by the legislative branch on the nomination of the Russian President, and officially the mayor is called the Governor of Sevastopol City.

Administrative and municipal divisions.

Sevastopol is administratively divided into four districts. Within the Russian municipal framework, the territory of the federal city of Sevastopol is divided into nine municipal okrugs and the Town of Inkerman. While individual municipal divisions are contained within the borders of the administrative districts, they are not otherwise related to the administrative districts.

Economy.

Apart from navy-related civil facilities, Sevastopol hosts some other notable industries. An example is Stroitel, one of the leading plastic manufacturers in Russia.  The city received millions of US Dollars in compensation for hosting the Russian Black Sea Fleet from the Russian and the Ukrainian government.

Infrastructure.

There are seven types of transport in Sevastopol:  Sevastopol Shipyard comprises three facilities that together repair, modernise, and re-equip Russian Naval ships and submarines. The Sevastopol International Airport is used as a military aerodrome at the moment and being reconstructed to be used by international airlines.  Sevastopol maintains a large port facility in the Bay of Sevastopol and in smaller bays around the Heracles peninsula. The port handles traffic from passengers (local transportation and cruise), cargo, and commercial fishing. The port infrastructure is fully integrated with the city of Sevastopol and naval bases of the Black Sea Fleet.

Tourism.

After World War II, Sevastopol was entirely rebuilt. Many top architects and civil engineers from Moscow, Leningrad, Kiev and other cities and thousands of workers from all parts of the USSR took part in the rebuilding process which was mostly finished by the mid-1950s. The downtown core situated on a peninsula between two narrow inlets, South Bay and Artillery Bay, features mostly Mediterranean-style, three-story residential buildings with columned balconies and Venetian-style arches, with retail and commercial spaces occupying the ground level. Some carefully restored landmarks date back to the early 20th century (e.g., the Art Nouveau Main Post Office on Bolshaya Morskaya St and the Art Museum on Nakhimovsky Prospect). It has been a long-time tradition for the residents of surrounding suburbs to spend summer evenings by coming to the downtown area for a leisurely stroll with their families along the avenues and boulevards encircling the Central Hill, under the Sevastopol chestnut trees, and usually ending up on the waterfront with its Marine Boulevard.  Due to its military history, most streets in the city are named after Russian and Soviet military heroes. There are hundreds of monuments and plaques in various parts of Sevastopol commemorating its military past.  Attractions include:

Demographics.

The population of Sevastopol proper is 443,211 (01.01.19), making it the largest in the Crimean Peninsula. The city's agglomeration has about 600,000 people (2015). According to the Ukrainian National Census, 2001, the ethnic groups of Sevastopol include Russians (71.6%), Ukrainians (22.4%), Belarusians (1.6%), Tatars (0.7%), Crimean Tatars (0.5%), Armenians (0.3%), Jews (0.3%), Moldovans (0.2%), and Azerbaijanis (0.2%).

Culture.

There are many historical buildings in the central and eastern parts of the city and Balaklava, some of which are architectural monuments. The Western districts have modern architecture. More recently, numerous skyscrapers have been built. Balaklava Bayfront Plaza (on hold), currently under construction, will be one of the tallest buildings in Ukraine, at with 43 floors.  After the 2014 Russian annexation of Crimea the city's monument to Petro Konashevych-Sahaidachny was removed and handed over to Kharkiv.

Sevastopol (Ukrainian, Russian: Севастополь; ) is the largest city on the Crimean Peninsula and a major Black Sea port. Since annexing Crimea in 2014, the Russian Federation has administered Sevastopol as a federal city. Nevertheless, Ukraine and most of the UN member countries continue to regard Sevastopol as a city with special status within Ukraine. The population is made up of mostly Russians with small numbers of Ukrainians and Tatars.

塞瓦斯托波尔(;,),位于克里米亚半岛西南岸的港湾都市,面对黑海,是半岛上的重要港口城市。