Yoix

Yoix
Yoixlogo.png
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 ; för 11 år sedan ( 2011-11-25 )
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  ;  },  };  };  } 

externa länkar