Yoix
Paradigm | Multi-paradigm ; objektbaserad , imperativ , processuell |
---|---|
Designad av | Rich Drechsler och John Mocenigo |
Dök först upp | 2000 |
Stabil frisättning | 2.3.1 / 25 november 2011
|
Maskinskrivningsdisciplin | Dynamisk, svag |
OS | Cross-plattform |
Licens | Open Source Initiative Common Public License |
Hemsida | https://github.com/att/yoix |
Influerad av | |
C , Java , PostScript |
Inom datorprogrammering är Yoix ett högnivå , generellt , tolkat , objektbaserat , dynamiskt programmeringsspråk . Yoix-tolken är implementerad med standard Java- teknik utan några tilläggspaket och kräver endast en Sun-kompatibel JVM för att fungera. [ citat behövs ] Ursprungligen utvecklad av AT&T Labs forskare för internt bruk, den har varit tillgänglig som gratis och öppen källkod sedan slutet av 2000.
Historia
År 1998 växte Java-tekniken fortfarande fram: Swing-verktygslådan var ett tilläggspaket; avbrottsbar I/O, reguljära uttryck och en printf-möjlighet var ännu inte funktioner; inte heller hade Java Web Start utvecklats. Dessutom var Java-skriptspråk i stort sett obefintliga på den tiden: Groovy och JRuby hade ännu inte uppfunnits och Jython hade precis skapats i slutet av 1997. Webbläsare 1998 hade begränsade funktionsuppsättningar, var för instabila för produktionsanvändning i en 8- timskifte [ tveksamt ] och kämpade fortfarande mot skärmytslingar i webbläsarkrigen. I denna miljö skapades Yoix-tekniken som svar på ett trängande behov av ett pålitligt, lätt att distribuera och underhålla, GUI-gränssnitt för en verksamhetskritisk applikation som utvecklas inom AT&T, nämligen dess Global Fraud Management System, som än i dag övervakar och spårar bedrägeriaktivitet relaterad till rösttrafik på AT&T:s expanderande nätverk: fast, trådlöst och IP. Yoix-tekniken släpptes först för allmänheten i slutet av 2000 under Open Source Initiative Common Public License V1.0.
Yoix-namnet kom delvis från rävjaktens uppmuntran till hundarna, delvis för att återspegla ett annat välbekant namn på fyra bokstäver som slutar på ix , och delvis för att undvika för många falska positiva inslag i en Google-sökning. [ citat behövs ]
Översikt
Yoix-tekniken tillhandahåller en ren Java-programmeringsspråkimplementering av ett dynamiskt programmeringsspråk för allmänt ändamål utvecklat av forskare vid AT&T Labs . Dess syntax och grammatik bör vara lätt att lära sig för dem som är bekanta med programmeringsspråket C och Java. För en slutanvändare kan en Yoix- applikation inte skiljas från en Java-applikation, men för applikationsutvecklaren bör Yoix ge en enklare kodningsupplevelse än att arbeta direkt i Java, ungefär som att skriva Perl- kod kan vara enklare än att skriva C-kod.
Funktioner
Yoix-språket är inte ett objektorienterat språk , utan använder sig av över 165 objekttyper som ger tillgång till de flesta av de vanliga Java- klasserna . Eftersom Yoix- tolken helt och hållet är byggd med Java-teknik, betyder det att Yoix-applikationer är plattformsoberoende , GUI -kompatibla och både nätverks- och trådvänliga , men Yoix-utvecklare befinner sig isolerade från de mer komplexa och felbenägna delarna av kodning. funktionalitet direkt i Java. Den använder inte reflektion för att komma åt Java-funktionalitet och tillför därmed mervärde genom att inte bara förenkla åtkomsten till den funktionen, utan också förbättra tillämpningens tillförlitlighet genom att koda genom både Java-fel och komplicerade Java-funktioner en gång bakom kulisserna. [ förtydligande behövs ] Yoix-språket innehåller säkra pekare , adressering, deklarationer och globala och lokala variabler. Förutom att stödja inbyggda användarfunktioner kan användare lägga till sina egna inbyggda funktioner skrivna i Java.
Design
De två centrala delarna i Yoix-designen är lånade från PostScript-språket [ citat behövs ] : ordböcker som språkkomponenter och behörighetsskyddade ordböcker som exponerade systemkomponenter. En hyllning till Tcl-språket och dess exponeringsfilosofi bör också ges, även om det inte hade ett direkt inflytande. [ citat behövs ]
Ett annat viktigt Yoix-designelement involverar pekare och adressering. Pekare och pekararitmetik i Yoix-språket liknar syntaktisk det som finns i C-språket, men Yoix-implementeringen förhindrar att en pekare används utanför dess gränser. Dessutom ger adressoperatören alltid ett giltigt, användbart resultat. [ tveksamt ]
Sammantaget försökte Yoix-designen göra språket lätt att lära sig för programmerare med erfarenhet av C- och Java-språken. [ felaktig syntes? ]
Ansökningar
Yoix-distributionen inkluderar Yoix Web Application Instant Template (YWAIT), ett ramverk för att bygga en Yoix-webbapplikation. En Yoix-webbapplikation finns på en webbserver och laddas ner bitvis vid körning efter behov av Yoix- tolkar som körs på klientdatorer . Denna modell, analog med den välbekanta modellen med klientwebbläsare som laddar ner en webbplats bitvis efter behov under körning, tillåter enkel, effektiv distribution och underhåll av applikationer och förlitar sig endast på den allestädes närvarande webbservern och Yoix-tolken. Att bygga en webbapplikation med YWAIT-ramverket kräver bara några få standard Unix- verktyg tillgängliga i de flesta moderna operativsystem , som Linux eller Mac OS X , eller under Microsoft Windows med hjälp av tilläggspaket som U/Win . Klientsidan av en YWAIT-baserad applikation förlitar sig endast på Yoix-tolken och är därmed plattformsoberoende och körs varhelst Java körs. Eftersom Yoix mjukvaruutvecklingsfilosofi syftar till att hålla saker enkelt genom att undvika den populära tendensen till flera inbäddade specialiserade språk och YWAIT-ramverket tillåter enkel, stegvis skärmutveckling i en enkel, logisk källträdshierarki, reduceras utvecklingen av en Yoix-webbapplikation till grunderna: en kommandotolk och en textredigerare. [ felaktig syntes? ] IDE- entusiaster kan vara överlyckliga, men denna Small Is Beautiful- strategi för mjukvaruutveckling har varit mycket effektiv i praktiken hos AT&T. [ tveksamt ]
Datavisualisering
Förutom sin roll som ett verktyg för att bygga GUI-applikationer, stöder Yoix-tekniken flera lägen för datavisualisering .
Data mining
En datavisualiseringsmodul kallad YDAT (Yoix Data Analysis Tool) har inkluderats i den offentliga Yoix-distributionen sedan release 2.1.2. YDAT använder en datahanterarkomponent för att koordinera datavisning och filtrering bland dess flera visualiseringskomponenter som inkluderar en händelseplot, en grafritningsruta, histogramfilter och tabelldetaljer. YDAT kan visa grafer genererade av grafritnings- och layoutverktyget GraphViz , som är ett annat verktyg med öppen källkod som är fritt tillgängligt från AT&T Labs . YDAT är mycket konfigurerbart på Yoix-språknivå. Bilden nedan är en skärmdump av en Yoix YDAT-instansiering, som i det här exemplet används för att analysera fordonsauktionstransaktioner.
Grafritning
Yoix-tekniken ger bra stöd för grafritning. Förutom grafvisning som nämns ovan som en del av YDAT-modulen, stödjer datatyper i Yoix-språket att bygga, manipulera och korsa grafstrukturer. Inbyggda Yoix-funktioner stöder DOT-språkutdata och en inbyggd DOT-språkparser för att underlätta interaktion med GraphViz layoutmotorer.
Organisera celler med data
YChart- verktyget för datavisualisering lades till Yoix-distributionen med version 2.2.0. YChart låter en organisera och visa celler med data. Två interaktiva YChart-applikationer som ingår i Yoix-distributionen är ett periodiskt system och ett Unicode-diagram . Ett program för att demonstrera användning av YChart med celler med variabel bredd, vilket kan inträffa med ett schema, finns också tillgängligt i Yoix-distributionen.
Interaktiv 2D-grafik
Yoix-distributionen inkluderar också ett Yoix-paket, kallat Byzgraf , för att rendera grundläggande dataplots som linjediagram, histogram och statistiska boxplots.
Begränsningar och fokus
Som för närvarande implementeras [ när? ] tolkas Yoix-språket, vilket innebär att det till exempel förmodligen inte är rätt val för beräkningsintensiva applikationer om man inte kodar dessa beräkningar i en Java-modultillägg. På samma sätt kommer överdriven looping också att visa begränsningarna för detta tolkade språk. Språkets fokus är interaktiva fristående eller klient/server GUI och datavisualiseringsapplikationer .
Licensiering
Yoix-tekniken är fri programvara licensierad under Open Source Initiative Common Public License . Yoix är ett registrerat varumärke som tillhör At&T Inc.
Exempel
1. Extrahera alla HTML- direktiv från AT&T-hemsidan och skriv dem till standardutdata .
0
0
0
importera yoix.* . * ; URL att = öppen ( "https://www.att.com" , "r") ; Strängtext ; _ int cnt = ; while ( cnt >= ) { if (( cnt = fscanf ( att , " <%[^>]>" , & text )) > ) printf ( "<%s>\n" , text ); else cnt = fscanf ( att , " %*[^<]" ); // kassera }
2. Bygg och visa ett grafiskt användargränssnitt med två knappar i en ram med titeln (dvs. fönster) som också har en rubrik. En knapp visar ett meddelande när den trycks ned, den andra avslutar exemplet. Fönstret dimensioneras automatiskt för att bara passa dess komponenter, och ytterligare kod beräknar dess plats för att placera det i mitten av skärmen innan det blir synligt.
0
importera yoix.* . * ; JFrame jf = { Dimension size = NULL ; // auto-size window FlowLayout layoutmanager = { int hgap = 18 ; // 0,25 tum gap }; String title = "Wikipedia Yoix Exempel" ; // window title String border = "Enkelt knappexempel" ; // border title Array layout = { new JButton { String text = "Tryck för meddelande" ; actionPerformed ( ActionEvent ev ) { showMessageDialog ( root , "Hej, värld." , "Meddelandeexempel" ) ; } }, new JButton { String text = "Tryck för att avsluta" ; actionPerformed ( ev ) { // ActionEvent-deklaration kan utelämnas exit ( ); } }, }; }; // ställ in bildrutans placering till mitten av skärmen nu när ramstorleken är känd jf . plats = ny Punkt { int x = ( VM . skärm . bredd - jf . storlek . bredd ) / 2 ; int y = ( VM . skärm . höjd - jf . storlek . höjd ) / 2 ; }; // gör det synligt jf . synlig = TRUE ;
3. Koden som visas här användes för att skapa Yoix- logotypens bild i PNG -format som kan ses i språkbeskrivningsrutan högst upp på denna sida. Kommandoradsargument gör att storleken på bilden kan specificeras samt välja mellan PNG - bildutmatning eller visning i ett skärmfönster.
0
0
0 0
0
importera yoix.* . * ; BuildYoixLogoImage ( dubbel höjd , färg färg , int addshadow ) { // skapa grundbilden, utan skugga GenImage ( dubbel höjd , färg färg , Font imagefont , dubbel skala ) { Image yoixlogo = { int type = TYPE_RGB_ALPHA ; Färg imgcolor = färg ; dubbel skala = skala ; Font imagefont = imagefont ; Font regfont = imagefont . skaltypsnitt ( 0,5 , 0,5 ); Graphics graphics = { Font font = imagefont ; int textantialiasing = TRUE ; }; double ywd = stringWidth ( graphics . font , "Y" ) ; Dimension storlek = { dubbel höjd = höjd ; dubbel bredd = ywd * 5,25 ; }; double owd = stringWidth ( graphics . font , "o" ); double iwd = stringWidth ( graphics . font , "i" ); double xwd = stringWidth ( graphics . font , "x" ); ywd += iwd ; ywd /= 2,0 ; paint ( Rektangel r ) { dubbel alfa = 1,0 ; dubbel alfa2 = 0,3333 ; int limit = 12 ; grafik { gsave (); raderbar ( 0.0 ); // för genomskinlig PNG rectclip ( r ); setrgbcolor ( imgcolor . red , imgcolor . green , imgcolor . blue ); translate ( 48 * denna . skala , 44 * denna . skala ); for ( n = ; n < gräns ; n ++ ) { moveto ( 0.0 , 0.0 ); setfont ( denna . imagefont ); // "handgjord" kerning show ( "Y" , alfa ); if ( n == ) { moveto ( ywd , 0,0 ); visa ( "o" , alfa ); moveto ( ywd + owd - 0,3 * iwd , 0,0 ); visa ( "i" , alfa ); moveto ( ywd + owd + 0,8 * iwd , 0,0 ); visa ( "x" , alfa ); moveto ( ywd + owd + 0,8 * iwd + xwd , - detta . bildfont . höjd * 0,33 ); setfont ( detta . regfont ); visa ( "\xAE" , alfa ); alfa = alfa2 ; } alfa *= 0,75 ; rotera ( 30 ); } grestore (); } } }; return ( yoixlogo ); } Font basefont = { String name = "ClearviewATT-plain-48" ; }; dubbel skala = höjd / 90,0 ; Font imagefont = basefont . skalafont ( skala , skala ); if ( addshadow ) { Image logo = GenImage ( höjd , färg , bildfont , skala ); image = ny Bild { int type = TYPE_RGB_ALPHA ; Bildkälla = logotyp ; _ Bild img = logotyp ; // konvolvera bilden för att göra en (upplyst) skugga . Bildskugga = ny bild { int type = TYPE_RGB_ALPHA ; Bildkälla = img ; _ Array kärna = ny Array [ 100 ] ; Pekare ptr ; for ( ptr i kärnan ) * ptr = 0,0055 ; måla () { konvolvera ( kärna ); } }; // kombinera bilden och skuggan till en bildfärg ( Rectangle r ) { graphics { gsave ( ); flytta till ( , ); showimage ( denna . img ); moveto ( denna . bild . storlek . höjd * 0,005 , denna . bild . storlek . höjd * 0,02 ); showimage ( denna . skugga ); grestore (); } } }; } else { image = GenImage ( höjd , färg , bildfont , skala ); } return ( bild ); } // rudimentär argumentbehandling (getopt finns också) // första argumentet är bildens höjd dubbel sz = ( argc > 1 ) ? atof ( argv [ 1 ] ) : 270 ; int shdw = 1 ; int print = ; // andra argument: om 0/1 slå av/på skugga, annars // antar att det är ett filnamn för utskrift. if ( argc > 2 ) { if ( argv [ 2 ] =~ " ^ [ 01 ] $ " ) { shdw = atoi ( argv [ 2 ] ); } else { print = 1 ; } } Bild yoixlogo = BuildYoixLogoImage ( sz , Color . black , ( sz >= 72 ) && shdw ); if ( print ) { Stream output ; if (( output = öppen ( argv [ 2 ] , "w" )) != NULL ) { encodeImage ( yoixlogo , "png" , output ); nära ( utgång ); } } else { JFrame jf = { int visible = TRUE ; Dimension storlek = NULL ; Arraylayout = { new JPanel { Dimension preferent size = { double width = yoixlogo . storlek . bredd ; dubbel höjd = yoixlogo . storlek . höjd ; }; Färgbakgrund = Färg . _ vit ; Bildbakgrundsbild = yoixlogo ; _ int bakgrundstips = SCALE_NONE ; }, }; }; }