5 ms·
Personally, I think the whole C tangent was a misstep and would love to see Algo 68 turn into Algo 26 or 27. I sort of like C and C++ and many other languages w
by ofalkaed 11mo ago
Personally, I think the whole C tangent was a misstep and would love to see Algo 68 turn into Algo 26 or 27. I sort of like C and C++ and many other languages which came, but they have issues. I think Algo 68 could develop into something better than C++, it has some of the pieces already in place.
Admittedly, every language I really enjoy and get along with is one of those languages that produced little compared to the likes of C (APL, Tcl/Tk, Forth), and as a hobbyist I have no real stake in the game.
- inkyoto 11mo agoWhilst I think that C has its place, my personal choice of Algol 26 or 27 would be CLU – a highly influential, yet little known and underrated Algol inspired language. CLU is also very approachable and pretty compact.
- uecker 11mo agoI wonder about what you think is wrong with C? C is essentially a much simplified subset of ALGOL68. So what is missing in C?
- pjmlp 11mo agoProper strings and arrays for starters, instead of being pointers that the programmer is responsible for doing length housekeeping.
- uecker 11mo agoArrays are not pointers and if you do not let them decay to one, they do preserve the length information.
- pjmlp 11mo agoThey surely behave like one as soon as they leave local scope. Kind of hard when passing them around as funcion parameters, and the static trick doesn't really work in a portable way. Lets seen how far WG14 gets with cybersecurity laws with this kind of answers being analysed by SecDevOps and Infosec experts.
- dfawcus 11mo agoThen don't allow it to decay: void arr_fn(char (*arr)[15]) { enum { len = sizeof *arr }; printf("len of array: %d\n", len); printf("Got: %.*s\n", len, *arr); } void sptr_fn(char ptr[static 15]) { printf("Got: %s\n", ptr); } int main(void) { char array[15] = "Hello, World!"; arr_fn(&array); sptr_fn(array); return 0; } Using gcc (and similarly clang) removing the '15' from 'array', and allowing it to allocate it as 14 chars will result in warnings for both function calls. One can hide that ptr to array behind a typedef to make it more readable: typedef char (Arr_15)[15]; void arr_fn2(Arr_15 *arr) { What do you mean by 'the static trick'? Is that what I have in sptr_fn()?
- pjmlp 11mo agoThat is the static trick. The issues as it stands today are: - It is still a warning instead of an error, and we all know how many projects have endless lists of warnings - Only GCC and clang issue such warning, if we want to improve C, security must be imposed to all implementations https://c.godbolt.org/z/fEKzT4WfM https://c.godbolt.org/z/fEKzT4WfM
- dfawcus 11mo agoOK - assuming you're referring to 'char ptr[static 15]' as the 'static trick', then yeah - other compilers do not complain. However the other form 'char (*arr)[15]' has always been available, and is complained of in other compilers. I believe I remember using it in DOS based C-89 compilers back in the early 90s, possibly also in K&R (via lint) in the 80s. NB: icc, msvc, mvc complain about the misuse of the traditional version if one adjusts your godbolt example. Yes one has to build with warnings forcing errors, which takes a bit of work to achieve if the code has previously been built without that.
- uecker 11mo agoThere isn't really much difference between "ignoring warnings" in C and careless use of "unsafe" or "unwrap" in Rust. Once you entered the realm of sloppiness, the programming language will not safe you. The point is to what extend the tools for safe programming are available. C certainly has gaps, but not having proper arrays is not one of them.
- ordu 11mo agoint arr[4]; foo(arr); We can look at this code like it passes an array by reference, but how to pass `arr` by value?
- uecker 11mo agoYou can pass it by value when putting it into a struct. You can also pass a pointer to the array instead of letting it decay. void foo(int (*arr)[4]); int arr[4]; foo(&arr);
- ofalkaed 11mo agoI think what C is missing is everything that people fall back onto clever use of pointers and macros to implement. Not that I think C should have all those things, Zig does a decent job of showing alternatives.
- uecker 11mo agoYeah, but I meant specifically from ALGOL68.
- ofalkaed 11mo agoI don't think C is missing anything from Algol 68, but, FLEX and slices would be nice, although Algol's slices are fairly limited but even its limited slices are better than what C offers. Algol 68 operators are amazing but I don't see them playing well with C.
- Y_Y 11mo agoIs like to order a complementary question to the sibling one. What are you going to add to (/remove from?) Algol 68 to get Algol 26?
- ofalkaed 11mo agoThat task would be beyond my skills, as I said, I am just a hobbyist. I think it would be interesting to see what would result from going back to one of those early foundational languages and developing a modern language from it. With a language like Algol we don't have the decades of evolution (baggage) which are a big part of languages like C and C++ and trickle into the languages they inspired even if they are trying to remove that baggage. So, what would we get if we went back to the start and built a modern language off of Algol? What would that look like?
- GhosT078 11mo agoConsider exploring Ada 2022 as a capable successor to Algol. Its well supported in GCC and scales well from very small to very large projects. Some information is at https://learn.adacore.com/ https://learn.adacore.com/ and https://alire.ada.dev/ https://alire.ada.dev/
- vintagedave 11mo agoWouldn't that be some form of Pascal?