No, that beauty was my fault.  The free AI deleted the response while
I was in the middle of copying it (why didn't copy+paste work?  Darned
if I know), so I was racing to reconstruct it from memory.

By the way, it's not just me who has experiences like what I intended
to report.  In an R blog today I came across someone who had converted
R to Python using an AI tool and the translation wasn't just wrong, it
managed to crash Python.  I lost the place so I can't give you the
link, sorry.

On Mon, 11 Aug 2025 at 14:30, Richard Sargent <rsarg...@5x5.on.ca> wrote:
>
> You didn't comment on this beauty:
>
> current := contents at: index.
> current := contents at: index + 1.
> (current = 13 and: [next = 10])
>
>
>
> On August 10, 2025 4:23:29 PM PDT, Richard O'Keefe via Pharo-users 
> <pharo-users@lists.pharo.org> wrote:
>>
>> Ah, the heck with it.  Here's an experiment I did just now.
>>
>> Prompt:
>>   Write a method in Pharo Smalltalk to determine the line termination
>> convention of a text file,
>>   given the name of the file.
>> Response:
>>   detectLineEndingInFileNamed: filename
>>     |file contents crlfCount crCount lfCount|
>>     file := FileStream readOnlyFileNamed: fileName.
>>     contents := file next: 10000.
>>     file close.
>>     crlfCount := 0.
>>     crCount := 0.
>>     lfCount := 0.
>>     1 to: contents size - 1 do: [:index |
>>       |current next|
>>       current := contents at: index.
>>       current := contents at: index + 1.
>>       (current = 13 and: [next = 10])
>>         ifTrue: [crlfCount := crlfCount + 1]].
>>     1 to: contents size do: [:index |
>>       |current|
>>       current := contents at: index.
>>       current = 10 ifTrue: [lfCount := ifCount + 1].
>>       current = 13 ifTrue: [crCount := crCount + 1]].
>>   ^Dictionare new
>>       at: #crlf put: crlfCount;
>>       at: #cr put: crCount;
>>       at: #lf put: lfCount;
>>       yourself.
>>
>> The first thing that hit me was that this was better than I expected.
>> The second thing I noticed was that it doesn't actually solve the problem.
>> It reports some counts, but it makes no determination.
>> It should be something like
>>     (lfCount >= crCount and: [lfCount >= crlfCount]) ifTrue: [^#lf].
>>     (crCount >= lfCount and: [crCount >= crlfCount]) ifTrue: [^#cr].
>>     ^#crlf
>> The next thing to catch my eye was the use of two loops, when one would do,
>> and pondering that showed me that THE LF COUNT IS INCORRECT.
>> Each line ending with CR+LF will be counted twice, once as an instance of 
>> CR+LF
>> and once as an instance of LF.  Write the loop as
>>     prev := 32 "Character space codePoint".
>>     contents do: [:each |
>>       each = 10
>>         ifTrue: [
>>             prev = 13
>>               ifTrue: [crlfCount := crlfCount + 1
>>               ifFalse: [lfCount := lfCount + 1]]
>>         ifFalse: [
>>           each  = 13 ifTrue: [crCount := crCount + 1]].
>>       prev := each]..
>>     crCount := crCount - crlfCount.
>> And then it hit me. Pharo doesn't *have* a FileStream class any more.
>> It should be something like
>>     stream := fileName asFileReference binaryReadStream.
>>
>> Finally, some files really do have outrageously long llines.  10000 is
>> an arbitrary choice.
>> The only reason it's needed is to avoid trying to load a big file into
>> memory, but the only
>> reason to try to load a big file into memory it to scan the contents
>> twice, which we do not need.
>> We couldjust read all the bytes of the file one by one.  But with the
>> arbitrary limit, there will
>> be files where this gives misleading answers.
>>
>> So we have a simple prompt for a simple method with four problems:
>>  - a bug that prevents running tests at all (FileStream)
>>  - a bug that will be found immediately by testing (wrong kind of answer)
>>  - a bug that will be found by testing (CR being counted twice)
>>  - a bug that will probably not be found by testing (misleading
>> answers for large files
>>    with mixed conventions or exceedingly long first line)
>>
>> This has been my experience every time I've tried to use AI to generate code.
>> Bugs bugs bugs, to the point where it's less work to write the code
>> myself than to debug the AI's.
>>
>>
>> On Mon, 11 Aug 2025 at 10:10, Richard O'Keefe <rao...@gmail.com> wrote:
>>>
>>>
>>>  Not long ago I tried one of the freely available AI systems that was
>>>  supposed to be especially good at coding problems.
>>>  I gave it five simple tasks, and it horribly flubbed every one of them.
>>>  Even getting *syntactically* correct code in a less common language
>>>  took a lot of prompting.
>>>  A while back, someone displayed some AI-generated "Smalltalk" code in
>>>  this mailing list.
>>>  It didn't work.
>>>
>>>  "better Pharo support" means what, exactly?
>>>  Do your requirements include generating *correct* code?
>>>
>>>  It would be valuable for someone to conduct some experiments and
>>>  report them here.
>>>
>>>  On Mon, 11 Aug 2025 at 08:04, Arild Dyrseth via Pharo-users
>>>  <pharo-users@lists.pharo.org> wrote:
>>>>
>>>>
>>>>  Has any assessment been made as to which of the LLMs currently provide 
>>>> the better Pharo coding support ?
>>>>
>>>>
>>>>
>>>>  Kind regards,
>>>>
>>>>  Arild Dyrseth

Reply via email to