Questions tagged [language-design]
Questions involving the design and structure of programming languages.
466
questions
8
votes
6answers
651 views
Do any programming languages use types as values? Would there be any point?
The standard way that types are handled in programming languages that have such a concept, is that they are:
removed entirely at compile time and are just used to determine memory layout, function ...
0
votes
1answer
36 views
Appropriate base type for simply typed lambda calculus
Given the following hypothetical programming language:
Intended for practical programming
A simply typed lambda calculus (STLC)
All objects are functions, based on Church encodings
I am aware that ...
4
votes
5answers
445 views
Why don't languages like C have NAND operators?
I know that some golfing languages like APL have a dedicated NAND operator, but I'm thinking about languages like C, C++, Java, Rust, Go, Swift, Kotlin, even instruction sets, etc. since these are the ...
57
votes
9answers
6k views
Why do “checked exceptions”, i.e., “value-or-error return values”, work well in Rust and Go but not in Java?
Java has "checked exceptions", which force the caller of the method to either handle an exception or to rethrow it, e.g.
// requires ParseException to be handled or rethrown
int i = ...
12
votes
1answer
8k views
static globals and anonymous namespaces in C++
Why did C++ make any distinction between static globals (internal linkage) and symbols in an unnamed namespace (external linkage, but no way to refer to it from outside anyway), when introducing the ...
9
votes
2answers
2k views
Why can't an ES2015 WeakMap have primitive keys?
There are six primitive data types in JavaScript:
Boolean, Number, String, Symbol, undefined, null
A WeakMap can't have primitive data types as keys. And a WeakSet can't have primitive values.
Why ...
-1
votes
3answers
267 views
Why are constants declared with `let`?
A few weeks ago, I went on Udemy course on Swift, the instructor mentioned that constants are called let in Swift because it's standard in OOP (JavaScript uses it for example).
I know this may seem ...
92
votes
12answers
31k views
Should I use a parser generator or should I roll my own custom lexer and parser code?
What specific advantages and disadvantages of each way to working on a programming language grammar?
Why/When should I roll my own? Why/When should I use a generator?
24
votes
2answers
15k views
Why are packages and modules separate concepts in Java 9?
Java 9 will have modules in addition to packages.
Usually languages have one or the other.
And most programmers perceive two terms as synonyms.
Modules are built on top of packages, treating them as ...
-1
votes
1answer
155 views
What advantage is gained by continuing to not provide an UPSERT statement in T-SQL (or any given major SQL dialect)?
This question is asking about a generally applicable engineering principle. It is using T-SQL as a specific example, but the question is about the engineering principles behind major SQL dialects in ...
18
votes
10answers
6k views
Function overloading? Yes or no [closed]
I'm developing a statically- and strongly-typed, compiled language, and I'm revisiting the idea of whether to include function overloading as a language feature. I realized that I'm a little bit ...
42
votes
5answers
16k views
When does it make sense to compile my own language to C code first?
When designing an own programming language, when does it make sense to write a converter that takes the source code and converts it to C or C++ code so that I can use an existing compiler like gcc to ...
62
votes
6answers
27k views
Why was C# made with “new” and “virtual+override” keywords unlike Java?
In Java there are no virtual, new, override keywords for method definition. So the working of a method is easy to understand. Cause if DerivedClass extends BaseClass and has a method with same name ...
3
votes
0answers
59 views
Choosing the design of a scientific DSL: purely or impurely functional?
My aim is to create a language specific to the scientific field (which would be used mainly in the field of machine learning and physics) which would be based on the functional paradigm, a paradigm ...
3
votes
3answers
10k views
What are the advantages of pass by value?
I always thought pass by value is a legacy from the early languages, because the designers had never seen anything else. But after seeing the brand new languages like Go adapting the same principle ...
5
votes
5answers
277 views
Reasons to use (and not to use) a repeated delimiter to escape that delimiter?
For the designer of a language syntax, what are some reasons to choose a repeated delimiter to escape that delimiter, instead of having a separate escape character to escape that delimiter. A common ...
81
votes
11answers
16k views
Why F#, Rust and others use Option type instead of nullable types like C# 8 or TypeScript?
AFAIK, Option type will have runtime overhead, while nullable types won't, because Option time is an enum (consuming memory).
Why not just mark optional references as optional, then the compiler can ...
5
votes
1answer
173 views
Real-world scenarios for protected inheritance
C++ supports protected inheritance: A class can derive from a base class B in a way that the "outside" world doesn't see that class "as a B" but the class itself and it's derived ...
1
vote
1answer
63 views
How do covariant parameterized types nested inside invariant parameterized types act?
Here is a concrete example of what I'm asking about:
MutableList[ImmutableList[Object]]
Where ImmutableList is covariant wrt its first parameter, but MutableList is invariant wrt its first parameter. ...
0
votes
4answers
357 views
Why have separate keywords for 'extends' and 'implements' in Java? [closed]
Short answer that I've come to accept:
Firstly, it helps with readability, being able to see which is the superclass apart from interfaces. Secondly, though 'extends' and 'implements' do the same ...
1
vote
2answers
190 views
Is there a statically typed programming language that implements Polymorphism without using a superclass or an interface?
Is there a statically typed programming language that implements Polymorphism without using a superclass or an interface (if such implementation is even possible)?
0
votes
1answer
117 views
How to deal with metaclasses in strong-typed language : is it ok to mix classes and metaclasses?
I'm working on a programming language design ans I'm struggling with how I should type the concept of Class.
Let me show you some code to illustrate my problem :
class MyClass
{
}
function ...
7
votes
4answers
646 views
Why does C++ have classes?
The title is deceptive; the question is really "why does C++ have classes and not only structs?"
Often, people ask why C++ has structs if they are functionally equivalent to classes. The answer is (...
2
votes
4answers
187 views
A language design with variable qualifier
I am planning to design a programming language. One challenge I face with is whether it is a good idea to have const as a variable qualifier instead of a type qualifier.
For example in C++:
const int ...
27
votes
8answers
36k views
What to do if I hate C++ header files?
I was always confused about header files. They are so strange: you include .h file which doesn't include .cpp but .cpp are somehow compiled too.
Recently I joined a team project, and of course, ...
3
votes
3answers
372 views
Language design : How to type higher order functions parameters?
I'm trying to design a theoretical programming language and I'm facing a problem with high order functions.
The language is strong-typed, so the way to define a standard function is like so :
...
10
votes
2answers
1k views
Are first-class continuations useful in modern object-oriented programming languages?
Continuations are extremely useful in functional programming languages (e.g. the Cont monad in Haskell) because they allow a simple and regular notation for imperative-style code. They're also useful ...
11
votes
5answers
4k views
Why does Kotlin require type after variable, rather than before? [duplicate]
C, C++, C#, Java, as well as many other statically typed languages have the type before variable like (int a =5, auto c = 4, etc.).
Non-statically typed languages (such as Javascript, basic) use var (...
1
vote
1answer
186 views
Can syntactic `await` always be elided?
(This question isn't a duplicate of Why do we need the async keyword? - it's more of the opposite: I'm not questioning the async keyword - I'm asking if compilers could elide the use of await ...
0
votes
2answers
267 views
In C++, Why do bitwise operators convert 8 or 16 bit integers to 32 bit?
Is there a logical reason why the integer is upgraded to 32+ bits?
I was trying to make an 8bit mask, and found myself a bit disappointed that the upgrade will corrupt my equations.
sizeof( quint8(0)...
6
votes
9answers
2k views
Are there any programming languages that make use of adjectives?
Are there any languages where something like the following might be possible?
people = [ ... a list of people ...]
Person jake = Person("Jake", 165, ...)
jake is Tall
people.add(jake)
for Person ...
54
votes
2answers
18k views
Why is 'void' not allowed as a generic type in C#
What were the design decisions that argued in favour of void not being constructable and not being allowed as a generic type? After all it is just a special empty struct and would have avoided the ...
7
votes
1answer
313 views
Should I let my users write BnfExpressions to extend my grammar?
Preface
I'm designing a templating language (please skip the don't/why?? speech). One of the major goals of this language is to be extensible. There are 2 main elements in my language. "Tags" and "...
9
votes
3answers
668 views
What rationale is used when programming language designers decide what sign the result of modulo operation takes?
Going through Modulo operation (the avenue I entered while exploring the difference between rem and mod) I came across:
In mathematics the result of the modulo operation is the remainder of the ...
12
votes
1answer
714 views
Why was “self” chosen over “this” for the name of the first parameter of python methods?
What was the rationale for choosing the name self instead of this when defining class methods in Python?
Yes, of course, you can name it whatever you want - but the widely agreed-upon name for the ...
28
votes
5answers
2k views
How do programming languages define functions?
How do programming languages define and save functions/methods? I am creating an interpreted programming language in Ruby, and I am trying to figure out how to implement function declaration.
My ...
2
votes
4answers
2k views
What could be the advantages and disadvantages of decay of Nd arrays to N-level pointers?
I have been thinking of a couple of possible extensions to the C language which I'd like to know the opinion of others about.1 This one is about multi-dimensional arrays.
Imagine the following ...
4
votes
1answer
290 views
Design decisions behind access modifiers in C#
I'm currently writing a small language of my own, and have been considering the difference between the C++ style, where the access modifier applies to a block of members, and the C#/Java style, where ...
2
votes
1answer
250 views
Why did C++11 add find_if() instead of overloading find()?
Why did c++11 add a separate find_if() instead of simply overloading the existing find()?
Wouldn't overloading the function be sufficient?
4
votes
3answers
720 views
Does a Completely Full-Featured Intermediate Language Exist?
Often when translating between languages (whether with program translation or compiling) it's a one-way, destructive translation. The functionality of the "port" isn't lost, but some of the intent ...
0
votes
4answers
178 views
Language design : use equals symbol = both for affectation and comparison, like in MySQL
I'm currently designing a database query language and I came to wonder what should be the best syntax for the comparison operator.
Most modern languages use ==, but amongst the database languages ...
40
votes
5answers
7k views
What makes a scripting language “embeddable”?
According to my experience, Wikipedia and prior answers, a scripting language is vague category of languages which are high-level (no manual memory management) and interpreted. Popular examples are ...
8
votes
3answers
3k views
Why was GOTO included in PHP 5? [closed]
I discovered some time ago that the GOTO control keyword was introduced in PHP 5.3.0.
http://php.net/manual/en/control-structures.goto.php
Why did it happen?
What are the language design goals ...
29
votes
9answers
9k views
In OOP, isn't the 'protected' keyword required?
Some modern languages (e.g. Swift, Dart) do not support the protected access modifier keyword. Swift is a protocol-oriented language, but I've heard that Dart is a completely object-oriented language.
...
-4
votes
1answer
128 views
Is it a good idea to use a Parser Combinator to parse unstructured input?
I'm writing a parser that needs to accept unstructured input. By that I mean it needs to take in a raw signal (text, in this case) and look for significant character sequences while accumulating the ...
8
votes
4answers
1k views
Why C++ core language is becoming fused with the standard library?
In my understanding, standard library is a whole separate piece of software than a compiler is. In my opinion, they should be kept separate.
Advantages of this approach pretty much boil down to "they ...
52
votes
7answers
11k views
Is it a bad design for a programming language to allow spaces in identifiers? [closed]
Some (link 1, link 2) programming languages allow spaces in their identifiers (e.g. variables, procedures) but most of them don't and instead programmers usually use camel case, snake case and other ...
49
votes
22answers
7k views
Has whitespace in identifiers ever been idiomatic? [closed]
C# style suggests using CamelCase in identifiers to delimit words. Lisp tradition suggests using-dashes-instead.
Has there ever existed a programming language where using spaces in identifiers was ...
10
votes
3answers
2k views
Why can't java generics be in arrays?
Why is it that when I try to make an array of ArrayLists: ArrayList<Integer>[] arr=new ArrayList<Integer>[40]; there is an error and java does not allow this?
Is there a reason related to ...
16
votes
11answers
14k views
KISS principle applied to programming language design?
KISS ("keep it simple, stupid" or "keep it simple stupid", see e.g. here) is an important principle in software development, even though it apparently originated in engineering. Citing from the ...