Release Notes for Version 4.7

Help Contents Release Notes Release Notes for Version 4.7
Release Notes Release Notes for Version 4.69

Release Notes for Version 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 mdFloatArray 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

Release Notes Release Notes for Version 4.69