Open dumblob opened 9 years ago
My feedback will likely be very long, so I'll split it in parts. Here is chapter one -- borrowing.
borrows from C++ (object-orientation, syntax)
I'd better omit this fact which hopefully will become history earlier or later, on which I myself have been working for some time. For a modern high-level language, C++ is mostly a poor choice to borrow ideas from. The influence of C++ in Dao is already relatively faint, and I expect it to subside further during subsequent design revising.
C (simple things made simple, but at the same time high-level enough)
In C, simple things exist mostly in abstract examples. In reality they quickly become stupidly complicated because real-world code requires proper handling of errors, portability, safe concurrent data access, etc. Not to mention miserable and awfully designed (due to historical reasons) standard library. With regard to simplicity, Go is a considerably better example.
Overall, mentioning C/C++ as a source of inspiration for a scripting language today is a sure way to be perceived an oldfag and freak. Conclusion: refer to other languages, mention C/C++ only if you sense dominating presence of oldfag freaks :)
Perl (basic idea of type inference; dollar for enums :) )
At present, Dao has little or nothing in common with Perl in particular. Dollar sign was definitely chosen in favor of simple parsing rather then by Perl's example. Also, Perl is a remarkable example of ludicrous programming language design. Conclusion: mention it only in jokes :)
Rust (safe synchronization principles)
That would be a huge exaggeration -- Dao does not provide anything really similar to what Rust does in terms of concurrent safety, superficial resemblance in few minor details doesn't count. Dao's approach to concurrency is much closer to that of Go, with emphasis on simplicity.
Now, it is important to show that Dao is not just a language X plus language Y with the syntax of language Z, as many minor programming languages are. It borrows heavily from various languages, but virtually every idea goes through rethinking which may eventually produce a result substantially different from the origin. Good examples are enums (Ruby), decorators (Python) and defer
(Go, obviously).
Having its own vision is what differs a good language from a mediocre one.
Chapter two -- goals.
classification in the languages universe depicted using scales
Might be somewhat redundant unless the audience is deeply academic. I'd focus on hot topics:
That would help to emphasize strong points of the language's design comparing to mainstream alternatives.
targets clean and minimal interfaces readability (short names, very small number of operators & keywords, proven mechanisms for structuring, ?????) extremely fast self-defence from myself portability (MacOSX, iOS, BSDs, Haiku/BeOS, Linux, Windows from XP) native support for real concurrency and asynchronous handling e.g. Kotlin, Ceylon and other JVM-based langs resemble rather a syntax-sugar to C/Java syntax then a really high-level approach feature-full (also "dualism" instead of one-fits-all - see below) small
Definitely not 'extremely fast' -- that would be a hype. Under some circumstances faster then some languages -- that's close to the reality. Dao has potential to be quite fast, there is JIT compilation, but the language does not put particular emphasis in that.
Dualism is more an accident then an ideology. Overall, the design of Dao is not very clean due to certain practical reasons; this begets certain ad hoc solutions and lack of strong unification. Dualism is not a goal, it's a side effect which can hardly be viewed as an advantage.
Clarity, expressiveness, control -- these, I suppose, are the goals of Dao and its strong sides. Also clean and convenient interfaces, yes. Modern concurrency, but not anything outstanding as of now. Maybe some accent on embedding. Satisfaction from coding, after all :)
I think @Night-walker has given excellent feedbacks. I will briefly comment on his feedbacks.
borrows from C++ (object-orientation, syntax)
Overall, mentioning C/C++ as a source of inspiration for a scripting language today is a sure way to be perceived an oldfag and freak. Conclusion: refer to other languages, mention C/C++ only if you sense dominating presence of oldfag freaks :)
Agree.
Perl (basic idea of type inference; dollar for enums :) )
At present, Dao has little or nothing in common with Perl in particular. Dollar sign was definitely chosen in favor of simple parsing rather then by Perl's example. Also, Perl is a remarkable example of ludicrous programming language design.
Correct. Dao had borrowed a couple of things (only one thing I actually still remember: syntax support for regexp) from Perl, but those things were eventually removed long time ago.
Another reason for using dollar sign for enum symbols is that there is S
in $
:)
Conclusion: mention it only in jokes :)
Interesting idea:)
Now, it is important to show that Dao is not just a language X plus language Y with the syntax of language Z, as many minor programming languages are. It borrows heavily from various languages, but virtually every idea goes through rethinking which may eventually produce a result substantially different from the origin. Good examples are enums (Ruby), decorators (Python) and defer (Go, obviously).
Well said.
Maybe some accent on embedding.
Agree. It has been one of my primary goals to make embedding and extending simple, I think this goal is more or less achieved, and it has become significantly simpler than other languages for embedding and extending.
Thank you for such a detailed feedback. I'll try to incorporate your perceptions into my presentation :) Should you have more comments, continue with them here.
Some more feedbacks:
probably the most advanced and in theory fastest GC in the world
I would not make such a grand claim. This algorithm (without the generational part) was inspired by an algorithm proposed by David Bacon (2003), his algorithm is more sophisticated and very likely to be faster. Including the generational part, it would be hard to say.
I did no survey, but the concurrent GC algorithm in Dao is probably the simplest one using refcount:)
nevertheless GC is by far the slowest part of Dao optimizations are seeked for mutator threads, which in theory might sometimes get faster then the single GC thread can collect in time
This is correct. The next thing I am planning to do on the GC is to use atomic operations on reference counting and some other things. I will probably use C11 for this, if I cannot find a small and portable library for atomic operations.
daopkg (neat package manager for modules)
It is far from usable, so it is better not to mention it.
other new/experimental languages I am interested in Dao "system/low-level" counter part (in a design phase)
Better not to mention it, because in a foreseeable future, I will not have time for it :(
complexity is only about N^2 (that's wonderful in the field of clustering!)
That's the time complexity of calculating the pairwise distances, which is usually not included as a part of the complexity of the clustering algorithm. Because distance matrix is often the input to clustering algorithms. The complexity of the actual clustering part is not known exactly, someone published an empirical test on it, it was shown to be N^1.x
, I don't remember the exactx
, but seems to be something around 3.
daokoder got a new job due to knowledge and skills from working on Dao
I actually did not accept the job that can benefit the most from my experience on Dao for various reasons.
especially a firm roadmap (not to be confused with time scheduling)
Now there is a simple and unspoken roadmap: 1. solve all/most the issues here; 2. make a module management tool. In terms of releases, there should be at least 3 releases to go before the next official release: at least 1 beta release and 2 RC releases.
the possibility to collaborate using github pull requests (including the awesome inline comments on the committed code).
I agree we should do this for Dao, but we (or just I) better practice this a little bit first on the module repo:)
daopkg (neat package manager for modules) It is far from usable, so it is better not to mention it.
A remark: I stopped working on it because I don't think it's a high-priority task given the state of the language and available modules. As of now, we have no real use for it anyway; besides, there may be changes in the project organization in the near future which can render the current approach obsolete. I think the issue should be addresses when its scope and application becomes clear.
Now there is a simple and unspoken roadmap: 1. solve all/most the issues here; 2. make a module management tool. In terms of releases, there should be at least 3 releases to go before the next official release: at least 1 beta release and 2 RC releases.
My vision would be the following:
Apart from the above stands the necessity to make the project more manageable -- without something like pull requests the collaboration is rather inefficient.
Chapter three -- architecture.
built-in types (lowercase) have no or very few methods
That is not a goal or design principle by itself. It doesn't mean much, so I wouldn't make accent on it.
aspects (AO programming)
Will likely be transformed into something not looking like aspects much.
code sections (also with implicit X, Y, Z - only 3 ??????? FIXME)
No Z
. Just X
and Y
-- using more then two such names easily leads to non-readable code.
any - dynamic type evaluated in runtime => slower by cca ????% FIXME
It's just a label to accept arbitrary type, it does not get 'evaluated', rather down-cast.
tools
Nothing to boast of as of now. Not worth accentuating because any comparison to mainstream languages would be suicidal.
Overall, key architecture points which may be used to promote the language are:
Summary.
There is a lot of insignificant things which don't really need to be mentioned. I would concentrate on making a solid and clear impression about the language as the whole without diverging too far or diving too deep. The main rule is to avoid being meticulous, at all costs, as the goal is to make people interested, not lecture them.
A bit on modern state of programming -- demands, problems, solutions. A bit on the project in general -- how the language fits into the described picture, what it tries to solve and what makes it different from existing alternatives. A tour of key features with examples for look&feel. Plans on further development as final accord. Should be enough.
Thanks again for the valuable feedback. I'll try my best with choosing proper wordings and making everything much simpler than it seems from the detailed notes :)
My vision would be the following:
- Resolve all design-related backward-incompatible issues (better earlier then later)
- Address the documentation issue (without proper docs language use does not seem realistic)
- Fix show stopper bugs, establish solid test base (not just the core but the modules as well)
- Everything else
My words. But this requires deciding which issues are to be addressed in the first release candidates which in turn requires something like milestones creation and assignment of issues to them (which in turn might require granting some GitHub priviliges to active Dao contributors).
After the success at the OpenAlt conference in Czech Republic ("the developer heart of Europe"), I'm considering presenting Dao at OSS Víkend Košice in Slovakia on 22. - 23. 10. 2016.
@daokoder may I make a web page about Dao (subtly modified version of the archived version as discussed in https://github.com/daokoder/dao/issues/517 and https://github.com/daokoder/dao/issues/526 ) or do you have other plans? I'd like to show visitors the web page (it significantly strenghtens people's beliefs in the project).
Recently I have setup a new website: http://daoscript.org. The content still needs update, but should be sufficient for introduction. Also, I recently has made some significant improvements and changes in the language and VM. I will open a new topic to discuss them.
Well, I decided to skip OSS Víkend Košice due to time constraints, but had a talk at the OpenAlt 2016 conference. I decided to focus on new changes in Dao in the talk, so I've signed up only for a 30 minutes talk. It turned out to be too short, but I think the message was delivered.
Thanks @daokoder for not abandoning this great language and VM implementation!
Well, I decided to skip OSS Víkend Košice due to time constraints, but had a talk at the OpenAlt 2016 conference. I decided to focus on new changes in Dao in the talk, so I've signed up only for a 30 minutes talk. It turned out to be too short, but I think the message was delivered.
Thank you for presenting Dao on that conference!
Thanks @daokoder for not abandoning this great language and VM implementation!
Even though I became occupied by other things and spent little time on Dao, I have never considered giving up this language. In fact, I often feel the itch of improving and perfecting it :)
Even though I became occupied by other things and spent little time on Dao
I've already decided to found a SW company (3 people for the beginning) and for the main SW product & service I'd like to use Dao as backend language to speed up development significantly. The company is planned to begin it's function at the latest at the end of 2017. With regards to company funding, planning, etc., the current state of Dao development is the only bottleneck as it lies exactly in the gray zone of "unknown whether the most important issues on the Dao Issues page will get addressed soon enough or not at all".
In fact I'm willing to pay anyone in the world (especially including you @daokoder) who would like to contribute regularly (or even on demand in case of bigger issues) to Dao. I'm though still not convinced Dao ecosystem is currently sustainable (which is a must have for the first two years of a new company) - therefore all my comments about project management and Dao direction in the past year. The company will by the way use also C for system programming as well as a little bit of Lua and then minimal bits of web Javascript, Android Java, and iOS Objective C.
I've already decided to found a SW company (3 people for the beginning) and for the main SW product & service I'd like to use Dao as backend language to speed up development significantly. The company is planned to begin it's function at the latest at the end of 2017. With regards to company funding, planning, etc., the current state of Dao development is the only bottleneck as it lies exactly in the gray zone of "unknown whether the most important issues on the Dao Issues page will get addressed soon enough or not at all".
Interesting, I also decided to start a company that will develop software products on top of Dao (through the visual programming thing I mentioned in issue #524). It will start to function in the next year as well. Dao and the development of Dao will stay independent of the company, but developing technologies and products based on Dao will surely stimulate the development of Dao. I expect significant improvements will be added to Dao in the next year (including improvements to address the issues).
In fact I'm willing to pay anyone in the world (especially including you @daokoder) who would like to contribute regularly (or even on demand in case of bigger issues) to Dao.
This is very nice. If my plan goes will, this will not be necessary for me. In fact, I plan to similar thing in the future to sponsor the development of some modules and tools. There might be one problem about this, it may be difficult to find other people who are willing to work on this, before we do some promotion on Dao and make it relative known. But the current state of Dao may be a bit premature for serious promotion. When I decided to start the company, I was also hoping to make it more production-ready before promoting it seriously, through using and testing it in real products.
There might be one problem about this, it may be difficult to find other people who are willing to work on this, before we do some promotion on Dao and make it relative known.
Based on my experience with several universities (as well as companies) in Germany, Finland, Czech Republic, and Slovakia, I know at least three constant sources of people highly interested in programming language development & design while being capable of solving the hardest issues. With regards to them, there is though still one significant weakness I know about - the lack of their ability to design perfect APIs. I must confess, that you @daokoder are the best person for API (both external and internal) design I currently know in the world (especially when you get a sophisticated opposition from @Night-walker). In case you'd want to find such person, I can't unfortunately help much.
I was also hoping to make it more production-ready before promoting it seriously, through using and testing it in real products.
Judging based on the evidence I've gathered throughout my life, this is not needed at all and the approach "Release early, release often!" works the best basically under all conditions in all cases.
Dao as a project is already so functional and consistent, that occasional harm originating from some mistake will not affect the overall Dao status. Therefore I'm confident we should promote Dao everywhere using all possible opportunities without any postponement.
By the way, programming language projects which offer clearly worse APIs, capabilities, performance, usability, etc. (like Crystal and basically all others) are very successful just because they release early and often - there is basically no other advantage (a little bit of syntax & semantics similarity to a particular existing language increases the community, but it's not significant) over Dao.
I'm going to have a talk about Dao at the OpenAlt 2015 conference and I'd like to ask for revision of my notes, which will serve as an overview about the language. Feel free to comment on them.
This presentation will bring several new interested guys, so this project will catch some momentum and we should prepare at least a little bit for that. I'm talking about minimal "project management" - especially a firm roadmap (not to be confused with time scheduling) and the possibility to collaborate using github pull requests (including the awesome inline comments on the committed code).