What are some pros and cons of a `scope` keyword?
from librecat@lemmy.basedcount.com to programming_languages@programming.dev on 03 Mar 2024 19:23
https://lemmy.basedcount.com/post/1640304

In something like C++ you could create a scope like so:

{
	// Do something neat here
}

I was wondering about having or maybe even requiring a scope keyword, which might look like this:

scope
{
	// Do something neat here
}

This seems even more relevant in an indentation sensitive language like python:

scope:
	pass

Interested to hear any opinions, TIA.

#programming_languages

threaded - newest

xigoi@lemmy.sdf.org on 03 Mar 2024 19:35 next collapse

Nim, which is indentation-based, has a block keyword.

block:
  echo "something"
xmunk@sh.itjust.works on 04 Mar 2024 10:57 next collapse

I dislike it - every block creating scope is reinforced by the lack of a keyword. Not all languages allow a blank scope block but those that have scope should…

In terms of python, welp, they made their own bed by making white space syntax significant. It was a terrible decision and would require a custom solution… maybe they could let you just arbitrarily indent an extra time?

RonSijm@programming.dev on 04 Mar 2024 11:28 next collapse

A scope is already implied by brackets. For example, a namespace, class, method, if block are also scopes.

So I don’t really see why you’d want an explicit scope keyword inside methods, when all other scopes are implied… That just creates an inconsistency with the other implied scopes

Kissaki@programming.dev on 04 Mar 2024 14:58 collapse

What’s the intention and use case for this?

Only for empty, unlabeled, untyped scopes? Or would I write

function a() scope {}

Is it necessary for scope-ending cleanup of resources? If so, I would consider whether there are not better solutions for those.

Is it for code structuring? I would also consider what use a scope keyword has then, and what the alternatives are.

I don’t see how adding a scope label helps with anything.

librecat@lemmy.basedcount.com on 04 Mar 2024 17:48 collapse

To be honest, the only use case I really thought of was something like unlocking a mutex at the end of a scope or maybe a file.

anton@lemmy.blahaj.zone on 06 Mar 2024 00:19 collapse

In that case managed languages like python and java combine that functionality with try blocks. This is generally called try with resources.
C# has the using keyword that just uses local scope.

The commonality between them is declaring which resource is managed, not just everything is a scope. Imagine you wanted to manage one resource and return another.

librecat@lemmy.basedcount.com on 06 Mar 2024 00:45 collapse

I was just thinking about Python’s with