now is the time for the Release of the new aUCBLogo-4.7:
I wish you all a lot of fun
with this new version of that free Logo interpreter!
If you have any questions about the new aUCBLogo-4.7,
don't hesitate to ask me, either in the LogoForum or by email.
The download links are on my webpage:
<http://www.physik.uni-augsburg.de/~micheler/>
There are a few differently compiled versions available,
three for windows, and two for different versions of Linux,
of course all including the source code.
Here are the Release Notes:
Release Notes for aUCBLogo-4.7
==============================
This is a big Release, for Windows and Linux. Much has been done since
the last Release. I know these Release Notes are a bit long this time,
sorry.
Most of the work was put into multithreading. Dependent issues were the
need of a new variable stack binding strategy, using now deep binding
instead of shallow binding.
Additionally Object Orientation is being introduced; therefore a new
variable scope has been introduced: lexical scope. By doing this nested
procedures have been achieved in a first step, then the new Node type
LogoObject has been invented, which is the base type of all Objects in
aUCBLogo-4.7 and enabled method calls using a "This" object.
The multithreading WAS pretty problematic in respect to the Garbage
Collector and to the existance of the many global and static variables
in the source code, and it still IS problematic in respect to the C
stack checking in the Linux version.
The new Debugging features include now Reverse Stepping, which can be
very useful when debugging difficult algorithms. aUCBLogo is one of the
few languages which support Reverse Stepping. To enable it, you have to
set a non-zero value in the Editor menu / Run / Set Ringbuffer Size.
Another very dynamic feature is the new Autoload mode. After you have
turned it on by clicking in the Editor menu / Run / Autoload file to
Workspace, and you opened some file in the Editor and select Run or
press F9, then you can edit the running program. This can be much fun
and can nearly be like typing in a spreadsheet program.
Also attempts were made to create a Formula Editor, which you can see in
the different versions of formulatest.lg.
Some work was also put into Internationalization of the user interface
including almost all hard-coded strings as well as of the Logo language,
which can now be translated to other languages. The only language
translated to is German currently, but the translations of the user
interface and the language are user-definable.
A new sandbox-like safe run mode is introduced with the new primitive
runSecure, which is especially needed when using aUCBLogo as a
Webserver. CGI scripting, as well as running aUCBLogo as a Service is
now possible. So on can now write complete web applications in Logo. But
database access is not yet provided. It will probably be included into
one of the next versions.
In trying to provide a safe language even in restricted memory
situations, most crashes on out-of-memory errors were possible to be
avoided now.
The same security reasons lead to investigations about circular data
structures, which now should not lead to infinite loops inside the
interpreter any more.
A -nogui commandline option has been introduced, to allow
quasi-standalone-applications being written in Logo. Examples can be
seen in the Windows version of aUCBLogo-4.7; there are a few symbolic
links: am2, landscape4, etc.
Turtle shapes are now supported. There still are problems drawing with a
3D turtle shape, but 2D ones should work well.
The Vars debugging window has been expanded to meet the needs of Object
Orientation, by viewing it the variables as a tree structure. Even
procedure definitions can be inspected in this window now.
The new lexical variable scope can be accessed by using the special form
"be" instead of "to" for the procedure definition. be's can be nested,
so complex progrems might be divided into tree-like smaller units, which
can improve top-down development.
To create an Object, simply use a procedure defined with "be", which
should not output anything explicitly, but has local variables, and
assign the call of that procedure to a variable. This is pretty much the
same as in Elica. The only drawback of the current implementation is,
that one must put parentheses around a member function call which has
one or more arguments. A member function call is done like a Table
lookup, using either a dot . or a singlequote ' as operator. Using dot
is nice for dynamic calls, where the function name is inside a variable
or is the result of a function itself. Using singlequote is like the dot
in C++ or Java; it is indeed converted to dot-quote ." internally.
Now it is possible to use all primitives of the new class Window with
any control or Frame, which makes it possible to configure almost any
property of the corresponding wxWidget. This has been achived by
inventing some kind of virtual multiple inheritance, by using one
virtual function inside wxWindow, wxWindow::d, which accesses a pointer
data to an array of Nodes defined in every derived class.
The "Thread" primitive has already been evaluated a long time. By
discussions with Pavel Boytchev it got clear, that there must be some
faster solution which does not need so much synchronization overhead, as
a operating system scheduled thread needs. The solution is the new
primitive "Fiber", which is currently implemented on Windows only, and
uses scheduling done by Logo itself, so it has nearly no synchronization
overhead.
With the key combination Ctrl+Up you can retrive a list of the commands
you've typed into the console before. This list is saved on exit. When
you want to delete the list, simply delete the file
username-aUCBLogo.history (replace username with the name with which you
are logged in). This can be very useful because it saves typing, when
the called Logo routines output a lot of text in the console, and you
want to go back and redo something.
You can now get a copy of the aucblogo.dll, which you can use to extend
aUCBLogo in a convenient way, by not needing to compile aUCBLogo itself,
but only your extensions, then linking with the DLL. So you can invent
new primitives in C++ for time-critical routines, which would be too
slow in the interpreted Logo.
Additionally many new primitives have been written and some extended,
see the list below.
This was my TODO list so far:
10) Vars window as TreeCtrl v
20) this in Vars window v
30) set this->bit.table_expand temporarily to true v
40) change << to Push(…) v
50) fix Calls window (hard) v
60) Vars & Calls & Graph rollback v
70) reverse stepping (Shift-F7/8); Flags in Menu v
80) setDebugRingbufferSize + Menu entry v
90) History (Ctrl-up) in Console v
100) correct memory counting in runSecure v
110) aucblogo.dll v
120) molecules.lg v
130) enable Breakpoints again (hard!) v
140) and, or with Lists v
150) shadows again v
160) out-of-mem v
170) untreeify v
180) "to editing" should contain all procs in the editor v
edit running programs v
190) special Vars X v
200) examples catalog v
210) update .exe location v
220) setLogoFontsDir v
230) internationalization v
240) error strings v
250) SaveAs bug v
260) Find: mark word v
270) change error mark color v
280) PolyStart/End->Polygon, Tesselation, Surface, Graphic v
290) support circular structures better
with fewer crashes v
300) -nogui v
310) Editor Print v
320) remove table1 table2
330) Turtle shapes:
XOr v
3D
340) menu for memory window v
350) upgrade to wxWidgets-2.8.3 v
360) Window Docking (wxAui) v
370) Threads window
380) Window => Inheritance v
390) many bugs fixed
400) make rpm & debian package
410) make the examples run
420) Help updated on:
AFONTS and aucblogo.dll
be BitFill BitPasteFast BitPasteTo BitPasteToScaled
CGI CombSort CombSortInPlace Commandline countThreads Cylinder
defineBe DLCall disableTextureFont
enableTextureFont expandBackslashes
Fiber fill Form
getArchitectureName getEndiannessName getEnv getEnvTable
getOperatingSystemFamilyName getOperatingSystemIdName
getOwner getPortIdName getProcessID getThreadID getUser
GraphEnter Graphic GraphLeave
hideLogoConsolew hideLogoMainFrame History
inherit iSeqIA Items
killThread
LineColumn LineTColumn LineRow loadLayout loadLocal
LogoConstants LogoFontsDir LogoLanguage
makeTree makeTreeFromBody MouseButtons Multithreading
Namespace Nodes Norm
Objects or orthographic
Polygon
readListFlat readListFlatLine readListFlatRaw readListFlatTags
readRawLine recreateGUI redefinable?
renameFile renderLogoAsHTML renderLogoFileAsHTML
reverseStepping runSecure
saveLayout Scopes setEnv setErallOnRun setExpandBackslashes
setFillTolerance setFocusOnRun setFPUStatusFlags setGenSym
setLogoFontsDir setLogoLanguage setNamespace
setPenSize setPlayOnSwap setPointSize setProcessIdleInterleaving
setRedefinable setScreenRange setStartup
setTurtleShapes setUser Shell showLogoConsolew showLogoMainFrame
specialVars startup Surface
Table Tesselation this Thread ThreadJoinable
Threads toInt TurtleShapes
yield
wxWindowFunctions WWW-Server
____________________________________________________________________
What's next?
Now that I have prepared the lexical scope & multithreading,
I plan to implement a partial, integrated compiler for aUCBLogo.
Partial, because I think a full compiler is very difficult.
Integrated, because it's easier to debug a compiler from within Logo.
Maybe it will evolve to a full compiler, but that's a long way.
Don't forget to have fun when testing aUCBLogo-4.7 ! ;-)
Cheers,
Andreas Micheler
in discussions about Lhogho Pavel Boytchev pointed me to upx.exe,
which can compress .exe files a lot.
After I tested it with aUCBLogo-4.7 and it reduced the size of
aucblogo.exe to below 2MB, I've made a new package.
I'd like to inform you about that. :-)
Cheers,
Andreas