OpenD first preview release coming soon
Posted 2024-02-15
Blog
modulesArticles- Standard event loop in OpenD
- Another update on safer by default
- DConf Online 2024 Response
- Evolving safe in OpenD
- Thoughts on user-defined types in OpenD
- OpenD first preview release coming soon
- arsd 11.4
- The release build finally worked
- OpenD at one week old
- A ship carrying silverware has sailed
- arsd.pixmappresenter PR merged, stars and snow demo like the olden days, and update on me and D
- Browsers in D
- Minigui's mechanism is ok now, what about policy?
- Ephemeral web chat in 50 lines of D
- November 27, 2023
- arsd 11.3 coming soon, dpldocs search works again
- November 13, 2023
- D's selective imports have effects you may not want
- Dos and Don'ts in D
- Interpolated Expression Sequence PR opened
- version considered harmful
- di files are currently useless - the compiler does the same thing for the original source anyway
- arsd 11.2 - COM dispatch revamp
- arsd on Mac - solid progress
- September 18, 2023
- arsd 11.1 tagged, cgi.d performance, SerpentOS moves to Rust, trying out reggae
- DConf 2023 roundups
- dconf 2023 coming and arsd 11.1 progress - minigui tweaks, cgi hybrid new default mode on dub
- August 21, 2023
- August 14, 2023
- arsd 11.0 finally tagged
- arsd update - cgi listen to many
- July 24, 2023
- July 17, 2023
- July 10, 2023
- SAoC announced, my thoughts on potential projects
- June 26, 2023
- June 19, 2023
- June 12, 2023
- DConf deadline passes, write up on the -mv switch
- What is all this talk about IVY?
- May 22, 2023
- May 15, 2023
- My rpg finally releasing a demo this month?
- May 1, 2023
- April 24, 2023
- April 17, 2023
- Guis vs Games, why one library is unlikely to do both well
- Linux is better than BSD. Directory watchers and decompressors in arsd.
- Busy working this week
- arsd 11 progress report
- A few more debugging tips - run debugger automatically on linux
- March 6, 2023
- Mike Parker hints D management changes coming, I write about static assert and platform porting
- Guest tip from Webfreak about toString
- Demo on custom sections
- A couple user programs announced, Adam writes more cgi.d docs
- On fullyQualifiedName
- Some thoughts on UI
- Moving toward arsd 11
- January 2, 2023
- More mixin tips to avoid stringof
- new textlayout class, dconf online thoughts, step by step tech progression
- Write barriers might not fix thread registration since you need to scan the stack
- Brief thought: D from Java/.net could be another write barrier benefit
- DIP DIP part 2: the user side
- new dmd, new DIP, beta dub docs, game lib announced. And politics in D
- dconf 2022 online schedule, some arsd.game work, template emission discussion with d index file proposal
- How NO_SCAN makes shorter GC pauses
- Write barriers could work
- simpledisplay custom font stream of thought
- Writing more arsd dox
- October 3, 2022
- September 26, 2022 - tip of the week to bypass IFTI
- September 19, 2022
- My thoughts on bitfields and recap of binary literals
- September 5, 2022
- preliminary design discussion of arsd.core event loop
- arsd 10.9 released
- Idea: user-extensible effect attributes
- DConf 2022 thoughts
- musings on pure websites
- static import object tricks
- Thoughts on inferred attributes
- I write on respect in discussions. D Vision document partial draft released.
- Exception idea: third Throwable branch. Probably won't work but written anyway.
- DIP DIP
- June 13, 2022
- June 6, 2022
- DConf 22 announced. arsd 11 not likely needed soon, 10.9 expected in another month
- May 23, 2022
- ImportC's module namespace problem
- Happy birthday, ImportC!
- Developers developers developers developers
- More dub 2.0 idea refinement
- Thoughts on async io
- April 11, 2022
- arsd bug fixes, stack overflow answer about X child windows
- dub 2.0 design discussion
- Tip of the week on justification comments
- March 14, 2022
- March 7, 2022
- dpldocs reindexing
- More rant on names
- Adam's thoughts on naming in code, tip from Steven about ufcs `i`
- Tip of the week: use mixin to hack around order-of-eval problems
- Tip: if code getting complicated, try rethinking the approach
- January 10, 2022
- arsd 10.5 coming this week, new midi code, a FF1 nsf player/editor application
- December 27, 2021
- arsd work in progress updates and new "do it in D" idioms section
- December 6, 2021
- gdc sync going upstream, arsd 10.4 released, otherwise i was busy.
- working toward arsd 10.4
- DConf Online 2021 livestream
- arsd.webview work, public imports in adrdox changed
- importC released, preview of arsd web, database, gui updates, phobos2 coming, dual context tip of the week
- October 25, 2021
- My webasm updates, gdc in D
- Assorted quick thoughts
- October 4, 2021
- arsd 10.3, dmd -target, druntime.dll
- A potential GC puzzler discovered
- Rant: using Firefox is meaningless
- August 30, 2021
- Improving today's error handling
- Thoughts on error handling
- August 9, 2021
- arsd.qrcode introduced and on my wish list: __arguments.
- July 19, 2021
- Drama on the github
- arsd 10.2 with http cookies support
- June 28, 2021
- arsd 10.1, thought on virtual functions, community announces light weight Druntime 0.3 among others
- arsd v10 tagged
- New dmd and ldc releases, ldc with druntime.dll!
- gdc 11 out with a lot of D updates
- May 24, 2021 general update
- Progress continues toward minigui 2.0
- April 26, 2021
- arsd 9.5 -- UPDATE: false alarm i forgot to tag it!
- April 12, 2021
- arsd 9.4 tagged, adrdox 2.5 released
- Tip of the week: using C libs from D
- working on gdc on Windows
- tip: use union to manually control struct member destructor
- Rant: people in the past weren't stupid
- Tip on DIY closures
- arsd 9.2
- Did you know about D anonymous classes?
- "Mental friction": my view on why D rox
- String interpolation DIP prototype
- terminal inline syntax highlighting, sdpy fonts improved
- January 18, 2021
- gdb debugging tips
- A little work on sdpy/terminal interop and apng debugging
- New plain tcp fiber socket class (with "how it works" docs), new arsd docs started, new dub subpackages in arsd. Also Turkish newsgroups added to forum.dlang.org
- Little audio player in D
- Thoughts on tutorial writing benefits, D marketing, and some simpledisplay.d improvements.
- arsd 9.0 rollup release, my thoughts on "google it" culture and related practices
- dpldocs.info cross-package search finally released! and more terminal getline enhancements
- I did a dconf livestream!
- New selective mouse input in terminal stack, Xft used in simpledisplay to improve TrueType font support
- simpleaudio now has playOgg, Mp3, Wav with resampling and can access multiple soundcards on Linux, adrdox gets ddoc on function params
- Weekend experiment: declarative GUI in D
- October 26, 2020
- My DConf livestream sneak preview
- Off topic jrpg video game review
- My thoughts on breakage, and I'll be in DConf Online 2020
- Some talk on cgi.d in benchmarks
- September 14, 2020
- New D update "dwidder" website launched, making-of post here
- white noise app in D
- More modern opengl in simpledisplay, document undocumented on dpldocs.info, tip on default template args
- Xlib taskbar in D
- D Tetris running on Webassembly
- Zero-runtime classes
- DConf online in the works for Nov 21-22, image copy/paste coming to sdpy soon
- July 13, 2020
- July 6, 2020
- simpledisplay getting dynamic loads, terminal gui gracefully degrades, i muse on scope raii classes
- Adam's dynamic link transition
- June 15, 2020
- June 8, 2020
- June 1, 2020
- foot pedal and midi fun, some dmd speed enhancements. Forum argues about @safe by default on extern.
- May 18, 2020
- simpleaudio dev work, rasp pi gpio module, static foreach rant, gcc 10's D support upped
- May 4, 2020
- my http more compatible with ssl, script+jsvar can do subclasses of D objects
- i want to make a jrpg, and have eye damage.
- What if I were dictator?
- March 30, 2020
- terminal.d with built-in emulator option releaed
- Online DConf in the works
- Dconf 2020 cancelled, Adam plays with terminal gui integration
- March 2, 2020
- some adrdox/dpldocsinfo updates
- terminal.d gets clipboard functions, ldc 1.20 out.
- DConf keynote speaker announced: Lua architect Roberto Ierusalimschy, Named args DIP discussed
- February 3, 2020
- Adam's terminal suite explained
- Understanding mixin templates, terminal.d improvements
- My attribute-by-default proposal. Also dmd 2.090 came out.
- DConf 2020 announced: June 17-20 in London. @safe by default debated. Adam did: Android, JNI, WebSocket in arsd libs
- tar.xz, --DRT tip, dom bug fixes, more Android and JNI, link to old phobos docs
- LDC 1.19 - Android, AVR. My rant on tests, update on JNI and COM.
- Walter's string interpolation proposal is OK but not great. My Android thing nearing beta release. dub downtime explained.
- Android project update, introduction to arsd.jni
- New pattern about interface contracts
- Adam shares Windows console secrets - DO NOT USE chcp!!
- Socket tutorial
- November 4, 2019
- October 28, 2019
- arsd package updates, forum nonsense
- Adam does iOS "goodbye world"
- September 30, 2019
- D turns 20, Adam rants on software freedom
- Named arg DIPs and my thoughts on code organization
- September 9, 2019
- I wrote about mixin templates vs string mixins on Stack Overflow
- August 26, 2019
- Bug bounty in D again - my hot take, on reusing code, a fun picture, my tentative plan for the next month
- Time invested is worth a lot
- cgi.d's new scheduler, static this tricks
- July 29, 2019
- July 22, 2019
- Solving vs managing problems
- A big week in the arsd repo
- June 24, 2019
- CRTP thoughts, named arguments DIP review, DConf videos now on youtube
- musings on hybrid CT/RT tests, some more progress on new web framework
- a little more webassembly
- May 20, 2019
- Adam's string interpolation proposal
- DMD 2.086 live, GCC 9 with D support formally released, DConf coming soon, links to posts on builder pattern and disallowing implicit conversions with templates, and 2d array op overloads
- template constraint error improvements coming?
- dmd 2.086 beta, dstep 1.0 released, Adam works on memory usage
- obj-c and webassembly report, tips on is expressions linked.
- new ldc, new dmd, dpp on the blog
- D's future discussed in forums
- LDC beta, DConf blog link, Adam introduces gamehelpers.d
- March 18, 2019
- LDC 1.15.0-beta1, responsive design rant
- dmd 2.085.0 released
- Obj-C interop and D without druntime code to copy/paste
- dmd beta, more info coming next time, demo of new web framework initial prototype
- automatic web interface discussion, reflection tips and tricks
- Adam busy with weather and a move, lots of community announcements
- January 28, 2019
- Working on official blog 2018 retro, C++ new wrapped, dmd reading zips?
- dmd obj-c growing, Adam static foreaches an interface to RPC
- IDE tools released, my cgi.d gets new features
- DConf announced, tip, Adam rants: mouse trap
- This Week in D is back!
Almost two months after being announced, OpenD almost has a working release build on a stable foundation. Some details to follow.
The Language
The language works and has about ten distinct changes already merged in. You can try it using the CI release on github right now.
The Website
The website is still basically the same as it was in the first week, except for small incremental changes on the roadmap, etc., pages. A new domain name has been registered but not fully set up. I did, however, add support to the code for embedding markdown in the html if desired and am refactoring adrdox to be easier to use with it too. I still want to add more updates to the content before tagging. In particular, I want some kind of language reference, but I really don't want to work with upstream's ddoc, even forked. Maybe just focusing on extraordinary parts of the language would be enough anyway.
Writing these things take much more time than you might realize: a blog post that takes 3 minutes to read often takes 3 hours to write, so it'll take some compromise and corner cutting to get up.
Included Tools
OpenD's release right now is a hacked-up fork of upstream ldc's release, so the key component of all of them is ldc. (We are considering renaming it to lodc but I'm concerned that will break other parts of the ci script. Perhaps we can rename the file only on the final bundle step. But I'm also thinking we could do everything through our new driver program...)
It currently does not include dmd, with my thought being that building dmd once you have ldc is not an especially difficult task anyway, but this might change before the actual release since it is nice to have them both there and just working.
What it does include that is unique to OpenD is the opend driver program. This is currently of experimental status and fairly minimal, doing just a dmd source/*.d, which is generally inferior to just using dmd -i, but is a starting point for more.
GrimMaple wrote the first version and has a different vision than mine, so what actually happens will probably be some kind of merger of these, but what I want to see it do is be a single entry point into the world of OpenD, capable of compiling, running, caching, updating, and other forms of code analysis, delegating work to other executables as needed.
For example, opend -O might call ldc2 whereas opend -fast might call dmd. opend -D can call adrdox. Etc., etc., etc. Additionally, I imagine it maintaining some state about what it has already done, in cooperation with the compiler: imagine a dmd -v kind of thing that the opend driver can parse out and save to its own database for further use. Might save symbol types, members, and locations for an ide. Might save template instance to object file mappings to help prevent undefined reference errors. All very pie-in-the-sky idealism right now, but this is what I want to try to make work.
Merging From Upstream
A new upstream dmd+ldc came out for the first time since the fork went live. Merging it has already proven to be a bit of a pain, mostly due to how we combined the dmd and ldc repos here. The single source makes hacking on the language much easier, but it also means some renamed files and some added conditional compilation blocks that are liable to create merge conflicts with upstream. I deferred this for now, but already expect the pain to continue to grow. It might not be worth trying to mass-pull anything as opposed to picking changes one by one to merge in. This could free us up to do more without worrying about internal compatibility, but I'm still hesitant to cut things off entirely since upstream does have some benefits we lack right now.
Bundled Libraries
The OpenD release bundles a great many libraries. This gives a nice out-of-the-box experience at the cost of (currently) just about 4 MB of end user download; about a 5% increase which I deem insignificant, without hurting other things. If you still want to use a specific version from a package manager, you can override the bundled default.
I think there's thus little downside to this: it costs little, it breaks nothing as for workflows, and enables new things such as OpenD fixing things and users getting a just works experience. But it does add a great many commits to the repo and has one risk of user support expectations.
To mitigate this, I've written a libraries index page and adapted the adrdox generator to both match the opend website style but also to highlight both support level and licensing requirement. As things demonstrate (or fail to demonstrate) value in practice, we can adjust the support level accordingly. I had the Wine website in mind, which lists how well various programs work under that environment.
Licenses, of course, are up to the original author, who may not be reachable, but the user can still make an informed decision for their case. If a license is too burdensome for a user they may consider exploring other alternatives. Note that the availability of a library in a bundle doesn't mean you're forced to use it; no part of it is included in any generated code unless you actually import it, or you import something that imports it. I'm considering an extension to pragma(msg) that can warn you once and only once during a build if this happens.
The Schedule
Realistically, we could tag something at any time, but I want to wait until the website is more complete, so if the link goes out, things are more stable and self-explanatory to readers. Going to try to do it at some point in the next couple weeks.