ComputerScientist
174 subscribers
14 photos
3 files
206 links
▜ The Inventor

Stuff that inspire you to create.

See also: ▙ @LitMind
Download Telegram
#TalkingSemicolon
How to insert GUI

One first makes a core logic, then connects a GUI to it, not the other way around.
GUIs are only methods for displaying things; if your GUI controls your logic, your program model is plain wrong.

Your core has to have support for actions made possible in the GUI, if you make the core based on the UI, it will be pure shit.
#TalkingSemicolon
Was Smalltalk an inspiration for Citron's syntax?

Yes, it was.

Was it more?

It was much more than the syntax. The idea of a dynamic dispatch system with pure OO, came from Smalltalk

Have you reinvented or refined Smalltalk?

Not really, Citron is quite different, it has different thoughts behind it, it tried to do things very differently.

#Citron #Smalltalk
#TalkingSemicolon

condition ifTrue: consequence

There's also an ifFalse:, because why waste time not'ing a boolean?

#Citron
Nile's object-oriented philosophy is a combination of class-based and prototype-based programming; it is both and neither.

Class-based
There are classes but there is no inter-class inheritance.

Prototype-based
Classes are themselves objects, but there is no delegation; overriding behavior is done explicitly upon qualifications.
“You don't have to make a functionality for every nice terminology.”
#TheSemicolon
The mind is a self-rewriting computer.
dead variables := written to, but never read again
Swing versus AWT
Every Swing lightweight interface ultimately exists within an AWT heavyweight component because all of the top-level components in Swing (JApplet, JDialog, JFrame, and JWindow) extend an AWT top-level container.

AWT components
• are heavyweight
• are implemented by platform-specific code.
• are rendered and controlled by a native peer component specific to the underlying windowing system.

Swing components
• are lightweight
• are written entirely in Java and therefore are platform-independent.
• do not require allocation of native resources in the OS's windowing toolkit.
• Rendering is provided by Java 2D.
• More powerful and flexible
• More components such as tabbed panel, scroll panes, trees, tables, and lists.
• Customizable look and feel

After Java 6, both Swing and AWT components can co-exist in one GUI without Z-order issues.

#Java

“Fuck both of them, and fuck Java on top of it. But if you must, of course, Swing.”
#TheSemicolon
Complement qualifications
A set of qualifications is defined as the universal set. This means that the children of this universalSet have to be qualifed for at least or exactly one of them.
“Either throw Windows out of the computer or throw the computer out of the window.”
#Richard_Stallman
“The principle of simplicity is the central theme of Ockham’s approach, so much so that this principle has come to be known as "Ockham’s Razor"; Ockham uses the razor to eliminate unnecessary hypotheses.
— Sharon Kaye
“If you have built castles in the air, your work need not be lost; that is where they should be. Now put the foundations under them.”
#Henry_David_Thoreau, advocating top-down design
“When walking in open territory, bother no one. If someone bothers you, ask him to stop. If he does not stop, destroy him.”
#Anton_LaVey, Eleven Satanic Rules of the Earth

also very good advice for an MMORPG.
A strong pilot propels the idea.
Minimum object size is 16 bytes for modern 64-bit JDK since the object has 12-byte header, padded to a multiple of 8 bytes. In 32-bit JDK, the overhead is 8 bytes, padded to a multiple of 4 bytes.

References have a typical size of 4 bytes on 32-bit platforms and on 64-bits platforms with heap boundary less than 32Gb (-Xmx32G), and 8 bytes for this boundary above 32Gb.

#Java

read more
#characters
Arrows
#language #Pharo
Pharo

First appeared: 2008

Features:
• live programming
• purely object-oriented
• dynamically typed
• reflective
• inspired by #Smalltalk
• single inheritance between classes
• traits: groups of methods
"Pharo syntax fits on a single postcard."
Impromptu
- is an environment for live coding. It is built around #Scheme.

First appeared: 2005

Temporal recursion
Looping is performed by "temporal recursion", i.e. by having a function asynchronously schedule a future call to itself as its final action.

Though syntactically Scheme-like, it is semantically closer to #C, and is designed for real-time sound synthesis and other computationally heavy tasks. A programmer/performer can create and schedule code for future execution, as well as data events such as notes and graphics objects. It allows audio synthesis and video composition. It is compiled to machine language by #LLVM.
#toWatch

▶️ A Study in Keith

A live coding performance in Impromptu by Andrew Sorensen. The first two minutes (1:56) are silent, while the performer writes the program that will produce the introduction of the piece. From then on, he modifies the code on the fly to evolve the composition.
#Nile
The member operator (.)

Property get
"a.prop":
if a is an object
if local variable prop exists
=> a.prop;
else
=> call(a.type, 'get', prop, a)
else
type = ...
=> call(type, 'get', prop, a)


Method call
"a.meth(args)":
if a is an object
=> call(a.type, meth, a, args)
else
type = ...
=> call(type, meth, a, args)