Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - pplantinga/delight: A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax. · GitHub
Skip to content

Repository files navigation

Delight

Delight is a D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax, with a touch of Haskell and Ada. The philosophy is like Python's, that there should be one obvious way to do things.

The idea behind Delight is similar to the idea behind the D programming language. A language can have both the nice features of dynamic languages and the speed of a compiled language. Delight takes out some of the redundant features of D and adds a few others using Phobos, D's standard library.

There is an opportunity to discuss language features at pplantinga.github.io.

Installing Delight

If you want to install this program, first make sure you have at least dmd 2.065 installed. Then you can clone this repository, build using dub (or manually compile using all the files in the source/delight directory), and copy the "delight" executable to a directory included in your "PATH" variable.

Using Delight

To convert your pre-existing D program to Delight, simply use the d2delight.py python script. It will get you most of the way there, but it's not perfect, so you'll have to clean up a few things yourself. For example, right now it has a little trouble with for loops that are more complicated than just i = 0; i < x; i++, since Pythonic for loops more like foreach loops than for loops.

You can execute the Delight preprocessor using:

delight {filename}.delight [{filename}.delight]* [-- {compiler} [{options}]]

which will create {filename}.d for each source file in the same directory. If you include the compiler command (dmd, ldc, or gdc) then this program will compile the code as well. Options are just passed through to the compiler, including any source files already in D. Make sure that your compiler has access to the standard library, since Delight creates D code that depends on it.

Delightful Features

Let's start with some example code, and then we can analyze it.

# Welcome to Delight!
Author: Peter Massey-Plantinga
#. This is our first function, "add"
it takes two addable items, and returns the sum.
function add(T a, b -> T):
return a + b
unittest:
assert add( 2, 3 ) equal to 5
assert add( 0, 0 ) less than 1
procedure main:
auto array = [ "a": 1, "b": 2, "c": 3 ]
for key, element in array:
if element in [ 0, 2, 4 ]:
print key ~ "'s in!"
else if element equal to 3:
print add( element, 2 )
else:
print key ~ "'s out!"
print { i * 2 for i in 0 .. 5 where i ^ 2 less than 5 }
# prints [0, 2, 4]

In Delight, as in Python, scope is determined by indentation. You can indent with spaces or tabs, but it must be consistent throughout the file.

Delight is strongly typed, like D, but can do type inference using the D keyword auto. Function definitions start with something like Haskell's type definitions. Templates can be easily created by using a single uppercase letter instead of a type. Leaving off a return type uses the D keyword 'auto' (which deduces type).

Functions are like mathematical functions, they don't have side-effects (thanks to the D keyword "pure") and procedures don't return anything, but all their arguments are passed by reference. Methods are part of a class definition, and thus can make state changes to the class internals.

Like Python, Delight leans towards using keywords over symbols. Examples: in, less than, and, equal to, etc. The exceptions are operators ( +, -, %, etc. ) and some punctuation ("," "->" ":" etc) One cool feature of this is that every operator with "=" in it is an assignment operator.

Function definitions, loops, class definitions, conditionals, and pretty much everything that has a scope ends in ":".

Comments start with "#" and if they have a "." they are documentation comments. They are whitespace-delimited, which avoids problems of nesting a little more cleanly than D's 6 different types of comments, and Python's multi-line strings as the only multi-line comments.

Probably the coolest feature in Delight is list comprehensions. Delight uses functions in std.algorithm to generate an iterable range. The syntax is similar to Python's. See the last two lines of the code above for an example.

The language as it stands here is subject to expansion and change, it's still in it's infancy.

Read more at pplantinga.github.io/archives/delight-programming-language.html

License

Delight is licensed under Boost, the same license that D is licensed under.

About

A D programming language preprocessor. The resulting language, called "Delight" has a Python-like syntax.

Resources

Stars

23 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages