Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release beta #613

Open
8 of 15 tasks
dzikoysk opened this issue Jan 23, 2021 · 24 comments
Open
8 of 15 tasks

Release beta #613

dzikoysk opened this issue Jan 23, 2021 · 24 comments

Comments

@dzikoysk
Copy link
Member

dzikoysk commented Jan 23, 2021

According to:

Requirements:

  • Reimplemented, magic-free internals
  • Normalized type system
  • Stable modules
  • Missing basic structures
    • Generic types
    • Anonymous types
    • Lambdas
    • Bitwise operations
    • Basic macro engine
  • Simplified exception handling
  • Reimplemented assignation parser
  • Confirmed visibility keywords
  • Primary constructor implementation
  • Nullable values wrapping
  • Better docs and coverage with examples
@dzikoysk dzikoysk pinned this issue Jan 23, 2021
@dzikoysk dzikoysk added this to the Release beta milestone Jan 23, 2021
@ghost
Copy link

ghost commented Feb 4, 2021

Anyway I can help? I have been watching this repo for a while and it seems interesting, so I want to contribute. This is my first time contributing here and I wanted to help with some simple issues to get my feet wet.

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 4, 2021

Hey :) Well, at this moment I'm developing quite breaking rework of packages and modules as you can see: #617, so I don't recommend contributing to this repo until I finish it (1 or 2 weeks I think).

If you want to start I'm pretty sure you could start with detecting and fixing problems that affects the language environment such as installer:

By saying all of it I mean there is just a lot of work and small details that should be fixed in literally every repository.

@ghost
Copy link

ghost commented Feb 5, 2021

Hi, and thanks for the suggestions. I'm not sure if I can start testing Panda quite yet... But I have a couple of questions...

  • Is Panda going to be a mainstream style language, with frequent updates and made for writing big applications?
  • What niche does Panda fill?

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 5, 2021

Panda is my hobbyist side project developed for a few years. I had some ups and downs, but in the end it is still moving forward. The purpose of the language is to fill the scripting languages area around the JVM and to provide convenient tools for other DSL implementations (example: Light).

You have to be aware of a fact, that it is not just another implementation of a compiler that converts some kind of "new revolutionary syntax" to bytecode with a fancy sdk and in the end the internals does not really matter. Developing such a language is kinda boring and there is a bunch of projects like that. Panda is written from the ground up, so besides the interpreter, there is also a new runtime abstraction.

Thanks to the JVM flexibility, Panda should be quite good complement for any application that requires some kind of extension system (tests, plugins, dsl, etc.) without any need of generating bindings for the whole API. At this moment that's a Groovy kingdom, but I'm looking for something more suitable for scripts and a much safer. The second niche is just a full-scripted environment powered by the dedicated package manager, where we can just launch a compilation-free, interpreted application (just like e.g. node with npm).

@ghost
Copy link

ghost commented Feb 6, 2021

Nice ! So this language is a hobbyist language that is designed to sort-of "compete" with Groovy.
Yes, building from the ground up allows you to add any amount of minute controls to the interpreter.

About the compiler bit, If you want to build a good language but can't build good parsers (like me), you can just strap an ANTLR frontend to an ASM + Java backend. That is what I did with my language Cylvre (which is currently under active development). I wish to take Cylvre to the mainstream as a language that is simple to use.

I feel like we are going off topic. I think I may be able to help Panda after the breaking changes are done.

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 6, 2021

Groovy is just the closest language that may be even considered as an alternative at this moment to be honest. I'm aware of tools such as ANTLR or LLVM, it's just not a subject of my interests. The most interesting process is to develop these internals - the language is just a side effect of their proper implementation. I've tested some crazy ideas during the indev phase, and I'm pretty sure it broadened my horizons and knowledge related to the topic 😛

@ghost
Copy link

ghost commented Feb 6, 2021

As far as I have seen, Panda looks like a simplified and revamped Java 😃 .
Update: does Panda have a function for System.err.println() ?

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 6, 2021

Yup, the log statement appends output to the environment logger.

@ghost
Copy link

ghost commented Feb 7, 2021

Is it too early to help by providing IDE support for Panda?

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 7, 2021

Well, it depends. The general shape of the language is pretty stable right now and any updates related to some already implemented features should be cosmetic. In the past I was playing around IDE concept: Lily

image

At this moment I don't maintain such projects, just because it doesn't contribute to the development of Panda directly. The discussion about the IDE support is important and I think it might be a good idea to at least try to provide some simple tools that integrates with VSC or IntelliJ.

@ghost
Copy link

ghost commented Feb 7, 2021

I can help by providing IntelliJ support. Personally, I think that IDE support is crucial in the early stages. It helps with the adoption of the language and early adoption is crucial for language to get of the ground.

Sorry to bring this up again and sorry if I sound rude, but why didn’t you reply when I asked if you could help me with Cylvre?

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 7, 2021

Well, the IDE support is kinda pointless when you can't really develop any application in a language :) You have to be aware of a fact, that nobody really wants a new language, so there is no point to invest time in various related side projects as long as the language does not really work or offer something new. Of course, when you have a lot of people around the project, you can afford it.

I've resolved a couple of issues yesterday in different repositories and didn't really pay attention to conversations around them. As far as I see you've removed the message?

if you could help me with Cylvre?

I'm not in a position to develop such a project. Beside of the fact, that I'm quite busy at this moment, I also don't really enjoy the process of generating another language using tools that I've mentioned:

"I'm aware of tools such as ANTLR or LLVM, it's just not a subject of my interests."

To be honest, creating a language is kinda simple these days. There is a bunch of tools that can do almost everything, so you just need to combine them. It's great exercise for a developer, to get a taste of how language really works, but it's not really engaging me at this point.

@ghost
Copy link

ghost commented Feb 8, 2021

It’s okay, I started this project to help people and to learn how languages work.
Although I don’t disagree, People do need new languages, new languages that are increasingly easier, faster and more powerful to use.

I’d love to help Panda if there was anything that I could help with (other than IDE support)

@dzikoysk
Copy link
Member Author

dzikoysk commented Feb 8, 2021

By saying nobody really wants a new language I mean people's attitude towards new languages 😛 Every new tool requires them to invest time in learning it, so the tool has to be stable and offer a lot of new additional features to convince them that it is worth to at least try it.

Apart from the projects mentioned above, if you'd like to start with Panda internals, I think I'd start with syntax. You can start reading sources related to an implementation of some statements or expressions, and then you can just report some missing features or report strange things in API to start a discussion around it. It's kinda hard for me to estimate your impressions of dealing with this code, so I think the best thing you can do at this moment is to look at everything with a fresh eye.

@ghost
Copy link

ghost commented Feb 9, 2021

Yes. By making the transition from mature language to new language as smooth as possible for the user, it will keep them coming back for more.

Although my skills as a Java developer are not “professional”, while implementing my language I read a lot on compiler theory. I’ll let you know if I find anything useful.

@AurumByte
Copy link

Hi there! I’m actually CodeUnstable. ( had to create new account due to a couple problems ). Anyway, how’s your language doing? I see it has come quite far since I was last here.

@dzikoysk
Copy link
Member Author

dzikoysk commented Apr 2, 2021

Hi :) At this moment I'm kinda focused on cdn and hub to provide some kind of basic package-registry infrastructure within package manager, but I was quite busy lately, so there is still a lot to do. As soon as I'll finish it I think I'll focus on a final implementation of types, its builders and the builtin std, because the current one is such a mess xD

@AurumByte
Copy link

Hi! :D. For any packages, couldn't you create a language support plugin for build system/package manager like maven or gradle and upload and download packages from there? Or, are you doing this so that all panda packages can be located here and is hence more convenient to locate and get the package/publish the package to ?

@dzikoysk
Copy link
Member Author

dzikoysk commented Apr 3, 2021

Panda is interpreted language, not compiled one, so integration with build systems like maven or gradle is just not my target at this moment. By default, all packages should be hosted through services like github, because it's just a right place to do it. Hub keeps references to repositories with Panda sources and then lists them in the one place. It's something like https://crates.io/

@AurumByte
Copy link

AurumByte commented Apr 4, 2021

Oh... OK. Once again, thanks for providing info. I'd love to contribute sometime soon.

EDIT: I've taken a look at the guide and noticed that instantiation of types follow the Java method i.e. :

TypeName typeName = new TypeName()

In my opinion, the first declaration of TypeName is unneccesary, as the variable typeName is already evaluated to type TypeName by the constructor.

By omitting the type declaration, maybe even the new keyword, we can get something that looks much cleaner and more readable without boilerplate

typeName = new TypeName() // we already know that typeName is of type TypeName from the constructor

or

typeName = TypeName() //This is a bit more ambiguous but ok... I guess.

This is my opinion though, so you can ignore it if you want. (I've seen this being implemented in Kotlin for reduced boilerplate and more concise code)

@dzikoysk
Copy link
Member Author

dzikoysk commented Apr 4, 2021

Yeah, you can drop the first type using let keyword. The new keyword is also meant to remove in the future - #582. Unfortunately, it requires some work to do, because I need to merge constructor and method expression parser. I'd like to do that when I simplify the expression parser.

@AurumByte
Copy link

Hi! Do you mind explaining how you built the interpreter to produce JVM bytecode?

@dzikoysk
Copy link
Member Author

I didn't. It's not a compiler which just converts it to bytecode. I use bytecode generation only if I need Java interop in some places. Atm it's only used to generate stub types, but as we talked in asm related issue, I need to a little bit redesign this topic. I've made bytecode-free PoC, but it's just not the best way for the release candidate. I think I'll generate much more bytecode in the future than I thought, because I think I can do it on language implementation level and it won't affect the framework.

@AurumByte
Copy link

Ok. I just wanted to know. Thanks for the info! 😃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants