|
Okay, although it's true that one can implement Pascal differently, you're right that it's limited to 64K (or 32K) in length for strings.
But I really don't think that's a good example of Pascal's inferiority over C. There's advantages to counted-strings, and I've worked in environments where actually simulated Pascal strings in C for efficiency (i.e. you can easily get to the length). COM BSTRs use a similar structure, but store 32-bit lengths.
And the reason I don't think it's a limitation is because if you needed a string that long, C's null-terminated string is hardly preferable. You likely need a different data-structure (rope, array of strings) to do whatever you're doing anyway. Or, more likely, it's that big, it's probably a memory buffer that you'd manage using address and count.
As a reminder, my initial post was not stating Pascal is better than C. It was to point out that many of today's languages are written in C.
ken@kasajian.com / www.kasajian.com
|
|
|
|
|
Kenneth Kasajian wrote: I don't think it's a limitation
Perhaps you just don't find the limit to be a hindrance. I never had any trouble with it either, but I never had to use Pascal to do real-world development.
Just as .net strings are limited to 2GB -- it's a limit, but it hasn't yet been a hindrance.
Kenneth Kasajian wrote: C's null-terminated string is hardly preferable
They certainly have some disadvantages, but at least they're easy to work around.
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
Visual basic 2013.
It can utilize every C, C++, and C# library.
Plus it looks pretty.
For example the "with" operator is in Visual basic but is not in C.
|
|
|
|
|
Colborne_Greg wrote: the "with" operator
...is useless filth.
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
Which is more readable to everyone, and which uses less lines?
Public Shared Function RotateStream(stream As IsolatedStorageFileStream, angle As Int16) As WriteableBitmap
stream.Position = 0
Dim bitmap = New BitmapImage()
bitmap.SetSource(stream)
Dim WriteableBitmapSource = New WriteableBitmap(bitmap)
Dim WriteableBitmapTarget As WriteableBitmap
Dim Target As Int64
With WriteableBitmapSource
Select Case angle
Case 360 : Return WriteableBitmapSource
Case 180 : WriteableBitmapTarget = New WriteableBitmap(.PixelWidth, .PixelHeight)
Case Else : WriteableBitmapTarget = New WriteableBitmap(.PixelHeight, .PixelWidth)
End Select
For xAxis = 0 To .PixelWidth
For yAxis = 0 To .PixelHeight
Select Case angle
Case 90
Target = (.PixelWidth - yAxis - 1) + (xAxis * WriteableBitmapTarget.PixelHeight)
WriteableBitmapTarget.Pixels(Target) = .Pixels(xAxis + yAxis * .PixelWidth)
Case 180
Target = (.PixelWidth - xAxis - 1) + (.PixelHeight - yAxis - 1) * .PixelWidth
WriteableBitmapTarget.Pixels(Target) = .Pixels(xAxis + yAxis * .PixelWidth)
Case 270
Target = yAxis + (.PixelWidth - xAxis - 1) * WriteableBitmapTarget.PixelWidth
WriteableBitmapTarget.Pixels(Target) = .Pixels(xAxis + yAxis * .PixelWidth)
End Select
Next
Next
End With
Return WriteableBitmapTarget
End Function
versus without
public static WriteableBitmap RotateStream(IsolatedStorageFileStream stream, int angle)
{
stream.Position = 0;
if (angle % 90 != 0 || angle < 0) throw new ArgumentException();
int target;
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(stream);
WriteableBitmap wbSource = new WriteableBitmap(bitmap);
if (angle % 360 == 0) return wbSource;
WriteableBitmap wbTarget = null;
if (angle % 180 == 0)
{
wbTarget = new WriteableBitmap(wbSource.PixelWidth, wbSource.PixelHeight);
}
else
{
wbTarget = new WriteableBitmap(wbSource.PixelHeight, wbSource.PixelWidth);
}
for (int x = 0; x < wbSource.PixelWidth; x++)
{
for (int y = 0; y < wbSource.PixelHeight; y++)
{
switch (angle % 360)
{
case 90:
target = (wbSource.PixelHeight - y - 1) + x * wbTarget.PixelWidth;
wbTarget.Pixels[target] = wbSource.Pixels[x + y * wbSource.PixelWidth];
break;
case 180:
target = (wbSource.PixelWidth - x - 1) + (wbSource.PixelHeight - y - 1) * wbSource.PixelWidth;
wbTarget.Pixels[target] = wbSource.Pixels[x + y * wbSource.PixelWidth];
break;
case 270:
target = y + (wbSource.PixelWidth - x - 1) * wbTarget.PixelWidth;
wbTarget.Pixels[target] = wbSource.Pixels[x + y * wbSource.PixelWidth];
break;
}
}
}
return wbTarget;
}
Visual basic is better
|
|
|
|
|
OK, now use with to copy values between two instances.
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
You can't think outside the box can you.
Usually I would do something like this to copy a class
Public function copy(byval ojbectName as objectType) as objectType
Return objectName
end function
There are many ways of getting values from one structure to another, not just with the use of methods. Lastly this points out that you should be utilizing different methods of programming to get a result instead of manually coding each line out.
|
|
|
|
|
Colborne_Greg wrote: to copy a class
Not copying everything; just some values.
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
If you only want a few of the values use visual basic reflection.
|
|
|
|
|
reflection ???!!!
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
Interesting that your signature is "You'll never get very far if all you do is follow the instructions" fitting for this tread isn't it
|
|
|
|
|
Have you read the article?
Colborne_Greg wrote: It can utilize every C, C++, and C# library.
C can be plugged into any application in any language. The author is aware that C itself lacks libraries and he does mention it. So what was your point again?
Colborne_Greg wrote: Plus it looks pretty.
Ah that.
Ok, seriously. If you meant it has a better readability, that was mentioned by the author, too. So, again the question, what was your point?
Colborne_Greg wrote: For example the "with" operator is in Visual basic but is not in C.
And it's in Pascal. So what? Again, the author made a point that other languages offer more (and often more complex) language elements - but that doesn't deterr him from listing a number of advantages of the language C that you failed to address entirely.
Disclaimer: I don't actually agree with the article. I just wanted to point out that the article already pointed out or implied everything you said, and you did nothing to argue against it. (if that was your purpose)
|
|
|
|
|
Your signature has a line about GOTO
The goto fail example is a major fail in general for the C language.
The goto is the first thing every programmer should avoid, but in this example the GOTO's are used correctly, but its a limitation of the C language (one of the dumbest things in history I might add)
Visual basic .net is C with English words and no bracket issue, the GOTO fail would never had been an issue in VB.
|
|
|
|
|
You've completely missed my point.
My sig should have made it obvious I abhor the use of goto. I merely pointed out a possible reason why case may have been specified the way it is. Not that I wouldn't like to ban goto from the language entirely. And not that I would miss the switch statement for that matter (not much anyway). It was just a statement about the consistency of the language as a whole.
As for your love of Basic - to each their own. It certainly has it's use for certain kind of applications. Me, I've been working on processing-intensive applications for decades, and no Basic dialect whatsoever, not even the compiled ones, would ever have served the purpose.
That said, I'll remove the link from my sig: as you've pointed out, the main reason for the problem isn't so much the use of goto - it is the fact that braces (or other block markers) are only optional after control statements, combined with an unlucky duplicate line of code - that this line contains a goto command is just happenstance, many other commands would have caused havoc as well.
On a sidenote:
Colborne_Greg wrote: Visual basic .net is C with English words and no bracket issue, the GOTO fail would never had been an issue in VB.
Which part of go to isn't english? Just wondering...
|
|
|
|
|
I programmed Unidex in visual basic, there isn't a conditional statement involved in retrieving a value from a serialized file (no sql) it can handle creating 8 million records an hour, and can read 2.3 billion records an hour.
|
|
|
|
|
You didn't get the point of anything I said. But nevermind. I've got it that you prefer VB from your first posting. That's fine. Have a nice day.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
As already noted, one can write terribly in any language, programming or "natural".
If writing systems level code: C or C++
If writing business system code: Modern COBOL
If writing science/engineering code: Modern FORTRAN.
If a masochist (or given no choice): Assembler
If writing modeling system: (Probably still) SIMSCRIPT
If writing WEB pages: HTML/CSS, but many IDEs now available to make this easier.
50 years of programing using 30+ languages including BASIC, VB, JOVIAL, HAL, 15+ assemblers, PL/1, APL, ALGOL, C/C++, HTML, JAVA, PYTHON, PERL, etc.
Charles Wolfe
C. Wolfe Software Engineering
|
|
|
|
|
Any time anyone thinks that one technology is "better" than another then first they need to define what "better" means.
And since the statement doesn't limit itself to which other language is compares itself to it is going to fail because for any measurable attribute there is going to be some language which is in fact better than C.
|
|
|
|
|
Funny, I thought the language to-go was Fortran?[^]
Now I'm waiting on a corresponding article about COBOL
|
|
|
|
|
Oh, there are better languages. I just don't care to name them.
I care about so few things.
|
|
|
|
|
There is no disscuss!
C is not BETTER. It is just the ONE and the ONLY language for programming! rest languages are for job security.
|
|
|
|
|
After programming for 20+ years (on and off) I have recently come to the disappointing conclusion that I don't have a favorite language. Starting on the C64 and BBC Micro, I liked the way everything was self-contained: it was easy to make sounds or move graphics without importing alien libraries, but it was awkward having to resort periodically to assembly or machine code! Moving on to a bit of C, then C++ and some JS I got to like C++, but all the memory leaks and lack of strict object-orientation led me to C# with all its shiny promises. Trouble is, ASP.NET has changed too fast for me to keep up (I don't have the time) and often it feels like using an intercontinental warhead to crack a nut. As for desktop apps written in C# - who wants to install .NET just to run one small app? By this point I was growing fond of Java - it smoothly implemented interfaces without abstract things like delegates - the syntax of which is so bad they have become increasingly abstract to compensate (i.e. anonymous methods). Java had none of these issues, but then came LINK which made these awkward constructs somehow vital. Anyway, Java isn't as easy to run online as it was originally intended to be (rather like C#) - all that OOP made it a bit clumsy for browsers, so I went back to JS when HTML 5 came along. I still haven't found a satisfactory way of generating simple sounds and playing them back smoothly (double-buffering in C# just didn't work on my machine for some reason) and now I find myself longing for my C64 again! I seem to be back where I started, only slightly disillusioned (and quite a bit older).
|
|
|
|
|
|
I wonder on how many of those stars/planets there are people saying "Nah there's no life out there"?
Here today gone to Maui...
|
|
|
|
|
7
Some men are born mediocre, some men achieve mediocrity, and some men have mediocrity thrust upon them.
|
|
|
|