Replies: 30 comments 158 replies
-
I agree wholeheartedly with these sentiments, and think this discussion is very timely. I too will hold my hand up to raising many specific feature requests which focus on single, narrow aspects. I'd also like to propose that once the guiding principles are established, that all existing and future proposals for language extensions be collated and that they are considered holistically with regard to all others, so that everything evolves coherently. Community engagement is key here. |
Beta Was this translation helpful? Give feedback.
-
I like what you've written, and I've read the other project's missions/principles. I do think those other languages have the privilege of a clean slate (so-to-speak), whereas tB is somewhat saddled by its VB6 ancestry. So I suggest that before we get too far ahead of ourselves, tB's guiding principles should be: -1. tB should achieve 100% VB6 compatibility (+/- some fudge factor that accounts for all those weird programs that are never going to be recompiled) before any new developments occur.
|
Beta Was this translation helpful? Give feedback.
-
Thanks for starting this discussion. I am in full agreement, and I would urge all interested parties to come and have a say on this. Once we've agreed the principles, I think it would be a wise idea to follow the advice from @mansellan from earlier; to create a separate GitHub repo for the language design discussions. We should be able to move any of the current and previous issues/discussions over to the new repro. My time this week is very limited, but I am reading everything, and will of course respond in due course. |
Beta Was this translation helpful? Give feedback.
-
It might also be worth considering forming a very small committee of elected members so that the final decisions are arbitrated. Given the small community here at the moment, perhaps 3(?) elected members would suffice for now. The final decisions should be straight forward if we get the design principles right. |
Beta Was this translation helpful? Give feedback.
-
and that is why I wrote about the c-operators. not because I can't learn or because it looks horrendous, but to create consistency in the language. for me the syntax is "very important", more important than features. if we read the Philosophy from TimPeters in Python, I would read all that everytime theres a new feature. as someone wrote in the other thread: other languages did create their own "variation", and why did they do that? I agree that we need a guidelines here. and we need people with strong Basic-knowledge and understanding. |
Beta Was this translation helpful? Give feedback.
-
I'm now programming in MS Access/VBA for over 25 years and I like it how easy it is to develop an application using
So what I would like to see in TB is:
|
Beta Was this translation helpful? Give feedback.
-
We can absolutely learn from the patterns (anti-patterns!) that have been discovered by countless other languages over recent years. There's nothing to gain from designing a governance model in a vacuum. We should look to see what has worked / not worked elsewhere:
This is NOT to say we should immediately import the syntax and governance model of "language X". It is to say, what can we learn from what others have tried? |
Beta Was this translation helpful? Give feedback.
-
To get the discussion going, it might be easier to have a draft to work with. Please do feel free to scream bloody murder, chop & dice it up and edit to your heart's contents. Or post your own drafts. The principles are numbered to indicate precedence so if you think a principle is more important than other, resort accordingly. I took this from the languages' guidelines, other comments in this discussion and sorted based on what I think reflects the aims of twinBASIC. Again, if I'm wrong, just provide a better draft. 😄
|
Beta Was this translation helpful? Give feedback.
-
To add my penniesworth I too have seen the discussion on VBForums (and even contibuted as Freeflow) and I think the discussions are focussed on detail rather than a strategic viewpoint. Twinbasic has a design philosophy, which is to be VB6 compatible. Lesser spoken aims I would surmise would be 'rescuing' projects from VSTO and the awful awful javascript api's. So the driving forces for twin basic development, from my viewpoint would be facilitating code moving into Twinbasic, which is the same principle as VB6 compatibility but extending further to offer a helping hand to VB , C# and other languages) and then providing better structures and syntax for moving code forward when refactoring. From this perspective it makes perfect sense to introduce c like operators but maybe not new operators Like RShift and LShift. However, I would suggest that the use of such 'things' is flagged with a deprecated warning because they are intended only as a stepping stone to something better. Any group formed to consider additions to twinbasic should be focussed on ' What do we add to make things better' rather than language x has this 'typing reducing' feature lets add it to Twinbasic. As examples, the discussion on bit shifting might be circumvented if it were possible to specify bit fields in a Typedef
Similarly the use of operator= and double operators (eg ++) could be largely avoided by having a fast behind the scenes zip method that converted two or more collection type objects to a single collection of arrays to facilitate the existing 'for each' structure e.g. something like
This is the type of discussion I'd rather see rather than arguing about symbols used to represent syntax. So in Summary
|
Beta Was this translation helpful? Give feedback.
-
this is important, as Wayne is the director of this story. Im still trying to understand his envision and goals. so far its not that obvious.
this I don't agree. what you think is "making it easy" could actually making it worse.
and this is my concern, and why I go so much against what you try to do. that for me is a big concern. you want to encapsulate TB for your own subjective needs. edit:
thanks you FullValueRider, for writing this. as this show exactly my point I made. |
Beta Was this translation helpful? Give feedback.
-
I mean there is only a discussion when there is any new syntax that shall be added into tB, right ? And in the past Wayne looked always for "prior art", e.g.
And what feature is in discussion now or will come that does not have "prior art" ? Let's take the bit shift operator (as this caused some emotions on some users) there are only two prior arts available, either << and >> or SHL and SHR. That's it. I mean tB could go ahead and define it's "own art" but I don't know if that will help or just causes confusion. |
Beta Was this translation helpful? Give feedback.
-
Draft 2. Some rewording to clarify some of the points and to incorporate others' comments, particularly regarding runtime dependencies. Added a new subpoint for the point 6 & 10. No changes in the precedences. I do want add to the point 2 that there ought to be a central repository similar to what Rust is doing with its crates.io and docs.rust-lang.io but held back as that may be committing too much or being too specific. We should consider carefully whether we should trim down the list - a tight focus is usually very helpful. Again, discuss.
|
Beta Was this translation helpful? Give feedback.
-
My $0.02 on the basic-y-ness of this is summed up in the following: KISS rules apply here. Always recall what BASIC was intended to be from the start. It's right there in the first letter of the name of the language, B eginners Never forget that this language started with the idea that it was for BEGINNERS, new to programming. This is actually harder to do when you think about it because:
|
Beta Was this translation helpful? Give feedback.
-
I have been using twinBasic since it became available to port a large library I use for simplifying code I write for Advent of Code problems. As an amateur programmer I'm finding the debug cycle and intellisense in VSCode a somewhat better experience than the repl in VBA (even when assisted by Rubberduck). The promised edit and continue might make a slight improvement to the twinbasic experience but its not something I'm desperately waiting for. |
Beta Was this translation helpful? Give feedback.
-
I would also want to enforce: VB6 is the main purpose why TB was created. Im quite tired of the .NET taking charge. if you love .NET why are you here? and... how strange is not that, you want to turn TB into .NET. adding new features should be:
but never, and I say, NEVER start by looking in other languages FIRST. we improve VB6 and keep its language and syntax as it is. I read from a few of you: TB is 100% backward compatible. and after that its silence. and I get the response. we love VB6. do you really? and how you manifest that? and how do you explain your reasoning when you want to add new features FIRST before you even thought of a way to actually just improve what VB6 already has. you think VB6 is just a garbage language that is limited to a few things. so, now, we gonna create MixLangz and add new features because you think its cool, or look nice. or "this is how we do it" Im quite disappointed. |
Beta Was this translation helpful? Give feedback.
-
Hello, I have been following the evolution of twinbasic from the beginning and reading the comments and interests present Maybe it would be useful to change strategy That is to say, make a prototype of a twinbasic product obtaining the basics of compatibility, finishing a version 1.0, and then, afterwards, on the established prototype, and already with certain expectations covered, starting the process of modernization of the product That is, first make a 100% compatible prototype It is a suggestion that I think may work better for everyone, since it does not blur current resources, it follows the main target to meet it and gives the best encouragement and the best experience to start the transformation of the product towards twinbasic 2.0 Thank you for trying this chimera and success in everything! |
Beta Was this translation helpful? Give feedback.
-
@WaynePhillipsEA |
Beta Was this translation helpful? Give feedback.
-
Draft 3: Trying to incorporate what has came up in discussions (not just here but also other discussions/issues). I also think a different format might be more helpful in expressing the goals more clearly. Swapped the 5th point with 6th point because I think it flows better and corresponds more to how often we have to deal with the each point. Again, discuss.
|
Beta Was this translation helpful? Give feedback.
-
It is indeed a marvellous achievement. There are also some other principles which I have stolen wholesale from the 'Zen of Nim' https://nim-lang.org/blog/2021/11/15/zen-of-nim.html
|
Beta Was this translation helpful? Give feedback.
-
The bclothier 10 points are very good. Point 7 "One Way" is good but it should be one obvious or preferred way, advanced users trying to get maximum performance should still have the option to do things in a more complicated way? |
Beta Was this translation helpful? Give feedback.
-
This hasn't been explicitly mentioned (or maybe it has, but there are a lot of comments here!), but I think the purpose of these guidelines should be made a bit more clear. Based on posts in this discussion, I think the general sentiment is something like this:
*More formally we could add a preface (copied from semver.org): The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 That's the feeling I have about how these new design guidelines should be selected and used. The good thing is, if someone disagrees with the guidelines, then rather than having lengthy discussion in the comments of the original post that triggered the disagreement, they can insead ask a side-discussion about whether the guidelines can be changed. This is similar to how on Stack Overflow your question can be closed according to some pre-defined hopefully objective rules then subjective guidelines/ gut instinct - but as the question author you still have an opportunity to go on meta stack overflow to hash out interpretation of the guidelines or whether new guidelines need to be added. Open to different thoughts on what these guidelines are for and how they should be used (or better wording). |
Beta Was this translation helpful? Give feedback.
-
At the risk of sounding like a broken record on this one word and thought, I feel the need to share the following: Haley Littleton shared in an op-ed entitled An Ode to being a Beginner (found here: https://www.rei.com/blog/hike/ode-to-beginner - but I'm going to quote some parts in case of link decay, so bear with me, please...) "My freshman year of college, a boy with floppy hair down the hall convinced me to buy a cheap snowboard off of Craigslist, promising he would teach me how to shred. After one of the most painful days on snow of my life (I grew up skiing), I threw the board with a huff into the Goodwill pile and fumed at myself for failing after just one attempt. I went back to skiing because I knew I would succeed. Throughout a lifetime of [...] endeavors, many [...] partners have confronted me about being too hard on myself after only a few attempts at a new skill. Oftentimes, it seems less risky to quit rather than visibly fail. The op-ed goes on to other topics, but those are the salient passages for us to consider here. My central point is that this BASIC programming language was born with the purpose of serving a class of people called students and taking on the task of being an approachable tool to allow them to grasp the concepts of becoming a programmer before moving on to more advanced and esoteric concepts and toolsets in the - now seriously broadened - IT landscape as it existed back when it was first designed and created. The designers found a PEOPLE-BASED need for this kind of tool. My personal mantra here, is that this is now a heritage for the BASIC language, and we CAN NOT loose sight of that. We never want twinBASIC to become something that beginners will look at, and think "I can't understand this stuff" because we've allowed our evolved lust for "doing more new things" to overcome this fundamental purposes for the language. If we don't consider this as a fundamental purpose of this language (it definitely deserves a place in your 10 main points - not "implied" anywhere, but boldly and clearly stated), then we run a serious risk of allowing future work to destroy this approachability and this is the language's very essential HUMAN purpose. One final thought on the proper perspective here is that BASIC was created in the 1970s for this purpose. Otherwise, the lure to incorporate that newest, latest, shiny bauble of an idea/fad will eventually turn this language into the mess that C# is becoming and beginners will wind up throwing TwinBASIC onto the Goodwill heap too (and I'd really hate to see that). OK, I'll make this my last post on this point. |
Beta Was this translation helpful? Give feedback.
-
This comment was prompted by recalling something I saw in a StackOverflow question a few days ago.
An entirely intuitive application of syntax, but totally totally wrong. Both 'common sense' and 'intuitiveness' reply on the application of knowledge already gained (whether we realise it or not). What we should be referring to in twinBasic is the presence or lack of predictability or orthogonality, i.e. the language behaves the same way in similar situations. Obvious orthogonality in VBA is that arrays and collection object can be enumerated using 'for each' Obvious non orthogonalities in VBA are
However, I am also reminded of an old joke that I think is very applicable to where @WaynePhillipsEA finds himself with twinBasic. Apologies for the sterotypes
|
Beta Was this translation helpful? Give feedback.
-
So Ben, Is it time for your next version of the main points on this topic yet? |
Beta Was this translation helpful? Give feedback.
-
ping |
Beta Was this translation helpful? Give feedback.
-
Ok, I reworded a few things just a tad, and added back the Beginners Draft 4:
|
Beta Was this translation helpful? Give feedback.
-
So this issue has now been moved to lang-design (thanks @WaynePhillipsEA !) I'd suggest that we should get the latest guidelines agreed and into the repo soon, and then lock this thread - it's huge! Any changes that need to be made later can be opened as new issues, PR'd and reviewed in the normal way. |
Beta Was this translation helpful? Give feedback.
-
A guiding principle that I just realized: Keep OS portability in mind. Don't add a function or feature that might be a piece of cake on Windows and a nightmare (or impossible) on another OS. |
Beta Was this translation helpful? Give feedback.
-
Given the work that's gone into this, I think it's time to start drafting a document. I've opened a Pull Request to add a document to the repository (guiding-principals.md) to this repository, based on @mburns08109 latest draft. For those not familiar with how Pull Requests work, here's a quick primer: https://www.youtube.com/watch?v=For9VtrQx58 tl;dr: you can select any line and add a comment for changes you'd like. |
Beta Was this translation helpful? Give feedback.
-
Lately, I've observed new issues & discussions touch on the language design (and I'm also a part of the problem as well). As the cacophony of voices raises, I can't help but notice that there is no core principles to assess the proposals upon. Many people have expressed that twinBASIC should be "Basic-y" but we haven't actually really define what it means to be "Basic-y". Additionally, we've been looking at other languages for prior arts & inspirations and in some cases submit for it to be grafted into the language. Given enough grafts, we'll be in the unenviable position of creating a Frankenstein's monster.
As a consequence, several issues and discussions are unfocused (again, I take my share of blame here) and I'm concerned they are too myopic, focusing on one small aspect while not considering the overall fit with the language as a whole.
When I look at languages that have considerate success (I'm looking at Python, Rust, and C#), they all have one thing in common: they have a set of guiding principles to rally around in the design decisions that comes about. As a result, the language is very consistent and easy to use.
I think it would behooves twinBASIC to adopt its own principles. I am not sure if VBx ever had such thing but even if there were, twinBASIC is free to adopt some or all or none of them. All feature requests should be then weighted against the twinBASIC's principles so that we can help focus our discussion and not get hung up on whether x is better than y. Ultimately, this is a design decision, and there must be a tradeoff made. The principles will help us make such decisions more consistently and hopefully make twinBASIC a great language to work with.
@WaynePhillipsEA will need to develop and establish principles so that we can all point to this in guiding the feature requests.
For inspiration on what principles should look like:
Python Philosophy
Rust empowers by...
C# ECMA standard -- quoting below because it's a big zip file containing a big PDF. Yuck! On page 21:
If anyone else know of a great principle? philosophy? design goal? from other language, feel free to share.
Beta Was this translation helpful? Give feedback.
All reactions