Categories
c programming C standard programming languages

C Standards: the triumph of bureaucracy

 

C89  The ANSI standard.

C23 the most recent draft. 

Three modest proposals for fixing the C standard. 

PLOS paper ISO C is not suitable for operating systems. 

Torvalds on aliasing.   Ritchie on aliasing.

Three modest proposals for the C standard WG14

 

 

 

Categories
theory

State machine methods

Papers on automata theory and sequential functions

The automata theoretic roots of process algebra.

Large State Machines and Sequential functions 

Classic papers

Hartmanis “Loop free products”

Rabin-Scott Finite Automata and Their Decision Problems

 

 

 

Categories
academics

Scientific credibility and IEEE

Hundreds of Paper-Mill Papers Peddled in Ads Were Later Published

A study by social scientist Anna Abalkina of Germany’s Free University of Berlin and colleagues found that nearly half of 4,407 IEEE conference paper titles advertised by suspected paper mills between 2021 and 2025 were later published. The ads openly sold authorship positions for as little as $64, with more than 2,000 advertised papers eventually appearing in conference proceedings. IEEE has retracted 66 identified papers and is considering expanded screening software and stronger oversight of conference contractors. — Science; Jeffrey Brainard (August 12, 2026)

Categories
archived C standard

C23 standard (final draft)

Skip to PDF content
Categories
theory

Von Neumann on the empirical roots of mathematics

See also: Von Neumann’s critique of automata theory and logic in computer science

Skip to PDF content
Categories
vy papers

Specifying digital systems using sequential functions

These papers introduce sequential functions for specifying digital systems  like operating systems and networks.  The mathematical basis comes from Moore machines, Moore machine products, and  primitive recursive functions on finite sequences.  Primitive recursive functions on sequences were described by Rózsa Péter  in the 1950s but their connection with automata was not explored. They provide an alternative to state diagrams and other traditional methods of defining Moore machines, and can concisely define very large scale state machines, interconnected machines, and abstract properties of the machines. Composition of primitive recursive sequential functions corresponds to automata products.  The method is aimed at system designs, not verification of program text and is intended as an aid to system designers so that they can understand properties of their systems before writing code.  The first paper is an introduction to the method and includes a number of examples, one of which is a proof that Paxos is safe.

 State machines for large scale computer software and systems

The second paper shows how to use sequential functions define temporal logic like properties – for example, that something is always true, or must become true “eventually”. The sequential function analogs are more expressive – for example, eventually can be made to depend on different types of events and to work with systems that combine components that change state at different rates and in response to different events.

Specifications like temporal logic but with ordinary mathematics

The third paper gives some historical background on automata theory and argues that the 1970s consensus in Computer Science, that classical automata theory is too limited, was incorrect and ignored, in particular algebraic automata theory and automata products. The paper includes a discussion of  “machine homomorphism” introduced in the 1960s, then modified in  process algebra, and then  eventually forgotten in the process algebra and larger formal methods literature. By the mid 1960s, Moore machines and concurrent products of Moore machines were well understood in the automata theory literature, but for a number of reasons, they were not applied to software specification.

Process algebra and automata theory

Also see Digital Circuits as Moore Machines for models of the real-time behavior of simple digital circuits

 

Unlike most Computer Science research on specification, there is no formal logic or other use of axiomatic methods, no lambda calculus,  no non-determinism, no completed infinities (e.g. infinite sequences of events), not even any category theory needed for sequential functions. Then there is a paper defining modularity mathematically in terms of automata products (improving A mathematical basis for understanding software modularity ). And there is a paper that just presents the theory of sequential functions focused on the mathematics, not the CS applications.

The works are released under the creative commons NC-ND  license   with the added condition that use for training or other purpose in Artificial Intelligence systems is specifically prohibited as violating the prohibition on creating derivative works and/or use for profit. 

Categories
theory

Rabin-Scott Finite Automata and Their Decision Problems

One of the most important Computer Science papers introduced finite state machine language recognizers,  the equivalence between non-deterministic and deterministic finite automata (in terms of what languages they recognize) , the Myhill congruences,  etc.

 

Categories
economics

Al Gore, the Internet, and the Media

Al Gore really did have a pivotal role in the development of the Internet and the incessant and ignorant jeering from the media on this issue did no favors to the American public.

From https://web.eecs.umich.edu/~fessler

Here is the definitive statement on Gore's involvement in "inventing" the
Internet, from the guys who really did:

****************************************************************************
Al Gore and the Internet

By Robert Kahn and Vinton Cerf

Al Gore was the first political leader to recognize the importance of the
Internet and to promote and support its development.

No one person or even small group of persons exclusively "invented" the
Internet. It is the result of many years of ongoing collaboration among
people in government and the university community.  But as the two people
who designed the basic architecture and the core protocols that make the
Internet work, we would like to acknowledge VP Gore's contributions as a
Congressman, Senator and as Vice President.  No other elected official, to
our knowledge, has made a greater contribution over a longer period of
time.

Last year the Vice President made a straightforward statement on his role.
He said: "During my service in the United States Congress I took the
initiative in creating the Internet."  We don't think, as some people have
argued, that Gore intended to claim he "invented" the Internet. Moreover,
there is no question in our minds that while serving as Senator, Gore's
initiatives had a significant and beneficial effect on the still-evolving
Internet. The fact of the matter is that Gore was talking about and
promoting the Internet long before most people were listening.  We feel it
is timely to offer our perspective.

As far back as the 1970s Congressman Gore promoted the idea of high speed
telecommunications as an engine for both economic growth and the
improvement of our educational system.   He was the first elected official
to grasp the potential of computer communications to have a broader impact
than just improving the conduct of science and scholarship. Though easily
forgotten, now, at the time this was an unproven and controversial
concept.  Our work on the Internet started in 1973 and was based on even
earlier work that took place in the mid-late 1960s. But the Internet, as
we know it today, was not deployed until 1983. When the Internet was still
in the early stages of its deployment, Congressman Gore provided
intellectual leadership by helping create the vision of the potential
benefits of high speed computing and communication.  As an example, he
sponsored hearings on how advanced technologies might be put to use in
areas like coordinating the response of government agencies to natural
disasters and other crises.

As a Senator in the 1980s Gore urged government agencies to consolidate
what at the time were several dozen different and unconnected networks
into an "Interagency Network."  Working in a bi-partisan manner with
officials in Ronald Reagan and George Bush's administrations, Gore secured
the passage of the High Performance Computing and Communications Act in
1991.  This "Gore Act" supported the National Research and Education
Network (NREN) initiative that became one of the major vehicles for the
spread of the Internet beyond the field of computer science.

As Vice President Gore promoted building the Internet both up and out, as
well as releasing the Internet from the control of the government agencies
that spawned it.  He served as the major administration proponent for
continued investment in advanced computing and networking and private
sector initiatives such as Net Day. He was and is a strong proponent of
extending access to the network to schools and libraries.  Today,
approximately 95% of our nation's schools are on the Internet. Gore
provided much-needed political support for the speedy privatization of the
Internet when the time arrived for it to become a commercially-driven
operation.

There are many factors that have contributed to the Internet's rapid
growth since the later 1980s, not the least of which has been political
support for its privatization and continued support for research in
advanced networking technology.  No one in public life has been more
intellectually engaged in helping to create the climate for a thriving
Internet than the Vice President.  Gore has been a clear champion of this
effort, both in the councils of government and with the public at large.

The Vice President deserves credit for his early recognition of the value
of high speed computing and communication and for his long-term and
consistent articulation of the potential value of the Internet to American
citizens and industry and, indeed, to the rest of the world.

Version 1.2
Word count: 709

=================================================================
Vint Cerf
WorldCom
22001 Loudoun County Parkway
Building F2, Room 4115, ATTN: Vint Cerf
Ashburn, VA 20147
Telephone (703) 886-1690
FAX (703) 886-0047


Alan M. Gaines
Senior Science Associate for Spatial Data and Information
National Science Foundation
4201 Wilson Blvd., Suite 1070
Arlington, VA 22230

Voice:	+1.703.292.7857
FAX:	+1.703.292.9152

email:	againes@nsf.gov
Categories
vy papers

RTLinux retrospective

Skip to PDF content
Categories
c programming

Kuth’s Merge Sort in C

Taken from Knuth Algorithm S mergesort P162-163 Vol 3 Second edition 1998
The major change is that the scratch buffer is not required to be adjacent and there are some changes because C array indexing starts with 0.  This is very much how a mathematician writes code. You have to remember a larger than usual number of single letter variables and it has a very clever clockwork mechanism as the algorithm shifts between using the two arrays as source and destination, and as it merges in both directions (which seems cache foolhardy). It’s pretty efficient even so.

 


//x is the list to sort, z is a scratch list, N is the number of elements
inline static void kmsort(sort_t *restrict x, sort_t *restrict z, const int N)
{
	int s,p;		//s=0 if from x to scratch, p is sublist size
	int i, j;
        int	k, l;		//2 sublists start,end 
	int d;			// direction of merging
	int q, r;		// remaining elements of list 1 and 2 to merge
	sort_t *R,*D;		//the rource and destination array
	
 L1:	s = 0; p = 1;
 L2:	if (!s) { R = x; D = z; } else { R = z; D = x; }
	i = 0; j = N - 1; k = -1; l = N; d = 1; q = p; r = p;
 L3:	if (!LEQ(R [i], R[j]))
		goto L8;
 L4:	k += d;
	D[k] = R[i];
 L5:	i += 1;
	q -= 1;
	if (q > 0)
		goto L3;
 L6:	k += d;
	if (k == l)
		goto L13;
	else
		D[k] = R[j];
 L7:	j -= 1;
	r -= 1;
	if (r > 0)
		goto L6;
	else
		goto L12;
 L8:	k += d;
	D[k] = R[j];
 L9:	j -= 1;
	r -= 1;
	if (r > 0)
		goto L3;
 L10:	k += d;
	if (k == l)
		goto L13;
	else
		D[k] = R[i];
 L11:	i += 1;
	q -= 1;
	if (q > 0)
		goto L10;
 L12:	q = p;
	r = p;
	d = -d;
	{
		int temp = k;
		k = l;
		l = temp;
	}
	if ((j - i) < p)
		goto L10;
	else
		goto L3;
 L13:	p = p + p;
	if (p < N) {
		s = 1 - s;
		goto L2;
	} else {
		if (s == 0) {	//copy back from scratch
			for (i = 0; i < N; i++) {
				x[i] = z[i];
			}
		}
	}
	return;			//done
}