Nemerle | |
---|---|
Sémantika | multiparadigma , objektově orientovaný , funkční , imperativní |
Jazyková třída | programovací jazyk , procedurální programovací jazyk , objektově orientovaný programovací jazyk , funkcionální programovací jazyk , multiparadigmatický programovací jazyk a jazyk využívající odsazení [d] |
Typ provedení | sestaven |
Objevil se v | 0.9.3 - 16. května 2006 |
Autor | Vratislavská univerzita ; Michal Moskal , Kamil Skalski , Pavel Olshta a další [1] |
Vývojář | proudové mozky |
Přípona souboru | .n |
Uvolnění | 1.2.547.0 (09.01.2017) |
Typový systém | statický , přísný , auto-infer , nominální |
Byl ovlivněn | C# , ML , OCaml , Haskell , Lisp |
Licence | Ustanovení BSD-2 |
webová stránka | nemerle.org/About/ |
Plošina | CLI (.NET/Mono) |
Nemerle je hybridní vysokoúrovňový jazyk se statickým typováním , který kombinuje vlastnosti funkčního a objektově orientovaného programování pro platformy .NET a Mono (jazyk je kompilován do CIL a je kompatibilní s CLS ). Hlavním rysem jazyka je vyvinutý systém metaprogramování .
Vývoj jazyka Nemerle začal v roce 2003 na univerzitě ve Wroclawi ( Polsko ). Vývojový tým se skládal pouze ze tří lidí, z nichž všichni byli v době zahájení vývoje postgraduálními studenty univerzity ve Wroclawi. Michal Moskal je vedoucí týmu a autor systému odvození typů, Kamil Skalski je vývojář systému maker a rozšiřitelného parseru a Pavel Olshta je autorem generátoru kódu a implementace mechanismu porovnávání vzorů.
Název jazyka pochází od kouzelníka Nemmerleho z Čaroděje ze Zeměmořského moře od Ursuly Le Guinové .
Jazyk byl původně navržen pro platformu .NET. 12. března 2010 byla vydána první beta verze jazykového kompilátoru pro podporu aplikací běžících na .NET 3.5. Jazyk, jeho implementace a dokumentace jsou vydány pod bezplatnou licencí podobnou BSD, která umožňuje bezplatné použití pro jakýkoli účel.
První verze (verze 1.0) programovacího kitu Nemerle byla vydána 13. května 2011, v současnosti je nejnovější verze 1.2 běžící na platformě .NET 4.0. Sada, která je k dispozici ke stažení zdarma, obsahuje instalovatelný jazykový kompilátor a sadu knihoven pro vložení do Microsoft Visual Studio 2008, samostatný kompilátor (pro práci bez Visual Studia), experimentální verzi softwaru, která se integruje s Visual Studio 2010, a zdrojové kódy. Aktuální verze kompilátoru podporuje zahrnutí kódu C# 6.0 do projektu, pokud nepoužívá nebezpečný kód.
Od června 2012 se vývojový tým Nemerle stal součástí společnosti JetBrains , která bude jazyk dále rozvíjet a udržovat. [jeden]
Nemerle je umístěn jako univerzální jazyk. Kombinuje několik programovacích paradigmat : objektově orientované programování , imperativní programování , funkcionální programování a metaprogramování . Díky této kombinaci konceptů je možné psát programy v Nemerle pomocí různých stylů: v imperativním přístupu bude kód podobný kódu programů C # (s výjimkou některých nuancí, například určení typu), ve funkčním přístupu bude zdrojový kód příbuzný jazykům rodiny ML (ML, OCaml, F#, Haskell), včetně jejich vlastností:
Kromě imperativních a funkčních paradigmat má Nemerle výkonný systém maker, který umožňuje uživateli přidávat do jazyka nové konstrukce a popisovat řešení problémů deklarativním stylem vytvářením vlastních doménově specifických programovacích jazyků (DSL).
Charakteristickým rysem Nemerle, stejně jako všech Hindley-Milner typizovaných jazyků, je výkonný typ inferenčního systému .
Typový závěr def x = 1 ; // int def myList = Seznam (); // generic List[T], T by mělo být odvozeno z dalšího použití myList . přidat ( x ); // díky tomuto řádku kompilátor určí typ myList jako List[int] Všechno je výraz def x = { // ekvivalent x = 3 def y = 1 ; def z = 2 ; y + z // poslední výraz v bloku je hodnota bloku } def x = if ( DateTime . Now . DayOfWeek == DayOfWeek . Monday ) // if, using, try jsou také výrazy "Monday" else "other day" ; def x = try { Int32 . Parse ( someString ) } catch { | FormatException () => 0 ; } N- tice def k = ( 1 , "jedna" ); // k : (int * řetězec) def ( a , b ) = k ; // a = 1, b = "jedna" Shoda vzorů def výsledek = shoda ( číslo ) { | 0 => "nula" | 1 => "jedna" | x když x < 0 => "negativní" | _ => "více než jeden" } Další příklady shody vzorůMapování s vazbou na proměnné:
def check ( o : objekt ) { shoda ( o ) { | i je int => $"An int: $i" | s je řetězec => $"Řetězec: $(s.ToUpper())" | _ => "Objekt jiného typu" } }Shoda pro n-tice:
zápas ( n-tice ) { | ( 42 , _ ) => "42 na první pozici" | ( _ , 42 ) => "42 na druhé pozici" | ( x , y ) => $" ( $ x, $ y )" }Shoda regulárního výrazu :
pomocí Nemerle.Text ; shoda regulárního výrazu ( str ) { | "a+.*" => printf ( "a\n" ); | @"(?<číslo: int>\d+)-\w+" => printf ( "%d\n" , číslo + 3 ); | "(?<jméno>(Ala|Kasia))? ma kota" => shoda ( jméno ) { | Některé ( n ) => printf ( "%s\n" , n ) | Žádné => printf ( "noname?\n" ) } | _ => printf ( "výchozí\n" ); }
Nemerle umožňuje vytvářet, analyzovat a upravovat programový kód v době kompilace pomocí maker. Makra lze použít jako volání metod nebo jako nové jazykové konstrukce. Většina konstrukcí v jazyce je implementována pomocí maker (if, for, foreach, while, using atd.).
Příklad makra "if":
makro @if ( cond , e1 , e2 ) syntaxe ( "if" , "(" , cond , ")" , e1 , volitelné ( ";" ), "else" , e2 ) { /* <[ ]> // <[ ]> definuje kvaziquotové oblasti, kód v nich je převeden na Nemerleho AST, podobně jako při převodu kódu na Expression kompilátorem C# */ <[ match ( $ cond : bool ) { | pravda => $ e1 | _ => $ e2 } ]> } // Výše uvedené makro zavádí do jazyka konstrukci if, def max = if ( a > b ) a else b ; // který se rozšíří na def max = match ( a > b ) { | pravda => a | _ => b }Syntaxe Nemerle je velmi blízká C#, ale má řadu charakteristických rozdílů, včetně těch, které si vypůjčili z funkčních a skriptovacích jazyků. Zde jsou některé z nich:
Řada jazykových vlastností zásadně odlišuje Nemerle od C#, Java, C++. Jedná se o makra a uzávěry a ve formě typičtější pro Lisp nebo jiné funkční jazyky než C++. Makrosystém umožňuje popisovat nové syntaktické konstrukce v Nemerle a používat je spolu s těmi vestavěnými. Ve skutečnosti je většina direktivních řídicích konstrukcí, včetně if, když jsou příkazy, smyčky všeho druhu, implementovány jako makra ve standardní knihovně Nemerle.
Kromě velkého množství podporovaných editorů, jako je emacs, vi atd. Nemerle má bezplatné plné IDE založené na prostředí Visual Studio 2008 a lze jej také integrovat s úplným sadou Visual Studio 2008 , Visual Studio 2010 , Visual Studio 2015 . Hlavní mechanismy integrace s VS jsou uvedeny v samostatné sestavě, která nezávisí na VS, takže kdo si přeje, může přidat podporu Nemerle do jiných IDE.
Programovací jazyky | |
---|---|
|
.SÍŤ | |
---|---|
Implementace | |
Architektura | |
Infrastruktura | |
jazyky Microsoft | |
Jiné jazyky | |
Základy Windows | |
Komponenty | |
Srovnání |
|
Budoucí technologie | |
Informační zdroje |