Thanks!!!
Le 26/10/15 12:07, Nicolai Hess a écrit :
2015-09-02 20:28 GMT+02:00 stepharo <[email protected] <mailto:[email protected]>>:Hi guys here is some feedback from John. I share it with you. On 02 Sep 2015, at 16:05, John Brant <[email protected]> <mailto:[email protected]> wrote: I've been writing some automated scripts to port SmaCC to Pharo. I have it where I can file in the Dolphin .pac files directly into a Pharo 5 image. Most things are working, but I've had to fight some Pharo issues. Since I wasn't sure who should be notified, I thought I'd complain to you :) :) if you would see my list of complaints about Pharo you would laugh a lot because it is huge and diverse. I put thierry on CC because he is the guy maintaining and using SmaCC a lot. So may be you can help each others. *) The BIConfigurableFormatter (aka RBConfigurableFormatter) sends #asString to nodes. First, it should format the node if it wants them formatted instead of relying on asString to return a formatted string. Second, by sending #asString, formatting has become exponential in the nesting level of blocks. For example, Dolphin Smalltalk runs this in 4 milliseconds: | stream | stream := WriteStream on: String new. stream nextPutAll: 'foo ^true and: '. 40 timesRepeat: [stream nextPutAll: '[true and: ']. stream nextPutAll: 'false'. 40 timesRepeat: [stream nextPut: $]]. (RBParser parseMethod: stream contents) formattedCode I'm guessing that Pharo wouldn't finish in a day... It takes over 4 seconds to format 16 nested blocks. Thanks indeed we will fix it. https://pharo.fogbugz.com/f/cases/16462/BIConfigurableFormatter-should-not-use-asString finally (integrated in 50406) [ | stream | stream := WriteStream on: String new. stream nextPutAll: 'foo ^true and: '. 40 timesRepeat: [stream nextPutAll: '[true and: ']. stream nextPutAll: 'false'. 40 timesRepeat: [stream nextPut: $]].(RBParser parseMethod: stream contents) formattedCode] timeToRun " ---> 0:00:00:00.005"*) Also on the formatter, its default doesn't appear to be compliant with Kent's blocks should look like blocks/rectangles/box rule. The way I interpret the rule is that if I draw a rectangle around everything in the block including the brackets, it should not include any text of anything outside of the block. For example, this would fail that test: surroundedBy: aString ^ self class streamContents: [ :s | s nextPutAll: aString. s nextPutAll: self. s nextPutAll: aString ] yes Since the block starts at the end of the #streamContents: line, a rectangle around all the contents in the block contains part of the #streamContents: selector which isn't part of the block. I do not really like all the formattings of kent. Because sometimes it just does not work. But this is why we ask franck (an interns to start to have a look). For example I do not like self xxx ifTrue: [ self bla self foo. in the current default formatter. and I prefer self xxx ifTrue: [ self bla. self foo But here the problem is that the self foo is not tab aligned because ifTrue: [ self xxx ifTrue: [ self bla. self foo So may be this one is a nice compromise I think that we should change some settings. In fact in alpha things are there to evolve until the release :) *) If I fileout a package, it doesn't fileout the metaclass extension methods. The RPackage>>fileOut method needs to be updated with the metaclassExtensionSelectors. Oops this is a bug. Do you mean what I mean? the extensions done by the package on metaclass that are not in the package. https://pharo.fogbugz.com/f/cases/16460/I-fileout-a-package-does-not-fileout-metaclass-extension *) On windows, it appears that while the menus say Ctrl+..., they really mean Ctrl+... or Alt+... -- you figure it out. Yes it sucks. We are in flux with the key essentially because the VM often does not even gives us the correct information. With the new OSWindow architecture we are putting in place we will have all the events and not just the one the VM does not eat (like shift pressed) and we can manage all at the image level not deep into arcane and old C- code. *) It appears that Pharo is removing subString: in favor of substring:. The ANSI standard defines subString:. I was not aware of it. In fact ANSI is bad and totally incomplete (for example we studies strings and this is a mess and totally incomplete). Now we should probably add it. I will send the mail to the mailing-list and let people decide. *) The ChunkFileFormatParser>>parseNextDeclaration is hard coded to handle only the Pharo format: | substrings | substrings := nextChunk parseLiterals. (substrings includes: 'methodsFor:') ifTrue: [ ^self parseMethodDeclarations: substrings ]. (substrings includes: 'commentStamp:') ifTrue: [ ^self parseCommentDeclaration: substrings ]. (substrings includes: 'reorganize') ifTrue: [ ^self parseClassOrganization: substrings ]. Due to the hard coded nature of the types of strings accepted, I have to overwrite this method to be able to file in Dolphin code. In the other Smalltalk's, I can write an extension method or two that I use to file in another dialect's code. https://pharo.fogbugz.com/f/cases/16461/ChunkFileParser If you have a solution please send it. Because we are focusing on the bootstrap and spur the new object format plus a new FFI. Plus a lot more. So this keeps us really busy and many people left the team and we are restarting to teach :) I personally hate this format and the hardcoding of these strings and selectors everywhere so this is why the ChunkFileFormatParser is already a big step forward. I have several other things that annoy me, me too :) But I tried that every couple of days I fix one. but this is enough for now. :) Tx john :) John Brant -------------------------------------------- Stéphane Ducasse http://stephane.ducasse.free.fr http://www.synectique.eu / http://www.pharo.org 03 59 35 87 52 Assistant: Julie Jonas 03 59 57 78 50 03 59 35 86 16 S. Ducasse - Inria 40, avenue Halley, Parc Scientifique de la Haute Borne, Bât.A, Park Plaza Villeneuve d'Ascq 59650 France
