Variable length strings are implemented in Fortran 2003 standard like:
character(:),allocatable::str
Passing such variables to procedures is declared the same as fixed length strings.
In fact, we always declare actual arguments with “*” to avoid needing every string an exact length.
subroutinemy(str)character(*),intent(in)::str
Note that intrinsic Fortran functions need traditional fixed length character variables.
For example:
Fortran function can return allocatable characters.
If you run into bugs with this on old compilers, try manually allocating the character variable.
Fortran standard compliant compilers auto-allocate character functions like numeric arrays.
functiongreet(b)logical,intent(in)::bcharacter(:),allocatable::greet!! Manual allocation of character variable. This could be necessary on old or buggy compilers.
if(b)thenallocate(character(5)::greet)greet='hello'elseallocate(character(3)::greet)greet='bye'endifendfunctiongreet
GitHub Actions workflows can use different compilers per job.
This is useful for programs and libraries that need distinct compiler versions.
An example of this is Matlab, where each Matlab release has a range of
compatible compilers.
Battery time remaining estimates for computing devices can vary widely in accuracy.
The estimates are based on assumptions about future behavior based on prior usage trends, from a mix of current and prior charge usage.
Windows updates can disable battery time remaining, and devices may come from the factory with battery time estimates disabled.
Hovering over the battery icon on the Windows taskbar can show the estimated battery time remaining along with the percent battery charge.
The estimated battery time remaining is the same shown under System / Power & Battery.
The usual precautions on modifying the Windows Registry apply–do a Windows System Recovery milestone first.
These keys are under:
HKLM\SYSTEM\CurrentControlSet\Control\Power
Reboot after making these changes.
It may take a minute or two after first reboot for the estaimted battery life to show up.
If these registry keys exist, set their value to 0.
If they don’t exist, that’s fine too.
GDB debugger is not yet readily available for macOS with Apple Silicon CPU.
It has long been possible to use a virtual machine with Linux for ARM64 to run GDB within the VM.
The CLion package provides GDB, but with caveats such as using a particular compiler and libstdc++.
What happens for us is when trying to use GDB, it doesn’t work:
gdb ./myexe
r
Don’t know how to run. Try “help target”.
In general, currently to use GDB on an Apple Silicon Mac, it seems a Linux VM is the best option–hopefully this changes.
Using HDF5 / NetCDF4 / HDF4 from any language can be intimidating if directly using the low-level API.
Interfaces have sprung up for popular languages that make HDF5 trivially easy to use, such as Python
h5py.
The
stdlib for Matlab
provides functions making HDF5, NetCDF4, and HDF4 much easier to use in Matlab.
The “h5*” functions are for HDF5, “nc*” functions are for NetCDF4, and “h4*” functions are for HDF4.
The functions are polymorphic, typecasting user data.
The h5*, nc*, and h4* functions work very similarly.
For simplicity, we only show the h5* functions.
h5save() save a variable to a file
h5variables() list all the variable in a file
h5size() get the size (shape) of a variable in a file
The C macro __CLASSIC_C__ is defined when the compiler is in pre-ANSI (K&R) mode.
This is a rather uncommon scenario.
It might be used in retrocomputing with very old and unmaintained compilers such as the 1990s Bruce Evans’ C compiler (bcc).
A botched program install, upgrade, or uninstall such as
Anaconda Python
can make a Windows registry mis-entry that causes many commands to fail.
Simply trying to run “cmd.exe” COMSPEC instantly fails with:
& was unexpected at this time
or
Process exited with code 1
If this message occurs when just opening a new Command Prompt window, the problem may be in the Windows Registry.
Check Registry Editor values:
C++17
and
C23
added the [[nodiscard]] attribute to indicate that the result of a function call should not be ignored.
However, a C++26 proposal to remove [[nodiscard]] from the language standard is under consideration.
Example: annotate function declaration in the header file with [[nodiscard]] attribute.
The Windows installer includes GDLDE Workbench: gdlsetup-Windows-x86_64-standard.exe
Simply install and look in Windows Start menu for “GDL Workbench”.
For macOS use gdl-macOS-x86_64-standard.dmg or build GDL from source.