Yoix

Yoix

Infobox programming language
name = Yoix

paradigm = Multi-paradigm, Object-based, procedural
year = 2000
designer = Rich Drechsler and John Mocenigo
latest_release_version = 2.2.0
latest_release_date = August 26 2008
typing = Dynamic, Weak
influenced_by = C, Java, PostScript
operating_system = Cross-platform
license = Open Source Initiative Common Public License
website = http://www.yoix.org/

In computer programming, Yoix is a high-level, general-purpose, interpreted, dynamic programming language. The Yoix interpreter is implemented using standard Java technology without any add-on packages and requires only a Sun-compliant JVM to operate.Fact|date=September 2008 Initially developed by AT&T Labs researchers for internal use, it has been available as free and open source software since late 2000.

History

In 1998, Java technology was still emerging: the Swing toolkit was an add-on package; interruptable I/O, regular expressions, and a printf capability were not yet features; nor had Java Web Start been developed. Moreover, Java scripting languages were largely non-existent at that time: Groovy and JRuby had not yet been invented and Jython had just been created in late 1997. Browsers in 1998 had limited feature sets, were too unstable for production use in an 8-hour shiftDubious|date=September 2008 and were still fighting skirmishes in the Browser Wars. In this environment, Yoix technology was created in response to a pressing need for a reliable, easy to distribute and maintain, GUI front-end for a mission-critical application being developed within AT&T, namely its Global Fraud Management System, which to this day monitors and tracks fraud activity related to voice traffic on AT&T's expanding networks: wireline, wireless, and IP. Yoix technology was first released to the public in late 2000 under the Open Source Initiative Common Public License V1.0.

The Yoix name came about partially from the fox hunting cry of encouragement to the hounds, partially to echo another familiar four-letter name that ends in "ix", and partially to avoid too many false-positives in a Google search.Fact|date=September 2008

Overview

Yoix technology provides a pure Java programming language implementation of a general purpose dynamic programming language developed by researchers at AT&T Labs. Its syntax and grammar should be easy to learn for those familiar with the C programming language and Java. To an end-user, a Yoix application is indistinguishable from a Java application, but to the application developer Yoix should provide a simpler coding experience than working in Java directly, much like writing Perl code can be simpler than writing C code.

Features

The Yoix language is not an object oriented language, but makes use of over 165 object types that provide access to most of the standard Java classes. Because the Yoix interpreter is built entirely using Java technology, it means that Yoix applications are cross-platform, GUI-capable and both network and thread friendly, yet Yoix developers find themselves insulated from the more complex and error-prone parts of coding the same functionality directly in Java. It does not use reflection to access Java functionality and thus adds value by not only simplifying access to that functionality, but also improving application reliability by coding through both Java glitches and complicated Java features one-time, behind-the-scenes.Clarifyme|date=September 2008 The Yoix language includes safe pointers, addressing, declarations, and global and local variables. In addition to supporting native user functions, users can add their own builtin functions written in Java.

Design

The two central elements in the Yoix design are borrowed from the PostScript languageFact|date=September 2008: dictionaries as language components and permissions-protected dictionaries as exposed system components. Homage to the Tcl language and its exposure philosophy should also be given, though it did not have a direct influence.Fact|date=September 2008

Another key Yoix design element involves pointers and addressing. Pointers and pointer arithmetic in the Yoix language is syntactically similar to what is found in the C language, but the Yoix implementation prevents using a pointer outside its bounds. In addition, the address operator always produces a valid, usable result.Dubious|date=September 2008

Overall, the Yoix design attempted to make the language easy to learn by programmers experienced with the C and Java languages.Syn|date=September 2008

Applications

The Yoix distribution includes the Yoix Web Application Instant Template (YWAIT), a software framework for building a Yoix web application. A Yoix web application resides on a web server and is downloaded piecemeal at run-time on an as-needed basis by Yoix interpreters running on client machines. This model, analogous to the familiar model of client browsers downloading a website piecemeal as-needed at run-time, permits simple, efficient distribution and maintenance of applications and relies only on the ubiquitous web server and the Yoix interpreter. Building a web application using the YWAIT framework requires just a few standard Unix tools available in most modern operating systems, such as Linux or Mac OS X, or under Microsoft Windows with the help of add-on packages such as U/Win. The client side of a YWAIT-based application relies only on the Yoix interpreter and is thus platform independent, running wherever Java runs. Because the Yoix software development philosophy aims to keep things simple by eschewing the popular tendency for multiple embedded specialized languages and the YWAIT framework permits easy, incremental screen development in a simple, logical source tree hierarchy, development of a Yoix web application is reduced to the basics: a command prompt and a text editor.Syn|date=September 2008 IDE enthusiasts may be nonplussed, but this "Small Is Beautiful" approach to software development has been highly effective in practice at AT&T.Dubious|date=September 2008

Data Visualization

In addition to its role as a tool for building GUI applications, Yoix technology supports several modes of data visualization.

Data Mining

A data visualization module called YDAT (Yoix Data Analysis Tool) has been included in the public Yoix distribution since release 2.1.2. YDAT uses a data manager component to coordinate data display and filtering among its several visualization components that include an event plot, a graph drawing pane, histogram filters and tabular detail. YDAT is able to display graphs generated by the GraphViz graph drawing and layout tool, which is another open source tool freely available from AT&T Labs. YDAT is highly configurable at the Yoix language level. The image below is a screenshot of a Yoix YDAT instantiation, which in this example is being used to analyze vehicle auction transactions.

Graph Drawing

Yoix technology provides good support for graph drawing. In addition to graph display mentioned above as part of the YDAT module, data types in the Yoix language support building, manipulating and traversing graph structures. Native Yoix functions support the DOT language output and a built-in DOT language parser to facilitate interaction with the GraphViz layout engines.

Organizing Cells of Data

The YChart data visualization toolkit was added to the Yoix distribution with release 2.2.0. YChart allows one to organize and display cells of data. Two interactive YChart applications contained in the Yoix distribution are a [http://www.yoix.org/elements.html Periodic Table of the Elements] and a [http://www.yoix.org/unicode.html Unicode Chart] . A program to demonstrate using YChart with variable width cells, as might occur with a schedule, is also available in the Yoix distribution.

Interactive 2D Graphics

The Yoix distribution also includes a Yoix package, called "Byzgraf", for rendering basic data plots such as line charts, histograms and statistical box plots.

Limitations and Focus

As currently implementedwhen, the Yoix language is interpreted, which means that, for example, it is probably not the right choice for computationally intensive applications unless one codes those computations in a Java module extension. Similarly, excessive looping will also display the limitations of this interpreted language. The focus of the language is interactive standalone or client/server GUI and data visualization applications.

Licensing

Yoix technology is free software licensed under the Open Source Initiative Common Public License. Yoix is a registered trademark of AT&T Intellectual Property.Fact|date=September 2008

Examples

1. Extract all HTML directives from the AT&T home page and write them to standard output.

import yoix.*.*;

URL att = open("http://www.att.com", "r");String text;int cnt = 0;while (cnt >= 0) { if ((cnt = fscanf(att, " <% [^>] >", &text)) > 0) printf("<%s> ", text); else cnt = fscanf(att, " %* [^<] "); // discard}

2. Build and display a GUI with two buttons in a titled frame (i.e., window) that also has a titled border. One button pops up a message when pressed, the other quits the example. The window is sized automatically to just fit its components, and some additional code calculates its location to put it in the center of the screen before making it visible.

import yoix.*.*;

JFrame jf = { Dimension size = NULL; // auto-size window

FlowLayout layoutmanager = { int hg

String title = "Wikipedia Yoix Example"; // window title String border = "Simple Button Example"; // border title

Array layout = { new JButton { String text = "Press for Message";

actionPerformed(ActionEvent ev) { showMessageDialog(root, "Hello, world.", "Message Example"); } }, new JButton { String text = "Press to Exit";

actionPerformed(ev) { // ActionEvent declaration can be omitted exit(0); } }, };};

// set frame location to center of screen now that frame size is knownjf.location = new Point { int x = (VM.screen.width - jf.size.width) / 2; int y = (VM.screen.height - jf.size.height) / 2;};

// make it visiblejf.visible = TRUE;

3. The code shown here was used to generate the Yoix logo image in PNG format that can be seen in the language description box near the top of this page. Command-line arguments allow the size of the image to be specified as well as select between PNG image output or display in an on-screen window.

import yoix.*.*;

BuildYoixLogoImage(double height, Color color, int addshadow) { // create the basic image, without shadow GenImage(double height, Color color, Font imagefont, double scale) { Image yoix return(yoixlogo); }

Font basefont = { String name = "ClearviewATT-plain-48"; }; double scale = height / 90.0; Font imagefont = basefont.scalefont(scale, scale);

if (addshadow) { Image

">

return(image);}

// rudimentary argument processing (getopt is also available)// first argument is height of imagedouble sz = (argc > 1) ? atof(argv [1] ) : 270;int shdw = 1;int print = 0;// second argument: if 0/1 turn shadow off/on, otherwise// assume it is a filename for printing.if (argc > 2) { if (argv [2] =~ "^ [01] $") { shdw = atoi(argv [2] ); } else { print = 1;

Image yoix

if (print) { Stream output;

if ((output = open(argv [2] , "w")) != NULL) { encodeImage(yoixlogo, "png", output); close(output); else { JFrame jf = { int visible = TRUE; Dimension size = NULL; Array layout = { new JPanel { Dimension preferredsize = { double width = yoixlogo.size.width; double height = yoixlogo.size.height; }; Color background = Color.white; Image background

External links

* [http://www.research.att.com/sw/tools/yoix/ AT&T Labs-Research: Yoix Home Page]
* [http://www.springerlink.com/content/uygta4blv48xwkkm/ Web Engineering Workshop Paper]
* [http://portal.acm.org/citation.cfm?id=1241513&dl=ACM&coll=ACM Software - Practice & Experience Paper]


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Look at other dictionaries:

  • Unicode — For the 1889 Universal Telegraphic Phrase book, see Commercial code (communications). The Unicode official logo since October 2009 …   Wikipedia

  • List of programming languages — Programming language lists Alphabetical Categorical Chronological Generational The aim of this list of programming languages is to include all notable programming languages in existence, both those in current use and historical ones, in… …   Wikipedia

  • List of Java scripting languages — This is a list of some scripting languages available for the Java platform: *the Bean Scripting Framework (BSF) *BeanShell *Frink *Groovy *Hecl *Jacl *JavaScript (via Rhino) *Jelly (Programming Language) *Joy *JRuby *Judoscript *Jython… …   Wikipedia

  • Data visualization — A data visualization of Wikipedia as part of the World Wide Web, demonstrating hyperlinks Data visualization is the study of the visual representation of data, meaning information that has been abstracted in some schematic form, including… …   Wikipedia

  • Table of nuclides — A chart of nuclides (cut into three parts for better presentation). A table of nuclides or chart of nuclides is a two dimensional graph in which one axis represents the number of neutrons and the other represents the number of protons in an… …   Wikipedia

  • List of JVM languages — This list of JVM Languages comprises computer programming languages that are used to produce software that runs on the Java Virtual Machine. Some of these languages are interpreted by a Java program, and some are compiled to Java bytecode and… …   Wikipedia

  • Liste des langages de programmation — Le but de cette Liste des langages de programmation est d inclure tous les langages de programmation existants, qu ils soient actuellement utilisés ou historiques, par ordre alphabétique. Ne sont pas listés ici les langages informatiques de… …   Wikipédia en Français

  • Java — Иное название этого понятия  «Ява»; см. также другие значения. Не следует путать с JavaScript. Java Класс языка …   Википедия

  • Sun Microsystems — Sun Microsystems …   Википедия

  • Jython — Тип компилятор, интерпретатор, виртуальная машина Написана на Python и Java Операционная система Кроссплатформенное ПО Аппаратная платформа Java Virtual Machine Последняя версия …   Википедия

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”