←back to thread

11 points Hashex129542 | 2 comments | | HN request time: 0.485s | source

I'm developing a programming language, the keywords and features mostly based on Swift 5 but some additional features like,

1. async function will be called from no async function but no async/await keyword. If you want to block main thread then block_main() function will be used. block_main() /* operations */ unblock_main()

2. protocol can inherit another protocol(s) & protocol can confirm a class like swift.

3. no `let`. only `var`. compiler can optimize further.

4. if (a == (10 || 20 || 30) || b == a) && c { }

5. `Asterisk` is replaced to `x` operator for mul operations.

What are the features you found or you need in a programming language?

1. dusted ◴[] No.42201515[source]
I actually like javascript.

I want types, like typescript, but instead of compilation, there should be a "boot type check" which does about the same checks as tsc, but the types should be first-class, available at runtime, so I can pass them around, create, read, update and delete them at runtime.

I want runtime code creation that is more robust than creating source-code as strings and then compiling them, I want first-class code-as-data like in LISP. I want to be able to define some blocks of code, and conditionally combine them the new blocks which I can compile to functions. I want to be able to derive functions that is more, less or different from their parents (for example, removing or replacing a number of its statements) (basically, I want to have enough control that I can chose a pattern of generating ideal callbacks with no conditionals)

I want to be able to express (I use % for lack of a better idea right now, this is the type-safe version of the syntax))

const someBlock = (a: number, b:string)=%{ console.log(a+2+c); }

And pass it to a function: myFunc(1, someBlock, 3);

(and someblock should be able to use it: function someFunc( aBlock: % ) { const a = 1; const c = 3; someblock; }

I want better introspection, if I pass a function, there's no reasonable, robust and performant way to reason about that function.. You can't access its parameter list to learn the names of its parameters, their type or number, you can't access its body to learn what it does, you can't even see its return type, to determine what to do with its result, mind you, most of this metadata is already present in the js runtime, just not exposed in a good way to the language.. You can't even access the ast.

replies(1): >>42203595 #
2. peppery-idiot ◴[] No.42203595[source]
You can do a lot of the codeblock stuff with JavaScript's Function prototype (bind, apply, call):

const someBlock = function () { console.log(this.a + 2 + this.c); }

const myFunc = someBlock.bind({a: 1, c: 3})

myFunc(); // => 6