Skip to content

Latest commit

 

History

History
732 lines (500 loc) · 33.7 KB

2020-09-25.md

File metadata and controls

732 lines (500 loc) · 33.7 KB

< 2020-09-25 >

2,648,091 events, 1,311,249 push events, 1,993,676 commit messages, 143,903,947 characters

Friday 2020-09-25 00:22:44 by AwokeinanEnigma

-realized i didn't call the skills void in the createancientwisp void -shit. -honestly fuck prefab instance i hate it. -fixed a null reference exception in ChargeCannon -starting on rain now -ai is still a brainlet


Friday 2020-09-25 03:08:54 by David Glaze

Fixed -Wextra compiler warnings (Issue #3397)

The Sierra project is suffering from build errors when attempting to use a recent Kokkos version to build trilinos/stk because we use the -Wextra build flag and use warnings-as-errors.

Most of the warnings stem from mixing enum and integral types as possible return values from nested ternary chains. I investigated changing the enum constants to "static constexpr size_t" constants, which should have the same semantics and works in a Sierra build, but has link errors in the Kokkos unit tests (due to unresolved symbol errors, likely because of needing an external definition of the static which doesn't play friendly in a header-only templated implementation). The (ugly) solution that always works is to sprinkle static_cast<size_t>() everywhere.


Friday 2020-09-25 08:03:13 by faggatoni

HOLY FUCKING SHIT IT FUCKJASDLAFKASLgkfJSDLKGJLDSgdfsdgndfgdf


Friday 2020-09-25 10:00:53 by ColonyBot

adds a small fire delay to both station shotguns to make them slightly less of the best weapon in the fucking game and ideally this is all i'll have to do because i don't want to even consider nerfing buckshot or some stupid shit like that


Friday 2020-09-25 11:37:24 by Alex Cruz

Restart with change only on exit

This change allow the user to change everything they have to inside the homescreen activity and only restart on exit. Previously this was a pain in the fucking ass because you had to go in and set each option one by one with a restart inbetween. At least now is not that big of a pain.

  • Restart on destroy (hitting the back button, actionbar arrow)
  • Restart when a chance is made and the home button is pressed

** Thanks "Jack" for code to detect home button https://stackoverflow.com/a/27956263

  • Cleaned up restart code

@eyosen adapted to 10

Change-Id: I4962916ae0bd59d08247b59de585a97a2b9da3a1 Signed-off-by: DennySPb dennyspb@gmail.com


Friday 2020-09-25 14:21:42 by Marko Grdinić

"11:10am. I am up.

11:20am. I am chilling. Not going to do the morning session. Right now all the hard stuff is done in the prepass, so for the next few days I will just clean things up and tie them up. After that comes the monthly review and I will start work on the partial evaluator.

1:05pm. One more chapter of Reverend Insanity and I will start. The whole norther plains arc was an amazing chore to read, but once the Ren Zu side story resumed so did the quality. Ren Zu's fables are amazing.

///

Fang Yuan flipped <<The Legends of Ren Zu, and this was recorded within —

When Ren Zu was in a certain-death situation, after he fell into Luo Po valley and had no way to get out.

Desolate Ancient Moon, in order to save her father, climbed up Cheng Bai mountain and tried to get to the top, in order to get that one and only success Gu.

As long as she made a wish to success Gu, Desolate Ancient Moon would be able to save Ren Zu.

But when Desolate Ancient Moon got to the foot of the mountain, she was obstructed by the rockman.

It turns out that when Ren Zu's second daughter arrived at Cheng Bai mountain, she ruined love Gu's wonderful dream.

Out of anger, love Gu awakened the rockman in order to obstruct Desolate Ancient Moon.

After Desolate Ancient Moon killed the rockman, and got to the mountain waist.

Love Gu had yet to leave, it appeared before Desolate Ancient Moon and said: "Oh human, you interrupted my sweet dream, yet you still desire to take away success Gu. Now I will topple the entire Cheng Bai mountain, you can have fun finding that one and only success Gu out of billions of rocks. Hahaha."

Saying so, love Gu crashed towards Cheng Bai mountain.

Cheng Bai mountain was not an ordinary mountain, it was a mound entirely made up of stacked rocks.

After love Gu crashed into it, the entire mountain crumbled.

Love Gu left smugly, leaving behind Desolate Ancient Moon who looked at this huge pile of rocks in a daze.

How was she going to find that one and only success Gu among this chaotic pile of rocks?

Desolate Ancient Moon was troubled, without a choice, she had to return to cognition Gu to seek advice.

After cognition Gu heard Desolate Ancient Moon's description, it sighed: "Love Gu had always been demanding and unreasonable, even if it was me, or my child wisdom Gu, we would not want to confront it."

"Right now, Cheng Bai mountain had collapsed, you can only look at these rocks one by one, to find the real success Gu from among them. There are no other ways."

Cognition Gu said again: "But you have to be careful, there are two Gu on Cheng Bai mountain. One is success Gu, at the peak of the mountain. The other is failure Gu, at the bottom of the mountain. Failure is the mother of success, but it also has many other children. Those rocks are success Gu's siblings. When you pick those rocks, many unthinkably bad situations will occur. I will tell you a secret here, as long as you continue to affirm the belief of 'me' in your heart, these disastrous situations will gradually disappear."

Desolate Ancient Moon heard this and her heart sank, she asked again: "Then how do I differentiate the rocks in my hand? What do success Gu and failure Gu look like?"

Cognition Gu sighed: "They look almost the same, but it is easy to differentiate them. Just hold them in your hands, you will learn about their identities."

"In your search for success Gu, that failure Gu will be your biggest threat. You cannot hold on to the failure Gu, otherwise, you will be completely lost and your life would be in danger."

Desolate Ancient Moon heard this and nodded, expressing her gratitude.

Cognition instructed her again before leaving: "Do not say that I taught you that. If love Gu comes to find me, I'd be in trouble. In the face of fanatic and toyful love, wisdom and cognition can only run away."

"Don't worry, I won't expose you." Desolate Ancient Moon agreed, returning to Cheng Bai mountain.

Seeing the huge pile of rocks, her heart was gloomy.

Success was not easily obtainable, to obtain success, she would need to bend down and search while taking great risks.

Desolate Ancient Moon breathed in deeply, picking up the first rock.

This rock was ordinary, but when Desolate Ancient Moon held it in her hand, it shook slightly.

A light wound appeared on Desolate Ancient Moon's hand.

This was not success Gu, but one of success' siblings, one of the children of failure Gu.

Desolate Ancient Moon's heart was shocked, she touched the wound on her hand as she recalled what cognition Gu said —"When you pick those rocks, many unthinkably bad situations will occur. You have to affirm the belief of 'me' in your heart."

"So this is the terrible situation." Desolate Ancient Moon understood.

She chanted in her heart: "Me, me, me, me…"

As she chanted, the wound on her hand miraculously healed! Only a light scar was left.

She tossed the first rock away, and picked up the second rock.

When she held this rock in her hand, Desolate Ancient Moon's heart jumped, as an intense feeling of fear assaulted her.

Desolate Ancient Moon was shivering in fear, she almost ran away to escape, away from this place.

But she held on, and chanted 'me'.

After a long time, she slowly recovered as the fear in her heart was gone by half, finally picking up the third rock.

This rock made her dejected. She could not help but think: "I want to find that one and only success Gu among these billions of rocks, how difficult is that, how long would it take me?"

She could barely move anymore, she felt that the future was shrouded in darkness, it was too difficult to find success Gu.

She almost wanted to give up, but she thought about her father who was trapped in life and death door.

"If I give up, who will save father?" Desolate Ancient Moon shuddered: "Oh no, I forgot to chant 'me'."

Desolate Ancient Moon chanted again, getting rid of the despair in her heart, bending down to pick up another rock.

Once she held the fourth rock in her hand, Desolate Ancient Moon was shocked to find out that her nose had changed, it turned into a pig's nose.

She chanted 'me' once again, allowing her nose to recover.

Spending a lot of time, she exerted all her effort to get rid of the pig nose. But her nose was still slightly deformed compared to before.

Like this, Desolate Ancient Moon continued to pick up rocks, hoping to find that success Gu.

But days passed, and all she found was failure Gu's children.

Among these rocks, some made her injured, some made her dejected, despair, or fear, while some made her grow a pig head, rat's tail, etc.

Despite Desolate Ancient Moon chanting 'me' continuously, some of the scars still remained on her. As they accumulated, these scars turned her into a monster.

She grew six heads, three arms, five tails, and looked like a centaur. She had sixteen legs, and some of her legs had soft fur, some had snake-like scales, some had sharp claws, some had tough hooves.

In the search for success, people often transform and become completely different.

But Desolate Ancient Moon also became much stronger because of this.

After going through so much, she had become several hundred times as strong as before. These rocks could not longer trouble her.

"Success, oh success, where in the world are you?" Her seven mouths opened together. Some were screaming, some were shouting, some were whispering while others were growling.

The more she failed, the more she desired success in her heart.

After her great effort, the number of unpicked rocks became fewer and fewer.

Eventually, when there were only two rocks left, Desolate Ancient Moon was stuck between two difficult choices.

Undeniably, among these two rocks, one was success Gu, while the other was failure Gu.

If she obtains success Gu, that would be the best. But if she picked failure Gu, then Desolate Ancient Moon would become completely lost, she would be in danger of dying.

Even if Desolate Ancient Moon became a monster, becoming so much stronger.

One step to heaven, one step to hell, what should she choose? Desolate Ancient Moon could not help but become hesitant.

"If I do not dare to take the next step for fear of failure, then I will never succeed! I am already so strong, success is a step away from me, even if I take failure Gu, as long as I chant 'me', I should be able to endure it right?" Eventually, she mustered her courage and stretched out her palm, picking one of the rocks.

Unfortunately, she picked failure Gu.

An unforseen feeling of lost, self-doubt assaulted her.

"Me, me, me…"

Desolate Ancient Moon continued to chant 'me, but her voice became softer, as her seven mouths stopped moving eventually, her expression turning into a daze.

She had fallen into endless perplexity, she had completely lost herself.

The biggest tragedy for a human, is to lose your sense of self.

///

It is world building like this that sets Reverend Insanity apart from the rest.

1:20pm. Ok, enough, enough.

Let me start. Otherwise I am going to spend all day reading fiction.

As good as Reverend Insanity is, it is not substitute to taking time to build my foundation in the real world. I've been thinking about how I am going to proceed once Spiral v0.2 is finished, and I think it would be quite doable with some effort to negotiate myself into getting 10-20k per month in sponsorship from various companies.

I said that I would target Intel, but my real goal should be to target many companies at once and charge them rent for having Spiral backends once I prove the language's value. I am very unlikely to be sponsored over 5k a month by any single company, but multiple targets would get me a decent monthly income.

Spiral's great strength is how flexible it is - I can easily afford to have multiple backends in order to support multiple vendors.

And rather than marrying myself to Intel's chip right at the outset, it would be good to date around first. Though Mike Davies really impressed me in that video, who knows which one will turn out to be the most useful.

2:55pm. The power went out randomly and I was too dumb to turn the electric switch back on so I wasted 1.5 hours in bed. It was a nice little vacation, but I really should start. I won't let this happen again.

3pm. Focus me, focus. It does not matter that I only have 3h left in the day.

3:05pm. Yesterday I finally finished the prepass core steps and it caused me to slacken. It does not matter. I'll work till 8pm if needed today. I slept till late and started late, so I won't be as fatigued by the time 6pm rolls around.

    match x with
    | Choice1Of2(x,ret) -> ret (term env x)
    | Choice2Of2(x,ret) -> ret (ty env x)

3:10pm. Focus me. I decided to go with the above yesterday, but at this point I think I will just turn the various pass parts into an object.

An alternative would also be pass the various things in lexical scope as explicit arguments, but forget that.

type LowerSubEnv<'x> = {|var : Map<int,'x>; adj : int|}
type LowerEnv = {term : LowerSubEnv<E>; ty : LowerSubEnv<T> }
type Lower(scope : Dictionary<obj,PropagatedVars>) =
    let dict = Dictionary(HashIdentity.Reference)
    // ...
    member _.Term x = term env x
    member _.Ty x = ty env x

By that, this is what I meant.

Hmmm...But creating objects just to get this functionality is iffy.

No forget it. Let me go with Choice. I do not care if it is less efficient.

3:25pm. Hmm, in resolve I got it wrong. I do need to call it on types.

let resolve (scope : Dictionary<obj,PropagatedVars>) x =

You know what, let me just inline all these top level functions. That is what I would do in Spiral in order to get around the inefficiency of using union types to pass arguments to the mutual recursives.

3:35pm.

let process_term (x : E) =
    let scope = propagate (Choice1Of2 x)
    resolve scope (Choice1Of2 x)
    lower scope (Choice1Of2(x,id))

let process_ty (x : T) =
    let scope = propagate (Choice2Of2 x)
    resolve scope (Choice2Of2 x)
    lower scope (Choice2Of2(x,id))

Let me use these two helpers to act as a wrapper.

Now I just need to insert the calls to them into the prepass top level.

3:40pm.

    let eval_type' env l body = List.foldBack eval_type l (fun env -> ty env body) env |> process_ty
    match expr with
    | FType(_,(_,name),l,body) -> {top_env with ty = Map.add name (eval_type' env l body) top_env.ty}
    | FNominal l ->
        let env,_ = List.fold (fun (env,i) (r,(_,name),l,body) -> add_ty env name (TNominal i), i+1) (env, top_env.nominals.Length) l
        let ty,nominals =
            List.fold (fun (ty, nominals) (r,(_,name),l,body) ->
                let x = eval_type' env l body
                Map.add name x ty, PersistentVector.conj {|body=x; name=name|} nominals
                ) (top_env.ty, top_env.nominals) l
        {top_env with ty = ty; nominals = nominals}
    | FInl(_,(_,name),body) -> {top_env with term = Map.add name (term env body |> process_term) top_env.term}
    | FRecInl l ->
        let l, env =
            List.mapFold (fun env (_,(_,name),_ as x) ->
                let r = ref Unchecked.defaultof<_>
                (x,r), add_term_rec env name (ERecursive r)
                ) env l
        let term =
            List.fold (fun top_env_term ((_,(_,name),body),r) ->
                r := term env body |> process_term
                Map.add name !r top_env_term
                ) top_env.term l
        {top_env with term = term}
    | FPrototype(r,(_,name),_,_,_) ->
        let id,env = add_ty_var env name
        let x = EForall(r,id,EPrototypeApply(r,top_env.prototypes.Length,TV id)) |> process_term
        {top_env with term = Map.add name x top_env.term; prototypes = PersistentVector.conj Map.empty top_env.prototypes}
    | FInstance(_,(_,prot_id),(_,ins_id),l,body) ->
        let env = l |> List.fold (fun s x -> add_ty_var s (typevar_name x) |> snd) env
        let body = term env body |> process_term
        {top_env with prototypes = PersistentVector.update prot_id (Map.add ins_id body top_env.prototypes.[prot_id]) top_env.prototypes}

Yeah, this is quite fine.

3:50pm. Hmmm, ok.

You know what, let me get rid of that prepass exception. I do not need that kind of complication there.

            | TRecord(_,a') & a, TSymbol(_,b') & b ->
                match Map.tryFind b' a' with
                | Some x -> x
                | None -> TApply(r,a,b) // TODO: Will be an error during partial evaluation time. Could be substituted for an exception here, but I do not want to have errors during the prepass.

Did the same thing on the term level. This error will only manifest during the bottom up segment. In the top down, the typechecker will catch this.

Now, I've realized I have a huge problem in the 3 steps. Well, it will be easy to fix.

| EForall' | EJoinPoint' | EFun' -> failwith "Compiler error: Not supposed to show up here."

This is wrong. The inlined globals will definitely have this.

| EForall' | EJoinPoint' | EFun' | EPatternMiss | ERecord | ERecursive | ESymbolCreate | ELit | EB -> empty

Let me go for this.

| TArrow' | TSymbol | TPrim | TNominal | TUnit -> empty

And on the type level. This is in propagate.

| EForall' | EFun' | EJoinPoint' | EPatternMiss | ERecord | EV | ERecursive | ESymbolCreate | EDefaultLit | ELit | EB -> ()

This is in resolve.

| TArrow' | TNominal | TPrim | TSymbol | TV | TUnit -> ()
| EForall' | EJoinPoint' | EFun' | EPatternMiss | ERecord | ERecursive | ESymbolCreate | ELit | EB -> x

Similarly in lower.

| TArrow' | TNominal  | TPrim | TSymbol | TUnit -> x

I should have used my brain less and avoided compiler error exceptions here.

I forgot now that I've loosened the requirements on the peval AST that inlined globals will be in their finished form.

4:10pm. I am taking a breather even though I should be focusing.

But the thing is - I am done with the prepass. 100%.

I am thinking of whether or not to do the server and I am leaning towards no. Right now even if I did that I would not be able to test the prepass properly. I need to finish the partial evaluator first in order to get that capability.

So I do not want to spend effort in doing this at the moment.

4:20pm. Instead I seem to be browsing /g/ on the side.

I really want to do at least one more thing for the day. If it was a few days closer to the end of the month I would fit in the review, but right now it is too early.

Let me commit here.

Then I'll try running the plugin again just to see if it works. I want to enjoy my handywork for a few mins."


Friday 2020-09-25 14:23:31 by Almondatchy3

Version hotfix 6.1

Fuck you paint.net for your filters


Friday 2020-09-25 15:59:27 by Nathan Sidwell

c++: DECL_BUILTIN_P for builtins

We currently detect builtin decls via DECL_ARTIFICIAL && !DECL_HIDDEN_FUNCTION_P, which, besides being clunky, is a problem as hiddenness is a property of the symbol table -- not the decl being hidden. This adds DECL_BUILTIN_P, which just looks at the SOURCE_LOCATION -- we have a magic one for builtins.

One of the consequential changes is to make function-scope omp udrs have function context (needed because otherwise duplicate-decls thinks the types don't match at the point we check). This is also morally better, because that's what they are -- nested functions, stop lying.

(That's actually my plan for all DECL_LOCAL_DECL_P decls, as they are distinct decls to the namespace-scope decl they alias.)

gcc/cp/
* cp-tree.h (DECL_BUILTIN_P): New.
* decl.c (duplicate_decls): Use it.  Do not treat omp-udr as a
builtin.
* name-lookup.c (anticipated_builtin): Use it.
(set_decl_context_in_fn): Function-scope OMP UDRs have function context.
(do_nonmember_using_decl): Use DECL_BUILTIN_P.
* parser.c (cp_parser_omp_declare_reduction): Function-scope OMP
UDRs have function context.  Assert we never find a valid duplicate.
* pt.c (tsubst_expr): Function-scope OMP UDRs have function context.
libcc1/
* libcp1plugin.cc (supplement_binding): Use DECL_BULTIN_P.

Friday 2020-09-25 16:58:01 by Marko Grdinić

"4:40pm. Let me take the first step into the future here. v0.09 was very enticing as a foundation for a programming language, but as one it leaves a lot to be desired. I was in love with it for a long while, but a professional language does need to prioritize ease of use and for that I need editor support and top down typechecking.

I do not remember the exact point when I started this, but at this point I have been working on v0.2 for months.

Before that I spent the first half of the year trying to shore up my weaknesses as a programmer and ended up learning concurrency.

In the past few months that newfound knowledge has definitely be put to good use.

4:45pm. I am not done yet. All the work that I've done up to now has lead up to this. Not just the last few months, but all my work on Spiral since late 2016.

I am going to do a partial evaluator once more and this time for good.

Programming is the channeling of desire. You push your will and accumulate it as structures of abstraction.

I need to do it more. More as long as I am still alive.

4:50pm. v0.2 will be good enough that even though I won't get to those RL agents right away, I will be able to get residual benefits from it. I will turn the finished language into a source of income and for the first time in my life have my own significant assets.

Do I want that 10-20k per month? Then I need to finish Spiral v0.2.

Let me add the PartEval.fs file to the project.

Hard to believe I am finally at this point, but that is the reality.

Let me take a short break here.

5:05pm. Ok...focus.

type Macro =
    | MText of string
    | MType of T
    | MTerm of E
and TypeMacro =
    | TMText of string
    | TMType of T
and RecordWith =
    | RSymbol of (Range * string) * E
    | RSymbolModify of (Range * string) * E
    | RVar of (Range * E) * E
    | RVarModify of (Range * E) * E
and RecordWithout =
    | WSymbol of Range * string
    | WVar of Range * E
and PatRecordMember =
    | Symbol of (Range * string) * Id
    | Var of (Range * E) * Id
and E =
    | EFun' of Range * FreeVars * Id * E * T option
    | EForall' of Range * FreeVars * Id * E
    | EJoinPoint' of Range * FreeVars * E * T option
    | EFun of Range * Id * E * T option
    | EForall of Range * Id * E
    | EJoinPoint of Range * E * T option
    | EB of Range
    | EV of Id
    | ELit of Range * Tokenize.Literal
    | EDefaultLit of Range * string * T
    | ESymbolCreate of Range * string
    | EType of Range * T
    | EApply of Range * E * E
    | ETypeApply of Range * E * T
    | ERecursive of E ref
    | ERecBlock of Range * (Id * E) list * on_succ: E
    | ERecordWith of Range * E list * RecordWith list * RecordWithout list
    | ERecord of Map<string, E> // Used for modules.
    | EOp of Range * BlockParsing.Op * E list
    | EPatternMiss
    | EAnnot of Range * E * T
    | EIfThenElse of Range * E * E * E
    | EIfThen of Range * E * E
    | EPairCreate of Range * E * E
    | ESeq of Range * E * E
    | EHeapMutableSet of Range * E * E
    | EReal of Range * E
    | EMacro of Range * Macro list * T
    | EPrototypeApply of Range * prototype_id: int * T
    | EPatternMemo of E
    // Regular pattern matching
    | ELet of Range * Id * E * E
    | EPairTest of Range * bind: Id * pat1: Id * pat2: Id * on_succ: E * on_fail: E
    | ESymbolTest of Range * string * bind: Id * on_succ: E * on_fail: E
    | ERecordTest of Range * PatRecordMember list * bind: Id * on_succ: E * on_fail: E
    | EAnnotTest of Range * T * bind: Id * on_succ: E * on_fail: E
    | ELitTest of Range * Tokenize.Literal * bind: Id * on_succ: E * on_fail: E
    | EUnitTest of Range * bind: Id * on_succ: E * on_fail: E
    | ENominalTest of Range * T * bind: Id * pat: Id * on_succ: E * on_fail: E
    | EDefaultLitTest of Range * string * T * bind: Id * on_succ: E * on_fail: E
    // Typecase
    | ETypeLet of Range * Id * T * E
    | ETypePairTest of Range * bind: Id * pat1: Id * pat2: Id * on_succ: E * on_fail: E
    | ETypeFunTest of Range * bind: Id * pat1: Id * pat2: Id * on_succ: E * on_fail: E
    | ETypeRecordTest of Range * Map<string,Id> * bind: Id * on_succ: E * on_fail: E
    | ETypeApplyTest of Range * bind: Id * pat1: Id * pat2: Id * on_succ: E * on_fail: E
    | ETypeArrayTest of Range * bind: Id * pat: Id * on_succ: E * on_fail: E
    | ETypeEq of Range * T * bind: Id * on_succ: E * on_fail: E
and T =
    | TArrow' of Range * FreeVars * Id * T
    | TArrow of Range * Id * T
    | TUnit of Range
    | TV of Id
    | TPair of Range * T * T
    | TFun of Range * T * T
    | TRecord of Range * Map<string,T>
    | TUnion of Range * Map<string,T>
    | TSymbol of Range * string
    | TApply of Range * T * T
    | TPrim of Range * Config.PrimitiveType
    | TTerm of Range * E
    | TMacro of Range * TypeMacro list
    | TNominal of Id
    | TArray of Range * T
    | TLayout of Range * T * BlockParsing.Layout

This is the partial evaluator AST. Think about it - all I have to do is go through these + the few dozen ops and then I will be done with the partial evaluator.

Today, let me put some thought into what the data structures that I will be manipulating during peval will be.

5:10pm. Stop checking out 4k monitors. Focus my man, focus.

5:15pm.

type LangEnv = {
    trace : Trace
    seq : ResizeArray<TypedBind>
    cse : Dictionary<Op * Data [], Data> list
    i : VarTag ref
    env_global_type : Ty []
    env_global_value : Data []
    env_stack_type : Ty []
    env_stack_type_ptr : int
    env_stack_value : Data []
    env_stack_value_ptr : int
    }

I am looking at env_global_type and am wondering what this is supposed to be. I just realized that in the prototype I did not do inlining of globals. What that env global is, is merely the free vars env.

Yeah, it was complicated. I won't need them.

Also now that the bindings have load and store positions I won't need those ptr fields.

This will simplify the language environment for the partial evaluator.

5:30pm. Right now I am going over the prototype partial evaluator. I am going to have to do a lot from scratch, but I did a lot of things right last time should I should be able to reuse at least half of it. Probably more.

5:35pm. In constrast, I did not even bother looking at the previous prepass. I did it 100% from scratch.

...

Partial evaluation used to be such a huge challenge, but now it is well understood by me.

5:45pm. Just the basic arith operations take a third of the 1500 LOC file.

5:50pm.

| TyFunction of Expr * StackSize * Ty [] * StackSize * Data [] * is_forall : bool

6:05pm. Done with lunch. Looking at the thing above has made me realize that I do need global and local envs after all. Well, no big deal, I'll be able to deal with it.

6:15pm. Hmmm, I am going to add a new node so I do not have to have stack sizes explicit in the TyFunction.

Agh...no. I forgot that this time the functions can potentially have type signatures. I can't wait till the body gets evaled in order to create the local env. It has to be right away.

Nevermind TyFunction having two extra fields. It won't break the pevaller.

6:25pm

| RJPT of ReifiedJoinPointLayout * RData

Reified join points are going out this time around. I'll add layout types instead.

6:30pm.

type Ty =
    | BT
    | PairT of Ty * Ty
    | KeywordT of KeywordTag * Ty []
    | FunctionT of Expr * StackSize * Ty [] * StackSize * Ty [] * is_forall : bool // TODO: Remove this. Disallow raw functions being returned from JPs and if statements.
    | TypeFunctionT of TExpr * StackSize * Ty []
    | RecordT of Map<KeywordTag, Ty>
    | PrimT of PrimitiveType

    | RJPT of ReifiedJoinPointLayout * RData
    | ArrayT of Ty
    | RuntimeFunctionT of Ty * Ty
    | MacroT of RData

and Data =
    | TyB
    | TyPair of Data * Data
    | TyKeyword of KeywordTag * Data []
    | TyFunction of Expr * StackSize * Ty [] * StackSize * Data [] * is_forall : bool
    | TyRecord of Map<KeywordTag, Data>
    | TyLit of Literal
    | TyV of TyV

and RData =
    | RTyB
    | RTyPair of ConsedNode<RData * RData>
    | RTyKeyword of ConsedNode<KeywordTag * RData []>
    | RTyFunction of ConsedNode<Expr * StackSize * Ty [] * StackSize * RData [] * bool>
    | RTyRecord of ConsedNode<Map<KeywordTag, RData>>
    | RTyLit of Literal
    | RTyV of ConsedNode<Tag * Ty>

and TyV = T<Tag,Ty>

It is really quite striking how clean the partial evaluator's data structures are. It is a real eye opener.

6:35pm.

type JoinPointKey =
    | JPMethod of Expr * ConsedNode<RData [] * Ty []>
    | JPClosure of Expr * ConsedNode<RData [] * Ty [] * Ty [] list>

What is that Ty [] in join point keys supposed to be?

Ah, the types. They aren't all a part of RData anymore. My bad.

6:40pm. Ok, let me stop here.

It was not really my intention to slack this much today, but between the late start, the power outage, and the prepass mostly being finished leaving me without concrete goals, today's time went by in a blink.

But in the last two hours I did immerse myself just a bit into the partial evaluator. Tomorrow, I am going to take care of the data structures and put in the helpers.

That will be rougly 500 LOC to deal with, but it is very straightforward so I have a decent chance of hitting that goal.

The last 500 LOC will be trivial.

So all I will have to do is refactor the 500 in the middle in addition to doing closure conversion, union types and macros.

I thought it would take longer, but 1 week seems like a decent estimate for how long the partial evaluator will take. Quite remarkable. I got this part down to an art form.

6:55pm. Yeah, I was not thinking right when I said the partial evaluator will be the hardest part. I have such a huge cache to bolster me that it will be much easier this time. I am closer to finishing the initial implementation than I thought. I should be done with peval and codegen somewhere early next month. Taking the time to do editor support and incremental compilation I should be able to start testing somewhere mid next month.

Let me stop here. There is no point in wracking my brains here. Tomorrow I will just focus on the task at hand."


Friday 2020-09-25 18:54:39 by Ben

This is the stupidest commit I have ever made my men this is some crazy shit right here some big shenanigans I am actually popping - Yeah, I committed a completely new workflow without testing, what's up? My reproductive organ just gained 6 centimeters


Friday 2020-09-25 20:14:51 by Monica Buczynski

Add files via upload

For my English research paper in my sophomore year of high school, I investigated about how the life experiences of Czesław Miłosz impacted his writings.

Thesis: Miłosz’s historical period, beliefs and political views, personal experiences, and the voice of the man that gave the “Poles the courage to demand change” (“John Paul II: A Strong Moral Image”), greatly affected Czesław Miłosz’s writings (“Czesław Miłosz” 2008).


Friday 2020-09-25 22:21:55 by KasparoVy

Fixes Sagaru

Ports the T language key from Virgo. I tried a few times to do a bigger refactor of saycode to bring it up to date but holy shit I'm not ready lmao.

say ",T Gold Ring for life."


< 2020-09-25 >