JB
Jon Bondy
Sun, Nov 23, 2025 2:09 PM
Excellent point. Or Object Definition Language (horrible pun with
programming "objects", whatever they mean today). Or Model Definition
Language. What do we call the thing we strive to create?
On 11/23/2025 9:05 AM, Joe H via Discuss wrote:
OpenSCAD is NOT a programming language... It is a Hardware Definition
Language. It took me a while to get that, but once it did, things
made a LOT more sense.
Of course, if you don't really know how an HDL is different from
software, that doesn't help.
On Sun, Nov 23, 2025 at 7:27 AM Carsten Arnholm via Discuss
discuss@lists.openscad.org wrote:
Call them "immutables" to indicate they are not subject to variation.
On 2025-11-23 02:44, Jordan Brown via Discuss wrote:
I think that the term "variable" is imperfect for OpenSCAD
given the larger context of programming languages), but it's the
least-wrong word available.
_______________________________________________
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
OpenSCAD mailing list
To unsubscribe send an email todiscuss-leave@lists.openscad.org
--
This email has been checked for viruses by AVG antivirus software.
www.avg.com
Excellent point. Or Object Definition Language (horrible pun with
programming "objects", whatever they mean today). Or Model Definition
Language. What do we call the thing we strive to create?
On 11/23/2025 9:05 AM, Joe H via Discuss wrote:
> OpenSCAD is NOT a programming language... It is a Hardware Definition
> Language. It took me a while to get that, but once it did, things
> made a LOT more sense.
>
> Of course, if you don't really know how an HDL is different from
> software, that doesn't help.
>
> On Sun, Nov 23, 2025 at 7:27 AM Carsten Arnholm via Discuss
> <discuss@lists.openscad.org> wrote:
>
> Call them "immutables" to indicate they are not subject to variation.
>
> On 2025-11-23 02:44, Jordan Brown via Discuss wrote:
> > I think that the term "variable" is imperfect for OpenSCAD
> (especially
> > given the larger context of programming languages), but it's the
> > least-wrong word available.
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email todiscuss-leave@lists.openscad.org
--
This email has been checked for viruses by AVG antivirus software.
www.avg.com
JB
Jordan Brown
Sun, Nov 23, 2025 4:59 PM
OpenSCAD is NOT a programming language...
People keep saying that, and I think they must be speaking a different
language than I do.
OpenSCAD is absolutely a Domain Specific Language. No question. It is
not a general-purpose programming language. There are use cases for
which it excels, use cases where it is usable but suboptimal, and use
cases where it simply can't work, but that's orthogonal to its power as
a programming language.
The standard test for computing flexibility is whether the language is
Turing complete https://en.wikipedia.org/wiki/Turing_completeness. If
it's Turing complete, given unlimited resources it can perform any
computing task.
OpenSCAD is Turing complete.
I'm not a computer scientist - I call myself a software engineer - so
I'm not totally sure how to formally prove Turing completeness.
However, since any Turing complete system can emulate any other Turing
complete system, I can prove it indirectly. Smart People tell me that
John Conway's Game of Life
https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life is Turing
complete. (In fact, it's the lead illustration on the Turing
completeness https://en.wikipedia.org/wiki/Turing_completeness page.)
I wrote an implementation
https://files.openscad.org/advent-calendar-2022/Life/Life.scad of Life
in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
> OpenSCAD is NOT a programming language...
People keep saying that, and I think they must be speaking a different
language than I do.
OpenSCAD is absolutely a Domain Specific Language. No question. It is
not a *general-purpose* programming language. There are use cases for
which it excels, use cases where it is usable but suboptimal, and use
cases where it simply can't work, but that's orthogonal to its power as
a programming language.
The standard test for computing flexibility is whether the language is
Turing complete <https://en.wikipedia.org/wiki/Turing_completeness>. If
it's Turing complete, given unlimited resources it can perform any
computing task.
OpenSCAD is Turing complete.
I'm not a computer scientist - I call myself a software engineer - so
I'm not totally sure how to formally prove Turing completeness.
However, since any Turing complete system can emulate any other Turing
complete system, I can prove it indirectly. Smart People tell me that
John Conway's Game of Life
<https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life> is Turing
complete. (In fact, it's the lead illustration on the Turing
completeness <https://en.wikipedia.org/wiki/Turing_completeness> page.)
I wrote an implementation
<https://files.openscad.org/advent-calendar-2022/Life/Life.scad> of Life
in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
JH
Joe H
Sun, Nov 23, 2025 6:04 PM
Turing has nothing to do with it.
An “object” (as in a teal tangible thing, not anything like
OOP) description language defines a “thing”. The process takes computer
cycles, but that is a consequence of the machines we use to process the
language.
A schema is a “description language” if it defines an object which exists
outside of the machine processing system.
Lets take a defined constant called width. Set it = 5. Now define a shere
with radius=width.
In software, the sphere now exists with radius = 5. I can change “width” to
some other value and reuse it to create something else.
In an object description language, there isn’t really a linear thought
process. The sphere’s radius is “width”. If you redefine width to some
other value, the description language cannot distinguish which value
because there is no concept of time to the defined constant. While the
language takes time and executes commands in a particular order, nothing
exists until the processing is done. So, it isn’t like software that can
produce output as it goes.
The exception to this in OpenSCAD is the for statement. However, IMO, this
is teally more like a macro construct than a software verion of FOR.
FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t work
at all like software. In the end, you get a logic construct that works in
real-time.
On Sun, Nov 23, 2025 at 10:59 Jordan Brown via Discuss <
discuss@lists.openscad.org> wrote:
OpenSCAD is NOT a programming language...
People keep saying that, and I think they must be speaking a different
language than I do.
OpenSCAD is absolutely a Domain Specific Language. No question. It is not
a general-purpose programming language. There are use cases for which it
excels, use cases where it is usable but suboptimal, and use cases where it
simply can't work, but that's orthogonal to its power as a programming
language.
The standard test for computing flexibility is whether the language is Turing
complete https://en.wikipedia.org/wiki/Turing_completeness. If it's
Turing complete, given unlimited resources it can perform any computing
task.
OpenSCAD is Turing complete.
I'm not a computer scientist - I call myself a software engineer - so I'm
not totally sure how to formally prove Turing completeness. However, since
any Turing complete system can emulate any other Turing complete system, I
can prove it indirectly. Smart People tell me that John Conway's Game of
Life https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life is Turing
complete. (In fact, it's the lead illustration on the Turing completeness
https://en.wikipedia.org/wiki/Turing_completeness page.)
I wrote an implementation
https://files.openscad.org/advent-calendar-2022/Life/Life.scad of Life
in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
Turing has nothing to do with it.
An “object” (as in a teal tangible thing, not anything like
OOP) description language defines a “thing”. The process takes computer
cycles, but that is a consequence of the machines we use to process the
language.
A schema is a “description language” if it defines an object which exists
outside of the machine processing system.
Lets take a defined constant called width. Set it = 5. Now define a shere
with radius=width.
In software, the sphere now exists with radius = 5. I can change “width” to
some other value and reuse it to create something else.
In an object description language, there isn’t really a linear thought
process. The sphere’s radius is “width”. If you redefine width to some
other value, the description language cannot distinguish which value
because there is no concept of time to the defined constant. While the
language takes time and executes commands in a particular order, nothing
exists until the processing is done. So, it isn’t like software that can
produce output as it goes.
The exception to this in OpenSCAD is the for statement. However, IMO, this
is teally more like a macro construct than a software verion of FOR.
FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t work
at all like software. In the end, you get a logic construct that works in
real-time.
On Sun, Nov 23, 2025 at 10:59 Jordan Brown via Discuss <
discuss@lists.openscad.org> wrote:
>
> OpenSCAD is NOT a programming language...
>
>
> People keep saying that, and I think they must be speaking a different
> language than I do.
>
> OpenSCAD is absolutely a Domain Specific Language. No question. It is not
> a *general-purpose* programming language. There are use cases for which it
> excels, use cases where it is usable but suboptimal, and use cases where it
> simply can't work, but that's orthogonal to its power as a programming
> language.
>
> The standard test for computing flexibility is whether the language is Turing
> complete <https://en.wikipedia.org/wiki/Turing_completeness>. If it's
> Turing complete, given unlimited resources it can perform any computing
> task.
>
> OpenSCAD is Turing complete.
>
> I'm not a computer scientist - I call myself a software engineer - so I'm
> not totally sure how to formally prove Turing completeness. However, since
> any Turing complete system can emulate any other Turing complete system, I
> can prove it indirectly. Smart People tell me that John Conway's Game of
> Life <https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life> is Turing
> complete. (In fact, it's the lead illustration on the Turing completeness
> <https://en.wikipedia.org/wiki/Turing_completeness> page.)
>
> I wrote an implementation
> <https://files.openscad.org/advent-calendar-2022/Life/Life.scad> of Life
> in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
AM
Adrian Mariano
Sun, Nov 23, 2025 7:22 PM
It sounds like your notion of OpenSCAD is ignoring the existence of
functions and focusing entirely on modules. OpenSCAD programs run in
sequential order, just like "normal" languages. And recursion necessarily
imposes a time sequencing on a computation. Values most certainly do exist
as soon as they are computed, and there is a well-defined notion of time.
There's no reason you have to generate any geometry. You can just compute
values and display output. And yes, it can certainly "produce output as it
goes" in the form of displaying computed output to the console. When I
write a root finder or a linear equation solver in OpenSCAD it certainly
seems to me like I'm coding in a programming language. And you could use
those things to find roots of equations, or solve systems of equations in
the absence of any "thing" or object that exists outside the machine
processing system.
On Sun, Nov 23, 2025 at 1:05 PM Joe H via Discuss <
discuss@lists.openscad.org> wrote:
Turing has nothing to do with it.
An “object” (as in a teal tangible thing, not anything like
OOP) description language defines a “thing”. The process takes computer
cycles, but that is a consequence of the machines we use to process the
language.
A schema is a “description language” if it defines an object which exists
outside of the machine processing system.
Lets take a defined constant called width. Set it = 5. Now define a shere
with radius=width.
In software, the sphere now exists with radius = 5. I can change “width”
to some other value and reuse it to create something else.
In an object description language, there isn’t really a linear thought
process. The sphere’s radius is “width”. If you redefine width to some
other value, the description language cannot distinguish which value
because there is no concept of time to the defined constant. While the
language takes time and executes commands in a particular order, nothing
exists until the processing is done. So, it isn’t like software that can
produce output as it goes.
The exception to this in OpenSCAD is the for statement. However, IMO, this
is teally more like a macro construct than a software verion of FOR.
FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t work
at all like software. In the end, you get a logic construct that works in
real-time.
On Sun, Nov 23, 2025 at 10:59 Jordan Brown via Discuss <
discuss@lists.openscad.org> wrote:
OpenSCAD is NOT a programming language...
People keep saying that, and I think they must be speaking a different
language than I do.
OpenSCAD is absolutely a Domain Specific Language. No question. It is
not a general-purpose programming language. There are use cases for which
it excels, use cases where it is usable but suboptimal, and use cases where
it simply can't work, but that's orthogonal to its power as a programming
language.
The standard test for computing flexibility is whether the language is Turing
complete https://en.wikipedia.org/wiki/Turing_completeness. If it's
Turing complete, given unlimited resources it can perform any computing
task.
OpenSCAD is Turing complete.
I'm not a computer scientist - I call myself a software engineer - so I'm
not totally sure how to formally prove Turing completeness. However, since
any Turing complete system can emulate any other Turing complete system, I
can prove it indirectly. Smart People tell me that John Conway's Game
of Life https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life is
Turing complete. (In fact, it's the lead illustration on the Turing
completeness https://en.wikipedia.org/wiki/Turing_completeness page.)
I wrote an implementation
https://files.openscad.org/advent-calendar-2022/Life/Life.scad of Life
in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
It sounds like your notion of OpenSCAD is ignoring the existence of
functions and focusing entirely on modules. OpenSCAD programs run in
sequential order, just like "normal" languages. And recursion necessarily
imposes a time sequencing on a computation. Values most certainly do exist
as soon as they are computed, and there is a well-defined notion of time.
There's no reason you have to generate any geometry. You can just compute
values and display output. And yes, it can certainly "produce output as it
goes" in the form of displaying computed output to the console. When I
write a root finder or a linear equation solver in OpenSCAD it certainly
seems to me like I'm coding in a programming language. And you could use
those things to find roots of equations, or solve systems of equations in
the absence of any "thing" or object that exists outside the machine
processing system.
On Sun, Nov 23, 2025 at 1:05 PM Joe H via Discuss <
discuss@lists.openscad.org> wrote:
> Turing has nothing to do with it.
>
> An “object” (as in a teal tangible thing, not anything like
> OOP) description language defines a “thing”. The process takes computer
> cycles, but that is a consequence of the machines we use to process the
> language.
>
> A schema is a “description language” if it defines an object which exists
> outside of the machine processing system.
>
> Lets take a defined constant called width. Set it = 5. Now define a shere
> with radius=width.
>
> In software, the sphere now exists with radius = 5. I can change “width”
> to some other value and reuse it to create something else.
>
> In an object description language, there isn’t really a linear thought
> process. The sphere’s radius is “width”. If you redefine width to some
> other value, the description language cannot distinguish which value
> because there is no concept of time to the defined constant. While the
> language takes time and executes commands in a particular order, nothing
> exists until the processing is done. So, it isn’t like software that can
> produce output as it goes.
>
> The exception to this in OpenSCAD is the for statement. However, IMO, this
> is teally more like a macro construct than a software verion of FOR.
>
> FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t work
> at all like software. In the end, you get a logic construct that works in
> real-time.
>
>
>
> On Sun, Nov 23, 2025 at 10:59 Jordan Brown via Discuss <
> discuss@lists.openscad.org> wrote:
>
>>
>> OpenSCAD is NOT a programming language...
>>
>>
>> People keep saying that, and I think they must be speaking a different
>> language than I do.
>>
>> OpenSCAD is absolutely a Domain Specific Language. No question. It is
>> not a *general-purpose* programming language. There are use cases for which
>> it excels, use cases where it is usable but suboptimal, and use cases where
>> it simply can't work, but that's orthogonal to its power as a programming
>> language.
>>
>> The standard test for computing flexibility is whether the language is Turing
>> complete <https://en.wikipedia.org/wiki/Turing_completeness>. If it's
>> Turing complete, given unlimited resources it can perform any computing
>> task.
>>
>> OpenSCAD is Turing complete.
>>
>> I'm not a computer scientist - I call myself a software engineer - so I'm
>> not totally sure how to formally prove Turing completeness. However, since
>> any Turing complete system can emulate any other Turing complete system, I
>> can prove it indirectly. Smart People tell me that John Conway's Game
>> of Life <https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life> is
>> Turing complete. (In fact, it's the lead illustration on the Turing
>> completeness <https://en.wikipedia.org/wiki/Turing_completeness> page.)
>>
>> I wrote an implementation
>> <https://files.openscad.org/advent-calendar-2022/Life/Life.scad> of Life
>> in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
>>
>> _______________________________________________
>> OpenSCAD mailing list
>> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
GB
Glenn Butcher
Sun, Nov 23, 2025 7:28 PM
So-called programming languages are just collections of symbols that
direct some sort of engine to do something. Be that it pukes .stl files
or actually pokes hardware is of little consequence to the definition.
I've seen it all, from languages that draw pictures (just wrote one a
couple of weeks ago) to graphical languages that ratchet relays (ladder
logic), they're all about symbols with an organization (syntax) that has
meaning to an objective (semantics).
That the OpenSCAD language is a rather funky amalgam of procedural and
functional programming is just related to the objective environment (CAD
models) and developer decisions. Got its quirks ('immutable variables'
bother me too, but oh, well...), but is viable enough to do quite
complex things, even without python crutch.
Ref: I used to teach compiler design.
On 11/23/2025 11:04 AM, Joe H via Discuss wrote:
Turing has nothing to do with it.
An “object” (as in a teal tangible thing, not anything like
OOP) description language defines a “thing”. The process takes
computer cycles, but that is a consequence of the machines we use to
process the language.
A schema is a “description language” if it defines an object which
exists outside of the machine processing system.
Lets take a defined constant called width. Set it = 5. Now define a
shere with radius=width.
In software, the sphere now exists with radius = 5. I can change
“width” to some other value and reuse it to create something else.
In an object description language, there isn’t really a linear thought
process. The sphere’s radius is “width”. If you redefine width to some
other value, the description language cannot distinguish which value
because there is no concept of time to the defined constant. While
the language takes time and executes commands in a particular order,
nothing exists until the processing is done. So, it isn’t like
software that can produce output as it goes.
The exception to this in OpenSCAD is the for statement. However, IMO,
this is teally more like a macro construct than a software verion of FOR.
FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t
work at all like software. In the end, you get a logic construct that
works in real-time.
On Sun, Nov 23, 2025 at 10:59 Jordan Brown via Discuss
discuss@lists.openscad.org wrote:
OpenSCAD is NOT a programming language...
People keep saying that, and I think they must be speaking a
different language than I do.
OpenSCAD is absolutely a Domain Specific Language. No question.
It is not a *general-purpose* programming language. There are use
cases for which it excels, use cases where it is usable but
suboptimal, and use cases where it simply can't work, but that's
orthogonal to its power as a programming language.
The standard test for computing flexibility is whether the
language is Turing complete
<https://en.wikipedia.org/wiki/Turing_completeness>. If it's
Turing complete, given unlimited resources it can perform any
computing task.
OpenSCAD is Turing complete.
I'm not a computer scientist - I call myself a software engineer -
so I'm not totally sure how to formally prove Turing
completeness. However, since any Turing complete system can
emulate any other Turing complete system, I can prove it
indirectly. Smart People tell me that John Conway's Game of Life
<https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life> is Turing
complete. (In fact, it's the lead illustration on the Turing
completeness <https://en.wikipedia.org/wiki/Turing_completeness>
page.)
I wrote an implementation
<https://files.openscad.org/advent-calendar-2022/Life/Life.scad>
of Life in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
_______________________________________________
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
OpenSCAD mailing list
To unsubscribe send an email todiscuss-leave@lists.openscad.org
So-called programming languages are just collections of symbols that
direct some sort of engine to do something. Be that it pukes .stl files
or actually pokes hardware is of little consequence to the definition.
I've seen it all, from languages that draw pictures (just wrote one a
couple of weeks ago) to graphical languages that ratchet relays (ladder
logic), they're all about symbols with an organization (syntax) that has
meaning to an objective (semantics).
That the OpenSCAD language is a rather funky amalgam of procedural and
functional programming is just related to the objective environment (CAD
models) and developer decisions. Got its quirks ('immutable variables'
bother me too, but oh, well...), but is viable enough to do quite
complex things, even without python crutch.
Ref: I used to teach compiler design.
On 11/23/2025 11:04 AM, Joe H via Discuss wrote:
> Turing has nothing to do with it.
>
> An “object” (as in a teal tangible thing, not anything like
> OOP) description language defines a “thing”. The process takes
> computer cycles, but that is a consequence of the machines we use to
> process the language.
>
> A schema is a “description language” if it defines an object which
> exists outside of the machine processing system.
>
> Lets take a defined constant called width. Set it = 5. Now define a
> shere with radius=width.
>
> In software, the sphere now exists with radius = 5. I can change
> “width” to some other value and reuse it to create something else.
>
> In an object description language, there isn’t really a linear thought
> process. The sphere’s radius is “width”. If you redefine width to some
> other value, the description language cannot distinguish which value
> because there is no concept of time to the defined constant. While
> the language takes time and executes commands in a particular order,
> nothing exists until the processing is done. So, it isn’t like
> software that can produce output as it goes.
>
> The exception to this in OpenSCAD is the for statement. However, IMO,
> this is teally more like a macro construct than a software verion of FOR.
>
> FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t
> work at all like software. In the end, you get a logic construct that
> works in real-time.
>
>
>
> On Sun, Nov 23, 2025 at 10:59 Jordan Brown via Discuss
> <discuss@lists.openscad.org> wrote:
>
>
>> OpenSCAD is NOT a programming language...
>
> People keep saying that, and I think they must be speaking a
> different language than I do.
>
> OpenSCAD is absolutely a Domain Specific Language. No question.
> It is not a *general-purpose* programming language. There are use
> cases for which it excels, use cases where it is usable but
> suboptimal, and use cases where it simply can't work, but that's
> orthogonal to its power as a programming language.
>
> The standard test for computing flexibility is whether the
> language is Turing complete
> <https://en.wikipedia.org/wiki/Turing_completeness>. If it's
> Turing complete, given unlimited resources it can perform any
> computing task.
>
> OpenSCAD is Turing complete.
>
> I'm not a computer scientist - I call myself a software engineer -
> so I'm not totally sure how to formally prove Turing
> completeness. However, since any Turing complete system can
> emulate any other Turing complete system, I can prove it
> indirectly. Smart People tell me that John Conway's Game of Life
> <https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life> is Turing
> complete. (In fact, it's the lead illustration on the Turing
> completeness <https://en.wikipedia.org/wiki/Turing_completeness>
> page.)
>
> I wrote an implementation
> <https://files.openscad.org/advent-calendar-2022/Life/Life.scad>
> of Life in OpenSCAD. Therefore, OpenSCAD is Turing complete. QED.
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
>
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email todiscuss-leave@lists.openscad.org
RW
Raymond West
Sun, Nov 23, 2025 8:04 PM
all this verbiage reminds me of an old friend of mine, who said 'I don't
care what you call me, but don't call me late for dinner.'
all this verbiage reminds me of an old friend of mine, who said 'I don't
care what you call me, but don't call me late for dinner.'
JB
Jordan Brown
Sun, Nov 23, 2025 8:47 PM
On 11/23/2025 10:04 AM, Joe H wrote:
Turing has nothing to do with it.
Turing has everything to do with it. It's probably (and again, I'm not
really a CS guy) the true definition of "programming language".
An “object” (as in a teal tangible thing, not anything like
OOP) description language defines a “thing”.
Sure. And that task is indeed the one that OpenSCAD is designed for.
It is, as I said, a domain-specific language.
A schema is a “description language” if it defines an object which
exists outside of the machine processing system.
Well, OK, though I use OpenSCAD to design plenty of objects that never
exist outside OpenSCAD. Also, occasionally, to do things that have
nothing at all to do with objects.
In an object description language, there isn’t really a linear thought
process.
So if I have difference() { union() { sphere(); cube(); } cylinder(); }
it doesn't matter whether I create the primitives before I do the
boolean operations, or whether I do the union before the difference?
Indeed, OpenSCAD is a lot less "ordered" than most other languages.
Many (but not all) operations can be rearranged or parallelized without
changing the result. (Enabling that is one of the reasons for some of
its ... interesting ... semantics, though so far nobody takes advantage
of it.)
But who said that programming languages have to be linear? Even in a
totally conventional language, it is usually undefined (and sometimes
unpredictable) which of the two multiplications in ab + cd will happen
first. When I learned, many programming books started with a quote from
Alice in Wonderland: "Begin at the beginning, and go on till you come
to the end: then stop". At the time, that was pretty much how all
programs were written. Not so today. Today, many or most are
asynchronous state machines, with operations proceeding in parallel or
in difficult-to-predict orders.
While the language takes time and executes commands in a particular
order, nothing exists until the processing is done.
What does "exists" mean? At every stage of the execution of an OpenSCAD
program, OpenSCAD has the CSG tree as it stands at that moment; if the
program aborts that's what the result will be. OpenSCAD could
continuously display the model as it is constructed, and in fact there's
an enhancement request around somewhere that it do exactly that.
So, it isn’t like software that can produce output as it goes.
echo() certainly does. And, as I said, OpenSCAD could display the
model as it's built. It's tempting to give it such a mode for teaching
purposes, though I expect that the performance would be so awful that
you'd never want to do it in serious work.
The exception to this in OpenSCAD is the for statement. However, IMO,
this is teally more like a macro construct than a software verion of FOR.
And, as Adrian says, recursion in both functions and modules.
Is it a macro construct? There's an argument that it is. So what? Is
there a difference between a macro language that can do arithmetic on
its data elements and can conditionally expand based on its data
elements, and a programming language?
FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t
work at all like software. In the end, you get a logic construct that
works in real-time.
I don't know enough about those to comment meaningfully.
But mostly, it passes the duck test: it walks like a duck and quacks
like a duck, so it's a duck.
On 11/23/2025 10:04 AM, Joe H wrote:
> Turing has nothing to do with it.
Turing has everything to do with it. It's probably (and again, I'm not
really a CS guy) the true definition of "programming language".
> An “object” (as in a teal tangible thing, not anything like
> OOP) description language defines a “thing”.
Sure. And that task is indeed the one that OpenSCAD is designed for.
It is, as I said, a domain-specific language.
> A schema is a “description language” if it defines an object which
> exists outside of the machine processing system.
Well, OK, though I use OpenSCAD to design plenty of objects that never
exist outside OpenSCAD. Also, occasionally, to do things that have
nothing at all to do with objects.
> In an object description language, there isn’t really a linear thought
> process.
So if I have difference() { union() { sphere(); cube(); } cylinder(); }
it doesn't matter whether I create the primitives before I do the
boolean operations, or whether I do the union before the difference?
Indeed, OpenSCAD is a lot less "ordered" than most other languages.
Many (but not all) operations can be rearranged or parallelized without
changing the result. (Enabling that is one of the reasons for some of
its ... interesting ... semantics, though so far nobody takes advantage
of it.)
But who said that programming languages have to be linear? Even in a
totally conventional language, it is usually undefined (and sometimes
unpredictable) which of the two multiplications in a*b + c*d will happen
first. When I learned, many programming books started with a quote from
Alice in Wonderland: "Begin at the beginning, and go on till you come
to the end: then stop". At the time, that was pretty much how all
programs were written. Not so today. Today, many or most are
asynchronous state machines, with operations proceeding in parallel or
in difficult-to-predict orders.
> While the language takes time and executes commands in a particular
> order, nothing exists until the processing is done.
What does "exists" mean? At every stage of the execution of an OpenSCAD
program, OpenSCAD has the CSG tree as it stands at that moment; if the
program aborts that's what the result will be. OpenSCAD *could*
continuously display the model as it is constructed, and in fact there's
an enhancement request around somewhere that it do exactly that.
> So, it isn’t like software that can produce output as it goes.
echo() certainly does. And, as I said, OpenSCAD *could* display the
model as it's built. It's tempting to give it such a mode for teaching
purposes, though I expect that the performance would be so awful that
you'd never want to do it in serious work.
> The exception to this in OpenSCAD is the for statement. However, IMO,
> this is teally more like a macro construct than a software verion of FOR.
And, as Adrian says, recursion in both functions and modules.
Is it a macro construct? There's an argument that it is. So what? Is
there a difference between a macro language that can do arithmetic on
its data elements and can conditionally expand based on its data
elements, and a programming language?
> FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t
> work at all like software. In the end, you get a logic construct that
> works in real-time.
I don't know enough about those to comment meaningfully.
But mostly, it passes the duck test: it walks like a duck and quacks
like a duck, so it's a duck.
BC
Bob Carlson
Sun, Nov 23, 2025 9:43 PM
I’m on the side of the pragmatists here like Jordan. We are talking about language. Those objecting to the word variable want words to have specific (immutable!) meanings. Another of my hobbies is linguistics. If you listen to linguistics people you are quickly disabused of the notion that words have fixed meanings. Take a look in any dictionary entry. How many meanings are listed? Right. And they change over time. Lookup the original meaning of silly sometime.
The word variable is OK, maybe a better one existed, but not now. Its meaning in OS is path dependent and we took that path, get over it.
I have a CS degree so immutable sounds fine to me, but it’s much better to use the word constant because it is simpler and quicker to understand. I think it’s not hard to describe an OS variable.
A variable is a name which is assigned a value. That value is constant within the scope where the variable is assigned and no reassignment is allowed in that scope.
That’s pretty straightforward and easy to understand. No references to functional programming required. It’s tempting to get into the nuances, but don’t.
-Bob
Turing has nothing to do with it.
Turing has everything to do with it. It's probably (and again, I'm not really a CS guy) the true definition of "programming language".
An “object” (as in a teal tangible thing, not anything like OOP) description language defines a “thing”.
Sure. And that task is indeed the one that OpenSCAD is designed for. It is, as I said, a domain-specific language.
A schema is a “description language” if it defines an object which exists outside of the machine processing system.
Well, OK, though I use OpenSCAD to design plenty of objects that never exist outside OpenSCAD. Also, occasionally, to do things that have nothing at all to do with objects.
In an object description language, there isn’t really a linear thought process.
So if I have difference() { union() { sphere(); cube(); } cylinder(); } it doesn't matter whether I create the primitives before I do the boolean operations, or whether I do the union before the difference?
Indeed, OpenSCAD is a lot less "ordered" than most other languages. Many (but not all) operations can be rearranged or parallelized without changing the result. (Enabling that is one of the reasons for some of its ... interesting ... semantics, though so far nobody takes advantage of it.)
But who said that programming languages have to be linear? Even in a totally conventional language, it is usually undefined (and sometimes unpredictable) which of the two multiplications in ab + cd will happen first. When I learned, many programming books started with a quote from Alice in Wonderland: "Begin at the beginning, and go on till you come to the end: then stop". At the time, that was pretty much how all programs were written. Not so today. Today, many or most are asynchronous state machines, with operations proceeding in parallel or in difficult-to-predict orders.
While the language takes time and executes commands in a particular order, nothing exists until the processing is done.
What does "exists" mean? At every stage of the execution of an OpenSCAD program, OpenSCAD has the CSG tree as it stands at that moment; if the program aborts that's what the result will be. OpenSCAD could continuously display the model as it is constructed, and in fact there's an enhancement request around somewhere that it do exactly that.
So, it isn’t like software that can produce output as it goes.
echo() certainly does. And, as I said, OpenSCAD could display the model as it's built. It's tempting to give it such a mode for teaching purposes, though I expect that the performance would be so awful that you'd never want to do it in serious work.
The exception to this in OpenSCAD is the for statement. However, IMO, this is teally more like a macro construct than a software verion of FOR.
And, as Adrian says, recursion in both functions and modules.
Is it a macro construct? There's an argument that it is. So what? Is there a difference between a macro language that can do arithmetic on its data elements and can conditionally expand based on its data elements, and a programming language?
FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t work at all like software. In the end, you get a logic construct that works in real-time.
I don't know enough about those to comment meaningfully.
But mostly, it passes the duck test: it walks like a duck and quacks like a duck, so it's a duck.
OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org
I’m on the side of the pragmatists here like Jordan. We are talking about language. Those objecting to the word variable want words to have specific (immutable!) meanings. Another of my hobbies is linguistics. If you listen to linguistics people you are quickly disabused of the notion that words have fixed meanings. Take a look in any dictionary entry. How many meanings are listed? Right. And they change over time. Lookup the original meaning of silly sometime.
The word variable is OK, maybe a better one existed, but not now. Its meaning in OS is path dependent and we took that path, get over it.
I have a CS degree so immutable sounds fine to me, but it’s much better to use the word constant because it is simpler and quicker to understand. I think it’s not hard to describe an OS variable.
A variable is a name which is assigned a value. That value is constant within the scope where the variable is assigned and no reassignment is allowed in that scope.
That’s pretty straightforward and easy to understand. No references to functional programming required. It’s tempting to get into the nuances, but don’t.
-Bob
> On Nov 23, 2025, at 13:47, Jordan Brown via Discuss <discuss@lists.openscad.org> wrote:
>
> On 11/23/2025 10:04 AM, Joe H wrote:
>> Turing has nothing to do with it.
>
> Turing has everything to do with it. It's probably (and again, I'm not really a CS guy) the true definition of "programming language".
>
>> An “object” (as in a teal tangible thing, not anything like OOP) description language defines a “thing”.
>
> Sure. And that task is indeed the one that OpenSCAD is designed for. It is, as I said, a domain-specific language.
>
>> A schema is a “description language” if it defines an object which exists outside of the machine processing system.
>
> Well, OK, though I use OpenSCAD to design plenty of objects that never exist outside OpenSCAD. Also, occasionally, to do things that have nothing at all to do with objects.
>
>> In an object description language, there isn’t really a linear thought process.
>
> So if I have difference() { union() { sphere(); cube(); } cylinder(); } it doesn't matter whether I create the primitives before I do the boolean operations, or whether I do the union before the difference?
>
> Indeed, OpenSCAD is a lot less "ordered" than most other languages. Many (but not all) operations can be rearranged or parallelized without changing the result. (Enabling that is one of the reasons for some of its ... interesting ... semantics, though so far nobody takes advantage of it.)
>
> But who said that programming languages have to be linear? Even in a totally conventional language, it is usually undefined (and sometimes unpredictable) which of the two multiplications in a*b + c*d will happen first. When I learned, many programming books started with a quote from Alice in Wonderland: "Begin at the beginning, and go on till you come to the end: then stop". At the time, that was pretty much how all programs were written. Not so today. Today, many or most are asynchronous state machines, with operations proceeding in parallel or in difficult-to-predict orders.
>
>> While the language takes time and executes commands in a particular order, nothing exists until the processing is done.
>
> What does "exists" mean? At every stage of the execution of an OpenSCAD program, OpenSCAD has the CSG tree as it stands at that moment; if the program aborts that's what the result will be. OpenSCAD *could* continuously display the model as it is constructed, and in fact there's an enhancement request around somewhere that it do exactly that.
>
>> So, it isn’t like software that can produce output as it goes.
>
> echo() certainly does. And, as I said, OpenSCAD *could* display the model as it's built. It's tempting to give it such a mode for teaching purposes, though I expect that the performance would be so awful that you'd never want to do it in serious work.
>
>> The exception to this in OpenSCAD is the for statement. However, IMO, this is teally more like a macro construct than a software verion of FOR.
>
> And, as Adrian says, recursion in both functions and modules.
>
> Is it a macro construct? There's an argument that it is. So what? Is there a difference between a macro language that can do arithmetic on its data elements and can conditionally expand based on its data elements, and a programming language?
>
>> FPGAs are a similar animal. VHDL “looks” a lot like C, but it doesn’t work at all like software. In the end, you get a logic construct that works in real-time.
>
> I don't know enough about those to comment meaningfully.
>
>
> But mostly, it passes the duck test: it walks like a duck and quacks like a duck, so it's a duck.
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
GH
gene heskett
Sun, Nov 23, 2025 10:23 PM
On 11/23/25 15:05, Raymond West via Discuss wrote:
all this verbiage reminds me of an old friend of mine, who said 'I
don't care what you call me, but don't call me late for dinner.'
ROTFLMAO! I've been following this discussion. wondering how much longer
it would take for this one to pop up. ;o)>
Just my $.02, an immutable should NOT be a variable.
Cheers, Gene Heskett, CET.
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author, 1940)
If we desire respect for the law, we must first make the law respectable.
- Louis D. Brandeis
Don't poison our oceans, interdict drugs at the src.
On 11/23/25 15:05, Raymond West via Discuss wrote:
> all this verbiage reminds me of an old friend of mine, who said 'I
> don't care what you call me, but don't call me late for dinner.'
ROTFLMAO! I've been following this discussion. wondering how much longer
it would take for this one to pop up. ;o)>
Just my $.02, an immutable should NOT be a variable.
>
> _______________________________________________
> OpenSCAD mailing list
> To unsubscribe send an email to discuss-leave@lists.openscad.org
> .
Cheers, Gene Heskett, CET.
--
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author, 1940)
If we desire respect for the law, we must first make the law respectable.
- Louis D. Brandeis
Don't poison our oceans, interdict drugs at the src.
SL
Steve Lelievre
Sun, Nov 23, 2025 11:49 PM
My two cents:
1 cent: If OpenSCAD variables get called constants or whatever, it just
moves the problem: confusion about "why can't I change variables"
becomes confusion about "why doesn't OpenSCAD have variables?" I
strongly suspect that many new users do not actually RTFM, or only skim
it, so inevitably start off thinking of these things as changeable, so
the a = a + 1 trap would still be there. And new users who do carefully
study the manual will have so much to take in that the implications may
be lost. I did actually read the user manual and language reference
right through when I started using OpenSCAD, but most of my actual
learning about its oddities has been by trying and failing.
2 cents: There are OpenSCAD-related sites and videos all over the
internet and even OpenSCAD books (yes, paper) that use the current
terminology. It doesn't seem remotely feasible to change those sources,
so it makes sense to live with what we've got.
Steve
My two cents:
1 cent: If OpenSCAD variables get called constants or whatever, it just
moves the problem: confusion about "why can't I change variables"
becomes confusion about "why doesn't OpenSCAD have variables?" I
strongly suspect that many new users do not actually RTFM, or only skim
it, so inevitably start off thinking of these things as changeable, so
the a = a + 1 trap would still be there. And new users who do carefully
study the manual will have so much to take in that the implications may
be lost. I did actually read the user manual and language reference
right through when I started using OpenSCAD, but most of my actual
learning about its oddities has been by trying and failing.
2 cents: There are OpenSCAD-related sites and videos all over the
internet and even OpenSCAD books (yes, paper) that use the current
terminology. It doesn't seem remotely feasible to change those sources,
so it makes sense to live with what we've got.
Steve