Monday, November 21, 2011

USL 3.8.4

I have added curly-brace blocks for method, while, and switch. The end keyword is still available to those who dislike curly-braced code-blocks. I fixed the null value. Apparently null variables could be set as strings but not as numbers. This issue has been resolved. I have also fixed tons of issues in the Mac binary. Why is C++ in Linux not compatible with OS X? Both are POSIX and should compile with basically no auditing. Thankfully I only needed to fix a few lines in one file instead of every other line throughout the entire set. Here are some examples of the curly-brace blocks and a reintroduction to the null keyword.

Curly-Brace Code-Blocks:
method __
       @var = "Value"
       switch @var
              case "value"
                     say "This will not be seen."
              case "Value"
                     say "Curly-Brace Example."


Reintroduction to null in USL:

For those who did not already know, null removes the type and value of a variable. It allows a variable to change its "type."

@str = "a string."    # @str is now a string.
@str = 3.14159        # @str is still a string.
@str = null           # @str is no longer a string.
redefine @str @num    # changing the identifier of @str to @num.
@num = 3.14159        # @num is now a number.
@num = null           # @num is no longer a number.
@num = "a string."    # @num is now a string.
remove @num           # @num is no longer a variable.

To download 3.8.4, you can visit any of the following links:

Saturday, November 19, 2011

USL 3.8.3

I finally fixed the library loading issue brought to my attention in an email last week. USL now loads library definitions in script mode exactly as in shell mode. I changed the equal and unequal conditional operators as well. I'll demonstrate below.

New conditional statements:
if true == false
       say "This will never be seen."
orif true != false
       say "true is never false"
       say "This will never be seen."

This may seem like a very small change, but the previous version would not load scripts correctly. This version will. Tested on Mac OS X, Linux, and Windows.

To download 3.8.3, you can visit any of the following links:

Friday, November 18, 2011

USL for Mac OS X

A few people were wondering where the Mac binary was. So I compiled 3.8.2 on Mac OS X 10.6.6.

The Sparc compliant binary will come soon. Probably with the next release. I plan on distributing Linux, Win32, Mac, and Sparc versions of USL from here on out. Once the Sparc box is working that is. Until then the distributable will contain Linux, Win32, and Mac binaries. Thank you to the Mac and Solaris users interested in my language.

Here is the binary: USL for Mac OS X

Tuesday, November 15, 2011

USL 3.8.2

After releasing 3.8.1, I forgot to check for bugs. Dev-FAIL on my part. I had fixed a very important issue in 3.8.1 but soon realized my interpreter was broken. This new release fixes those bugs. Thankfully. It took me three days to work out the best solution. Hope you are all happy with it. Sorry, Bruce. I will add your suggestion in the next release. I had that feeling you get when you finally fix the most irritating bug in your software. A eureka moment that I absolutely had to share with the end-users. So here it is.

In case you haven't figured out what the giant bug was, it was in the return keyword. When returning parentheses encapsulated expressions, the temporary parameter variables weren't being parsed correctly. So if you had a method returning (@var + 5), the method would have returned a string with the value: @var5. This issue has been resolved.

I have also added a way to capture parsed stdout similar to capturing the stdout of external processes.

Assigning variables with captured output:
@host = "chomp.Enter host: "
@pingResults ? "ping \{@host}"

@parsedOutput ! "for i in (1..15);say '${i}';endfor"
To download 3.8.2, you can visit any of the following links:

Wednesday, November 9, 2011

USL 3.8.1

A kind anon alerted me to a few bugs and I have resolved the issues. The problem with 3.8.0 was that object instantiations would not inherit private members. Now they inherit everything for they are instances. Inheritance still works the same way as before. Another problem with the previous versions was parentheses encapsulated expressions. Just a white-space issue. Some examples.

Parentheses example:
list words
words = ( "Anonymous", "is", "still", "able", "to", "deliver." )
The other change is self-explanatory. If an object member is private, it would not be inherited by object instances. Now all members will be inherited as the instance is merely a copy of the original object. Inheritance still works the same.
object Parent
              method priv_m
                     say "I am a private method."
              method pub_m
                     say "I am a public method."

object Child = Parent

p = Parent
c = Child

p.priv_m       # Success
c.priv_m       # Failure
To download 3.8.1, you can visit any of the following links:

Sparc compliant binary will be available within the next couple of weeks.

Wednesday, November 2, 2011

USL 3.8.0

Seven changes have been made in this release. The seventh being the most important. Allow me to explain each change individually.

1. Object instances are now implicitly removed when created in methods.
object o
       method m;say "Hello, World!";end

method m
       oo = o       # oo will be removed after leaving this method

2. Object variables may now be public or private members.
object o
              @var = "Hello, World!"

              method m
                     say self.@var

oo = o

3. Errors return the actual line where the error occurred. (It returns the actual code that threw the error.)

4. Fixed the bug in say when printing the value of just an object variable. (Refer to example 2.)

5. Fixed the self keyword. self used to be limited to only executing object methods and returning their values with interpolation.

6. Interpreter and script arguments are now retrieved with indices.
first_arg = args[0]

7. USL now implicitly creates temporary variables from method parameters.
method generic_add(a,b)
       return (@a+@b)

@str = generic_add("abc","def")
@num = generic_add(250,6)
To download 3.8.0, you can visit any of the following links: