Haxe

Haxe
ParadigmMulti-paradigm: object-oriented, functional, generic
FamilyECMAScript
DeveloperHaxe Foundation
First appearedNovember 14, 2005; 19 years ago (2005-11-14)
Stable release
4.3.6[1] Edit this on Wikidata / 7 August 2024; 3 months ago (7 August 2024)
Typing disciplinestatic, dynamic via annotations, nominal
Scopelexical
Implementation languageOCaml
PlatformIA-32, x86-64, AArch64, armel, armhf, MIPS, MIPS64el, MIPSel, ppc64el, RISC-V, s390x
OSAndroid, iOS; Linux, macOS, Windows
LicenseGPL 2.0, library: MIT
Filename extensions.hx, .hxml
Websitehaxe.org Edit this at Wikidata
Influenced by
ECMAScript, JavaScript, ActionScript, OCaml, Java, C++, PHP, C#, Python, Lua, NekoVM

Haxe is a high-level cross-platform programming language and compiler that can produce applications and source code for many different computing platforms from one code-base. It is free and open-source software, released under an MIT License.[2] The compiler, written in OCaml, is released under the GNU General Public License (GPL) version 2.

Haxe includes a set of features and a standard library[3] supported across all platforms, including numeric data types, strings, arrays, maps, binary, reflective programming, maths, Hypertext Transfer Protocol (HTTP), file system and common file formats. Haxe also includes platform-specific application programming interfaces (APIs) for each compiler target.[4] Kha, OpenFL, and Heaps.io are popular Haxe frameworks that enable creating multi-platform content from one codebase.[5]

Haxe originated with the idea of supporting client-side and server-side programming in one language, and simplifying the communication logic between them.[6] Code written in Haxe can be compiled into JavaScript, C++, Java, JVM, PHP, C#, Python, Lua[7] and Node.js.[8] Haxe can also directly compile SWF, HashLink, and NekoVM bytecode and also runs in interpreted mode.[9]

Haxe supports externs (definition files) that can contain data type information of extant libraries to describe target-specific interaction in a type-safe manner, like C++ header files can describe the structure of existing object files. This enables to use the values defined in the files as if they were statically typed Haxe entities. Beside externs, other solutions exist to access each platform's native capabilities.

Many popular IDEs and source code editors have support available for Haxe development.[10] No particular development environment or tool set is officially recommended by the Haxe Foundation, although VS Code, IntelliJ IDEA and HaxeDevelop have the most support for Haxe development. The core functionalities of syntax highlighting, code completion, refactoring, debugging, etc. are available to various degrees.

History

Development of Haxe began in October 2005. The first alpha version was released on November 14, 2005.[11][12] Haxe 1.0 was released in April 2006, with support for Adobe Flash, JavaScript, and NekoVM programs. Support for PHP was added in 2008, and C++ was added in 2009. More platforms such as C# and Java were added with a compiler overhaul in 2012.

Haxe was developed by Nicolas Cannasse and other contributors, and was originally named haXe[13] because it was short, simple, and "has an X inside", which the author asserts humorously is needed to make any new technology a success.[14]

Haxe is the successor to the open-source ActionScript 2 compiler MTASC,[15] also built by Nicolas Cannasse and is released under the GNU General Public License version 2 or later.

Compiler

The Haxe language can compile into bytecode that can be executed directly by the virtual machines it targets. It can compile to source code in C++, JavaScript, PHP, C#, Java, Python, and Lua. Haxe also has an interpreter called eval.[16] This same interpreter is also used compile-time to run macros, which allow modification of the abstract syntax tree (AST).

This strategy of compiling to multiple source code languages is inspired by the write once, run anywhere paradigm. It also allows the programmer to choose the best platform for the job. Typical Haxe programs run identically on all platforms, but developers can specify platform-specific code and use conditional compilation to prevent it from compiling on other platforms.

The Haxe compiler is an optimizing compiler, and uses field and function inlining, tail recursion elimination, constant folding, loop unrolling and dead code elimination (DCE) to optimize the run-time performance of compiled programs.[17] The Haxe compiler offers opt-in null-safety, it checks compile-time for nullable values.

Targets

In Haxe, supported platforms are known as "targets", which consist of the following modules:

  • The compiler-backends that are responsible for generating the respective code.
  • The run-time specific APIs that go beyond the core language support (platform-targets).

The following table documents platform and language support in Haxe. The Haxe language allows developers to gain access to many platform features, but Haxe is not a full featured engine, they might need frameworks that enable create content for certain platforms.

Haxe compiler targets[9]
Name Tier Output Platform Use Since Haxe version
Neko 3 byte code NekoVM Server, desktop, CLI 2005 (alpha)
Flash/SWF 3 byte code Flash: AVM2, Flash Player 9+, AIR Desktop, browser, server 2005 (alpha)
JavaScript 1 source JavaScript: HTML5, NodeJS, PhoneGap Server, desktop, browser, mobile 2006 (beta)
ActionScript source ActionScript 3: AIR, Flex, Royale Server, desktop, browser, mobile 2007 (1.12), removed since 2019 (4.0)
PHP 1 source PHP: Zend Engine Server 2008 (2.0) PHP 5; PHP 7 since 2019 (4.0)
C++ 2 source C++: Windows, Linux, macOS, Android, iOS, Palm, WebOS Server, desktop, Mobile, CLI, game consoles 2009 (2.04); cppia added in 2014 (3.2)
C# 3 source C#: .NET framework, .NET Core, Mono Server, desktop, mobile 2012 (2.10)
Java 3 source Java: Java OpenJDK Server, desktop 2012 (2.10)
Python 3 source Python CLI, web, desktop 2014 (3.2)
Lua 2 source Lua CLI, web, desktop, mobile 2016 (3.3)
HashLink 1 byte code HashLink VM or HL/C (compile to C file) Server, desktop, mobile, game consoles (C export) 2016 (3.4)
JVM 1 bytecode JVM: HotSpot, OpenJ9 Server, desktop 2019 (4.0)
Eval 1 interpreter Haxe interpreter Prototyping, scripting 2019 (4.0)

Advantages

  • Ability to target multiple platforms and devices using the same language
  • Ability to use strictly-typed code
  • Ability to use macros (syntax transformation) which can be done with Haxe language[18]
  • Added language features such as extension methods and functional programming
  • The run-time performance of Haxe programs is at comparable speed to handwritten sources.[19]

Language

Haxe is a general-purpose programming language supporting object-oriented programming, generic programming, and various functional programming constructs. Features such as iterations, exceptions, and reflective programming (code reflection) are also built-in functions of the language and libraries. Unusual among programming languages, Haxe contains a type system which is both strong and dynamic. The compiler will check types implicitly via type inference and give compile-time errors, but it also enables programs to bypass type-checking and rely on a target platform's dynamic type-handling. All of the native target APIs can be used.

Type system

Haxe has a sophisticated and flexible type system. The type kinds it offers are classes, interfaces, function-method types, anonymous types, algebraic data types (called enum in Haxe), and abstract types. Parametric polymorphism is possible with classes, algebraic types and function types, giving the language support for generic programming based on type erasure. This includes support for variance in polymorphic functions, although not in type constructors.

The type system is static unless annotations for dynamic typing are present, for use with targets that support them. Type checking follows nominal typing with the exception of anonymous types where structural typing is used instead. Finally, type inference is supported, allowing for variable declarations without type annotations.

Modules and namespaces

All Haxe code is organized in modules, which are addressed using paths. In essence, each .hx file represents a module which may contain several types. For example, to create the type A in the package my.pack as shown, the folder structure should be my\pack and the file could be A.hx in the folder pack.

 // file my/pack/A.hx
package my.pack;

class A {}

In other modules, other types can be imported by putting import statements below the package definition, e.g. import my.pack.A;

A module can contain multiple types, such as the following. It is possible to import one type at a time from that module, using import my.pack2.A;. A type may be private, in which case only its containing module can access it.

package my.pack2;

typedef A = {a:String}
private typedef B = {b:String}

Classes

Classes (keyword class) in Haxe are similar to those in Java or TypeScript. Their fields can be either methods, variables, or properties, each static or per instance respectively. Haxe supports the accessors public and private, and more advanced methods for access control that are denoted using annotations. Methods and static constant variables can be inlined using the keyword inline. Fields can be marked as final to declare a constant that must be initialized immediately or in the constructor and cannot be written to, in case of function final will mark as non-overridable in subclasses.

Interfaces in Haxe are very similar to those in, for example, Java.

interface ICreature {
    public var birth:Date;
    public var name:String;

    public function age():Int;
}

class Fly implements ICreature {
    public var birth:Date;
    public var name:String;
	
    public function age():Int return Date.now().getFullYear() - birth.getFullYear();
}

Generics

Haxe supports generic programming. The following is an example of the identity function.

function identity<T>(arg:T):T {
	return arg;
}

Enumerated types

Enumerated types are an important feature of the language; they can have type parameters and be recursive.[20] They provide basic support for algebraic data types, allowing the inclusion of product types, in a fashion similar to Haskell and ML. A switch expression can apply pattern matching to an enum value, allowing for elegant solutions to complex programming problems:

enum Color {
	red;
	green;
	blue;
	rgb(r:Int, g:Int, b:Int);
}

class Colors {
	static function toInt(c:Color):Int {
		return switch (c) {
			case red: 0xFF0000;
			case green: 0x00FF00;
			case blue: 0x0000FF;
			case rgb(r, g, b): (r << 16) | (g << 8) | b;
		}
	}

	static function validCalls() {
		var redint = toInt(Color.red);
		var rgbint = toInt(Color.rgb(100, 100, 100));
	}
}

Examples of parametric enum types are the Haxe standard library types Option[21] and Either:[22]

enum Option<T> {
    Some(v:T);
    None;
}

enum Either<L, R> {
    Left(v:L);
    Right(v:R);
}

Haxe also supports generalized algebraic data types (GADTs).[23][24]

Anonymous types

Anonymous types are defined by denoting their structure explicitly, using a syntax that follows the mathematical record-based representation of a type. They can be used to implement structural typing for function arguments (see below), and can be given an alias with the keyword typedef:

typedef AliasForAnon = { a:Int, b:String, c:Float->Void };

Function types

Functions are first-class values in Haxe. Their type is denoted by using arrows between argument types, and between the argument type(s) and return type, as common in many functional languages. However, unlike in prominent examples like Haskell or the ML language family, not all functions are unary functions (functions with one argument only), and in Haxe, functions can't be partially applied per default. Thus, the following type signatures have different semantics than in the aforementioned languages. The type F1 is a function that takes a String as arguments and returns a value of type Float.

Types F1 and F2 denote the same type, except that F2 uses labelled parameter, which is useful for completion and documentation.

Types F4 and F5 denote the same type. Both are binary functions that return a binary function of type F3. For F5 the syntax to declare a function type within a function type is used.

typedef F1 = String -> Float;
typedef F2 = (text:String) -> Float;

typedef F3 = (score:Int, text:String) -> Float;
typedef F4 = (score:Int, text:String) -> F3;
typedef F5 = (score:Int, text:String) -> ((score:Int, text:String) -> Float);

Anonymous functions

In Haxe, anonymous functions are called lambda, and use the syntax function(argument-list) expression; .

var f = function(x) return x*x;
f(8); // 64

(function(x,y) return x+y)(5,6); // 11

Abstract types

A relatively new addition to the Haxe type system is a concept termed abstract types. As used in Haxe, this refers to something different from a conventional abstract type. They are used to make conversions between types implicit, allowing reuse of existing types for specific purposes, like implementing types for units of measurement. This greatly reduces the risk of mixing up values of the same underlying type, but with different meanings (e.g., miles vs. km).

The following example assumes that the metric system is the default, while a conversion to miles is needed for legacy data. Haxe can automatically convert miles to kilometers, but not the reverse.

abstract Kilometer(Float) {
    public function new(v:Float) this = v;
}
 
abstract Mile(Float) {
    public function new(v:Float) this = v;
    @:to public inline function toKilometer():Kilometer return (new Kilometer (this / 0.62137));
}
 
class Test {
  static var km:Kilometer;
  static function main(){
    var one100Miles = new Mile(100);
    km = one100Miles;
 
    trace(km); // 160.935
  }
}

As the example shows, no explicit conversion is needed for the assignment "km = one100Miles;" to do the right thing.

Abstract types are entirely a compile-time feature of Haxe and do not exist at all at program runtime. As an example, both variables using abstract types above Mile and Kilometer will be of the type Float at runtime.[25]

Structural typing

In many functional programming languages, structural typing plays a major role. Haxe employs it in the presence of anonymous types, using the nominative typing of object-oriented programming, when only named types are involved. Anonymous types in Haxe are analogous to the implicit interfaces of the language Go as to typing. In contrast with Go interfaces, it is possible to construct a value using an anonymous type.

class FooBar {
	public var foo:Int;
	public var bar:String;

	public function new() {
		foo = 1;
		bar = "2";
	}

	function anyFooBar(v:{foo:Int, bar:String})
		trace(v.foo);

	static function test() {
		var fb = new FooBar();
		fb.anyFooBar(fb);
		fb.anyFooBar({foo: 123, bar: "456"});
	}
}

Internal architecture

Compiler

The Haxe compiler is divided into one frontend and multiple backends. The frontend creates an abstract syntax tree (AST) from the source code, and performs type checking, macro expansion, and optimization on the AST. The various backends translate the processed AST into source code or generate bytecode, depending on their target.

The compiler is written in OCaml. It can be run in server-mode to provide code completion for integrated development environments (IDEs) and maintain a cache, to further speed compiling.[26]

See also

References

  1. ^ "Release 4.3.6". 7 August 2024. Retrieved 22 August 2024.
  2. ^ "Open Source licence Haxe".
  3. ^ Introduction to the Haxe Standard Library, Haxe Docs
  4. ^ Target Specific APIs, Introduction to the Haxe Standard Library, Haxe Docs
  5. ^ Doucet, Lars (2014-06-24). "Dear Adobe: Support Haxe, save your Tools". Gamasutra.
  6. ^ "Haxe Interview". Io Programmo. 2009-04-01. pp. 1–6. Archived from the original on 2015-12-08. Retrieved 2015-08-06.
  7. ^ "Hello Lua!". Haxe.org.
  8. ^ "hxnodejs".
  9. ^ a b "Compiler Targets". Haxe. Retrieved 2021-11-05.
  10. ^ List of IDEs supporting Haxe, Haxe Foundation
  11. ^ "Release alpha-1". haxe. HaxeFoundation. 2005-11-14. Retrieved 2022-04-02 – via GitHub.
  12. ^ Cannasse, Nicolas (2005-11-17). "Haxe Alpha 1b". haXe (Mailing list). Archived from the original on 2007-10-26.
  13. ^ "Nicolas' announcement of spelling change on Haxe official mail list".
  14. ^ "Haxe mailing list post on naming". Archived from the original on 2007-03-28.
  15. ^ MTASC Compiler, MTASC website
  16. ^ "Eval - The new Haxe macro interpreter".
  17. ^ "Compiler Features".
  18. ^ "Macros in Haxe".
  19. ^ Dyachenko, Vadim (2013-12-05). "On "You can't make good HTML5 games in Haxe"". Yellow After Life.
  20. ^ "Haxe reference detailing the use of enum". Archived from the original on 2012-05-11.
  21. ^ "haxe/Option.hx at development · HaxeFoundation/haxe". Github. 7 November 2021.
  22. ^ "haxe/Either.hx at development · HaxeFoundation/haxe". Github. 7 November 2021.
  23. ^ "Language Features". Haxe - The Cross-platform Toolkit. Haxe Foundation. Retrieved 30 April 2015.
  24. ^ "haxe/TestGADT.hx at development · HaxeFoundation/haxe". Github. 7 November 2021.
  25. ^ "Abstract". Haxe - The Cross-platform Toolkit. Retrieved 2023-04-24.
  26. ^ Server mode command-line: haxe --wait [host:]port

Read other articles:

Michael Fabbri Informazioni personali Arbitro di Calcio Sezione Ravenna Professione Impiegato Attività nazionale Anni Campionato Ruolo 2009-20122012-20152015-20202020- Lega ProSerie BSerie ASerie A e B ArbitroArbitroArbitroArbitro Attività internazionale 2019-20232021 UEFA e FIFAUEFA e FIFA ArbitroVAR Esordio Spagna U19-Slovenia U19 1-1 20 marzo 2019 Michael Fabbri (Ravenna, 8 dicembre 1983) è un arbitro di calcio italiano. Carriera Appartiene alla sezione AIA di Ravenna. Arbitro effettiv...

 

 

Study of the methods of historians Study of history redirects here. For the book by Toynbee, see A Study of History. Historical school redirects here. For the approach to economics, see Historical school of economics. For the movement in jurisprudence, see German Historical School. The Allegory On the Writing of History shows Truth watching the historian write history, while advised by Wisdom. (Jacob de Wit,1754) Historiography is the study of the methods of historians in developing history a...

 

 

2020 Paralympic sporting event Paratriathlonat the XVI Paralympic GamesParatriathlon pictogram of the 2020 Summer ParalympicsVenueOdaiba Marine ParkDates28 to 29 August 2021Competitors80 in 8 events←20162024→ Triathlon at the2020 Summer ParalympicsPTS2womenPTS4menPTS5menwomenPTVImenwomenPTWCmenwomenvte Paratriathlon at the 2020 Summer Paralympics in Tokyo, Japan, took place at the Odaiba Marine Park. It was the second time that paratriathlon was scheduled in the Paralympics.[1] Ei...

Questa voce o sezione sull'argomento competizioni calcistiche non è ancora formattata secondo gli standard. Commento: La pagina è tutta da correggere secondo il nuovo modello di voce presente nella pagina Wikipedia:Modello di voce/Stagione di una divisione di un campionato di calcio. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Voce principale: Prima Categoria 1959-1960. Prima Categoria Calabria 1959-1960 Competizion...

 

 

Questa voce sull'argomento politici italiani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Costante Degan Ministro della saluteDurata mandato4 agosto 1983 –1º agosto 1986 Capo del governoBettino Craxi PredecessoreRenato Altissimo SuccessoreCarlo Donat-Cattin Ministro della marina mercantileDurata mandato1º agosto 1986 –28 luglio 1987 Capo del governoBettino CraxiAmin...

 

 

Japanese food box Mid-19th century jūbako by Shibata Zeshin, housed at the Metropolitan Museum of Art of New York Jūbako (重箱, lit. tiered boxes) are tiered boxes used to hold and present food in Japan.[1] The boxes are often used to hold osechi, foods traditional to the Japanese New Year,[2] or to hold takeaway lunches, or bento. A sagejū (提重, lit. portable jūbako) or sagejūbako (提げ重箱), is a picnic set of jūbako in a carrier with handle.[3] There ...

Collection of music publishers and songwriters in New York City For the film, see Tin Pan Alley (film). For the band, see Tin Pan Alley (band). For the play, see The Tin Pan Alley Rag. Buildings of Tin Pan Alley, 1910[1]The same buildings, 2011 Tin Pan Alley was a collection of music publishers and songwriters in New York City that dominated the popular music of the United States in the late 19th and early 20th centuries. Originally, it referred to a specific location on West 28th Str...

 

 

Arts venue in Brighton, England Brighton DomeChurch Street facade (2013)LocationBrighton, EnglandCoordinates50°49′24″N 0°08′18″W / 50.8234°N 0.1384°W / 50.8234; -0.1384OwnerBrighton & Hove City CouncilDesignationGrade ICapacity1,700 seats (2002–present)2,100 seats (1935–1999)2,500 seats (1867–1934)ConstructionOpened24 June 1867Renovated1934–1935, 1999–2002Expanded1935Reopened18 March 2002ArchitectRobert Atkinson (1934–1935)Websitebrightondo...

 

 

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: コルク – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年4月) コルクを打ち抜いて作った瓶の栓 コルク(木栓、�...

DctP component of Tripartite ATP-independent periplasmic transporterIdentifiersSymbolDctPPfamPF03480Pfam clanCL0177InterProIPR018389TCDB2.A.56Available protein structures:Pfam  structures / ECOD  PDBRCSB PDB; PDBe; PDBjPDBsumstructure summary DctQ component of Tripartite ATP-independent periplasmic transporterIdentifiersSymbolDctQPfamPF04290InterProIPR007387TCDB2.A.56Available protein structures:Pfam  structures / ECOD  PDBRCSB PDB; PDBe; PDBjPDBsumstructure summaryDctM-li...

 

 

Pour les articles homonymes, voir Locmaria (homonymie). Locmaria-Berrien Le bourg et, à l'arrière-plan, l'église paroissiale. Administration Pays France Région Bretagne Département Finistère Arrondissement Châteaulin Intercommunalité Monts d'Arrée Communauté Maire délégué Mandat Alain Le Cam 2019-2020 Code postal 29690 Code commune 29129 Démographie Gentilé Locberriennois Population 239 hab. (2016 ) Densité 14 hab./km2 Géographie Coordonnées 48° 21′ n...

 

 

温贝托·德·阿连卡尔·卡斯特洛·布兰科Humberto de Alencar Castelo Branco第26任巴西總統任期1964年4月15日—1967年3月15日副总统若澤·馬利亞·奥克明前任拉涅里·馬齐利继任阿图尔·达科斯塔·伊·席尔瓦 个人资料出生(1897-09-20)1897年9月20日 巴西塞阿腊州福塔雷萨逝世1967年7月18日(1967歲—07—18)(69歲) 巴西塞阿腊州梅塞雅納墓地 巴西福塔雷薩卡斯特洛·布兰科陵寢[1]...

ملعب شابان-دلماسمعلومات عامةأسماء سابقة بارك ليسكيورسمّي باسم جاك شابان دلماس العنوان Place Johnston, F-33000 Bordeaux (بالفرنسية) المنطقة الإدارية بوردو[1] البلد  فرنسا[2] التشييد والافتتاحالافتتاح 12 يونيو 1938الافتتاح الرسمي 12 يونيو 1938[3] المهندس المعماري رينيه بوثو ، جاك ...

 

 

سينترال إلجين   الإحداثيات 42°46′00″N 81°06′00″W / 42.7667°N 81.1°W / 42.7667; -81.1   [1] تاريخ التأسيس 1822  تقسيم إداري  البلد كندا[2]  معلومات أخرى رمز جيونيمز 5919096  الموقع الرسمي الموقع الرسمي  تعديل مصدري - تعديل   سينترال إلجين، أونتاريو (بالإنجليزي�...

 

 

Bangsa TokhariaDermawan Tokharia, fresko abad ke-6 M dari Gua KizilDaerah dengan populasi signifikanBahasaBahasa TokhariaAgamaBuddhisme dan ManiismeKelompok etnik terkaitBangsa India-Eropa lainnya, bangsa India-Iran, suku Yuezhi, bangsa Kushan Bangsa Tokharia adalah bangsa penghuni negara-negara kota oasis di ujung utara Cekungan Tarim (Xinjiang, Tiongkok modern). Mereka menuturkan bahasa Tokharia, cabang dari rumpun bahasa India-Eropa dan diketahui dari manuskrip dari abad ke-6 hingga ke-8 M...

باسيل بولتن معلومات شخصية الميلاد 6 مارس 1938   كونسورت  الوفاة 3 يناير 2008 (69 سنة)   إيسكويمالت، كولومبيا البريطانية  مواطنة كندا  الحياة العملية المدرسة الأم جامعة كولومبيا البريطانية  المهنة طبيب  تعديل مصدري - تعديل   باسيل بولتن هو طبيب كندي، ولد في 6 مار...

 

 

U.S. Navy facility for development of naval aviation training and tactics NAWDC logo The Naval Aviation Warfighting Development Center (NAWDC, pronounced NAW-DIK) was formerly known as the Naval Strike and Air Warfare Center (NSAWC, pronounced EN-SOCK) at Naval Air Station Fallon located in the city of Fallon in western Nevada. It is the center of excellence for naval aviation training and tactics development. NAWDC provides service to aircrews, squadrons and air wings throughout the United S...

 

 

Italo-argentiniÍtalo-argentinosComunità italiana durante la sfilata di apertura del trentaquattresimo Festival Nazionale dell'Immigrato. Luogo d'origine Italia PopolazioneCirca 25 000 000[1][2] · Più di 1 000 000 cittadini italiani[3][4] Linguaitaliano, lingue locali d'Italia (arbëresh), spagnolo Religionecattolicesimo di rito latino(Minoranza: cattolici di rito bizantino) Distribuzione  ArgentinaAlmeno 25.000.0...

Specimen RidgeNorth face Specimen Ridge from Lamar ValleyHighest pointElevation8,379 ft (2,554 m)[1]Coordinates44°52′13″N 110°17′48″W / 44.87028°N 110.29667°W / 44.87028; -110.29667 (Specimen Ridge)[1]GeographyLocationYellowstone National Park, Park County, Wyoming, U.S.Parent rangeWashburn RangeTopo mapAmethyst Mountain Specimen Ridge, el. 8,379 feet (2,554 m) is an approximately 8.5-mile (13.7 km) ridge alo...

 

 

Opera company in Toledo, Ohio, United StatesToledo OperaThe Valentine Theatre, home of the Toledo OperaFormation1959; 65 years ago (1959)TypeNonprofitHeadquartersToledo, OhioExecutive DirectorSuzanne RorickRevenue (2019) $1.3 m USDWebsitetoledoopera.org The Toledo Opera is an American opera company in Toledo, Ohio, performing in the Valentine Theatre in downtown Toledo. The company's season consists of three fully-realized operas, plus additional community programming for t...