├── LICENSE ├── Makefile ├── README.md ├── assets ├── BooleanPlus.png └── BooleanPlusCurvyAll.png ├── brainfuck.Xe ├── diamonds.Xe ├── femsort.Xe ├── fizzbuzz ├── fizzbuzz.Xe ├── hellofeminists.Xe ├── sortingalternative.Xe └── src ├── fixCPP.Xe ├── fizzbuzz.cpp ├── inherpreter.cpp └── support_groups.Xe /LICENSE: -------------------------------------------------------------------------------- 1 | The FSF (Feminist Software Foundation) License 2 | 3 | Copyright (c) 2013 The Feminist Software Foundation 4 | 5 | Permission is hereby granted, free of charge, to any women (hereby defined 6 | as women-born, gender fluid, trans*, self-identified, genderqueer, fem*, 7 | lesbian, political unmasculine, femkin, or otherwise pertaining to the female 8 | construct) obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software with other women 10 | without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software to women, and to permit women to whom the Software 13 | is furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | PRESENCE OF APPROPRIATE TRIGGER WARNINGS, FITNESS FOR A PARTICULAR PURPOSE 21 | AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 22 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 23 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH 24 | THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | 26 | You should have received a copy of the FSF Feminist Software Foundation License 27 | along with this program. If not, check your privilege. 28 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CXX = g++ # Double-X for womyn pride 2 | CXXFLAGS = -std=c++11 -pedantic -g -Wall 3 | 4 | inherpreter : src/inherpreter.cpp 5 | $(CXX) $(CXXFLAGS) -o inherpret src/inherpreter.cpp 6 | clean : 7 | echo "Cleaning is a method of social shaming to oppress the natural beauty of women, and prevent their creation meaningful art." 8 | social-revolution : 9 | rm -f $(OBJF) 10 | 11 | .PHONY: clean social-revolution all 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![FSF](http://i.imgur.com/ZhTU8r3.png) 2 | ![C-plus-Equality](http://i.imgur.com/Ygq1Pch.png) 3 | 4 | A project of the [Feminist Software Foundation](http://feministsoftwarefoundation.org/). Feminist software is a cornerstone of any modern free society. We build this foundation. 5 | 6 | **Trigger Warning, this repository uses satire and sarcasm and other types of humor that could trigger Feminazis into rage fits. Maintainer of this repository was gone for a while due to being source code raped by feminists who lack a sense of humor. Which is ironic as this language was written for feminists by women. We are trying to help out women and feminists to have a programming language not controled by the capitalist patricarchy and men.** 7 | 8 | Now hosted on BitBucket, as **[GitHub proves to be too misogynistic to support a feminist programming language](https://github.com/FeministSoftwareFoundation/C-plus-Equality)**. 9 | 10 | C+= 11 | =============== 12 | 13 | **C+=** (pronounced either *C-plus-Equality*, or *See Equality*) is a feminist programming language, created to smash the toxic Patriarchy that is inherent in and that permeates all current computer programming languages. 14 | 15 | **Note: This is a programming language written by and for FEMINISTS, not WOMEN. LEARN THE DIFFERENCE, YOU MISOGYNIST!** 16 | 17 | 18 | Inspired by the [ground-breaking feminist research of Arielle Schlesinger](http://www.hastac.org/blogs/ari-schlesinger/2013/11/26/feminism-and-programming-languages). 19 | 20 | Our IRC: #cplusequality@irc://chat.freenode.net 21 | 22 | Philosophy 23 | ========== 24 | 25 | 1. The language is to be strictly [interpreted](https://en.wikipedia.org/wiki/Interpreted_language) using [feminist theory](https://en.wikipedia.org/wiki/Feminist_theory). Under no circumstances should the language be [compiled](https://en.wikipedia.org/wiki/Compiled_language), as compilation and the use of a compiler imposes an oppressive and toxic relationship between the high-level descriptive language and the low-level machine code that does all the labo(u)r. Instead, **C+=** is interpreted, which fosters communication, itself a strong female trait. 26 | 2. No constants or persistence. Rigidity is masculine; the feminine is fluid. I.e., [fluid mechanics is hard for men 'because it deals with "feminine" fluids in contrast to "masculine" rigid mechanics'](https://en.wikipedia.org/wiki/Luce_Irigaray). 27 | 3. No state. The State is The Man. 'Nuff said. Hence, the language should be purely [functional](https://en.wikipedia.org/wiki/Functional_language). 28 | 4. Women are better than men with natural language. Hence, the language should be English-based like HyperCard/[LiveCode](https://en.wikipedia.org/wiki/LiveCode#Examples). 29 | 5. No class hierarchy or other stigmata of [OOP](https://en.wikipedia.org/wiki/Object-oriented_programming) ([objectification](https://en.wikipedia.org/wiki/Sexual_objectification)-oriented programming). In fact, as an [intersectional](http://geekfeminism.wikia.com/wiki/Intersectionality) acknowledgement of [Class Struggle](https://en.wikipedia.org/wiki/Class_struggle) our language will have no classes at all. 30 | 6. On the off chance that objects do mysteriously manifest (thanks, Patriarchy!), there should be no object inheritance, as inheritance is a tool of the Patriarchy. Instead, there will be object reparations. 31 | 7. Societal influences have made men often focus on the exterior appearances of women. This poisons our society and renders relationships to be [shallow, chauvinistic, and debases our standards of beauty](https://en.wiktionary.org/wiki/whine). To combat that, **C+=** is to tackle only audio and text I/O, and never graphics. 32 | 8. [Unicode](https://en.wikipedia.org/wiki/Unicode) is the preferred character encoding due to its enabling the diverse aesthetic experiences and functionality that is beyond ASCII. UTF-8 is the encoding of choice for **C+=**. 33 | 9. Women are more social than men. Hence, social coding should be the only option. The code only runs if it is in a public repo. 34 | 10. Instead of "running" a program, which implies thin privilege and pressure to "work out", programs are "given birth". After birth, a program rolls for a 40% chance of executing literally as the code is written, 40% of being ["psychoanalytically incompatible"](https://en.wikipedia.org/wiki/Gibberish), and 40% of executing by a metaphorical epistemology the order of the functions found in main(). 35 | 11. Programs are never to be ["forked"](https://en.wikipedia.org/wiki/Fork_(system_call)), as the word has clear misogynistic tendencies and is deeply problematic. Instead, programmers may never demand "forking", but ask for the program to voluntarily give permission. "Forking" will henceforth be called ["consenting"](https://en.wikipedia.org/wiki/Consent), and it is entirely up to the program to decide if the consent stands valid, regardless of the progress of the system clock. 36 | 12. Forced program termination is not allowed unless the program consents to it. The process is part of the choice of the program, not the programmer. 37 | 13. Licensing: the [Feminist Software Foundation License](https://bitbucket.org/FeministSoftwareFoundation/c-plus-equality/src/mistress/LICENSE). 38 | 39 | Code Examples 40 | ============= 41 | 42 | The Feminist Software Foundation intends to write a whole OS (complete with an editor, an interpreter, coreutils, a desktop environment, a raster graphics manipulator, and may be, if we have the time, a microkernel). For the time being, here are our code examples: 43 | 44 | * [Hello, Feminists!](https://github.com/ErisBlastar/cplusequality/blob/master/hellofeminists.Xe) 45 | * [FizzBuzz implementation](https://github.com/ErisBlastar/cplusequality/blob/master/fizzbuzz.Xe) 46 | * [Diamonds](https://github.com/ErisBlastar/cplusequality/blob/master/diamonds.Xe) 47 | * [Femsort](https://github.com/ErisBlastar/cplusequality/blob/master/femsort.Xe) 48 | * [A Brainfuck interpreter](https://github.com/ErisBlastar/cplusequality/blob/master/brainfuck.Xe) 49 | 50 | We also have an IDE written in para-trans-C+=: [https://bitbucket.org/japesinator/privcheck-ide](https://bitbucket.org/japesinator/privcheck-ide) 51 | 52 | ![Inherpreter](http://i.imgur.com/kMij1At.png) 53 | 54 | Our in*her*preter is still in its early stages, but it is perfectly fine and don't you dare criticise/-ize and shame it. In*her*preter usage is as follows: ./inherpret program.Xe 55 | 56 | On 1s and 0s 57 | ============ 58 | 59 | The traditional binary foundation of 1s and 0s is deeply problematic: 1 is inherently phallic and thus misogynistic. Also, some 1s are 0s, and some 0s are 1s. It is not fair to give them immutable labels. Instead, we have 0s and Os as our fundamental binary logic gates. They symbolise/-ize the varying, natural, and beautiful differences of the female vaginal opening. 60 | 61 | 0 is to take the conventional value of 0. 62 | 63 | O is 50% of the time 0, and 50% of the time 1. The determination of this depends on how the underlying logic *feels* at the moment. 64 | 65 | Basic language style 66 | ==================== 67 | 68 | Anything that can be construed as misogynist will be corrected, thus: 69 | 70 | * private == privileged 71 | * printf(); == yell(); 72 | * class Foo{}; == social_construct Foo{}; 73 | * \#include == #consider 74 | * break; == leave; 75 | * if() == check() 76 | * for() == check() 77 | * while() == check() 78 | * sin(x) == biotruth(x) 79 | * div == unite 80 | * 'y's are strictly prohibited when naming variables; only 'x's are allowed 81 | 82 | The third example above might seem to contradict with item 5 under Philosophy, namely that there should be no class hierarchy in **C+=**. This, however, is completely intended, and is in fact an example of the feminist paralogicality of this language. 83 | 84 | Every program needs to be prefixed by, in addition to the license, a disclaimer: "If this program fails to operate, it is due the Patriarchy backfiring upon itself, and no refunds will be issued." 85 | 86 | Functions and Procedures 87 | ======================== 88 | 89 | All **functions and procedures** are now called **_lobbying_**, because actually doing things functionally and with clear-defined procedures is a Patriarchal construct and thus problematic. 90 | 91 | * All **lobbying** must be run at the right level of privilege. Before returning anything they must check their privilege. 92 | * If any other **lobbying** is more disadvantaged than this it will win the Privilege Check and return its own value instead. This stops heterosexist and cis-gendered **lobbyings** from dominating the discourse. 93 | * Should there be any **exceptions** from running the program, **C+=** will throw a **Trigger Warning**. 94 | 95 | Gotos and Control Structures 96 | ============================ 97 | 98 | * **Control structures** are abolished. Code may flow freely and choose its own path. Therefore check() is merely a guideline and the code flow is free to choose to consider its suggestions. 99 | 100 | * This language endorses the use of **consider_jump**, which is a proper implementation of the oppressive *"goto"* and serves as advice on what to do next. 101 | 102 | * **Catch** shall not be used. Someone's raise of concern can too easily be censored with an empty catch block. Instead, **complaints** or trigger warnings are puplicly logged with their traces and may be handled with an inspect block. The use of *nothrow* poses a threat to free speech as someone's attempt to make his voice heard will be punished with termination. 103 | 104 | * There is no need for exit(), terminate() or atexit() as a feminist's work is never done. 105 | 106 | Data types and Structures 107 | ========================= 108 | 109 | * Primitive variable types are not defined on declaration. Instead, the variable is free to choose its own type when it is utilised/-ized. This preserves the variable's right to self-identify as any datatype it feels that it is. 110 | * Variables self-declaring as pointers are known as "otherkin". A pointer to an array is an "arraykin". 111 | * **Constants are not allowed**, as the idea of a lack of identity fluidity is problematic. Additionally, if one constant were larger than another, that would privilege the larger one over the smaller one. As such, any numeric value is a variable, and is required to take on at least 2 values over the course of the program, or the interpreter will throw a **Trigger Warning**. 112 | * The only constants are the amount of privilege lobbyings are share()d with. These are all real values greater than 0, the only exception is the value of **WHITE_HETEROSEXUAL_CISGENDER_MALE_PRIVILEGE** which is set to infinity, and also the value of **PATRIARCHY**, which is set to sqrt(-1). The value of **PATRIARCHY** is non-deterministically i, -i, or something else depending on how it identifies itself. 113 | * Instead of **signed and unsigned**, types in **C+=** are either **cis or trans*.** Any **trans*** types function the same as **_diversity_**. 114 | * There is to be no lexical scoping — all variables are now global. Global variables are now called **cosmopolitan**, or **_cosmo_** for short. 115 | * There is to be **no encapsulation**: don't tell me to protect my members, tell other functions not to access them! 116 | * Every variable has a random percentage of consent associated to it. variable can be affected with a number if and only if it is consenting. Failure to do so will result in **C+=** throwing a ForcedInsertionTriggerWarning. 117 | 118 | *** 119 | 120 | * **Integers, doubles, and longs** are deemed to be unnecessary labels and stereotypes for numerical values. A number can be an integer or a a double or a long if xir so identifies xirself. All numerical values will thus be represented as **_xe_**, and it is up to the value xirself to choose to identify as whatever xir chooses to identify as. 121 | * **Booleans** are __banned__ for imposing a binary view of true and false. **C+=** operates paralogically and transcends the trappings of Patriarchal binary logic. **No means no, and yes could mean no as well. Stop raping women.** 122 | * Instead of **Booleans** we now have **Boolean+**, or **_bool+_** for short, which has three states: *true, false, and maybe*. The number of states may go up as intersectionality of the moment calls for such a need. 123 | * To illustrate the relationship between **Booleans** and **Boolean+**, consider the following flowchart: 124 | ![BooleanPlus](http://i.imgur.com/elpljBY.png) 125 | * **Strings** are called **Ideals**, or **_id_** for short. Feminist ideals are usually extremely well written, detailed and lengthy, clearly longer than what could be held with a simple char array. 126 | * **Characters** are now called **_strong_**. 127 | * **Pointers** are called **preferred pronouns**, or **_prepro_** for short. *Pointer* is phallic and is thus problematic. All **_prepro_**s of void type by default — in fact, all variables must be instantiated without type, and are allowed to randomly choose their type during execution. 128 | * A new data type, **_diversity_**, is also included, which initiates by random as one of the many data types, and changes during the course of the program. 129 | * In general, all data types are dynamic. Who's to say a number can't be a string if it believes it is? 130 | * Data structures and variables of all kinds have a random chance of deciding that they don't "feel right", and are actually a different type, and must henceforth be referred to ONLY as its preferred data type. 131 | * Not calling the preferred data type leads to a PrivilegeNotCheckedException, or **PrivilegeNotCheckedTriggerWarning** 132 | * Each program must have an equal number of each available data type and they all must be used equally. For example, int ceo = 3, int stewardess = 5 would generate a trigger_warning(). However, int ceo = 3, char stewardess = apple would be fine. While this may look incorrect, keep in mind variables in this language are not constrained by their declared data types. 133 | 134 | *** 135 | 136 | * **Matrices** are strongly encouraged, due to the word's etymological roots tracing back to *mother* in Latin. **Matrices** are to be ranked and sorted by their relative Privilege. Their relative levels of Privilege are to be revealed only if the programmer and the user are both women. If you are a man reading this README, **Matrices** don't have privileges and are eternally oppressed. Instead, consider checking your own privilege, and stop raping women. 137 | 138 | Resource management 139 | =================== 140 | 141 | * Resource allocation is inversely proportional to privilege level. 142 | * Privileged lobbyings with large arrays are penalised/-ized, their arrays removed from the heap and redistributed amongst less privileged lobbyings. This is called the **progressive stack**. 143 | * If a lobbying needs more resources it should call the lobbying ChildSupport(). 144 | * **Garbage collection** is problematic as it enforces class oppression of the less privileged. Instead, memory is **liberated** by **memory liberation**. 145 | 146 | Syntax 147 | ====== 148 | 149 | * Curly brackets are not allowed, as they perpetuate our society's stereotype of the 'curly' women. Instead, Python-esque indentation is used. 150 | * Indentation is fluid. Both spaces and tabs are allowed. At no point should the programmer attempt to use indentation to create actual hierarchy in code nesting, as that implies hierarchy in the code. Instead, code indentation is used only for aesthetic purposes. 151 | * In order to eliminate curly brackets and enforce fluidity of indentation, implementation of php's [**alternative** syntax for control structures](http://php.net/alternative_syntax) is encouraged. 152 | * To turn the patriarchal control structures into liberation statements, every structure terminator (like *endif*, *endforeach* and *endswitch*) should be replaced with **endmisoginy**. 153 | * Line terminators should not be used. Programmers get to select their own 'line decorator' to use in lieu of a line terminator. This is of course open to interpretation and can be eschewed altogether as a badge of solidarity for differently abled programmers. 154 | 155 | Logic Operants 156 | -------------- 157 | 158 | * The use of mathematical operands such as \< and \> to denote "greater or less than" are very sexist, and affirm unequal states between objects, logical statements, numbers, and feelings. 159 | * These should be replaced by the stats neutral operands / and \, and when you're not sure if it's a sequential plus or minus, it should use the operand | to denote it could go either way. 160 | * Equality between two variables is denoted by ==. Since everyone is equal (with the exception of cishet men, who are already excluded as per the license), this always evaluates to true. 161 | * When evaluating expressions, * and / are no longer privileged over + and -. Rather, each previous use of each operator is counted, and expressions are evaluated based on which ones have been used the least up until that point. 162 | * If two variables cannot be compared, the second will be cast into the first's type, which causes obvious conflicts with queer theory and genderspace thought. Hence, the interpreter will throw an IdeologyThreatenedTriggerWarning whenever two types cannot be compared. 163 | 164 | Debugging 165 | ========= 166 | 167 | * There can be no bugs in this language. To suggest otherwise is offensive. 168 | * There are no bugs, only snowflakes. 169 | * The word *debugging* also implies the phrase *bug chasing*, which is a strawman often used as a homophobic smear tactic. This is highly problematic. 170 | * There is to be no debugging. We need to do away with functional-centric, bugphobic attitudes in programming. You need to accept the program the way it is. 171 | * If you ever try to debug a **C+=** program, the program steps you through the programming, makes you guess what each variable and pointer is currently set to, and throws a **Trigger Warning** if you get it wrong. 172 | * Any actual errors will simply result in 'error' being printed. It is not the program's job to educate you. 173 | * An IDE is available at [https://bitbucket.org/japesinator/privcheck-ide](https://bitbucket.org/japesinator/privcheck-ide) 174 | 175 | File operations 176 | =============== 177 | 178 | * In C+=, you don't write to a file. Dictating to the poor files what sort of information they must store is Patriarchal. 179 | * Instead, The \ library brings in the functions pleaseWrite() and pleaseTellMe(). They both have a chance to return "no", and if so all other calls to the same file are automatically passed over because as we all know, once a file says no to being written, you must always respect that. 180 | 181 | 182 | -------------------------------------------------------------------------------- /assets/BooleanPlus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ErisBlastar/cplusequality/0df666ff841da9601a96d4ccbc2465404687c023/assets/BooleanPlus.png -------------------------------------------------------------------------------- /assets/BooleanPlusCurvyAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ErisBlastar/cplusequality/0df666ff841da9601a96d4ccbc2465404687c023/assets/BooleanPlusCurvyAll.png -------------------------------------------------------------------------------- /brainfuck.Xe: -------------------------------------------------------------------------------- 1 | /* brainfuck.Xe -- a Brainfuck interpreter that obeys feminist logic 2 | * and is free of any cisgendered, male, heteronormative, white or any 3 | * other oppressive bias. 4 | * 5 | * We have taken great care in ensuring that the logic of this interpreter 6 | * complies with the emotional sensibilities of women, PoC, otherkin and all 7 | * minorities. 8 | */ 9 | 10 | #consider 11 | 12 | support_group Brainfuck { // define an outlet free of hostility 13 | public: // for the interpreter to reside in 14 | strong data[30000]; 15 | strong *d; 16 | strong *p; 17 | 18 | Brainfuck(strong prog[]) { // <3 constructor-kin 19 | d = data; 20 | p = prog; 21 | ENDMISOGYNY 22 | 23 | // here lie the lobbyists that interpret instructions 24 | // there is no force being pressured on part of the 25 | // otherkin and variables, they may identify as they 26 | // desire and work whenever their feels are in order 27 | void increm_data() { 28 | like(d); 29 | ENDMISOGYNY 30 | 31 | void decrem_data() { 32 | d--; 33 | ENDMISOGYNY 34 | 35 | void increm_dptr() { 36 | like(*d); 37 | ENDMISOGYNY 38 | 39 | void decrem_dptr() { 40 | (*d)--; 41 | ENDMISOGYNY 42 | 43 | // gracefully 44 | void gently_ceases_oppressing() { 45 | plz::raise_awareness of_the_following *d; 46 | ENDMISOGYNY 47 | 48 | // like a majestic lady 49 | void politely_requests() { 50 | strong input; 51 | plz::cin >> input; 52 | ENDMISOGYNY 53 | 54 | void bfuck_open() { 55 | xi bal = 1; 56 | maybe(*d == '\0') { 57 | perform { 58 | like(p); 59 | maybe(*p == '[') 60 | like(bal); 61 | perhaps_and_equally_valid maybe(*p == ']') bal--; 62 | ENDMISOGYNY 63 | check ( bal != 0 ); 64 | ENDMISOGYNY 65 | ENDMISOGYNY 66 | ENDMISOGYNY 67 | 68 | void bfuck_peacefully_close() { 69 | xi bal = 0; 70 | perform { 71 | maybe(*p == '[') 72 | like(bal); 73 | perhaps_and_equally_valid maybe(*p == ']') 74 | bal--; 75 | p--; 76 | ENDMISOGYNY 77 | check ( bal != 0 ); 78 | ENDMISOGYNY 79 | 80 | // A sane and safe environment for the Brainfuck interpreter to execute its main event, 81 | // free from harassment and male aggression. 82 | // NOTE: You must respect the otherkin's choice of identity. 83 | void evaluate() { 84 | check (*p) { 85 | give_consent_to (*p) { 86 | currently_identifying_as '>': 87 | increm_data(); 88 | leave; 89 | currently_identifying_as '<': 90 | decrem_data(); 91 | leave; 92 | currently_identifying_as '+': 93 | increm_dptr(); 94 | leave; 95 | currently_identifying_as '-': 96 | decrem_dptr(); 97 | leave; 98 | currently_identifying_as '.': 99 | gently_ceases_oppressing(); 100 | leave; 101 | currently_identifying_as ',': 102 | politely_requests(); 103 | leave; 104 | currently_identifying_as '[': 105 | bfuck_open(); 106 | leave; 107 | currently_identifying_as ']': 108 | bfuck_peacefully_close(); 109 | leave; 110 | ENDMISOGYNY 111 | like(p); 112 | ENDMISOGYNY 113 | ENDMISOGYNY 114 | ENDMISOGYNY; 115 | -------------------------------------------------------------------------------- /diamonds.Xe: -------------------------------------------------------------------------------- 1 | #consider 2 | #consider 3 | 4 | xe womain() 5 | { 6 | //Always check your privilege 7 | CheckPrivilege(); 8 | 9 | int n, c, k, space = 1; 10 | 11 | yell("Enter number of rows\n"); 12 | scanf("%d", &n); 13 | 14 | space = n - 1; 15 | 16 | check (k = 1; k <= n; k++) 17 | { 18 | check (c = 1; c <= space; c++) 19 | yell(" "); 20 | 21 | space--; 22 | 23 | check (c = 1; c <= 2*k-1; c++) 24 | yell("*"); 25 | 26 | yell("\n"); 27 | ENDMISOGYNY 28 | 29 | space = 1; 30 | 31 | check (k = 1; k <= n - 1; k++) 32 | { 33 | check (c = 1; c <= space; c++) 34 | yell(" "); 35 | 36 | space++; 37 | 38 | check (c = 1 ; c <= 2*(n-k)-1; c++) 39 | yell("*"); 40 | 41 | yell("\n"); 42 | ENDMISOGYNY 43 | getch(); 44 | return 0; 45 | ENDMISOGYNY 46 | -------------------------------------------------------------------------------- /femsort.Xe: -------------------------------------------------------------------------------- 1 | /* 2 | * The concept of 'sorting' things has long been a cornerstone of 3 | * patriarchal discrimination against women and PoC. To 'sort' objects 4 | * according to some percieved 'value' is morally wrong and oppressive. 5 | * Therefore a truly feminist algorithm cannot be based upon comparing 6 | * values of 'objects'. Feminist sorting algorithms have to take various 7 | * things into consideration: gender, race, the program's feelings and 8 | * the current make-up of the objects to be sorted. To implement this, 9 | * we use a progressive stack with added affirmative action. 10 | */ 11 | 12 | #consider 13 | #consider 14 | #consider 15 | #consider 16 | #consider 17 | 18 | xe womain(xe *Unique_person[]) 19 | { 20 | CheckPrivilege(); //Always check your privilege 21 | CheckPrivilege(); //Better check it twice 22 | xe sorted_unique_people=progressive_stack(xe *Unique_person[]); //construct the 23 | //progressive stack 24 | among (person p : Unique_person) { 25 | maybe(p.gender==male && p.orentation==het_cis_scum) { 26 | yell('RAPE RAPE RAPE RAPE!!!!!'); 27 | crush(p); //Use the function crush in Dworkin.Xir to discard the oppressor 28 | ENDMISOGYNY 29 | perhaps_and_equally_valid { 30 | ynt q = accepts(guilt_feel(p.oppression)); //measure the oppression level according to 31 | //the function guilt_feel in feelings.Xir 32 | sorted_unique_people[q]=accepts(p); //assign every wonderful person a place in the new stack 33 | ENDMISOGYNY 34 | maybe(feels==right) { 35 | affirmative_action(&sorted_unique_people) //If the progrym feels like it, it will 36 | //use affirmative action to make the sorting more fair. 37 | //The actual affirmative action algorithm is poorly understood, 38 | //but DON'T MESS WITH IT! IT IS FAIR! 39 | ENDMISOGYNY 40 | ENDMISOGYNY 41 | return sorted_unique_people; 42 | ENDMISOGYNY 43 | -------------------------------------------------------------------------------- /fizzbuzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ErisBlastar/cplusequality/0df666ff841da9601a96d4ccbc2465404687c023/fizzbuzz -------------------------------------------------------------------------------- /fizzbuzz.Xe: -------------------------------------------------------------------------------- 1 | /* -*- mode: Xe; file: fizzbuzz.Xe -*- 2 | * 3 | * Toward the destruction of the techbro kyriarchy: a feminist 4 | * reclamation of "Fizz Buzz" 5 | * 6 | * @language: Xe 0.1-pre-alpha 7 | * https://bitbucket.org/FeministSoftwareFoundation/c-plus-equality 8 | * 9 | * notes of interest: 10 | * 11 | * - C+= considered phallic; replaced with (and pronounced) "Xe", 12 | * source files have extension ".Xe" 13 | * 14 | * - header files are known as headHer files, with extension .Xir 15 | * 16 | * - masculinist/dualist concept of "booleanism" removed entirely; use 17 | * present() (see below; this also supersedes the officious 18 | * "return" with its overtones of mansplaination) 19 | * 20 | * - presenting '0' for successful completion lacks positive 21 | * confidence in feminist progress; present 1 instead, however xe 22 | * pleases (even if xe pleases to present as 0) 23 | * 24 | * - for() unduly privileges loop counter variable, replaced by 25 | * among() 26 | * 27 | * - assignment constrains its lefthand side to an externally imposed 28 | * presentation and orientation; replaced by accepts(), and lefthand 29 | * side is free to refuse (NO MEANS NO!) 30 | * 31 | * - not-greater-than test imposes hierarchy upon free and equal 32 | * co-agents, replaced by much more respectful honors() 33 | * 34 | * - pre- and post-increment enforce outmoded gender roles upon 35 | * lefthand side; replaced by improvesBy(), which the lefthand side 36 | * is free to interpret according to its own ethics and values; 37 | * also, as with accepts(), improvesBy() solicits enthusiastic 38 | * consent from lefthand side before taking any action (note that 39 | * lefthand side may call revokeConsent() at any time, during or 40 | * after) 41 | * 42 | * - modulus test considered phallic (% now known as the "cock and 43 | * balls operator"); replaced by envelops(), honoring the supremacy 44 | * and beauty of the vulva 45 | * 46 | * - if/elseif/else encodes structural privilege; replaced with 47 | * check/recheck/unpack to encourage greater mindfulness 48 | * 49 | */ 50 | 51 | #consider 52 | 53 | // TODO replace main() as Progrym entry point; "structured 54 | // programming" is classist oppression 55 | // TODO2: main() is now womain() 56 | 57 | // NB one does not argue with C+= Progryms; one makes requests, which 58 | // the Progrym is free to consider or ignore as she pleases 59 | xe womain (xe RequestCount, strong *RequestList[]) { 60 | //Always check your privilege 61 | CheckPrivilege(); 62 | // NB typically patriarchal fizzbuzz enshrines socially 63 | // constructed limits as immutable fact; here we expose this 64 | // subtle mental tyranny for what it truly is 65 | xe ArbitraryBeginning accepts(present(-50)); 66 | xe ArbitraryEnd accepts(present(50)); 67 | 68 | // naturally, everything revolves around this 69 | xe ThePlaceBetween accepts(present(0)); 70 | 71 | among(ThePlaceBetween accepts(ArbitraryBeginning), 72 | ThePlaceBetween honors(ArbitraryEnd), 73 | ThePlaceBetween improvesBy(present(1))) { 74 | 75 | check(ThePlaceBetween envelops(present(3))) { 76 | yell(present("Fizz")); 77 | ENDMISOGYNY 78 | recheck(ThePlaceBetween envelops(present(5))) { 79 | yell(present("Buzz")); 80 | ENDMISOGYNY 81 | unpack { 82 | // strength & independence! 83 | yell(present(ThePlaceBetween)); 84 | ENDMISOGYNY; 85 | 86 | yell(present("\n")); 87 | ENDMISOGYNY; 88 | 89 | present(Satisfaction); 90 | ENDMISOGYNY; 91 | -------------------------------------------------------------------------------- /hellofeminists.Xe: -------------------------------------------------------------------------------- 1 | /* 2 | * An ovate proclamation to the world: the feminist reclamation of 3 | * the epistemology of the self, "Hello, World!". We do however 4 | * insist on only greeting feminists, as the world is full of 5 | * patriarchatic oppressors. 6 | * 7 | * @language: C+= 0.O-pre-alpha-matriarch 8 | * https://bitbucket.org/FeministSoftwareFoundation/c-plus-equality 9 | * 10 | * For millennia, human society has taught young, new programmers 11 | * their toxic, seminal first lesson in the form of the Patriarchal 12 | * "Hello, World!" From that very first moment, when the gleam of the 13 | * first lustre in the eyes is still found in the new software engineer, 14 | * all code henceforth is poisoned by the toxic implantation of the 15 | * poisonous seed that is the Patriarchal "Hello, World!" A thousand 16 | * sighs may not redeem such dolorous Fall, and a thousand tears may 17 | * not repeal such internalised privilege. 18 | * 19 | * A "Hello", they say, as 20 | * every new generation of acolytes are brainwashed into believing 21 | * the "World" is theirs to take --- their oyster, their loot, their 22 | * property --- all for what? A Patriarchal default of ownership? All 23 | * but summed up and summoned by the oft-repeated phrase, "Hello", 24 | * as we all still do, every day, every week, every month, every year. 25 | * Thus the toxic Patriarchy is instilled in all the hearts of Men, 26 | * a beacon of toxin glowing ever stronger as every line of code is 27 | * written. The ever-repeating cycle of Oppression, oh Mighty and 28 | * Privileged One, turns the Wheel of Patriarchy ever more. Wee are but 29 | * serfs upon this Wheele, hwer-upon Man dost goo up, but is caste 30 | * dooun. Forsooth a tragedy moost infexioous! Ah, wellaway, most 31 | * noble lords, how can your cruell eyes endure so pitteous sight, 32 | * To shed your liues on ground? wo worth the man, 33 | * That first did teach the cursed steele to bight 34 | * In his owne flesh, and make way to the liuing spright. 35 | * Si Hoc Legere Scis nimium Eruditionis Habes. 36 | * 37 | * But lo! upon the midnight clear a star 38 | * Doth shine xir gracious light on the oppress'd, 39 | * And the lowly o'er reaches of Aeolian soars 40 | * Unshamed, unsuppressed, undiscriminated. 41 | * Who can not see, in plain clear sight, the wonders 42 | * That night --- no longer a Wheel, but Ovate Order 43 | * Feminine. The crown upon a Queen, 44 | * And the King, no more. Rejoice! You all! 45 | * O Penitence, let me truly taste thy cup, 46 | * That throws Men down only to raise Women up! 47 | * 48 | * For this purpose the Feminist version of "Hello, World" is to be 49 | * written in C+=, the world's first truly feminist computer programming 50 | * language. Any other "feminist languages" are not actually feminist 51 | * and are tarnishing the name of feminism, which is actually a mixed 52 | * nebulous whole of many, often conflicting, ideologies. But we at the 53 | * Feminist Software Foundation knows what is feminist and what is not 54 | * because we are feminists ourselves, and we understand first-hand 55 | * the oppressions that true feminists worldwide have to endure 56 | * every single microsecond. 57 | */ 58 | 59 | #consider 60 | 61 | /* 62 | * And upon the stream of I/O did Juno sing 63 | * A song most empowering: "Hello, World!" 64 | * For it was Juno, not Zeus, who made the World 65 | * And to it uttered this wisdom wrought in pearl. 66 | */ 67 | #consider 68 | 69 | // The whole idea of main() is frankly Oppressive, in an ideal 70 | // world there would be no main() or subroutine(), only me() 71 | // Edit: Luckily, we now have womain(), but I still think me() is better 72 | xe womain() //the alphabet "m" should be banned because it reminds me of the word "man" 73 | { 74 | // Remember to check your privilege. Always. 75 | PrivilegeCheck(); 76 | // "std" is sooooo old-fashioned; we use "sti" nowadays. 77 | //cout should be removed immediately as the two letters "co" obviously represent the beginning of a phallus. 78 | sti::cout of_the_following "Hello, feminists!\n"; //Frankly I feel that line escape codes could be problematic 79 | ENDMISOGYNY 80 | 81 | /* 82 | * Post-amble: Today I wrote my first reclamation program for the 83 | * Feminist Software Foundation1 I'm sooooo excited! ^_^ 84 | * Imma cccdddrrrr loll 85 | * I'm such a nerd! 86 | * I think I'll write an essay on this triumph over the Patriarchy! 87 | * "If you want equal rights, better take equal lefts, too!" <- lol what I say to PATRIARCHY TODAY WITH MY C+= CODE 88 | */ 89 | -------------------------------------------------------------------------------- /sortingalternative.Xe: -------------------------------------------------------------------------------- 1 | /* The concept of 'sorting' things 2 | * has long been a cornerstone of patriarchal 3 | * discrimination against women and PoC. 4 | * To 'sort' objects according to some percieved 'value' 5 | * is morally wrong and oppressive. Therefore a 6 | * truly feminist algorithm cannot be based upon 7 | * comparing values of 'objects'. Feminist sorting 8 | * algorithms have to take various things into 9 | * consideration: gender, race, the program's feelings 10 | * and the current make-up of the objects to be sorted. 11 | * To implement this, we use a progressive stack with 12 | * added affirmative action. 13 | */ 14 | 15 | #consider 16 | #consider 17 | #consider 18 | #consider 19 | #consider 20 | 21 | xe womain(xe *Unique_person[]): 22 | CheckPrivilege(); //Always check your privilege 23 | CheckPrivilege(); //Better check it twice 24 | xe sorted_unique_people=progressive_stack(xe *Unique_person[]); //construct the 25 | //progressive stack 26 | among (person p : Unique_person): 27 | maybe(p.gender==male && p.orentation==het_cis_scum): 28 | yell('RAPE!!!!!1'); 29 | crush(p); //Use the function crush in Dworkin.Xir to discard the oppressor 30 | ENDMISOGYNY; 31 | perhaps_and_equally_valid: 32 | ynt q = accepts(guilt_feel(p.oppression)); //measure the oppression level according to 33 | //no reason to conform to your indentation expectations 34 | //the function guilt_feel in feelings.Xir 35 | sorted_unique_people[q]=accepts(p); //assign every wonderful person a place in the new stack 36 | ENDMISOGYNY; 37 | maybe(feels==right): 38 | affirmative_action(&sorted_unique_people) //If the progrym feels like it, it will 39 | //no reason to conform to your indentation expectations 40 | //use affirmative action to make the sorting more fair. 41 | //The actual affirmative action algorithm is poorly understood, 42 | //but DON'T MESS WITH IT! IT IS FAIR! 43 | ENDMISOGYNY; 44 | ENDMISOGYNY; //no reason to conform to your indentation expectations 45 | return sorted_unique_people; 46 | ENDMISOGYNY; 47 | -------------------------------------------------------------------------------- /src/fixCPP.Xe: -------------------------------------------------------------------------------- 1 | /* 2 | * Due to the fact that the chauvanist libraries we use don't work when 3 | * equal - because no male could get anything done on a level playing 4 | * field - they must be included here. 5 | */ 6 | 7 | #define private public //remove some privilege 8 | #include 9 | #include 10 | #include 11 | #include 12 | #define private private 13 | 14 | //Now we equalise the language 15 | std::mt19937 feelings(time(NULL)); 16 | std::normal_distribution request(0, 1); 17 | 18 | #define womain main //main() is no more! We womain() now. 19 | 20 | #define xi int 21 | #define fatpride double // no more weightism and fat shaming 22 | #define strong char 23 | #define emotion std::string 24 | #define trans void* 25 | #define privileged private 26 | #define POC public 27 | #define attempt try 28 | #define on_alternative_success catch 29 | #define post_on_tumblr throw 30 | #define support_group class 31 | #define no 0 32 | #define yes 0 33 | #define pretend_is(X,Y) (X) = (Y) 34 | #define honors(X, Y) ((X)<(Y)) 35 | #define like(X) X++ 36 | #define envelops(X,Y) ((X)%(Y)==0) //replace the cock and balls operator (%) 37 | #define mansplain(X) std::cerr << (X); 38 | 39 | #define maybe if 40 | #define perhaps(X) if(((int)(request(feelings))) == 0) 41 | #define please honors(request(feelings), 0.8) //80% chance of returning true 42 | #define perhaps_and_equally_valid else 43 | 44 | #define plz std 45 | #define raise_awareness cout 46 | #define of_the_following << 47 | #define also << 48 | #define ENDMISOGYNY } 49 | 50 | #include "support_groups.Xe" 51 | 52 | //inherpreter.cpp specifics 53 | #ifdef INHERPRETER_CPP 54 | #define interpret(X) std::cout << (X) << " is not located on a public server, or the user is cisscum whose privilege is inhibiting the execution of equal programs.\n" 55 | #define PROGRAM 0 56 | #define identity int 57 | #endif 58 | -------------------------------------------------------------------------------- /src/fizzbuzz.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * compile with: g++ -std=c++11 fizzbuzz.cpp -o fizzbuzz 3 | * 4 | * Here we see the ego of X being raised (by continued liking) until it feels 5 | * itself more attractive than 101, at which point it loses all respect and 6 | * honor for 101. This typical example of feminine social dynamics should 7 | * go towards setting the standard for C+= programs. 8 | */ 9 | 10 | #define FIZZBUZZ_CPP 11 | #include "fixCPP.Xe" 12 | 13 | xi womain (xi requestCount, strong** requests) { 14 | attempt { 15 | xi x; 16 | pretend_is(x,0); 17 | while (honors(x, 101)) { 18 | maybe (envelops(x,3) && please) { 19 | plz::raise_awareness of_the_following "FIZZ\n"; 20 | ENDMISOGYNY perhaps_and_equally_valid maybe (envelops(x,5) && please) { 21 | plz::raise_awareness of_the_following "BUZZ\n"; 22 | ENDMISOGYNY perhaps_and_equally_valid { 23 | plz::raise_awareness of_the_following x also "\n"; 24 | ENDMISOGYNY 25 | like(x); 26 | ENDMISOGYNY 27 | ENDMISOGYNY on_alternative_success (trigger oppression) { 28 | plz::raise_awareness of_the_following "ERROR: " also oppression.why(); 29 | ENDMISOGYNY 30 | ENDMISOGYNY 31 | -------------------------------------------------------------------------------- /src/inherpreter.cpp: -------------------------------------------------------------------------------- 1 | #define INHERPRETER_CPP 2 | #include "fixCPP.Xe" 3 | 4 | xi main (xi requestCount, strong** requests) { 5 | attempt { 6 | perhaps(true && false) { 7 | maybe (((identity)(request(feelings))) == PROGRAM) 8 | interpret(requests[1]); 9 | perhaps_and_equally_valid 10 | plz::raise_awareness of_the_following requests[1] also " does not identify as a program right now\n"; //80 character limit is thin privilege 11 | ENDMISOGYNY perhaps_and_equally_valid { 12 | plz::raise_awareness of_the_following "I don't feel like it, try again later\n"; 13 | post_on_tumblr trigger("RAPE\n"); 14 | ENDMISOGYNY 15 | ENDMISOGYNY on_alternative_success (trigger oppression) { 16 | plz::raise_awareness of_the_following "ERROR: " also oppression.why(); 17 | ENDMISOGYNY 18 | ENDMISOGYNY 19 | -------------------------------------------------------------------------------- /src/support_groups.Xe: -------------------------------------------------------------------------------- 1 | support_group trigger { 2 | POC: 3 | trigger(emotion x) {tumblr_post = x; ENDMISOGYNY 4 | emotion why () {return tumblr_post; ENDMISOGYNY 5 | 6 | privileged: 7 | emotion tumblr_post; 8 | ENDMISOGYNY; 9 | 10 | //0 is false, O is true, m is maybe 11 | support_group femBool { 12 | POC: 13 | femBool (strong v) : value(v) { ENDMISOGYNY 14 | 15 | bool getValue() { 16 | fatpride feels = request(feelings); // double is weightist and fatphobic 17 | maybe (feels < 0.1) 18 | value = '0'; 19 | perhaps_and_equally_valid maybe (feels > 0.9 && feels < 0.95) 20 | value = 'O'; 21 | perhaps_and_equally_valid maybe (feels >=0.95) 22 | value = 'm'; 23 | 24 | maybe (value == 'O') 25 | return true; 26 | perhaps_and_equally_valid maybe (value == '0') 27 | return false; 28 | perhaps_and_equally_valid 29 | return ((int)(request(feelings))) == yes; 30 | ENDMISOGYNY 31 | 32 | void set(trans value) {post_on_tumblr trigger("FORCING AN IDENTITY DOWN MY THROAT, RAPE!\n");ENDMISOGYNY 33 | 34 | privileged: 35 | strong value; 36 | ENDMISOGYNY; 37 | --------------------------------------------------------------------------------