q2K BHP
Black History Portal
THE BHP WIRE —
HIDDEN TRUTHS
What's New!
THE JOURNEY THROUGH TIME

Explore Black History

Explore the people, places, events, achievements, struggles and stories that shaped our journey.

✊🏾

Civil Rights

Movements, leaders, victories and the continuing fight for equality.

⚙️

Black Inventors

Innovation, patents, science, technology and world-changing contributions.

🏆

Sports

Pioneers, champions, Negro Leagues, records, activism and excellence.

♟️

People

Meet the people whose lives, choices and achievements shaped the journey.

📍

Places

Black towns, communities, institutions and places where history happened.

📜

Events

Moments that changed communities, movements, institutions and the nation.

Enter a person, place, event, or topic.
MY'STORY

The MOVE Fire

This is a personal recollection on the Move fire on May 13, 1985 Philadelphia police fired thousands of rounds at the MOVE house, city officials approved dropping an explosive device on the roof, the resulting fire was allowed to burn, 11 people—including five children—died, and 61 homes were destroyed. Philadelphia City Council later called it a “brutal attack carried out by the City of Philadelphia on its own citizens” and acknowledged that no individual faced criminal consequences for the bombing. One timeline correction worth preserving for the BHP record: the major previous MOVE-police confrontation was August 8, 1978, about seven years before the bombing, not a year or two earlier. Officer James Ramp was killed, other police and firefighters were wounded, nine MOVE members were later convicted, and television cameras recorded police beating Delbert Africa during his arrest. The 1985 MOVE Commission later specifically criticized city planners for failing to adequately use lessons from that 1978 confrontation. And that actually strengthens the point you’re making: 1985 did not happen without precedent or institutional memory. There had already been a deadly confrontation with MOVE, years of conflict, negotiations and police involvement before Osage Avenue.

MORE →
BLACK FACTS
The Truths They Never Taught You...

Wilmington 1898 — An American Coup

Wilmington, North Carolina once had a thriving Black middle class and an elected interracial government. In 1898 white supremacists used violence to overthrow that government, kill Black residents and drive many others from the city.

MORE →
BHP gathered finds from its connected research sources. Showing the 4 strongest Black History matches.
← BACK TO RESULTS
Wikipedia

Cyclone (programming language)

Cyclone
Designed byAT&T Labs
DeveloperCornell University
First appeared2002; 24 years ago (2002)
Stable release
1.0 / May 8, 2006; 20 years ago (2006-05-08)
Websitecyclone.thelanguage.org
Influenced by
C, C++[2]
Influenced
Rust, Project Verona

The Cyclone programming language was intended to be a safe dialect of the C language.[3] It avoids buffer overflows and other vulnerabilities that are possible in C programs by design, without losing the power and convenience of C as a tool for system programming. It is no longer supported by its original developers, with the reference tooling not supporting 64-bit platforms. The Rust language is mentioned by the original developers for having integrated many of the same ideas Cyclone had.[4]

Cyclone development was started as a joint project of Trevor Jim from AT&T Labs Research and Greg Morrisett's group at Cornell University in 2001. Version 1.0 was released on May 8, 2006.[5]

Language features

[edit]

Cyclone attempts to avoid some of the common pitfalls of C, while still maintaining its look and performance.[citation needed] To this end, Cyclone places the following limits on programs:

To maintain the tool set that C programmers are used to, Cyclone provides the following extensions:

Cyclone looks, in general, much like C, but it should be viewed as a C-like language.

Pointer types

[edit]

Cyclone implements three kinds of pointer:

The purpose of introducing these new pointer types is to avoid common problems when using pointers. Take for instance a function, called foo that takes a pointer to an int:

int foo(int* p);

Although the person who wrote the function foo could have inserted NULL checks, let us assume that for performance reasons they did not. Calling foo(NULL); will result in undefined behavior (typically, although not necessarily, a SIGSEGV signal being sent to the application). To avoid such problems, Cyclone introduces the @ pointer type, which can never be NULL. Thus, the "safe" version of foo would be:

int foo(int@ p);

This tells the Cyclone compiler that the argument to foo should never be NULL, avoiding the aforementioned undefined behavior. The simple change of * to @ saves the programmer from having to write NULL checks and the operating system from having to trap NULL pointer dereferences. This extra limit, however, can be a rather large stumbling block for most C programmers, who are used to being able to manipulate their pointers directly with arithmetic. Although this is desirable, it can lead to buffer overflows and other "off-by-one"-style mistakes. To avoid this, the ? pointer type is delimited by a known bound, the size of the array. Although this adds overhead due to the extra information stored about the pointer, it improves safety and security. Take for instance a simple (and naïve) strlen function, written in C:

int strlen(const char* s) {
    int i = 0;
    if (!s) {
        return 0;
    }
    while (s[i] != '\0') {
        i++;
    }
    return i;
}

This function assumes that the string being passed in is terminated by '\0'. If this code was passed the unterminated string char buf[6] = {'h','e','l','l','o','!'};, strlen would iterate beyond the end of the string, into memory not associated with the string. Non ANSI C functions such as such as strnlen seek to address such problems.

The Cyclone's strlen is similar to the C version:

int strlen(const char? s) {
    int n = s.size;
    if (!s) {
        return 0;
    }
    for (int i = 0; i < n; i++, s++) {
        if (*s == '\0') {
            return i;
        }
    }
    return n;
}

Here, strlen bounds itself by the length of the array passed to it. Each of the kinds of pointer type can be safely cast to each of the others, and arrays and strings are automatically cast to ? by the compiler. (Casting from ? to * invokes a bounds check, and casting from ? to @ invokes both a NULL check and a bounds check. Casting from * to ? results in no checks whatsoever; the resulting ? pointer has a size of 1.)

Dangling pointers and region analysis

[edit]

Consider the following code, in C:

char* itoa(int i) {
    char buf[20];
    sprintf(buf, "%d", i);
    return buf;
}

The function itoa allocates an array of chars buf on the stack and returns a pointer to the start of buf. However, the memory used on the stack for buf is deallocated when the function returns, so the returned value cannot be used safely outside of the function. While GNU Compiler Collection and other compilers will warn about such code, the following will typically compile without warnings:

char* itoa(int i) {
    char buf[20];
    sprintf(buf, "%d", i);
    char* z = buf;
    return z;
}

GNU Compiler Collection can produce warnings for such code as a side-effect of option -O2 or -O3, but there are no guarantees that all such errors will be detected. Cyclone does regional analysis of each segment of code, preventing dangling pointers, such as the one returned from this version of itoa. All of the local variables in a given scope are considered to be part of the same region, separate from the heap or any other local region. Thus, when analyzing itoa, the Cyclone compiler would see that z is a pointer into the local stack, and would report an error.

Fat pointers

[edit]

A fat pointer is used for allowing pointer arithmetic. Fat pointers must be declared with @fat. For example, argv is often declared as type char** (a pointer to a pointer to a character), or alternatively thought of as char*[] (pointer to an array of characters). In Cyclone, this is instead expressed as char*@fat*@fat (a fat pointer to a fat pointer to characters).

Cyclone instead allows ? to represent *@fat. Thus, the two declarations are equivalent:

int main(int argc, char?? argv);
// equivalent to the more verbose declaration
int main(int argc, char*@fat*@fat argv);

Parameterized types

[edit]

Similar to templates in C++, Cyclone has a form of generic programming.

typedef struct LinkedList<`a> {
    `a head;
    struct LinkedList<`a>* next;
} LinkedList<`a>;

// ...
LinkedList<int>* ll = new LinkedList{1, new LinkedList{2, null}};

An "abstract" type can be used, that encapsulates the implementation type but ensures the definition does not leak to the client.

abstract struct Queue<`a> {
    LinkedList<`a> front;
    LinkedList<`a> rear;
};

extern struct Queue<`a>;

Namespaces

[edit]

Namespaces exist in Cyclone, similar to C++. Namespaces are used to avoid name clashes in code, and follow the :: notation as in C++. Namespaces can be nested.

namespace foo {
    int x;
    int f() {
        return x;
    }
}

namespace bar {
    using foo {
        int g() {
            return f();
        }
    }

    int h() {
        return foo::f();
    }
}

Pattern matching

[edit]

Pattern-matching can be accomplished in Cyclone like so:

int g(int a, int b) {
    switch ($(a, b - 1)) {
        case $(0, y) && y > 1:
            return 1;
        case $(3, y) && f(x + y) == 7:
            return 2;
        case $(4, 72):
            return 3;
        default:
            return 4;
    }
}

A let declaration is used to match a pattern and expression.

typedef struct Pair {
    int x;
    int y;
} Pair;

void f(Pair p) {
    let Pair(first, second) = p;
    // equivalent to:
    // int first = p.x;
    // int second = p.y;
    // ...
}

Type inference

[edit]

In Cyclone, rather than using auto like C and C++ or var in Java and C#, Cyclone instead uses _ (an underscore) to denote a type-inferred variable.

_ x = (SomeType*)malloc(sizeof(SomeType));
// instead of:
SomeType x = (SomeType*)malloc(sizeof(SomeType));

_ myNumber = 100; // inferred to int

Exceptions

[edit]

Cyclone features exceptions. An uncaught exception will halt the program. Like Java, Cyclone features a null pointer exception, called Null_Exception.

typedef FILE File;

File* f = fopen("/etc/passwd", "r");
try {
    int code = getc((File* @notnull)f);
} catch {
    case &Null_Exception:
        printf("Error: can't open /etc/passwd\n");
        return 1;
    case &Invalid_argument(s):
        printf("Error: invalid argument: %s\n", s);
        return 1;
}

One can also manually throw exceptions:

throw new Null_Exception("This is a null exception");

See also

[edit]

References

[edit]
  1. ^ "Open Access Cyclone (programming language) Journals · OA.mg". oa.mg. Archived from the original on 30 October 2022. Retrieved 30 October 2022.
  2. ^ "Cyclone for C programmers". cyclone.thelanguage.org. Retrieved 12 October 2025.
  3. ^ Jim, Trevor; Morrisett, J. Greg; Grossman, Dan; Hicks, Michael W.; Cheney, James; Wang, Yanling (10 June 2002). "Cyclone: A Safe Dialect of C". Proceedings of the General Track of the Annual Conference on USENIX Annual Technical Conference. ATEC '02. USA: USENIX Association: 275–288. ISBN 978-1-880446-00-3.{{cite journal}}: CS1 maint: periodical has ISBN (link)
  4. ^ "Cyclone". cyclone.thelanguage.org. Archived from the original on 21 May 2006. Retrieved 11 December 2023.
  5. ^ "Cyclone". Cornell University. Archived from the original on 15 October 2022. Retrieved 30 October 2022.
[edit]

Presentations:

Source: Wikipedia. Article content is retrieved live through the MediaWiki API.

No preview image
Wikipedia

Cyclone (programming language)

The Cyclone programming language was intended to be a safe dialect of the C language. It avoids buffer overflows and other vulnerabilities that are possible in C programs by design, without losing the power and convenience of C as a tool for system programming. It is no longer supported by its original developers, with the reference tooling not supporting 64-bit platforms. The Rust language is mentioned by the original developers for having integrated many of the same ideas Cyclone had. Cyclone development was started as a joint project of Trevor Jim from AT&T Labs Research and Greg Morrisett's group at Cornell University in 2001. Version 1.0 was released on May 8, 2006.

MORE →
No preview image
Wikipedia

Greg Morrisett

John Gregory Morrisett is a computer science scholar who has been serving as dean and vice provost of Cornell Tech in New York City since June 2019. Previously he served as dean for computing and information science at Cornell University in Ithaca from 2015 to 2019 and director of the Center for Research on Computation and Society at Harvard University from 2012 to 2014. Morrisett received a Bachelor of Science with major in mathematics and computer science from the University of Richmond in Virginia in 1989. From Carnegie Mellon University in Pennsylvania, he received a Master of Science in computer science in 1991 and a Doctor of Philosophy in computer science in 1995. The group he was part of at Cornell University created the Cyclone programming language in 2002. In 2013, he became a Fellow of the Association for Computing Machinery.

MORE →
No preview image
Wikipedia

Hermes (programming language)

Hermes is a language for distributed programming that was developed at IBM's Thomas J. Watson Research Center from 1986 through 1992, with an open-source compiler and run-time system. Hermes' primary features included: Language support of processes and interprocess communication. Compile-time verification that operations use initialized data. Representation-independent data aggregates called tables. Lack of pointers. It used typestate analysis to check variables transitions errors, to rule out some semantically non meaningful transitions from one state to another (i.e. starting from a value, some sequences of operations on a variable are nonsensical), of which reading an uninitialized variable is a special case. In this role of compile-time checking of data initialization is similar to definite assignment analysis performed by Java, Cyclone and C#. Hermes and its predecessor, NIL (Network Implementation Language), were the earliest programming languages supporting this form of initialization checking. Typestate was actually used more extensively, to generate compiler-inserted "delete" operations.

MORE →
Wikipedia

C (programming language)

C is a general-purpose programming language created in 1972 by Dennis Ritchie. By design, C gives programmers relatively direct access to the features of typical CPU architectures, customized for the target instruction set. It has been and continues to be used to implement operating systems (especially kernels), device drivers, and protocol stacks, though its use in application software is decreasing. C is used on computers ranging from supercomputers to microcontrollers and embedded systems. C was initially developed as a successor to the B programming language at Bell Labs by Ritchie between 1972 and 1973. Its initial purpose was to construct utilities running on Unix, and was later applied to re-implementing the kernel of the Unix operating system. During the 1980s, C gradually gained popularity, leading to it becoming one of the most widely used programming languages, with C compilers available for practically all modern computer architectures and operating systems. The book The C Programming Language, co-authored by the original language designer, served for many years as the de facto standard for the language. C has been standardized since 1989 by the American National Standards Institute (ANSI) and, subsequently, jointly by the International Organization for Standardization (ISO) and the International Electrotechnical Commission (IEC). C is an imperative procedural language, supporting structured programming, lexical variable scope, and recursion, with a static type system. It was designed to be compiled to provide low-level access to memory and language constructs that map efficiently to machine instructions, all with minimal runtime support. Despite its low-level capabilities, the language was designed to encourage cross-platform programming. A standards-compliant C program written with portability in mind can be compiled for a wide variety of computer platforms and operating systems with few changes to its source code. Although neither C nor its standard library provide some popular features found in other languages, it is flexible enough to support them. For example, object orientation and garbage collection are provided by external libraries GLib Object System and Boehm garbage collector, respectively. Since 2000, C has typically ranked as the most or second-most popular language in the TIOBE index.

MORE →
TOPIC OF THE DAY

Greenwood / Black Wall Street

Before the 1921 destruction of Tulsa’s Greenwood District, Black residents had created a remarkable center of business and community life. The district included stores, professional offices, entertainment venues and homes owned by Black citizens. Understanding Greenwood means learning what was built—not only what was burned.

MORE →
TRIVIA QUESTION OF THE DAY

Which Black woman became the first elected to the United States Congress?

Shirley Chisholm, elected in 1968.