delegates and functions

OlegZ black80 at bk.ru
Sun Jun 10 09:21:06 UTC 2018


On Saturday, 9 June 2018 at 22:28:22 UTC, Ali Çehreli wrote:
> There is some explanation at the following page, of how the 
> lambda syntax is related to the full syntax:
>   http://ddili.org/ders/d.en/lambda.html#ix_lambda.=%3E

copy rect from article as image 
https://i.gyazo.com/c23a9139688b7ed59fbe9c6cdcf91b93.png

well, I can to remember that lambda () => { return ..; } returns 
another implicit lambda
but my mind refuses to understand fact that ...
> auto l1 = (int a) => a + 1; // returns incremented value
> auto l2 = (int a) => { return a + 1; }; // return another 
> lambda that increment value
... very different artifacts.
WHY? it's looks same, but in DLang it's some kind of mindtrap, 
looks mindness and falsy. I am upset and angry cause somebody 
just told me "There Is No Santa Claus in Dlang!" (I fell same 
yesterday and almost calmed down already)

D-compiler: you want one lambda? you are lucky today! I'll give 
you two lambda in square(^2) for same price! do not thank!

really, if I want lambda that returns another lambda I can write
> auto l1 = (int a) => () => a + 1; // maybe I need it in some 
> special case
but if I want lambda with return... well, I should forget about 
shorter syntax and write
> auto l1 = (int a) { /*...*/ return a + 1; } // why I can't use 
> "=>" here?
silent cry. yes, this version is shorter than with "=>", but my 
production language is C# (same as Dlang with CIL instead native. 
before today) and I try to do something in Dlang.

my state when I stick to such things looks like this (pic about 
JavaScript) 
https://pics.me.me/javascript-%3E-53-53-5-2-5-2-%3E-53-ah-gonna-29130223.png

DON'T READ NEXT

I readed 2 weeks ago post "Dlang is a crap".
well, I agree with author in many thing.
* and such small things like (not)using "=>" can kickass you for 
hours.
* and naming exceptions for example in std.concurrency - some 
ends with "Exception" some not - told me that no one center in 
Dlang development, no good organization and no standard.
* and VisualD sometimes lost autocompletion/intellisense and 
there's no way to get it back, except to restart the computer.
* and parsing Binance(cryptoexchange) JSON-response "All Market 
Tickers Stream" from 
https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md (~150 submessages about 200KB) with ctRegex(that told as very fast) spend 13ms. task is find every submessage that starts with '{' and ends with '}' and parse it from JSON to some struct. but simple replace ctRegex to indexOf( '{'|'}' ) decrease time to 2ms only - 90% of time getting filled 150 structs with data (that means find all string values in submessage and convert it to some types like double or long with my CTFE-code, not Dlang-JSON) spend compile-time Regex for searching start{ and end}. WTF? well, Go(version maybe 1.9) was a little bit faster about 10ms, but C# with Json.NET, where JIT and no string-spans(that means alloc every substring in GC) and all strings are Unicode(WebSocket sent UTF8, that adds Encoding time to Unicode) - spend only 3ms for all. Dlang can do things better and faster but it don't want (or people don't want)
* and many "nothrow nogc trusted pure" near every function in 
Phobos and you should read every function attrubute when you try 
to understand exactly what does and how works this function, 
cause you can miss some important attribute. I don't know how it 
should be done/removed from eyes. probably better such stuff 
describe before function like [context: nogc noBoundsCheck 
nothrow pure trusted] int func( args... ) cause you can vissually 
ignore [context..] and look at function without urban garbage.. 
maybe it should looks in editor like checkbox spans in right side 
of editor where you can turn off/on such attributes but text is 
clear not over..loaded? (English is not my native)
* and everybody will change nothing with textual representation 
of code cause this things used already in many code and packages. 
(except VisualD that in some days will be fixed)
it's sad.
over Dlang' code textual representation should be used another 
sugar representation that hides and reorganize some things (like 
TypeScript over JavaScript or MOC in Qt)
when Rust will add GC I will go to Rust - I dont like ownership 
stuff.
when Go will add OOP & exceptions I will go to Go - I dont like 
check every function call with if err.. also I can live with type 
traits without classes in most cases.
probably I will go.
I like in Dlang: native (with asm), GC, CTFE, OOP, functional 
style... (I am not a professional with Dlang, I learning it)
but sometimes Dlang is little baby who can piss/shit you in 
moments when you really not expect and you haven't diaper or any 
protection for that cases.

YOU CAN READ AGAIN

can somebody tell me please what was the reason that lambda 
(blah) => { return value + 1; } actionally returns another lambda 
that returns value+1? what case it can be usefull? why Dlang 
gives me lambda of lambda where I want lambda written with "=> { 
return"?
I am expecting some magic and simple trick with lambdas.


More information about the Digitalmars-d-learn mailing list