Notes in progress about software
    Updated: 2004-02-20
Created: 2004-09-20
    This document is an incomplete draft.
    
      Three types of simulation
      Discrete simulation programs can be structured around
	activities, events or processes:
      
	- Activitity oriented simulations are described in terms of
	  work accomplished and the resources used and their changes of
	  state.
 
	- Event oriented simulations are described as to how they
	  influence the state of the entire system and create future
	  events.
 
	- Process oriented simulations involve the description of
	  chains of actions of the components of the system and the way
	  each sequence of actions interferes with the others.
 
      
      From
	
	  Applicazioni del SIMULA-67,
	  I. Spadafora,
	  CNUCE,
	  probably around 1976
	.
     
    
      
Excessive language customizability is harmful
    
    
      
For and against transparent interposition
    
    
      Workspace based multipurpose environment vs. frameworks
      Emacs, Mozilla vs. separate applications, and portability.
     
    
      Monolithic programs vs. modular programs
      Modular programs are great for developers.
      Unfortunately monolithic programs are more more convenient to
	deploy.
      There are also strong social reasons to minimize dependencies
	for the user.
     
    
      Definitions of database and very large database
      
	- A database is a mass of data whose working set cannot fit in
	  memory, that is every operation results in at least one disk
	  access.
 
	- A very large database is one of a size larger than it can
	  be backed up offline.
 
      
     
    
      
A little extra care or flexibility in program design can go a
	long way
    
    
    
      Executable two level grammars, or two levels for
	semantics
@Book{Cleaveland76,
  author =       "J. C. Cleaveland and R. C. Uzgalis",
  title =        "Grammars for programming languages: what every
		  programmer should know about grammar",
  publisher =    "American-Elsevier",
  year =         "1976",
  keywords =     "2-LVWG two level VWG grammar",
}
      Affix or 2 level grammars, Uzgalis and Cleaveland
     
    
      Interesting little known OS features
      
	- Unmapped segments in MUSS
 
	- Message transfer and not copying in MUSS
 
	- Dual sequence/index numbers in process id in MUSS
 
	- Programs as libraries, commands as entry points in MUSS
 
	- Local capabilities in Accent
 
	- Typed messages in Accent
 
	- Passing ports in messages in Accent
 
	- Control passing in Elmwood
 
	- User code level paging in Tenex
 
	- Installable schedulers in KeyKOS
 
	- Portals, user level domains in the BSD proposal
 
      
     
    
      Interesting little known language features
      
	exchange: in Smalltalk-80 
	with blocks in Pascal 
	reducible procedures in PL/1 
	areas and area based pointers in
	  PL/1 
	virgin variable attribute by Dijstra 
	ref type in Algol 68 
	label in Lisp 
	- dynamic scoping
 
	- instantiation, binding and call in SL/5
 
	- Partial application or freezing in POP-2
 
	- Parallel arrays in Jovial
 
	- Having the 
	  expr
.function(args)
	  syntax equivalent to
	  function(expr,args)
	  and viceversa like in POP-2.