2015-05-11 13:06 GMT+02:00 Nicolai Hess <nicolaih...@web.de>: > > About the GTools, I am sure you know it but, you can disable them and work > with the good old Workspace and (Eye-)Inspector. >
Yeah but I could not open the setting browser because you need to be able to create a directory to do so and it didn't work. I could not either run a Do-it. And EyeInspector also relies on several framework so I don't know if it would have worked. The problem is that going to the point where you reach your bug can take a while in debug VMs / the simulator, so having to open the image form a working VM to change it and restarting the debug VM / simulator takes a while and reduce your productivity greatly compared to a squeak image. > BTW, how do Traits depend on the bytecode set? > > Through markerOrNil. It looks for methods that have the pattern (at bytecode level): selector ^ self traitConflict I will add a fix for that next week. I am doing the next slice on things I found were not working in the new bytecode set such as traits. > 2015-05-10 16:43 GMT+02:00 Clément Bera <bera.clem...@gmail.com>: > >> >> >> 2015-05-10 10:37 GMT+02:00 Esteban Lorenzano <esteba...@gmail.com>: >> >>> >>> On 10 May 2015, at 10:28, Clément Bera <bera.clem...@gmail.com> wrote: >>> >>> >>> >>> 2015-05-09 23:21 GMT+02:00 Tudor Girba <tu...@tudorgirba.com>: >>> >>>> I do not think there are many people around here that would think that >>>> it is irrelevant if the Pharo VM can be developed in Pharo or not. Of >>>> course, it is important. >>>> >>>> So, the discussion should not go to challenge this direction, but >>>> rather in you telling us the use cases that you need supported. Please note >>>> that I did not say which exact code and how it should look like. I would be >>>> interested in learning about the use cases you have. I am quite certain >>>> that there are a number of ways to support them and when we work on GT it >>>> would be useful to have your use cases on our table. >>>> >>> >>> Well I need many lines to explain each point and there are many... I can >>> talk here about a few points. Then I will deal with Esteban for most of >>> them because it is difficult to explain without an interactive discussion. >>> >>> >>> Let me explain the use cases for the Transcript for example. The issues >>> in Pharo are: >>> - The Transcript does not show the stream as it is printed. >>> - The Transcript does not inherit from Stream and thus cannot print with >>> all the methods implemented in Stream. >>> - The Transcript does not allow the user to decorate the text with bold, >>> italic or colors. >>> >>> >>> sorry… you can do that with squeak's transcript? >>> >>> >> Of course you can. >> >> Try short cut such as Cmd+ 6 or Cmd + 7. Else in the right click menu >> those are the first 3 entries. And you can copy the decorated text from >> Transcript to a Workspace. >> > > I am not sure this was changed on purpose. (from my other posts about text > and fonts and my bug reports) I got the impression some people did changes > (for cleanup or other reasons) and > maybe don't know what they changed or didn't not find the time to finish > the cleanup: > > TextMorph righclick does not work anymore. > Some text emphasis on FT fonts dont work. > Some TextMorph halos don't work anymore. > > I don't think alls this was done on purpose. > > For the Transcript shortcuts for example, if we change > ThreadSafeTranscript to use > PluggableTextEditorMorph > instead of > PluggableTextMorph > > cmd+6/7/8/9/0 for changing emphasis/color > works again. > > Great ! Well that's one thing that can be fixed easily then. Thanks for looking into it. > > nicolai > > > >> >>> *Usecase 1: Debug printing methods:* In the VM you have debug printing >>> methods, for example, to print the call stack. These methods are used from >>> the VM simulator, to output the string in the Transcript, and in gdb, to >>> ouput the string in the commandline. The commandline (FileStream stdout in >>> Pharo) and the Squeak Transcript have the same behavior. In Pharo, the >>> Transcript does not inherit from Stream so you can't use the required >>> stream methods to print the debug printing method on the Transcript. In >>> addition, some printing methods print a lot of things and it is important >>> to show the stream as it is printed. >>> For this use-case, we want to keep the smallest difference between the >>> gdb/commadline behavior and the VM simulator/Transcript behavior. If you >>> implement advanced tooling in GT, you therefore need to implement gdb >>> extensions (and lldb extensions because some of us use lldb instead of gdb) >>> and maintain them. I don't think this is a solution. >>> >>> *Usecase 2: CCode generation debugging:* The CCodeGenerator or Slang >>> translator translates Slang code into C code. Sometimes there is a bug. To >>> debug, instead of generating the faulty C method into an external C file, >>> we print only the faulty C method in the Transcript. Again, we want to keep >>> the lowest difference between the real usecase (printing on the C file) and >>> the debug usecase (printing on the Transcript). In Squeak the FileStream >>> and the Transcript are both Stream, everything works as expected. In Pharo >>> the Transcript has not the expected behavior. Again the method can be long, >>> you can have to wait several seconds, so you'd like the transcript to show >>> the stream as you print it. >>> >>> *Usecase 3: VM simulation:* Simulating the VM is quite slow, especially >>> the machine code execution simulation. During the simulation process, the >>> UI is non interactive and shows only every while what the simulator is >>> doing in the Transcript. It is important as sometimes when debugging with a >>> test at each machine code instruction it could take several hours before >>> the UI is interactive again and you want to know what is going on. I don't >>> complain that it takes several hours because the alternatives usually >>> require days of debugging and we can launch the VM simulator overnight. In >>> Pharo this does not work as expected. >>> >>> *Usecase 4: In-image machine-code compilation:* While working in the >>> JIT compiler, sometimes the machine code generated for a bytecoded method >>> is faulty. A common way of debugging it is to print the machine code >>> instructions of the machine code version of the method in the Transcript. >>> It can take a while to print, so it is important to have the Transcript >>> showing the text as it prints. Then, the easiest way of debugging is to >>> look at the machine code and understand what is wrong. For this purpose, we >>> add text decoration to color jump addresses or the instructions where the >>> instruction pointer was when the VM crashed. Then, in squeak, we can easily >>> copy the decorated text to a workspace and generate a new version of the >>> machine code method and compare. In machine code, it is very difficult to >>> do analysis to have more information than just the decompiled text. We add >>> some information while simulating because we know for example the address >>> of specific trampolines, therefore we can print the name of the trampoline >>> when we see that its address is called. Again, sometimes we also have to >>> debug in gdb. In this case, we disassemble the machine code and compare it >>> to the one from in-image compilation, so both printed strings have to be >>> similar (similar text, same chariot returns). >>> >>> >>> >>> Another example is the complexity of the Pharo tools: >>> >>> While developing the VM, I have sometimes a VM partially working or with >>> some plugins not working. In the Squeak image, I can open a workspace on >>> top of this half-working VM and run do-its to see what is working and what >>> is not. In the Pharo image, I can't do anything. You can't open the >>> workspace without opening more advanced tools. I tried to open the >>> Playground, but the first time there was a bug with Traits (Playground use >>> Traits somehow and they were not working due to the new bytecode set not >>> being finished), when that first bug was fixed I could not open it because >>> it crashed simply the VM (I believe it tried to access an external file >>> such as playground-cache). Currently, the Pharo team is trying to build a >>> set of basic tools that have few dependencies to debug a partially working >>> system (that I think you will use to debug glamour while editing it, >>> because you cannot use the glamour inspector if glamour is not working). >>> That would solve this issue. >>> But in no way this point is something that I can do alone to be able to >>> develop the VM in Pharo. This has to be a community effort. And I am saying >>> that because I can't be blamed not to work on the VM in Pharo if to do so I >>> need to spend many months changing Pharo. >>> >>> >>> >>> An example that I believe is a problem in term of the community is the >>> following: >>> >>> I added with Eliot the support for the new bytecode set. Currently, the >>> Squeak image works with the new bytecode set but not the Pharo image. This >>> is because only the Traits are broken, but this is something I could hardly >>> figure out in the Pharo image because nothing is working as the GT tools >>> use Traits. In Squeak I believe there are very few users of Traits so >>> everything worked, and the test suite can reveal that the Traits are broken >>> easily. >>> >>> Currently, the VM process to me is to first make new features work in >>> Squeak, because it is simpler, and then make it work with Pharo, which is >>> more complex. In the last section I discussed how Traits were a problem >>> while implementing the new bytecode set. So what is the long term solution >>> for this issue ? >>> - Will we have a bootstrap process that creates first a Trait-free >>> Kernel and then build the Pharo Kernel out of it ? >>> - Do we forbid people to use Traits in the Pharo Kernel and does that >>> make sense to have Traits in Pharo in this case ? >>> - If we don't do anything, maybe the Traits are only a slight difference >>> with low impact in most cases and it's fine. But maybe there are many small >>> aspects like Traits, such as the Slots the way they were used in GT >>> recently (I don't blame GT or anything, it was just using features in the >>> system that created issues for me), and maybe we reached a point where the >>> complexity between the Pharo kernel and the Squeak kernel is big enough so >>> that a VM developer will first make Squeak works when introducing new >>> features and then deals with the complexity of Pharo ? >>> >>> So, what do we do ? I don't see any simple solution for this issue. And >>> I believe there are people around that see as the only solution for this >>> issue not to have the Pharo VM development process in Pharo because they >>> will see it as a threat to what they want to do with Pharo. >>> >>> >>> >>> Best Doru ! >>> >>> PS: I am still using the GTInspector with additional views on graphs >>> created with Roassal everyday and I still enjoy it. >>> >>> PS2: I am on vacation currently because I was getting crazy looking at >>> machine code all day long, so I may not answer as quick as usually during >>> the next week. >>> >>> >>> >>> Cheers, >>>> Doru >>>> >>>> >>>> >>>> On Sat, May 9, 2015 at 9:31 PM, Clément Bera <bera.clem...@gmail.com> >>>> wrote: >>>> >>>>> >>>>> >>>>> 2015-05-09 20:25 GMT+02:00 stepharo <steph...@free.fr>: >>>>> >>>>>> >>>>>> >>>>>> Le 9/5/15 20:16, Clément Bera a écrit : >>>>>> >>>>>> This whole conversation here shows very well the point that I tried >>>>>> to explain to Stef last week. I'm sorry if the mail is a bit long but I >>>>>> think this discussion has to be done. >>>>>> >>>>>> My whole Smalltalk development life, I have used Pharo and was >>>>>> happy with it. Now I am also working in Cog's JIT compiler and for this >>>>>> specific project, I am working with Squeak. I don't work with Squeak >>>>>> because I don't like Pharo, I told you before, I have worked with Pharo >>>>>> on >>>>>> all my project before, enjoyed it and if it was possible I would use >>>>>> Pharo. >>>>>> I work with Squeak because the VM development tool and development >>>>>> process >>>>>> simply does *not* work in Pharo. This is not only because of VM tools >>>>>> working with the old Morphic not working anymore in Pharo or details like >>>>>> that, it is also due to deeper changes in Pharo. >>>>>> >>>>>> Stef believes it is important that Pharo is able to host >>>>>> development for its own VM. Therefore, I discussed with him and Esteban >>>>>> about a first list of points that are necessary for Pharo to support its >>>>>> VM >>>>>> development in Pharo, which includes this Transcript behavior. >>>>>> >>>>>> As of today, and I am honest here, I believe that what is required >>>>>> for Pharo to support the development process of its VM includes points >>>>>> which goes in the opposite direction than a few points in the Pharo >>>>>> roadmap, that people in the Pharo community will see as a regression, as >>>>>> "an intrusion from the Squeak philosophy into Pharo", or as forbidding >>>>>> the >>>>>> integration of features that breaks the VM development process. >>>>>> Therefore, >>>>>> I believe the Pharo community would disapprove to make such changes and I >>>>>> highly doubt that it is possible to have the development process of the >>>>>> Pharo VM in Pharo. >>>>>> >>>>>> I was thinking that only a few points would be a problem such as >>>>>> the increasing memory footprint of the Pharo image that is going to get >>>>>> worse with the sources that will be included in the image in the future, >>>>>> whereas a VM developer needs a small image (See previous threads in this >>>>>> mailing list where Hilaire complains about that for example). >>>>>> >>>>>> >>>>>> clement can I ask a simple question? >>>>>> why did I ask guille to work on minikernels and bootstrap for his phd >>>>>> instead on a topic where we can publish? >>>>>> - choice A: lack of idea >>>>>> - choice B: .... >>>>>> >>>>> >>>>> I have already stated that you believe that it is important that Pharo >>>>> is able to host development for its own VM. >>>>> >>>>> I am not against what you did and I am very excited with Guille's work. >>>>> >>>>> Pharo is community-driven, so I am not asking the question to you >>>>> only, but to the community. >>>>> >>>>> >>>>> However, I didn't think that even simple points like the Transcript >>>>> behavior discussed here, which looks like to me as a regression and is >>>>> required for VM development, would be seen as an improvement by a non >>>>> negligible part of the community. >>>>> >>>>> In this mailing-list, the whole Pharo community is present and can >>>>> see this discussion. So the open questions are: >>>>> >>>>> *Do you want to have the development of the Pharo VM in Pharo, or do >>>>> you want the development of the Pharo VM to remain in Squeak ?* >>>>> *Do you think a system that is not good enough to handle its own VM >>>>> development is a good system ?* >>>>> >>>>> I am not willing to go against the will of the community because I >>>>> enjoy community-driven softwares. If the answer is that Pharo should be >>>>> able to support its own VM development then as I started I will help >>>>> Esteban and Stef to improve Pharo so that it can support its own VM >>>>> development. Now, if the answer is that the development of the Pharo VM >>>>> should remain in Squeak, I will continue developing the VM in Squeak. >>>>> >>>>> You are the Pharo community, you are the ones that make Pharo alive >>>>> and kicking, so you tell me what you think we should do. >>>>> >>>>> Clement >>>>> >>>>> 2015-05-09 18:23 GMT+02:00 Eliot Miranda <eliot.mira...@gmail.com>: >>>>> >>>>>> Hi Ben, >>>>>> >>>>>> On May 9, 2015, at 7:41 AM, Ben Coman <b...@openinworld.com> wrote: >>>>>> >>>>>> >>>>>> >>>>>> On Sat, May 9, 2015 at 10:09 PM, Ben Coman <b...@openinworld.com> >>>>>> wrote: >>>>>> >>>>>>> From my limited experience bug hunting, calling #changed: from a >>>>>>> thread other than the UI thread is a source of evil. There are too many >>>>>>> assumptions throughout the system that the UI is single threaded. Can >>>>>>> anyone advise me that is not a proper belief? >>>>>>> >>>>>>> Then that implies that a Transcript implementation where #nextPut: >>>>>>> direct calls #changed: >>>>>>> is not appropriate for use with multi-threaded applications. In >>>>>>> Pharo, #changed: is only called from #stepGlobal, which is called from >>>>>>> doOneCycle:. (This came about as a last minute bug fix before Pharo 3 >>>>>>> release and maybe could use some cleanup. >>>>>>> >>>>>>> Separating the UI from Transcript into its own viewer might be a >>>>>>> good idea, but actually it would not solve Stef's case since his code >>>>>>> would >>>>>>> still be running in the UI thread -- unless the viewer ran in another >>>>>>> thread, which would have its own complexities. >>>>>>> >>>>>>> I think the point about efficiency is significant. The following >>>>>>> example... >>>>>>> Time millisecondsToRun: [ 1000 timesRepeat: [ Transcript show: >>>>>>> 'x' ] ] >>>>>>> on Squeak 4.5 --> 12749ms >>>>>>> on Pharo 50029 --> 2ms >>>>>>> >>>>>> >>>>>> As a point of comparison, on VW 8.0 --> 43817ms >>>>>> and so you might guess, VW 8.0 outputs each 'x' immediately. >>>>>> cheers -ben >>>>>> >>>>>> >>>>>> Way to go, Squeak! Actually this is disappointing. I'm rather >>>>>> frustrated with Squeak's slow transcript, and was hoping that VW would >>>>>> demonstrate it could be faster. Looking at the Squeak implementation I >>>>>> only see an obvious 30% or so improvement via tuning. Looks like good >>>>>> performance will take more work :-/ >>>>>> >>>>>> >>>>>> >>>>>> Eliot (phone) >>>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> www.tudorgirba.com >>>> >>>> "Every thing has its own flow" >>>> >>> >>> >>> >> >