TweetFollow Us on Twitter

March 93 - An Introduction to BETA: A New Object-oriented Language

An Introduction to BETA: A New Object-oriented Language

Steve Mann

New object-oriented products are announced every day. Most of them are based on a familiar language such as C++, SmallTalk, or LISP / CLOS. New object-oriented languages are another matter. When was the last time you saw an announcement for a commercial-grade object-oriented language product? BETA is such a product.

Development on BETA started in 1976 as a joint venture between several universities in Norway, Denmark, and Finland. This is the same computer science community (often called the Scandinavian School of object-orientation) that in the early 1960s developed Simula, the first object-oriented language. Throughout its formative years, the BETA research has been supported by grants from many companies, including Apollo, Apple, and Hewlett Packard. After more than 15 years of research and development, Mjolner Informatics has released the first commercial BETA product.

AN OVERVIEW OF BETA

BETA is a completely new language with a design heavily influenced by its object-oriented predecessors, especially Simula. It is strongly typed like C++, with most type checking being done at compile time. The language design is based on a powerful abstraction mechanism called a pattern. The syntax for a pattern is:
<Pattern Name> :
    (#  <Attribute 1> ;
        <Attribute 2> ;
            .
        <Attribute N> ;

    Enter <Input list>
    Do <Imperatives>
    Exit <Output list>
    #);

Attributes can be many things-the most common are object declarations and methods specific to the pattern being defined. The Enter statement lists the values passed to the Do section, Exit lists the values output from the Do section. The Do section contains imperative (executable) statements that perform actions. All the syntactic elements of a pattern are optional.

There are several types of patterns, including classes, procedures, functions, coroutines, processes, and exceptions. There are also three types of pattern derivatives:

  • subpatterns (like subclasses but more powerful),
  • virtual patterns (like C++ virtual procedures), and
  • pattern variables (variables that can be assigned any legal pattern value).

You can create any of these three derivatives from any of BETA's pattern types, making BETA a very orthogonal language. For instance, using subpatterns, you can create a hierarchy of procedures, functions, coroutines, processes, or exceptions, where all the subpatterns inherit attributes from their superpatterns. You can also define virtual classes, virtual procedures, virtual functions, and so on . Table 1 lists all the possible combinations of pattern derivatives and types.

Other important BETA features include:

  • class-less objects for one-of-a-kind object definitions;
  • direct and reference (pointer-based) attributes allowing the modeling of complex relationships;
  • block structures similar to Algol, allowing nested structures with local and global scopes for all patterns.

SAMPLE PROGRAMS

Here is a simple class pattern that defines a bank account object. It has three attributes-balance (a declaration using a predefined class pattern called integer), Deposit (a procedure pattern), and Withdraw (another procedure pattern).
Account :  (* a simple bank account class pattern *)   
    (#  balance : @ integer;        (* bank account balance *)

        Deposit :       (* add 'amount' to balance *) 
            (#  amount : @ integer          (* local declaration *)
            enter amount                    (* input list *)
            do balance + amount -> balance   (* action *)
            exit balance                        (* output list *)
            #); 
        Withdraw :      (* subtract 'amount' from balance *)
            (#  amount : @ integer  
            enter amount    
            do balance - amount -> balance
            exit amount     
            #); 
    #); 

Note that:

  • Asterick/parens ('(*' and '*)') are used to enclose comments.
  • A colon (':') indicates a declaration.
  • An @ sign indicates the name of an object type.
  • Integer is a predefined BETA basic pattern (the other basic patterns are real, boolean, and char, plus there is a predefined text pattern that works much like strings).
  • Imperative statements always read left to right.

According to BETA terminology, both Deposit and Withdraw are procedure (not function) patterns. BETA procedures and functions both can have input and output lists. A BETA function computes a return value using only the input values, causing no side effects (a procedure may cause side effects).

The preceding sample is simply a class definition pattern with attributes (balance) and methods (Deposit and Withdraw). In order to create a complete BETA program, we need more, such as some declarations to create real account objects, and some imperatives to perform actions on those accounts:

(# (* a pattern with no name *)
    Account : (*  a pattern declaration within the unnamed pattern *)
        (#  acct_balance : @ integer;
            Deposit :                
                (#  amount : @ integer  
                enter amount
                do acct_balance + amount -> acct_balance
                exit balance    
                #); 
            Withdraw :      
                (#  amount : @ integer  
                enter amount    
                do acct_balance - amount -> acct_balance
                exit amount     
                #); 
            Balance :
                (#
                exit acct_balance
                #)
        #); 
    A : @ Account;              
    cash_on_hand, balance : @ integer;  

do  100 -> &A.Deposit;               
    250 -> &A.Deposit;               
    75  -> &A.Withdraw -> cash_on_hand;   (* $75 on hand *)
    &A.Balance -> balance;                (* $275 balance *)
#)

In BETA the symbol '&' means new; the expression &account.Deposit means "create a new instance of the pattern account.Deposit and execute it". This is basically the same as invoking a procedure. Note that the finished program, the primary object definition (Account), and the methods that operate on that account (Deposit, Withdraw, and Balance) are all patterns. This use of a single syntactic element to define everything and execute operations gives BETA much of its power and flexibility.

REFERENCE ATTRIBUTES

BETA allows you to define both static and dynamic reference attributes. The previous sample programs all have examples of static object references such as
A : @ Account;             
cash_on_hand, balance : @ integer;

Static objects are also called part objects (or part references) in BETA because the declared objects are a permanent part of the objects containing their declarations.

BETA also lets you define object references that denote different objects at different points in time (much like pointers). An example of a dynamic reference is

A : ^Account ;

The initial value of a dynamic reference is NONE (trying to reference an object attribute using a NONE pointer causes a runtime error). If we define an account using

A1 : Account ;

we can assign A1 to A using the statement

A1[] -> A[] ;

It is also possible to create objects dynamically by invoking their pattern as an executable statement. For instance, the statement

&Account[]

creates a new instance of an Account and returns a reference to that account. If we declare a reference object using

A1 : ^Account;

the following statement is valid:

&Account[] -> A1[];

The difference between &Account and &Account[] is important. The first means "generate an instance of Account and execute it"; the second means "generate a new instance of Account without executing it and return a reference to it".

OTHER BETA SYNTACTIC ELEMENTS

When presenting a new language, there is always a certain amount of rote presentation to cover the basic syntax needed to create programs in that language. This section covers some of the more recognizable parts of BETA, including predefined basic patterns and attributes, arrays, assignment statements (evaluations), and control statements.

Basic Patterns

BETA has four predefined basic patterns : integer, real, boolean, and char. The default values and standard operators for BETA's basic patterns are shown in Table 2. In addition, BETA has a standard set of relational operators. Chars are ordered from 0 to 255, and false is less than true.

One unusual restriction that BETA has is that it is not possible to declare dynamic references to instances of these four basic patterns. Apparently this restriction is primarily for efficiency reasons.

Repetitions

BETA arrays (called repetitions) are defined using one of these two forms:
<Name>: [size] @<Type> ;       (* static repetition *)
<Name>: [size] ^<Type> ;        (* dynamic repetition *)

Array indices range from one to <Name>.range (range is an intrinsic attribute of all array objects). You can dynamically resize arrays using the extend attribute, which adds elements to an array. You can reallocate an array, initializing all the elements to the default value for the array object type. You can also assign array slices (or parts of an array).

Here are some array examples:

A1, A2 : [10] @integer;    (* integer arrays A1[1]-A1[10],
                              A2[1]-A2[10] *)
1050 -> A1.[1];         (* assignment *)
10 -> A1.extend;        (* resize A2 to 20 elements *)
25 -> A2.new;           (* resize and reinitialize A2 *)
A1 [1:5] -> A2 [10];    (* slice assignment *)

There is also a special repetition pattern called text which is derived from a string pattern. It is a character array, subject to all normal array operations, with additional predefined patterns for string manipulation.

For Statement

The BETA for statement is straightforward. It has the following form:
(for <Index>: <Range> repeat <Imperative-list> for)

<Index> is an integer object declared locally within the scope of the for statement. It cannot be changed within the loop. The index always starts at one and increments by one. A pattern with a for loop might look like

(#     sum: @ integer;
    V : [100] @ integer     (* integer array *)
do  (for i : V.range repeat i -> V [i] for)
    0 -> sum;
    (for i : V.range repeat sum + v [i] -> sum for)
#)

It is possible to overcome the limitations of the for index structure (integer indices which always start at one and increment by one) using other patterns. That capability is not explored in this introductory article.

If Statement

The BETA if statement is an unusual combination of a traditional if statement and a case statement. Its form is
(if E0
    // E1 then I1
    // E2 then I2
        . . .
    //En then In
    else I
if)

E1 . . . En are evaluations and I1 . . . In are imperatives. The else clause is optional. Here's an example of a simple if statement:

(if x
    // 17 then . . .
    // 33 then . . .
    // y+3 then . . .
    else
if)

A boolean evaluation (albeit an awkward one) might be written

(if (x > 0) and (y < 0)
    // True then . . .
    // False then . . .
if)

Evaluations

BETA evaluation (assignment) statements are very flexible. You can define multiple assignment statements such as
   3 -> I -> J

You can also combine multiple assignments with pattern executions and enter and exit redirection like in this program:

   (#  Power :     (* compute X^n where n > 0 *)
        (#  X, Y : @ real; n : @ integer;
        enter (X, n) 
        do  1 -> Y;
            (for i : n repeat Y * X -> Y for)
        exit Y
        #)

        Reciproc :  (* compute (Q, 1/Q) *)
        (# Q, R : @ real;
        enter Q
        do  (if (Q // 0) then 0 -> R
            else (1 div Q) -> R
            if )
        exit (Q, R)
        #);
    A, B : @ real;
    do  (3.14, 2) -> &Power -> &Reciproc -> (A, B);
        (* A = 3.14 ^ 2, B = 1/A *)
    #)

THE MJOLNER BETA SYSTEM

So far I have described the more basic elements of the BETA language. There are many advanced capabilities, such as subpatterns and virtual patterns, exception handling, and concurrency, that really show off BETA's power as an object-oriented language and the depth of its design. I''ll cover these topics in a future article.

The Mjolner BETA System, created by several of the language's original designers, is currently the only commercial implementation of a BETA development environment. The Mjolner BETA System includes:

  • native code generation,
  • automatic garbage collection and storage management,
  • separate compilation of program fragments with automatic dependency analysis,
  • interfaces to C and assembly language modules (and Pascal on the Mac),
  • persistent objects, although not a full-blown object-oriented database (a complete OODB is expected by late 1993),
  • basic patterns for simple data types,
  • a set of container patterns for more complex data structures (including sets, has tables, stacks, queues, and lists),
  • stream patterns for text and file handling,
  • process management and concurrency control patterns, and
  • application frameworks for X Windows, Motif, and the Macintosh Toolbox.

As if that weren't enough, Mjolner also sells a variety of additional tools including a modifiable Hyper Structure Editor, a metaprogramming system, a BETA CASE Tool (Unix only), and a source-level debugger (Unix only). In the coming months we hope to present an overview of BETA's advanced features, a comprehensive review of Mjolner's BETA System and tools, and advanced programming examples. Let us know if there are specific topics you would like addressed. -

MADA is pleased to announce that as we were going to press with this issue, Mjolner selected MADA as their exclusive US and Canada distributor for the Macintosh version of BETA. We are also carrying the reset of the Mjolner BETA product line. See page 67 for more details.

In addition, a demo version of the Mjolner BETA System is available on MADA's "Five Years of Objects" CD-ROM.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

How to deal with wind in Angry Birds Act...
Angry Birds Action! is a physics-based puzzler in which you're tasked with dragging and launching birds around an obstacle-littered field to achieve a set objective. It's simple enough at first, but when wind gets introduced things can get pretty... | Read more »
How to get three stars in every level of...
Angry Birds Action! is, essentially, a pinball-style take on the pull-and-fling action of the original games. When you first boot it up, you'll likely be wondering exactly what it is you have to do to get a good score. Well, never fear as 148Apps... | Read more »
The beginner's guide to Warbits
Warbits is a turn-based strategy that's clearly inspired by Nintendo's Advance Wars series. Since turn-based strategy games can be kind of tricky to dive into, see below for a few tips to help you in the beginning. Positioning is crucial [Read... | Read more »
How to upgrade your character in Spellsp...
So you’ve mastered the basics of Spellspire. By which I mean you’ve realised it’s all about spelling things in a spire. What next? Well you’re going to need to figure out how to toughen up your character. It’s all well and good being able to spell... | Read more »
5 slither.io mash-ups we'd love to...
If there's one thing that slither.io has proved, it's that the addictive gameplay of Agar.io can be transplanted onto basically anything and it will still be good fun. It wouldn't be surprising if we saw other developers jumping on the bandwagon,... | Read more »
How to navigate the terrain in Sky Charm...
Sky Charms is a whimsical match-'em up adventure that uses creative level design to really ramp up the difficulty. [Read more] | Read more »
Victorious Knight (Games)
Victorious Knight 1.3 Device: iOS Universal Category: Games Price: $1.99, Version: 1.3 (iTunes) Description: New challenges awaits you! Experience fresh RPG experience with a unique combat mechanic, packed with high quality 3D... | Read more »
Agent Gumball - Roguelike Spy Game (Gam...
Agent Gumball - Roguelike Spy Game 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Someone’s been spying on Gumball. What the what?! Two can play at that game! GO UNDERCOVERSneak past enemy... | Read more »
Runaway Toad (Games)
Runaway Toad 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: It ain’t easy bein’ green! Tap, hold, and swipe to help Toad hop to safety in this gorgeous new action game from the creators of... | Read more »
PsyCard (Games)
PsyCard 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: From the makers och Card City Nights, Progress To 100 and Ittle Dew PSYCARD is a minesweeper-like game set in a cozy cyberpunk... | Read more »

Price Scanner via MacPrices.net

Price drops on clearance 2015 13-inch MacBook...
B&H Photo has dropped prices on clearance 2015 13″ MacBook Airs by up to $250. Shipping is free, and B&H charges NY sales tax only: - 13″ 1.6GHz/4GB/128GB MacBook Air (MJVE2LL/A): $799, $200... Read more
Mac minis on sale for up to $100 off MSRP
B&H Photo has Mac minis on sale for up to $100 off MSRP including free shipping plus NY sales tax only: - 1.4GHz Mac mini: $449 $50 off MSRP - 2.6GHz Mac mini: $649 $50 off MSRP - 2.8GHz Mac mini... Read more
13-inch Retina MacBook Pros on sale for up to...
B&H Photo has 13″ Retina MacBook Pros on sale for $130-$200 off MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $1169 $130 off MSRP - 13″ 2.7GHz/... Read more
Apple price trackers, updated continuously
Scan our Apple Price Trackers for the latest information on sales, bundles, and availability on systems from Apple’s authorized internet/catalog resellers. We update the trackers continuously: - 15″... Read more
SanDisk Half-Terabyte SSD Optimized for Every...
SanDisk Corporation has announced the SanDisk Z410 SSD, a cost-competitive, half-terabyte solid state drive (SSD) that enables manufacturers to design for a broad range of desktop PCs and laptops.... Read more
Churchill Downs Racetrack Selects VenueNext t...
Churchill Downs Racetrack has announced an agreement with VenueNext to implement its technology platform for the start of Churchill Downs 2016 Spring Meet, which includes the 142nd running of the... Read more
Record 700 Million Pounds of CE Recycled in 2...
The Consumer Technology Association (CTA) reports that a record-setting 700 million pounds of consumer electronics (CE) have been recycled under the eCycling Leadership Initiative (ELI). According to... Read more
Price drops on clearance 12-inch Retina MacBo...
B&H Photo has dropped prices on leftover 2015 12″ Retina MacBooks with models now available starting at $999. Shipping is free, and B&H charges NY tax only: - 12″ 1.1GHz Gray Retina MacBook... Read more
15-inch Retina MacBook Pros available for $20...
B&H Photo has 15″ Retina MacBook Pros on sale for up to $210 off MSRP. Shipping is free, and B&H charges NY tax only: - 15″ 2.2GHz Retina MacBook Pro: $1799 $200 off MSRP - 15″ 2.5GHz Retina... Read more
Target offers Apple Watch Sport for $50 off M...
Target has Apple Watch Sports on sale for $50 off MSRP for a limited time. Choose free shipping or free local store pickup (if available). Sale prices for online orders only, in-store prices may vary... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
Simply Mac *Apple* Specialist- Service Repa...
Simply Mac is the largest premier retailer of Apple products in the nation. In order to support our growing customer base, we are currently looking for a driven Read more
*Apple* Retail - Multiple Positions - Apple,...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.