| ▲ | rickcarlino 21 hours ago |
| Building GUI utilities based on VB6 instead of status quo web technologies might actually be more stable and productive. |
|
| ▲ | andsoitis 20 hours ago | parent | next [-] |
| I would pick Delphi (with which you can build Windows, Linux, macOS, Android, and iOS apps - https://www.embarcadero.com/products/delphi) Alternatively, RemObjects makes Elements, also a RAD programming environment in which you can code in Oxygene (their Object Pascal), C#, Swift, Java, Go, or Mercury (VB) and target all platforms: .Net, iOS and macOS, Android, WebAssemblyl, Java, Linux, Windows. |
| |
| ▲ | dardeaup 19 hours ago | parent | next [-] | | Yes, you can build cross-platform GUI apps with Delphi. However, that requires using Firemonkey (FMX). If you build a GUI app using VCL on Delphi, it's limited to Windows. If you build an app with Lazarus and LCL, you CAN have it work cross-platform. | | |
| ▲ | NetMageSCW 15 hours ago | parent [-] | | I thought the point was that Windows apps will run on Linux under Wine (and macOS?) so using VCL is a cross-platform GUI development environment. | | |
| ▲ | dardeaup 13 hours ago | parent | next [-] | | I made the clarification because the comment I replied to mentioned Android, iOS, and macOS. There are many who used Delphi before FMX appeared and I thought it would be helpful to point out that VCL only makes Windows executables. | |
| ▲ | chungy 13 hours ago | parent | prev [-] | | You might as well use Lazarus and LCL. It'll give the best of all worlds. |
|
| |
| ▲ | Imustaskforhelp 19 hours ago | parent | prev [-] | | > Alternatively, RemObjects makes Elements, also a RAD programming environment in which you can code in Oxygene (their Object Pascal), C#, Swift, Java, Go, or Mercury (VB) and target all platforms: .Net, iOS and macOS, Android, WebAssemblyl, Java, Linux, Windows. Wait you can make Android applications with Golang without too much sorcery?? I just wanted to convert some Golang CLI applications to GUI's for Android and I instead ended up giving up on the project and just started recommending people to use termux. Please tell me if there is a simple method for Golang which can "just work" for basically being the Visualbasic-alike glue code to just glue CLI and GUI mostly. | | |
| ▲ | andsoitis 19 hours ago | parent [-] | | > Wait you can make Android applications with Golang without too much sorcery?? Why don't you try it out: https://www.remobjects.com/elements/gold/ | | |
| ▲ | Imustaskforhelp 16 hours ago | parent [-] | | It's really price-y and I am not sure about if I could create applications for f-droid if they aren't open source and how it might go with something like remobjects.com/gold/ One of the key principles of f-droid is that it must be reproducible (I think) or open source with it being able to be built by f-droid servers but I suppose reproducibility must require having this software which is paid in this case. |
|
|
|
|
| ▲ | danabramov 19 hours ago | parent | prev | next [-] |
| I started with VB6 so I'm sometimes nostalgic for it too but let's not kid ourselves. We might take it for granted but React-like declarative top-down component model (as opposed to imperative UI) was a huge step forward. In particular that there's no difference between initial render or a re-render, and that updating state is enough for everything to propagate down. That's why it went beyond web, and why all modern native UI frameworks have a similar model these days. |
| |
| ▲ | josephg 14 hours ago | parent [-] | | > and why all modern native UI frameworks have a similar model these days. Personally I much rather the approach taken by solidjs / svelte. React’s approach is very inefficient - the entire view tree is rerendered when any change happens. Then they need to diff the new UI state with the old state and do reconciliation. This works well enough for tiny examples, but it’s clunky at scale. And the code to do diffing and reconciliation is insanely complicated. Hello world in react is like 200kb of javascript or something like that. (Smaller gzipped, but the browser still needs to parse it all at startup). And all of that diffing is also pure overhead. It’s simply not needed. The solidjs / react model uses the compiler to figure out how variables changing results in changes to the rendered view tree. Those variables are wrapped up as “observed state”. As a result, you can just update those variables and exactly and only the parts of the UI that need to be changed will be redrawn. No overrendering. No diffing. No virtual Dom and no reconciliation. Hello world in solid or svelte is minuscule - 2kb or something. Unfortunately, swiftui has copied react. And not the superior approach of newer libraries. The rust “Leptos” library implements this same fine grained reactivity, but it’s still married to the web. I’m really hoping someone takes the same idea and ports it to desktop / native UI. | | |
| ▲ | danabramov 7 hours ago | parent | next [-] | | >React’s approach is very inefficient - the entire view tree is rerendered when any change happens. That's not true. React only re-renders down from where the update happens. And it skips over stuff that is provably unchanged -- which, fair, involves manual memoization hints. Although with React Compiler it's actually pretty good at automatically adding those so in practice it mostly re-renders along the actually changed path. >And the code to do diffing and reconciliation is insanely complicated. It's really not, the "diffing" is relatively simple and is maybe ~2kloc of repetitive functions (one per component kind) in the React source code. Most of complexity of React is elsewhere. >The solidjs / react model uses the compiler to figure out how variables changing results in changes to the rendered view tree. I actually count those as "React-like" because it's still declarative componentized top-down model unlike say VB6. | | |
| ▲ | josephg 2 hours ago | parent [-] | | > That's not true. React only re-renders down from where the update happens. And it skips over stuff that is provably unchanged -- which, fair, involves manual memoization hints. React only skips over stuff that's provably unchanged. But in many - most? web apps, it rerenders a lot. Yeah, you can add memoization hints. But how many people actually do that? I've worked on several react projects, and I don't think I've ever seen anyone manually add memoization hints. To be honest it seems a bit like Electron. People who really know what they're doing can get decent performance. But the average person working with react doesn't understand how react works very well at all. And the average react website ends up feeling slow. > Most of complexity of React is elsewhere. Where is the rest of the complexity of react? The uncompressed JS bundle is huge. What does all that code even do? > I actually count [solidjs / svelte] as "React-like" because it's still declarative componentized top-down model unlike say VB6. Yeah, in the sense that Solidjs and svelte iterate on react's approach to application development. They're kinda React 2.0. Its fair to say they borrow a lot of ideas from react. And they wouldn't exist without react. But there's also a lot of differences. SolidJS and Svelte implement react's developer ergonomics, while having better performance and a web app download size that is many times smaller. Automatic fine grained reactivity means no virtual dom, no vdom diffing and no manual memoization or anything like that. They also have a trick that react is missing: Your component can just have variables again. SolidJS looks like react, but your component is only executed once per instance in the page. Updates don't throw anything away. As a result, you don't need special react state / hooks / context / redux / whatever. You can mostly just use actual variables. Its lovely. (Though you will need a solidjs store if you want your page to react to variables being updated). | | |
| ▲ | danabramov an hour ago | parent [-] | | >React only skips over stuff that's provably unchanged. But in many - most? web apps, it rerenders a lot. Yeah, you can add memoization hints. But how many people actually do that? Even without any hints, it doesn't re-render "the entire view tree" like your parent comment claims, but only stuff below the place that's updated. E.g. if you're updating a text box, only stuff under the component owning that text box's state is considered for reconciliation. Re: manual memoization hints, I'm not sure what you mean — `useMemo` and `useCallback` are used all over the place in React projects, often unnecessarily. It's definitely something that people do a lot. But also, React Compiler does this automatically, so assuming it gets wider adoption, in the longer run manual hints aren't necessary anyway. >Where is the rest of the complexity of react? It's kind of spread around, I wouldn't say it's one specific piece. There's some complexity in hydration (for reviving HTML), declarative loading states (Suspense), interruptible updates (Transitions), error recovery (Error Boundaries), soon animations (View Transitions), and having all these features work with each other cohesively. I used to work on React, so I'm familiar with what those other libraries do. I understand the things you enjoy about Solid. My bigger point is just that it's still a very different programming model as VB6 and such. |
|
| |
| ▲ | c-hendricks 8 hours ago | parent | prev | next [-] | | Sure but the parents point was more about declarative UIs than React. SolidJS and Svelte are declarative. | |
| ▲ | Philpax 9 hours ago | parent | prev [-] | | Dioxus is halfway between React and Svelte, and is working on its own native renderer. Might be worth considering. |
|
|
|
| ▲ | pjmlp 21 hours ago | parent | prev | next [-] |
| I would vote for Delphi/FreePascal, but share the sentiment. |
| |
| ▲ | CWuestefeld 20 hours ago | parent | next [-] | | I only had limited exposure to Delphi, but from what I experienced, it's big thumbs-up. But if you liked that, consider that C# was in many ways a spiritual successor to Delphi, and MS still supports native GUI development with it. | | |
| ▲ | pjmlp 18 hours ago | parent [-] | | Except on the AOT experience and low level programming, which only started to be taken seriously during the last five years. |
| |
| ▲ | NooneAtAll3 20 hours ago | parent | prev [-] | | Lua | | |
| ▲ | pjmlp 20 hours ago | parent [-] | | Performance? | | |
| ▲ | Etheryte 20 hours ago | parent | next [-] | | If there was sufficient interest in it, most performance issues could be solved. Look at Python or Javascript, big companies have financial interest in it so they've poured an insane amount of capital into making them faster. | | |
| ▲ | Rochus 18 hours ago | parent | next [-] | | Do you think that "most performance issues" in Python are solved? | |
| ▲ | vips7L 19 hours ago | parent | prev [-] | | Isn’t python still the slowest mainstream language? | | |
| ▲ | Etheryte 18 hours ago | parent | next [-] | | Being slower than other mainstream languages isn't really a problem in and of itself if it's fast enough to get the job done. Looking at all the ML and LLM work that's done in Python, I would say it is fast enough to get things done. | | |
| ▲ | NetMageSCW 15 hours ago | parent [-] | | As pointed out already, most of that uses C code or GPU code to do the work and not slow Python code. |
| |
| ▲ | chungy 13 hours ago | parent | prev [-] | | No. Ruby exists. | | |
| ▲ | dragonwriter 13 hours ago | parent [-] | | Ruby is now faster than Python, last I saw a comparison, though it used to be the other way around. |
|
|
| |
| ▲ | kh_hk 13 hours ago | parent | prev [-] | | LuaJIT can be extremely fast | | |
|
|
|
|
| ▲ | steve1977 18 hours ago | parent | prev | next [-] |
| And more performant. Software written for 2005 Windows runs super fast on todays systems. |
| |
| ▲ | HeckFeck 12 hours ago | parent [-] | | Sometimes I install Office 97 for kicks and marvel at how much I can do with it, yet it asks so little of my system. <2Mb RAM for Word 97! | | |
| ▲ | apatheticonion 5 hours ago | parent [-] | | Same, I used to use Office 2003 because it was so quick and the UI was exactly what you needed. On later versions they had animated cursor positions which felt slow, the spellcheck squiglies were lethargic and menus convoluted. That said, I've given up and mostly use Google Docs/Sheets now because of the features and cross platform support. |
|
|
|
| ▲ | bobajeff 20 hours ago | parent | prev | next [-] |
| Only if I don't need to do anything beyond the built-in widgets and effects of Win32. If I need to do anything beyond that then I don't see me being more productive than if I were using a mature, well documented and actively maintained application runtime like the Web. |
| |
| ▲ | jlarocco 19 hours ago | parent [-] | | That's not really true. Even in the 90s there were large libraries of 3rd party widgets available for Windows that could be drag-and-dropped into VB, Delphi, and even the Visual C++ UI editor. For tasks running the gamut from 3D graphics to interfacing with custom hardware. The web was a big step backwards for UI design. It was a 30 year detour whose results still suck compared to pre-web UIs. | | |
| ▲ | bobajeff 14 hours ago | parent [-] | | That sounds nice. I agree, not having a UI editor making apps is a step back. However, you seem to be discussing mostly in past tense. Maybe one day something like Lazarus or Avalonia would catch up but today I feel that Electron is best at what it does. |
|
|
|
| ▲ | 0xbadcafebee 7 hours ago | parent | prev | next [-] |
| Or VB.NET? In some ways it's actually easier than VB6 |
|
| ▲ | zzo38computer 14 hours ago | parent | prev | next [-] |
| If it is made to allow C codes to be combined with VB6 codes easily, and a FOSS version of VB6 (and the other components it might use) is made available on ReactOS (and Wine, and it would also run on Windows as well), then it might be better than using web technologies (and is probably better is a lot of ways). (There are still many problems with it, although it would avoid many problems too.) |
|
| ▲ | 20 hours ago | parent | prev | next [-] |
| [deleted] |
|
| ▲ | andy_ppp 21 hours ago | parent | prev [-] |
| Honestly, it’s probably faster and less resource intensive through emulation than your average Electron app :-/ |
| |
| ▲ | jeremyjh 20 hours ago | parent [-] | | Wine Is Not an Emulator (WINE). It provides win32 APIs; your CPU will handle the instructions natively. There is no “probably” about it. | | |
| ▲ | andy_ppp 12 hours ago | parent | next [-] | | Traditionally WINE uses QEMU on Apple Silicon to execute x86 binaries on an ARM CPU, so while I’m aware WINE Is No an Emulator there’s likely emulation happening in a lot of cases. | |
| ▲ | ndiddy 19 hours ago | parent | prev [-] | | Whenever people bring this up I find it somewhat silly. Wine originally stood for "Windows Emulator". See old release notes ( https://lwn.net/1998/1112/wine981108.html ) for one example: "This is release 981108 of Wine, the MS Windows emulator." The name change was made for trademark and marketing reasons. The maintainers were concerned that if the project got good enough to frighten Microsoft, they might get sued for having "Windows" in the name. They also had to deal with confusion from people such as yourself who thought "emulation" automatically meant "software-based, interpreted emulation" and therefore that running stuff in Wine must have some significant performance penalty. Other Windows compatibility solutions like SoftWindows and Virtual PC used interpreted emulation and were slow as a result, so the Wine maintainers wanted to emphasize that Wine could run software just as quickly as the same computer running Windows. Emulation does not mean that the CPU must be interpreted. For example, the DOSEMU emulator for Linux from the early 90s ran DOS programs natively using the 386's virtual 8086 mode, and reimplemented the DOS API. This worked similarly to Microsoft's Virtual DOS Machine on Windows NT. For a more recent example, the ShadPS4 PS4 emulator runs the game code natively on your amd64 CPU and reimplements the PS4 API in the emulator source code for graphics/audio/input/etc calls. | | |
| ▲ | chungy 13 hours ago | parent | next [-] | | The problem is the word "emulator" itself. It's a very flexible word in English, but when applied to computing, it very often implies emulating foreign hardware in software, which is always going to be slow. Wine doesn't do that and was wise to step away from the connotations. | |
| ▲ | jeremyjh 17 hours ago | parent | prev [-] | | Sure, you can call it an emulator in that sense but how does that imply anything at all about performance? That is what I was responding to. |
|
|
|