digitalmars.D.learn - On Attributes
- A Guy With a Question (9/9) Nov 27 2017 Hi again!
- Steven Schveighoffer (29/37) Nov 27 2017 You can have some degree of success with global application and inferenc...
- H. S. Teoh (21/30) Nov 27 2017 [...]
- Adam D. Ruppe (5/7) Nov 27 2017 Meh, you could also just ignore the attribute crap. Only reason I
- A Guy With a Question (5/12) Nov 27 2017 Yeah, I'm leaning towards that direction. It seems they could
- user1234 (7/21) Nov 27 2017 I also rarely put the attributes (although sincerely i think that
Hi again! I've been trying to do my best to write idiomatically. One thing that is bugging me is having to mark up all of my declarations with attributes. Which means I'm having to remember them all. It's a bit much to keep in my head with every function. Is there a good way to reverse this (imply the attributes by default) and then turn them off explicitly? Like declaring them at the top of the file so they apply to everything below? Thanks!
Nov 27 2017
On 11/27/17 2:10 PM, A Guy With a Question wrote:Hi again! I've been trying to do my best to write idiomatically. One thing that is bugging me is having to mark up all of my declarations with attributes. Which means I'm having to remember them all. It's a bit much to keep in my head with every function. Is there a good way to reverse this (imply the attributes by default) and then turn them off explicitly? Like declaring them at the top of the file so they apply to everything below?You can have some degree of success with global application and inference. Note that ALL attributes can be applied in one of 3 ways: 1. At the declaration: safe int foo(); safe int bar(); 2. In a scope: safe { int foo(); int bar(); } 3. as a label: safe: int foo(); int bar(); There are some limitations, such that it will NOT apply to functions inside classes or structs. Also, attributes without an opposite attribute (e.g. pure) cannot be undone once you apply at the top with a label. Note that templates automatically infer attributes, you do not have to write them: T foo(T)() {... } // implies safe if possible Functions which return auto also imply attributes: auto foo() {... } // implies safe if possible The reason here is because the implementation of the function must be available to properly compile, therefore the compiler can infer the proper attributes. Hope this helps. -Steve
Nov 27 2017
On Mon, Nov 27, 2017 at 07:10:04PM +0000, A Guy With a Question via Digitalmars-d-learn wrote:Hi again! I've been trying to do my best to write idiomatically. One thing that is bugging me is having to mark up all of my declarations with attributes. Which means I'm having to remember them all. It's a bit much to keep in my head with every function. Is there a good way to reverse this (imply the attributes by default) and then turn them off explicitly? Like declaring them at the top of the file so they apply to everything below?[...] You can declare attributes at the top of the file by writing "attr:" where "attr" is pure, nothrow, nogc, etc.. However, there is currently no way to negate these attributes afterwards. An alternative is to let the compiler do the hard work for you by templatizing your code. Template functions and members of templated aggregates (structs and classes) trigger attribute inference. You can turn non-template functions into template functions by adding an empty list of compile-time parameters: int myfunc()(int x, int y) { ... } This has the added advantage that if myfunc is never actually referenced elsewhere in the code, it won't even be compiled into the executable. Of course, this is not a perfect solution, since you can't use it if for whatever reason your function must not be a template. One area is class methods that must be overridden by derived classes, which can't be template methods. There's no way around specifying explicit attributes in that case. T -- The fact that anyone still uses AOL shows that even the presence of options doesn't stop some people from picking the pessimal one. - Mike Ellis
Nov 27 2017
On Monday, 27 November 2017 at 19:10:04 UTC, A Guy With aOne thing that is bugging me is having to mark up all of my declarations with attributes.Meh, you could also just ignore the attribute crap. Only reason I ever mess with them is if someone who is using them tries to use my code... otherwise you can pretend the spam doesn't exist and be more productive.
Nov 27 2017
On Monday, 27 November 2017 at 19:41:03 UTC, Adam D. Ruppe wrote:On Monday, 27 November 2017 at 19:10:04 UTC, A Guy With aYeah, I'm leaning towards that direction. It seems they could have been useful if they were the default. But opting into them doesn't seem as useful, unfortunately. I'll probably continue fiddling with them, but I might just abandon using them.One thing that is bugging me is having to mark up all of my declarations with attributes.Meh, you could also just ignore the attribute crap. Only reason I ever mess with them is if someone who is using them tries to use my code... otherwise you can pretend the spam doesn't exist and be more productive.
Nov 27 2017
On Monday, 27 November 2017 at 20:07:08 UTC, A Guy With a Question wrote:On Monday, 27 November 2017 at 19:41:03 UTC, Adam D. Ruppe wrote:I also rarely put the attributes (although sincerely i think that my funcs are pure 99% of them time) but take care because recently it was announced that better code will be generated if there are scope(exit) / try-finally inside nothrow funcs: https://forum.dlang.org/thread/ovbduq$m3a$1 digitalmars.comOn Monday, 27 November 2017 at 19:10:04 UTC, A Guy With aYeah, I'm leaning towards that direction. It seems they could have been useful if they were the default. But opting into them doesn't seem as useful, unfortunately. I'll probably continue fiddling with them, but I might just abandon using them.One thing that is bugging me is having to mark up all of my declarations with attributes.Meh, you could also just ignore the attribute crap. Only reason I ever mess with them is if someone who is using them tries to use my code... otherwise you can pretend the spam doesn't exist and be more productive.
Nov 27 2017