Beta
×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Jackpot - James Gosling's Latest Project

michael posted more than 11 years ago | from the bingo-eureka dept.

Programming 208

Pete Bevin writes "Artima has a fine interview with James Gosling, creator of Java, about his latest project. It's called Jackpot, and it treats the parse tree as the program. This makes refactoring much, much more intuitive. The article has some good insights into code visualization, technical writing, and making your programs more understandable."

Sorry! There are no comments related to the filter you selected.

first post (-1, Offtopic)

joe_bruin (266648) | more than 11 years ago | (#6195658)

void main() { for( ; ; ) ; }

Re:first post (-1, Offtopic)

Jason1729 (561790) | more than 11 years ago | (#6195706)

don't you mean
void main() {for(;;)fork();}?

Jason
ProfQuotes [profquotes.com]

James Gosling's Jackoff Project (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195667)

It will be coming real soon. Can't wait.

Jackpot???? (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195669)

You're talking about James Goslin, right?

What you meant to say was CRACKPOT!

goddam (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195671)

THe only thing gayer than Java used to be Rob Malda. Now there's 2 things gayer than Java.

It's the Matrix! (3, Funny)

greg_barton (5551) | more than 11 years ago | (#6195688)

So you can write what is kind of like a reverse grammar, where you associate structural patterns with what you can think of almost as TeX descriptions of how to represent the patterns graphically. What you see on the screen has been generated from this pattern matching. So we can, on a user chosen basis, turn various program structures into all kinds of visual representations.

Why, methinks he's reinvented the Matrix. :)

Here are the tips (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195701)

The article has some good insights into code visualization, technical writing, and making your programs more understandable.

For code visualization and making your programs more understandable, don't use JAVA!

Technical writing is good. Always document your code so that a mentally retarded 6 year old can understand what you mean.

Re:Here are the tips (3, Funny)

Anonymous Coward | more than 11 years ago | (#6195714)

Always document your code so that a mentally retarded 6 year old can understand what you mean.

I learned that when doing math proofs. It it wasn't written so retarded 6 year old can understand it, the TA took off marks.

Re:Here are the tips (3, Funny)

skepton (681359) | more than 11 years ago | (#6195855)

Hey this is my first post. I have angry half-baked opinions tho. I find that commenting for a retarded 6 year old makes code unreadable. Have you ever tried to find anything in the apache tomcat sourcecode using only notepad? Why is there a comment on "getInfo()" that says "Returns the info."??? Some classes I was trying to understand I just went through and deleted every comment so I could read the damn thing. Turns out the class was only like 12 lines of code. It was like shaving a cat.

Re:Here are the tips (1)

larry bagina (561269) | more than 11 years ago | (#6196918)

It was like shaving a cat.

i know what you mean. shaved pussy is so much more sensual. Who wants to eat furburger?

Nothing new here... move along now (0)

Anonymous Coward | more than 11 years ago | (#6195710)

This type of thing has been thought of before, such as Intentional Programming at Microsoft Research (now at intentsoft.com) or aspect programming at PARC

well... (1)

inkedmn (462994) | more than 11 years ago | (#6195713)

that's great and all, but if i can't have my AWT, forget it...

Interesting (5, Interesting)

The Bungi (221687) | more than 11 years ago | (#6195724)

I don't know much Java, but .NET has an entire CodeDOM namespace that can be used to generate assemblies and code on the fly. DOM being the keyword - it presents C# code as a parsed object tree. I haven't played with it beyond generating simple assemblies but I wonder if it could be somehow cajoled into creating a tree representation that also understands flow. That would be a neat thing to play around with.

Re:Interesting (-1)

Real World Stuff (561780) | more than 11 years ago | (#6195786)

My new sig!
--
3.1415926535897932384626433832795o2
8841971693993 75105820974944592307816406286208998628034825342117 06798214808651328230664709384460955058223172535940 812848111745o2
841o2
701938521105559644622948954 93038196442881097566593344612847564823378678316527 120190914564856692346034861045432664821339360726o2
491412737245870066063155881748815209209628292540 91715364367892590360011330530548820466521384146951 94151160943305727036575959195309218611738193261179 31051185480744623799627495673518857527248912279381 83011949129833673362440656643086o2
13949463952247 371907o2
1798609437o2
77053921717629317675238467 48184676694051320005681271452635608277857713427577 89609173637178721468440901224953430146549585371050 792279689258923542019956112129o2
1960864034418159 81362977477130996051870721134999999837297804995105 9731732816096318595o2
44594553469083o2
642522308 25334468503526193118817101000313783875288658753320 83814206171776691473035982534904287554687311595628 63882353787593751957781857780532171226806613001927 87661119590921642019893809525720106548586327886593 61533818279682303019520353018529689957736225994138 91249721775283479131515574857242454150695950829533 11686172785588907509838175463746493931925506040092 77016711390098488240128583616035637076601047101819 42955596198946767837449448255379774726847104047534 646208046684259069491293313677o2
8989152104752162 056966o2
405803815019351125338243003558764o2
474 96473263914199272604269922796782354781636009341721 64121992458631503o2
86182974555706749838505494588 5869269956909272107975093o2
9553211653449872o2
7 5596o2
364806654991198818347977535663698074265425 27862551818417574672890977772793800081647060016145 24919217321721477235014144197356854816136115735255 21334757418494684385233239073941433345477624168625 1898356948556209921922218427255o2
542568876717904 94601653466804988627232791786085784383827967976681 45410095388378636095068006422512520511739298489608 4128488626945604241965285o2
221066118630674427862 20391949450471237137869609563643719172874677646575 73962413890865832645995813390478o2
75900994657640 78951269468398352595709825822620522489407726719478 2684826014769909o2
640136394437455305068203496252 45174939965143142980919065925093722169646151570985 83874105978859597729754989301617539284681382686838 68942774155991855925245953959431049972524680845987 27364469584865383673622262609912460805124388439045 12441365497627807977156914359977001296160894416948 68555848406353422072225828488648158456o2
85060168 42739452267467678895252138522549954666727823986456 59611635488623057745649803559363456817432411251507 6069479451096596094o2
522887971089314566913686722 87489405601015033086179286809208747609178249385890 09714909675985261365549781893129784821682998948722 65880485756401427047755513237964145152374623436454 28584447952658678210511413547357395231134271661o2
13596953623144295248493718711014576540359o2
7993 44037420073105785390621983874478084784896833214457 1386875194350643o2
184531910484810053706146806749 19278191197939952061419663428754440643745123718192 17999839101591956181467514269123974894090718649423 196156794520809514655o2
2523160388193014209376213 78559566389377870830390697920773467221825625996615 014215030680384477345492o2
6054146659252014974428 507325186660o2
1324340881907104863317346496514539 05796268561005508106658796998163574736384052571459 1o2
897064140110971206280439039759515677157700420 33786993600723055876317635942187312514712053292819 18261861258673 21579198414848829164470609575270695722091756711672 29109816909152801735067127485832228718352093539657 25121083579151369882091444210067510334671103141267 11136990865851639831501970165151168517143765761835 15565088490998985998238734552833163550764791853589 32261854896321329330898570642046752590709154814165 4985946163718o2
709819943099244889575712828905923 23326097299712084433573265489382391193259746366730 5836041428138830320382490375898524374417o2
913276 5618093773444030707469211201913o2
033038019762110 11004492932151608424448596376698389522868478312355 26582131449576857262433441893039686426243410773226 978o2
8073189154411010446823252716201052652272111 66039666557309254711055785376346682065310989652691 86205647693125705863566201855810072936065987648611 79104533488503461136576867532494416680396265797877 18556084552965412665408530614344431858676975145661 40680070o2
37877659134401712749470420562230538994 56131407112700040785473326993908145466464588079727 08266830634328587856983052358089330657574067954571 637752542o2
11495576158140o2
5012622859413o2
16 47155097925923099079654737612551765675135751782966 64547791745011299614890304639947132962107340437518 95735961458901938971311179042978285647503203198691 514o2
8708085990480109412147221317947647772622414 25485454033215718530614228813758504306332175182979 86622371721591607716692547487389866549494501146540 62843366393790039769265672146385306736096571209180 76383271664162748888007869256o2
9o2
284721040317 21186082041900042296617119637792133757511495950156 6049631862947265473642523081770367515906735o2
350 72835405670403867435136222247715891504953098444893 33096340878076932599397805419341447377441842631298 608099888687413260472156951623965864573o2
1631598 19319516735381297416772947867242292465436680098067 69282382806899640048243540370141631496589794092432 37896907069779422362508221688957383798623001593776 47165122893578601588161755782973523344604281512627 20373431465319777741603199066554187639792933441952 15413418994854447345673831624993419131814809277771 03863877343177207545654532207770921201905166096280 49092636019759882816133231666365286193266863360627 356763035447762803504507772355471058595487o2
7908 14356240145171806246436267945612753181340783303362 54232783944975382437205835311477119926063813346776 87969597030983391307710987040859133746414428227726 34659470474587847787201927715280731767907707157213 44473060570073349243693113835049316312840425121925 65179806941135280131470130478164378851852909285452 01165839341965621349143415956258658655705526904965 20985803385072242648293972858478316305777756068887 644624824685792603953527734803048o2
9005876075825 10474709164396136267604492562742042083208566119062 545433721315359584506877246o2
9016187667952406163 42522577195429162991930645537799140373404328752628 88963995879475729174642635745525407909145135711136 9410911939325191076o2
08252o2
618798531887705842 97259167781314969900901921169717372784768472686084 9003377o2
4242916513005005168323364350389517o2
9 89392233451722013812806965011784408745196012122859 93716231301711444846409038906449544400619869075485 16o2
632750529834918740786680881833851o2
2833450 85048608250393o2
13321971551843063545500766828294 93041377655279397517546139539846833936383047461199 665385815384205685338621867252334o2
8308711232827 892125077126294632295639898989358211674562701o2
1 83564622013496715188190973038119800497340723961036 85406643193950979019069963955245300545058068550195 6730 2292191393391856803449039820595510o2
263535361920 4199474553859381o2
343955449597783779o2
37421617 27111723643435439478221818528624085140066604433258 88569867054315470696574745855033232334210730154594 05165537906866273337995851156257843229882737231989 87571415957811196358330059408730681216o2
87649628 67446047746491599505497374256269010490377819868359 38146574126804925648798556145372347867330390468838 3436346553794986419270563872931748723320837601123o 2
99113679386270894387993620162951541337142489283 07220126901475466847653576164773794675200490757155 527819653621323926406160136358155907422o2
o2
031 87277605277219005561484255518792530343513984425322 34157623361064250639049750086562710953591946589751 41310348227693062474353632569160781547818115284366 79570611086153315044521274739245449454236828860613 40841486377670096120715124914043o2
72538607648236 34143346235189757664521641376796903149501910857598 44239198629164219399490723623464684411739403265918 40443780513338945257423995082965912285085558215725 0310712570126683o2
4o2
9295252201187267675622041 54205161841634847565169998116141010o2
99607838690 9291603o2
8840o2
6910414079288621507842451670908 70006992821206604183718065355672525325675328612910 42487761825829765157959847035622262934860034158722 98053498965o2
262917487882o2
7342092222453398562 6476691490556284250391275771o2
84o2
799806636582 5488926488o2
5456610172967o2
6640765590429099456 81506526530537182941270336931378517860904070866711 49655834343476933857817113864558736781230145876871 2660348913909562009939361031o2
916161528813843790 99042317473363948045759314931405297634757481193567 09110137751721008031559o2
48530906692037671922033 22909433467685142214477379393751703443661991040337 511173547191855046449o2
6365512816228824462575916 33303910722538374218214088350865739177150968288747 82656995995744906617583441375223970968340800535598 49175417381883999446974867626551658276584835884531 4277568790o2
909517o2
83529716344562129640435231 17600665101241200659755851276178583829204197484423 60800719304576189323492292796501987518721272675079 8125547095890455635792122103334669749923563o2
549 478o2
49011419521238281530911407907386o2
5152274 29958180724716259166854513331239480494707911915326 7343o2
824418604142636395480004480o2
67049624820 17928964766975831832713142517o2
96923488962766844 03232609275249603579964692565049368183609003238092 93459588970695365349406034o2
16654437558900456328 82250545255640564482465151875471196218443965825337 543885690941130315095261793780o2
9741207665147939 4259o2
989695946995565761218656196733786236256125 2163208628692221032748892186543648o2
296780705765 61514463204692790682120738837781423356282360896320 80682224680122482611771858963814091839036736722208 88321513755600372798394004152970o2
87830766709444 74560134556417254370906979396122571429894671543578 46878861444581231459357198492252847160504922124247 0141214780573455105008019086996033o2
763478708108 17545011930714122339086639383395294257869050764310 06383519834389341596131854347546495569781038293097 164651438407007073604112373599843452251610507o2
7 05623526601276484830840761183013052793205427462865 40360367453286510570658748822569815793678976697422 0575059683440869735o2
0141o2
06723585o2
0072452 25632651341055924019o2
74216248439140359989535394 590944070469120914093870012645600162374288o2
1092 76457931065792295524988727584610126483699989225695 968815920560010165525637568 3.1415926535897932384626433832795o2
8841971693993 75105820974944592307816406286208998628034825342117 06798214808651328230664709384460955058223172535940 812848111745o2
841o2
701938521105559644622948954 93038196442881097566593344612847564823378678316527 120190914564856692346034861045432664821339360726o2
491412737245870066063155881748815209209628292540 91715364367892590360011330530548820466521384146951 94151160943305727036575959195309218611738193261179 31051185480744623799627495673518857527248912279381 83011949129833673362440656643086o2
13949463952247 371907o2
1798609437o2
77053921717629317675238467 48184676694051320005681271452635608277857713427577 89609173637178721468440901224953430146549585371050 792279689258923542019956112129o2
1960864034418159 81362977477130996051870721134999999837297804995105 9731732816096318595o2
44594553469083o2
642522308 25334468503526193118817101000313783875288658753320 83814206171776691473035982534904287554687311595628 63882353787593751957781857780532171226806613001927 87661119590921642019893809525720106548586327886593 61533818279682303019520353018529689957736225994138 91249721775283479131515574857242454150695950829533 11686172785588907509838175463746493931925506040092 77016711390098488240128583616035637076601047101819 42955596198946767837449448255379774726847104047534 646208046684259069491293313677o2
8989152104752162 056966o2
405803815019351125338243003558764o2
474 96473263914199272604269922796782354781636009341721 64121992458631503o2
86182974555706749838505494588 5869269956909272107975093o2
9553211653449872o2
7 5596o2
364806654991198818347977535663698074265425 27862551818417574672890977772793800081647060016145 24919217321721477235014144197356854816136115735255 21334757418494684385233239073941433345477624168625 1898356948556209921922218427255o2
542568876717904 94601653466804988627232791786085784383827967976681 45410095388378636095068006422512520511739298489608 4128488626945604241965285o2
221066118630674427862 20391949450471237137869609563643719172874677646575 73962413890865832645995813390478o2
75900994657640 78951269468398352595709825822620522489407726719478 2684826014769909o2
640136394437455305068203496252 45174939965143142980919065925093722169646151570985 83874105978859597729754989301617539284681382686838 68942774155991855925245953959431049972524680845987 27364469584865383673622262609912460805124388439045 12441365497627807977156914359977001296160894416948 68555848406353422072225828488648158456o2
85060168 42739452267467678895252138522549954666727823986456 59611635488623057745649803559363456817432411251507 6069479451096596094o2
522887971089314566913686722 87489405601015033086179286809208747609178249385890 09714909675985261365549781893129784821682998948722 65880485756401427047755513237964145152374623436454 28584447952658678210511413547357395231134271661o2
13596953623144295248493718711014576540359o2
7993 44037420073105785390621983874478084784896833214457 1386875194350643o2
184531910484810053706146806749 19278191197939952061419663428754440643745123718192 17999839101591956181467514269123974894090718649423 196156794520809514655o2
2523160388193014209376213 78559566389377870830390697920773467221825625996615 014215030680384477345492o2
6054146659252014974428 507325186660o2
1324340881907104863317346496514539 05796268561005508106658796998163574736384052571459 1o2
897064140110971206280439039759515677157700420 33786993600723055876317635942187312514712053292819 18261861258673 21579198414848829164470609575270695722091756711672 29109816909152801735067127485832228718352093539657 25121083579151369882091444210067510334671103141267 11136990865851639831501970165151168517143765761835 15565088490998985998238734552833163550764791853589 32261854896321329330898570642046752590709154814165 4985946163718o2
709819943099244889575712828905923 23326097299712084433573265489382391193259746366730 5836041428138830320382490375898524374417o2
913276 5618093773444030707469211201913o2
033038019762110 11004492932151608424448596376698389522868478312355 26582131449576857262433441893039686426243410773226 978o2
8073189154411010446823252716201052652272111 66039666557309254711055785376346682065310989652691 86205647693125705863566201855810072936065987648611 79104533488503461136576867532494416680396265797877 18556084552965412665408530614344431858676975145661 40680070o2
37877659134401712749470420562230538994 56131407112700040785473326993908145466464588079727 08266830634328587856983052358089330657574067954571 637752542o2
11495576158140o2
5012622859413o2
16 47155097925923099079654737612551765675135751782966 64547791745011299614890304639947132962107340437518 95735961458901938971311179042978285647503203198691 514o2
8708085990480109412147221317947647772622414 25485454033215718530614228813758504306332175182979 86622371721591607716692547487389866549494501146540 62843366393790039769265672146385306736096571209180 76383271664162748888007869256o2
9o2
284721040317 21186082041900042296617119637792133757511495950156 6049631862947265473642523081770367515906735o2
350 72835405670403867435136222247715891504953098444893 33096340878076932599397805419341447377441842631298 608099888687413260472156951623965864573o2
1631598 19319516735381297416772947867242292465436680098067 69282382806899640048243540370141631496589794092432 37896907069779422362508221688957383798623001593776 47165122893578601588161755782973523344604281512627 20373431465319777741603199066554187639792933441952 15413418994854447345673831624993419131814809277771 03863877343177207545654532207770921201905166096280 49092636019759882816133231666365286193266863360627 356763035447762803504507772355471058595487o2
7908 14356240145171806246436267945612753181340783303362 54232783944975382437205835311477119926063813346776 87969597030983391307710987040859133746414428227726 34659470474587847787201927715280731767907707157213 44473060570073349243693113835049316312840425121925 65179806941135280131470130478164378851852909285452 01165839341965621349143415956258658655705526904965 20985803385072242648293972858478316305777756068887 644624824685792603953527734803048o2
9005876075825 10474709164396136267604492562742042083208566119062 545433721315359584506877246o2
9016187667952406163 42522577195429162991930645537799140373404328752628 88963995879475729174642635745525407909145135711136 9410911939325191076o2
08252o2
618798531887705842 97259167781314969900901921169717372784768472686084 9003377o2
4242916513005005168323364350389517o2
9 89392233451722013812806965011784408745196012122859 93716231301711444846409038906449544400619869075485 16o2
632750529834918740786680881833851o2
2833450 85048608250393o2
13321971551843063545500766828294 93041377655279397517546139539846833936383047461199 665385815384205685338621867252334o2
8308711232827 892125077126294632295639898989358211674562701o2
1 83564622013496715188190973038119800497340723961036 85406643193950979019069963955245300545058068550195 6730 2292191393391856803449039820595510o2
263535361920 4199474553859381o2
343955449597783779o2
37421617 27111723643435439478221818528624085140066604433258 88569867054315470696574745855033232334210730154594 05165537906866273337995851156257843229882737231989 87571415957811196358330059408730681216o2
87649628 67446047746491599505497374256269010490377819868359 38146574126804925648798556145372347867330390468838 3436346553794986419270563872931748723320837601123o 2
99113679386270894387993620162951541337142489283 07220126901475466847653576164773794675200490757155 527819653621323926406160136358155907422o2
o2
031 87277605277219005561484255518792530343513984425322 34157623361064250639049750086562710953591946589751 41310348227693062474353632569160781547818115284366 79570611086153315044521274739245449454236828860613 40841486377670096120715124914043o2
72538607648236 34143346235189757664521641376796903149501910857598 44239198629164219399490723623464684411739403265918 40443780513338945257423995082965912285085558215725 0310712570126683o2
4o2
9295252201187267675622041 54205161841634847565169998116141010o2
99607838690 9291603o2
8840o2
6910414079288621507842451670908 70006992821206604183718065355672525325675328612910 42487761825829765157959847035622262934860034158722 98053498965o2
262917487882o2
7342092222453398562 6476691490556284250391275771o2
84o2
799806636582 5488926488o2
5456610172967o2
6640765590429099456 81506526530537182941270336931378517860904070866711 49655834343476933857817113864558736781230145876871 2660348913909562009939361031o2
916161528813843790 99042317473363948045759314931405297634757481193567 09110137751721008031559o2
48530906692037671922033 22909433467685142214477379393751703443661991040337 511173547191855046449o2
6365512816228824462575916 33303910722538374218214088350865739177150968288747 82656995995744906617583441375223970968340800535598 49175417381883999446974867626551658276584835884531 4277568790o2
909517o2
83529716344562129640435231 17600665101241200659755851276178583829204197484423 60800719304576189323492292796501987518721272675079 8125547095890455635792122103334669749923563o2
549 478o2
49011419521238281530911407907386o2
5152274 29958180724716259166854513331239480494707911915326 7343o2
824418604142636395480004480o2
67049624820 17928964766975831832713142517o2
96923488962766844 03232609275249603579964692565049368183609003238092 93459588970695365349406034o2
16654437558900456328 82250545255640564482465151875471196218443965825337 543885690941130315095261793780o2
9741207665147939 4259o2
989695946995565761218656196733786236256125 2163208628692221032748892186543648o2
296780705765 61514463204692790682120738837781423356282360896320 80682224680122482611771858963814091839036736722208 88321513755600372798394004152970o2
87830766709444 74560134556417254370906979396122571429894671543578 46878861444581231459357198492252847160504922124247 0141214780573455105008019086996033o2
763478708108 17545011930714122339086639383395294257869050764310 06383519834389341596131854347546495569781038293097 164651438407007073604112373599843452251610507o2
7 05623526601276484830840761183013052793205427462865 40360367453286510570658748822569815793678976697422 0575059683440869735o2
0141o2
06723585o2
0072452 25632651341055924019o2
74216248439140359989535394 590944070469120914093870012645600162374288o2
1092 76457931065792295524988727584610126483699989225695 968815920560010165525637568
I likes me some grapefruit & avacado!

Re:Interesting (0)

Anonymous Coward | more than 11 years ago | (#6196023)

I don't know much Java, but .NET ...

So you are a MS stooge? You probably have a MCSE too.

Re:Interesting (1)

stephanruby (542433) | more than 11 years ago | (#6196357)

I wouldn't be surprised if DotNet could do this already in its underlying form. The translation of its syntactic languages would be much more manageable if it were in a tree form.

java < emacs (4, Insightful)

dankelley (573611) | more than 11 years ago | (#6195739)

"Creator of Java"? What's that? How about "the creator of Gosling Emacs"?

right (-1, Flamebait)

SweetAndSourJesus (555410) | more than 11 years ago | (#6195825)

I'm sure more people would recognize an obscure and now defunct editor more easily than they would a popular programming language.

Re:java emacs (1)

RevAaron (125240) | more than 11 years ago | (#6195892)

yes, java emacs. but gosling emacs real emacs. hell, i'm sure gosling emacs efuns AND gosling emacs efuns. i mean, this is gosling- at least NeWS was a good idea. :)

Re:java emacs (0)

Anonymous Coward | more than 11 years ago | (#6196137)

Better repost that with `&lt;`/`&gt;` instead of `<` / `>`, you know, so they don't get eaten by the Slashcode, and we can figure out what the fuck that was supposed to mean.

"treats the parse tree as the program"? (5, Insightful)

Ducky (10802) | more than 11 years ago | (#6195750)

I've heard that somewhere before...

Oh yeah. In my ANSI Common Lisp book. Something about the real power of Lisp being that everything, including the program itself is just a tree structure.

I guess programming languages really are slowly merging. Java isn't getting macros [slashdot.org] now, but I suspect in another 5 or 10 years it'll be something else Java will do. =)

-Ducky

Re:"treats the parse tree as the program"? (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195778)

Adversely, it'll probably be 5 or 10 years before a completely working Java port exists for FreeBSD. FreeBSD of all things. Used on some of the biggest websites out there, yet no official java port.

So much for cross-platform capability.

Re:"treats the parse tree as the program"? (2, Interesting)

namespan (225296) | more than 11 years ago | (#6195814)

've heard that somewhere before...

Oh yeah. In my ANSI Common Lisp book. Something about the real power of Lisp being that everything, including the program itself is just a tree structure.


Or on Paul Graham's [paulgraham.com] website. Wonder if Gosling will be coming up with something to compete with Graham's ARC...

Re:"treats the parse tree as the program"? (1)

haystor (102186) | more than 11 years ago | (#6195893)

After reading the article it doesn't look like it. Sounds like their still going for a "one way to do it" language.

They talk mostly about visualizing the program like this and being able "to find all the public instance variables." Ooh, sounds like the cutting edge of yesterday's IDE.

Nothing about having code writing code or manipulating the parse tree at runtime.

They may as well have just announced that Java would now be available in purple.

Re:"treats the parse tree as the program"? (1, Interesting)

Anonymous Coward | more than 11 years ago | (#6196032)

About 20 years ago, there was a vigorous debate about how to design the ideal Lisp editor. One camp argued that the editor should manipulate the parse tree, and the other camp preferred to leave the user in control of the program as text.

In the end, the text representation proved to be more versatile in practice, largely because of the extensibilty of editors like Emacs.

Gosling of course is intimately familiar with this debate, and with the factors which might now exist to tip the balance the other way. It's likely to be a much more nuanced debate this time around.

Re:"treats the parse tree as the program"? (2, Interesting)

swagr (244747) | more than 11 years ago | (#6195821)

*sarcasm*
Maybe in another 10 or 20 years ALL programming languages will be as powerful as Lisp.

Then 10 years after that, we can start passing around s-expressions instead of XML because "the data is the program".

Wow. The "future" looks grand.
*sarcasm*

Re:"treats the parse tree as the program"? (0)

Anonymous Coward | more than 11 years ago | (#6195860)

Tim Bray acknowledges as much:

As for S-Expressions, I can see the arguments, and can't honestly tell you why the same technologists who ignored decades of S-Expression lore instantly took up XML. It's crystal-clear that you could have used S-Expression syntax for XML and it all would have worked about as well.

Maybe it's because S-Expressions were too closely identified with the tattered dreams of the AI community? Or maybe just because XML's compulsory end-tags make it a little easier to read?

Re:"treats the parse tree as the program"? (2, Insightful)

__past__ (542467) | more than 11 years ago | (#6196471)

Maybe in another 10 or 20 years ALL programming languages will be as powerful as Lisp.
Actually, the other languages do make progress in that direction. Look, for example, at Python: It has objects, metaclasses, introspection, an interactive environment, functions as data (even if lambdas could've been done better), strong dynamic typing, runtime extensibility (albeit clumsy), not to mention small conveniences like keyword and rest args or docstrings.

I could imagine that, 10 or 20 years from now, it will also have the missing pieces, like fast compilers, a decent exception/condition system (I want restarts, dammit!) and an extensible syntax (i.e. proper macros), although the latter might be hard. It will then be as good as Common Lisp is at least scince it's become an ANSI standard in 1994.

I doubt that XML will be an issue at that time, however. At least right now it seems that current W3C activities make a lot of people look back to the ease and consistency of SGML.

Re:"treats the parse tree as the program"? (2, Insightful)

swagr (244747) | more than 11 years ago | (#6196637)

>Actually, the other languages do make progress in that direction.

Oh, absolutely. I agree 100%. My sarcasm intentionally was based on truth.

Basically what I was saying (which is certainly not my own discovery) is that the semantics of Lisp/Scheme/Other Lisp Dialects move "language features" into the realm of the developer (as opposed to the language designers). Plus there is the bonus of being able to operate on the program itself. And for these reasons, pretty much any feature somone is planning to add to a language has either been done in Lisp a long time ago, or is easy to add without acually redesigning the language.

Take Java (which I work with daily) as a complete opposite. You want a new feature? AOP, generics, etc, you^H^H^H the people at Sun have to oficially redesign the language.

here it is (0, Redundant)

CowBovNeal (672450) | more than 11 years ago | (#6195874)

Analyze this!
A Conversation with James Gosling, Part I
by Bill Venners
Jun 9, 2003

Summary
James Gosling talks with Bill Venners about his current research project, code-named Jackpot, which builds annotated parse trees for programs and can help you analyze, visualize, and refactor your program.
For the past several years, Java's creator James Gosling has been working at Sun Labs, researching ways to analyze and manipulate programs represented as annotated parse trees, a project called Jackpot. Compilers have long built parse trees when they translate source code into binary. But traditionally, programmers have worked with source code primarily by manipulating text with editors. The goal of the Jackpot project is to investigate the value of treating the parse tree as the program at development time, not just at compile time.

In this interview, which will be published in multiple installments, James Gosling talks about many aspects of programming. In this first installment, Gosling describes the ways in which Jackpot can help programmers analyze, visualize, and refactor their programs.

Treating Programs as Algebraic Structures
Bill Venners: What's the state of Jackpot, your current research project?

James Gosling: Jackpot has been really cool lately. It's what I'm spending most of my time on, and it's been a lot of fun. I was really hoping to have something I could hand out at JavaOne this year, but I've been finding too many entertaining things to do.

It's a very different world when a program is an algebraic structure rather than a bag of characters, when you can actually do algebra on programs rather than just swizzling characters around. A lot of things become possible.

Bill Venners: Like what?

James Gosling: If you look at any of the refactoring books, most of those refactoring actions become much more straightforward, in ways that are fairly deep.

Moving a method isn't just cutting and pasting text. It's a lot more than renaming the parameters and swizzling them around, because you really want to be able to do things like construct forwarding methods. When you construct forwarding methods, they're different from the original methods.

You can't just replace all uses of the forwarding method by uses of the moved method, because they actually behave slightly differently. The difference is usually around what happens when the pivot parameter is null. That can lead you into a deep morass of essentially theorem proving about properties of the code fragments that you're moving, to understand how they behave with respect to null. And you can treat all kinds of code manipulation that way.

So Jackpot has a baby theorem prover, or algebraic simplifier, that knows an awful lot about data flow and the implications of values. And it really does treat your program as a piece of algebra to be simplified and transformed. It can do an awful lot of interesting analysis that pays off when you want to make fairly significant pervasive changes to very large programs. That analysis pays off, for example, when you want to replace one API with another API that is almost the same. Often "almost the same" is actually harder than "radically different." I spent most of the last four months working on this baby theorem prover, and that's been a lot of fun.

Creating Visual Representations of Programs
Bill Venners: I read that Jackpot can create interesting graphical representations of a program. What is that about?

James Gosling: Jackpot can take this underlying algebraic structureâ" it's really the annotated parse treeâ"and generate a visual representation from that. Our internal notion of the truth is not text. But once it's not text, all of a sudden you can display it in really interesting ways.

We've got an underlying rule engine that's able to do structural pattern matching very efficiently. We can go from the structural patterns it sees in your code to visual representations. So you can write what is kind of like a reverse grammar, where you associate structural patterns with what you can think of almost as TeX descriptions of how to represent the patterns graphically. What you see on the screen has been generated from this pattern matching. So we can, on a user chosen basis, turn various program structures into all kinds of visual representations.

You can, for example, turn the square root function into the obvious mathematical notation. You can turn the identifier theta into the Greek letter theta. You can turn division into the horizontal bar with numbers stacked. And we've done experiments with wackier things, such as trying to generate real time flow charts. That's kind of goofy, but entertaining. Other things like hiding block contents, doing interesting typography, doing typography on comments, all actually work out reasonably well.

Bill Venners: At previous JavaOnes, I have seen some visualization tools that I thought were useful. One of them analyzed your code and drew diagrams that showed the coupling between packages. I felt those diagrams could help you realize that you've got a lot of coupling going from one package to another, which you may not realize by looking at individual source files. Visualization tools like that can help, I think, but a lot of tools that draw graphical representations from source don't seem to help much. Let's say you analyze a big program and generate inheritance charts, with thousands of boxes and lines going all over the place. That often looks as confusing as the source code does.

James Gosling: Yes, doing that kind of visualization is a real challenge.

Coupling Analysis with Action
Bill Venners: What kind of analysis does Jackpot do?
James Gosling: We've got a bunch of hooks in Jackpot for plugging in analysis modules. We want not only to be able to do analysis, but to be able to act on that analysis. We have some pieces that do pretty interesting things.

For example, often it's considered bad form to have public instance variables. One piece of analysis, therefore, is to find all the public instance variables. But we can find them and also make them private, add all the setters and getters, and account for what it means to actually access the variables via setters and getters. We can also do things like find all methods whose natural home is not the class they are actually in.

Bill Venners: How do you detect that?

James Gosling: If you look at the analysis books, there are various ways of detecting that. For instance, if you've got a static method that takes an object as a parameter, and it modifies that object, then somebody probably just slapped that method in there because it was easy. They were editing that file, so they put the method there. But they really should have put it someplace else. We've got something that will find those methods and actually move them, then change all the uses of that method to do the right thing. So we're trying to couple analysis with action.

Visualizing with JavaDoc
Bill Venners: What I mostly use for visualization is JavaDoc, because it's an abstract view of the public interface. I generate JavaDoc a lot as I'm designing and developing. I look at the HTML pages generated by JavaDoc and think, well, this looks kind of confusing. And I go back and make some changes to the code. I may not be able to see that it is confusing just by looking at the code. So I think having different ways to visualize code and designs as it is being developed can help guide the design.

James Gosling: Jackpot's editor component tries essentially to do what amounts to real time JavaDoc. JavaDoc is a funny thing. When I did the original JavaDoc in the original compiler, even the people close around me pretty soundly criticized it. And it was interesting, because the usual criticism was: a good tech writer could do a lot better job than the JavaDoc does. And the answer is, well, yeah, but how many APIs are actually documented by good tech writers? And how many of them actually update their documentation often enough to be useful?

Bill Venners: For me JavaDoc doesn't just serve as a way to document the design, it serves as a way to visualize the design. If I see huge classes with 300 public methods, or dozens of packages with only few classes in each, I know there's a problem. It's more obvious when you're looking at the JavaDoc than at the source.

James Gosling: Right. JavaDoc has been enormously successful and enormously powerful. It's really been quite wonderful. And it's also been interesting to see the way that professional tech writers have taken to JavaDoc. A lot of the early criticism from them were things like formatting. That's largely been solved by the sophisticated doclets that people have been able to write. But the tech writers seem to now spend a lot more time just documenting the semantics of what's going on, and a lot less time fussing with structure and formatting. And it actually feels like tech writers end up being more productive.

Bill Venners: So the tech writers are in there changing the code also, and checking in their changes?

James Gosling: Yeah. That's certainly what happens around here. The tech writers are intimately involved in the engineering. And actually I've always found that to be a really good thing to do. One of my general design principles is that it's really helpful to have a good tech writer on the engineering team early on. If you're building something and you have a tech writer trying to document it, and the tech writer walks into your office and says, "I don't know how to describe this," it means one of two things. Either you've got a really stupid tech writer who you should fire. Or much more likely, you've got a bad piece of design and you ought to rethink it. You have to rethink, because an API that isn't comprehensible isn't usable.

Bill Venners: So the tech writer is giving you feedback on your design. One of the values of design reviews is that programmers give you feedback, and that's useful if it's an API because the users of APIs are programmers.

James Gosling: The problem with programmers as reviewers, and especially programmers that have been involved in the program for a while, is that they are kind of oblivious to the complexity. And lots of engineers are complexity junkies. Complexity is in many ways just evil. Complexity makes things harder to understand, harder to build, harder to debug, harder to evolve, harder to just about everything. And yet complexity is often much easier than simplicity. There's that really famous Blaise Pascal letter, where he starts, "I apologize for this long letter. I didn't have the time to make it any shorter." And that's really true.

Bill Venners: I always think the designer's job is not only to create something that will work correctly and efficiently, but something that is also easy for the client to understand and use.

James Gosling: Yeah, you've always got a customer on the other side, whether that's some high end engineer, or some chemist in the lab who's writing a piece of code. Often you've got people whose real job is something other than software, and software is their tool. They don't necessarily get off on all of the complexity. Making things simple can be a real challenge.

Modified Godwin's Law (4, Funny)

MagikSlinger (259969) | more than 11 years ago | (#6195881)

Oh yeah. In my ANSI Common Lisp book. Something about the real power of Lisp being that everything, including the program itself is just a tree structure.

As a Slashdot thread on a programming language progresses, the probability of someone claiming that "Lisp already does that" approaches unity.

Re:Modified Godwin's Law (4, Flamebait)

MeerCat (5914) | more than 11 years ago | (#6195967)

As a Slashdot thread on a programming language progresses, the probability of someone claiming that "Lisp already does that" approaches unity.

If I had mod points I'd mark you up as funny - but have you read and grokked the Meta Object Protocol ?? Because much as I hate Lisp at the lower syntactic levels, I keep on finding that features I like in other languages were actually present in the MOP and similar. That's not to say that other languages don't present the ideas in better and easier-to-use ways, but it still pisses me off that those beardie-weirdie Lisp blokes had already thought of it so much earlier...

We kill what we fear, and we fear what we don't understand....

--

Re:Modified Godwin's Law (2, Funny)

JamesOfTheDesert (188356) | more than 11 years ago | (#6196104)

We kill what we fear, and we fear what we don't understand....

I don't understand you. Does that mean I have to kill you?

Python has MOP (1)

dunham (35989) | more than 11 years ago | (#6196681)

Recent versions of Python have some MOP functionality in addition to reflection. (I can't remember if CLOS does reflection or not). It has metaclasses, and, IIRC, there are some hooks into dispatch outside of the metaclass stuff.

I happen to like the syntax of Lisp, and it's a lot faster than Python, but Python definitely wins in the library department.

I think the only example I've personally seen of MOP in use is UncommonSQL (an object/relational layer done by cleaning extending the class declaration syntax to cover the SQL information), which I like, but haven't used much.

Re:Modified Godwin's Law (0)

Anonymous Coward | more than 11 years ago | (#6196080)

As a Slashdot thread on a programming language progresses, the probability of someone claiming that "Lisp already does that" approaches unity.

That may be, but "it treats the parse tree as the program" is so lisp that it's impossible to not mention it.

If you hear "oh lisp's had that for ages" in regards to garbage collection or property lists, fine. Treating the parse tree as the actual program, that's lisp. (heck, that's why everyone hates it -- people don't like writing parse trees)

Re:Modified Godwin's Law (1)

stephanruby (542433) | more than 11 years ago | (#6196580)

As a Slashdot thread on a programming language progresses, the probability of someone claiming that "Lisp already does that" approaches unity.

The previous times the people who said LISP could do *everything* were arrogant fools. LISP can do everything, yes, but it could only do those things in a very annoying fashion.

In this case however, this guy took all the features that LISP had and he took all the annoyances that LISP had and he basicely copied the entire thing. He goes out of his way not to mention Lisp and yet he went to Carnegie-Mellon, a Lisp school. This guy is a copier and a liar.

If anyone gets excited about the benefits of his "invention", I'd recommend XSLT. XSLT is just like Lisp. XSLT can do everything Lisp can do. And unlike Lisp, everybody pretty much uses the same version of XSLT.

Re:"treats the parse tree as the program"? (4, Insightful)

Shackleford (623553) | more than 11 years ago | (#6195947)

I've heard that somewhere before... Oh yeah. In my ANSI Common Lisp book. Something about the real power of Lisp being that everything, including the program itself is just a tree structure.

Well, actually, there seems to be more to Jackpot's methods of code visualization than that. Lisp code can be thought of as having a tree-like structure, but it may not be as clear as what Jackpot's visual representation my be. What Jackpot would do is show the annotated parse tree, so it can give much information about how it is constructed. It would be a useful graphical representation that appears to go beyond what Lisp code would show, and with that representation and the source code, you can get the best of both worlds.

Anyway, they also mention that you can implement a "reverse grammar" that would take data formed in parse trees and make code more readable. For example, you can have Greek letters and other mathematical notation such as the square root symbol. If you have long equations in your program, this could be very useful in making your code readable, and thus understandable.

So what Jackpot seems to be is a way of giving different ways of viewing the code you write, which, IMHO, can go a long way in solving problems with it and simply improving on it.

Since it's Java..... (0)

Anonymous Coward | more than 11 years ago | (#6195976)

I guess programming languages really are slowly merging. Java isn't getting macros now, but I suspect in another 5 or 10 years it'll be something else Java will do. =)

Too bad it's Java - that means it would only take about 6 months to integrate it into any other language. ;)

LISP, the religion (5, Insightful)

melquiades (314628) | more than 11 years ago | (#6195984)

Yes, yes, I had to deal with all the "Lisp did it first" comments when Eidola [eidola.org] was on Slashdot.

While it's true that the program is the parse tree in Lisp, that's not a very strong statement. Lisp's elegance comes from the fact that there are so few constructs in the language, and basically everything is a list -- even your programs. But they're basically just lists, that's all. So you have this wonderful flexibility, but the parse tree doesn't actually tell you very much about the program; you have to "parse the parse tree" to recognize higher-level constructs.

Now languages with lots of language-level constructs -- like strong static types, objects, access modifiers, etc. -- tell you a whole lot about high-level structure with their parse trees. (And, for those following along at home, Lisp is not such a language -- not that that's a bad thing, but it isn't. Lisp builds these high-level constructs out of a very few language-level atoms.) To my knowledge, applying the "language is the parse tree" principle to non-functional languages is still largely the domain of research projects like Jackpot, Eidola, and Intentional Programming, and visual languages.

Moral: Lisp is very, very, very cool, but it has not already done everything every other language is doing. So yes, it may sound familiar from you Lisp book, but it's not the same.

Re:LISP, the religion (0)

Anonymous Coward | more than 11 years ago | (#6196542)

Now languages with lots of language-level constructs -- like strong static types, objects, access modifiers, etc. Common lisp has static type declarations and objects.

While it won't stop you there is packages and namespaces. Common Lisp sperates the notion of "you can't touch this" (packages and you can still touch if you really want to) from objectness.

Common Lisp doesn't have "access modifiers" because they wanted open access.

So you loose on those too. :-) Now if you had said Design by contract (Effiel), Declarative pattern specifications (SML), Safe and Unsafe dataypes( Modula-3), Predicate Classes (Cecil), etc. I'd be more apt to aggree. But the vast majority of the "new age" stuff in these "mainstream" languages (Java, C++) ...... been done....

static type checking is not what Jackpot is about. And there is slippery slope between parametric types and macros.

P.S. Jackpot sounds very similar to this..... Refine [google.com]

Ooooh Look there that pesky Common Lisp again....

P.P.S. Common Lisp has many more datatypes than just lists. (hash tables, structures/records, vectors, pathnames, restarts, exceptions, ....... ). Most "intro to lisp in a quarter/semster" don't touch on these... but that is a much longer topic.

HyperSpec [lispworks.com]

P.P.P.S. An AST and a nested list are quite similar if you'll look past the lisp surface syntax. Draw it out in Lisp cons cell box and pointer representation if you wish.

Re:LISP, the religion (1)

ArmorFiend (151674) | more than 11 years ago | (#6196615)

Too bad parent posted AC, its pretty good/funny. Deserves better than score 0.

Re:LISP, the religion (2, Insightful)

Gorobei (127755) | more than 11 years ago | (#6196557)


While it's true that the program is the parse tree in Lisp, that's not a very strong statement.

True.

Lisp's elegance comes from the fact that there are so few constructs in the language, and basically everything is a list -- even your programs.

Hmm, except for the arrays, hashtables, structures, objects, compiled functions, strings, rational integers, bignums, system pointers, etc that Common Lisp provides.

But they're basically just lists, that's all. So you have this wonderful flexibility, but the parse tree doesn't actually tell you very much about the program; you have to "parse the parse tree" to recognize higher-level constructs.

We always have to convert information into meaning somehow. Do I want to recognize a high-level construct such as:

(dotimes (i 10) (format t "~A~%" i))

or maybe I want it represented as a standard looping form:

* (macroexpand-1 '(dotimes (i 10) (format t "~A~%" i)))

(DO ((I 0 (1+ I))) ((>= I 10) NIL) (DECLARE (TYPE (INTEGER 0 10) I)) (FORMAT T "~A~%" I))

Perhaps I want to see it as just variables and gotos, with type information that the system inferred:

* (macroexpand '(dotimes (i 10) (format t "~A~%" i)))

(BLOCK NIL
(LET ((I 0))
(DECLARE (TYPE (INTEGER 0 10) I))
(TAGBODY
(GO #:G1125)
#:G1124
(FORMAT T "~A~%" I)
(PSETQ I (1+ I))
#:G1125
(UNLESS (>= I 10) (GO #:G1124))
(RETURN-FROM NIL (PROGN NIL)))))

Or maybe even as its assembly code:

(defun f () (dotimes ....))
(disassemble 'f)

48262DC0: .ENTRY "LAMBDA NIL"() ; (FUNCTION NIL NULL)
DD8: POP DWORD PTR [EBP-8]
DDB: LEA ESP, [EBP-32]

DDE: TEST ECX, ECX
DE0: JNE L2
DE2: XOR EBX, EBX ; No-arg-parsing entry point
DE4: JMP L1
DE6: L0: MOV [EBP-16], EBX
DE9: MOV [EBP-12], ESP
DEC: SUB ESP, 12
DEF: MOV EDX, 671088679 ; T ....

Reasoning about programs happens at many levels, Common Lisp seems to provide a lot of the tools.

Now languages with lots of language-level constructs -- like strong static types, objects, access modifiers, etc. -- tell you a whole lot about high-level structure with their parse trees.

Well static typing makes the parse tree richer in the same way that requiring you to list your religion on a driver's license application makes the DMV's database richer. I'm not convinced of the benefit.
Objects are cool - Common Lisp has them (and they are more powerful than Java's or C++'s by far.)
Access modifiers are either a declaration that you are more intelligent than your users, or a way to hide your bad code from other people. I know that's a bit cynical, but I've noticed that in good programming teams, almost everything winds up public (especially in environments that encourage shared code ownership, support interactive debugging/programming, etc.)

(And, for those following along at home, Lisp is not such a language -- not that that's a bad thing, but it isn't. Lisp builds these high-level constructs out of a very few language-level atoms.) To my knowledge, applying the "language is the parse tree" principle to non-functional languages is still largely the domain of research projects like Jackpot, Eidola, and Intentional Programming, and visual languages.

Perhaps. I think Lisp programmers tend to worry less about refactoring and the like because they have a very powerful macro system, strong compilers that infer a lot of stuff, and a representation that blurs the line between program and data. You write down the stuff you understand, play with it interactively, understand it better, write a few macros or functions to shift code to data and vice versa, repeat until done.

Moral: Lisp is very, very, very cool, but it has not already done everything every other language is doing. So yes, it may sound familiar from you Lisp book, but it's not the same.

It's not done everything, but it provides a right enough bag of tricks that you can try out new ideas on top of it in surprisingly few lines of code.

Re:LISP, the religion (5, Interesting)

__past__ (542467) | more than 11 years ago | (#6196602)

Lisp's elegance comes from the fact that there are so few constructs in the language,
There are 978 symbols defined in the ANSI Common Lisp standard, some of which concurrently name types, classes, functions and declarations.
and basically everything is a list
.. except arrays, symbols, objects, structs, characters, numbers, pathnames, streams, packages...

(OK, that's enough to prove I'm a SmugLispWeenie [c2.com] , I guess ... ;-)

But they're basically just lists, that's all. So you have this wonderful flexibility, but the parse tree doesn't actually tell you very much about the program; you have to "parse the parse tree" to recognize higher-level constructs.
No. You can parse the parse tree to reason about or modify programs. You can as well use higher-level constructs, for example asking for the class of an object and manipulate it, the declared types of variables and functions, etc. The whole metaobject protocol is about giving you an object-oriented interface to your program internals, and the same style shows in various other places. Basically, a lot of what is lost at compile-time in most other languages is a live first-class object in Lisp - for a simple example, you can get the package of a symbol, see what other packages it imports, change its name, and make some symbols in it not being exported.

Moral: Lisp is very, very, very cool, but it has not already done everything every other language is doing. So yes, it may sound familiar from you Lisp book, but it's not the same.
Indeed. But Lisp is the only language so far that allowed adding new concepts in portable ways, without having to modify the underlying implementation. CLOS, the object system, is basically a bunch of functions and macros, and if you don't like its class/generic-function based approach, just load a package that implements a prototype-based one and use that. An implementation of Eiffel-style design by contract is about two screenful of code, adding final and abstract classes is less.

Are these additions "language-level constructs"? Hard to tell. The syntax the programmer deals with is just as if it were, even if everything eventually gets expressed in lower-level terms. The distinction is just not meaningful in Lisp - there just is no hard barrier between the language designer and the user, Lisp users design their language all the time.

Re:"treats the parse tree as the program"? (0)

Anonymous Coward | more than 11 years ago | (#6196030)

I've heard this before about how great it is when "every thing is a tree structure", "everything is a list".

However, I believe the only reason for these claims is that someone has learned how to program using this paradigm and thinks it is the bee's knees. There is not any evidence that I can see where modeling solution space as a "tree" or a "list" is universally appropriate. Maybe for some problems, OK. But it reminds me of the old saw about "if the only tool you have is a hammer, then every problem looks like a nail".

Re:"treats the parse tree as the program"? (0)

Anonymous Coward | more than 11 years ago | (#6196039)

Something about the real power of Lisp being that everything, including the program itself is just a tree structure.

I thought its real power was running 4-5x slower than C.

Re:"treats the parse tree as the program"? (1)

MonkeyBoyo (630427) | more than 11 years ago | (#6196117)

real power of Lisp being that everything, including the program itself is just a tree structure.

Lisp 1.5 in someways wasn't Lisp 2.0 because the original form of the language was in terms of "M-expressions" that looked like mathematical expressions and Fortran. The idea was to have a compiler that translated the M-expressions into the internall forms of S-expressions. However as John McCarthy Says [stanford.edu]
The project of defining M-expressions precisely and compiling them or at least translating them into S-expressions was neither finalized nor explicitly abandoned. It just receded into the indefinite future, and a new generation of programmers appeared who preferred internal notation to any FORTRAN-like or ALGOL-like notation that could be devised.
It is much easier to be deeply familiar with just 1 representation of a program rather than to translate between several different forms..

Jukebox may be successful if it can entirely do away with the source format, and work entirely with tree representations.

Re:"treats the parse tree as the program"? (1)

stephanruby (542433) | more than 11 years ago | (#6196283)

I was thinking the same thing. What's the difference between this and LISP or XSLT? I don't think this guy is an inventor of anything. A reinventor and possibly a brilliant marketer, yes. An inventor, I don't think so.

I almost laughed out loud at this line... (2, Funny)

Anonymous Coward | more than 11 years ago | (#6195760)

"Complexity is in many ways just evil. Complexity makes things harder to understand, harder to build, harder to debug, harder to evolve, harder to just about everything."

So says the creator of Java. I wonder if he's bothered to browse the API lately?

Re:I almost laughed out loud at this line... (4, Insightful)

MeerCat (5914) | more than 11 years ago | (#6195902)

Ditto.

"Complexity is in many ways just evil. Complexity makes things harder to understand, harder to build, harder to debug, harder to evolve, harder to just about everything." -- Gosling

Software entities are more complex for their size than perhaps any other human construct because no two parts are alike. If they are, we make the two similar parts into a subroutine - - open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound. -- Fred Brooks, Jr.

Which quote tells you more ? Which quote has more insight ? Which quote came 30 years earlier ?

Here's a clue - complexity in software doesn't usually vanish at some magical point, we just aim to achieve a position where our view of inherent complexity in a problem becomes optimally manageable. As the fundamental point of interest within a problem domain changes over time, so will the optimal viewpoint. The point of re-factoring is to move our viewpoint according to what we want to do now, not what we wanted to do when the code was written.

Gosling is talking techno-babble... tell him to draw a parse tree of any meaning in his jargon.

Re:I almost laughed out loud at this line... (1)

Tumbleweed (3706) | more than 11 years ago | (#6195972)

I *did* laugh out loud at that one. The only thing more amusing would be to see the same quote by the folks who created C++. :) Why Objective-C doesn't get more attention is quite beyond me...

Re:I almost laughed out loud at this line... (0)

Anonymous Coward | more than 11 years ago | (#6196108)

Right on! I wonder if he's bothered to look at Python lately. He could probably learn a lot about how to design a simple yet powerful language.

Aw, crap. (3, Funny)

Qweezle (681365) | more than 11 years ago | (#6195764)

Does this mean it will be any easier for me to learn Java? Probably not. Will I ever learn Java? Of course. Let's be honest, Qweez No. Probably not.

But, There is Already A 'Jackpot' Project (1, Funny)

Anonymous Coward | more than 11 years ago | (#6195767)

It is a SMTP honeypot used to trap spammers. This is going to cause problems between the two groups. How will they be able to tell which one is which. It will be like when no one could tell the diff between the two Phoenixes.

Can't RTFA, but... (1, Insightful)

niom (638987) | more than 11 years ago | (#6195775)

... it sounds to me like he is reinventing Lisp.

MS Group? (0)

Anonymous Coward | more than 11 years ago | (#6195782)

Not trying to troll. Microsoft used to have a product group working on this same type of idea (that you could program by editing the parse tree). Does anyone remember what the group was called? They were also responsible for putting the collapsable code regions into the latest version of Visual Studio.

Re:MS Group? (0)

Anonymous Coward | more than 11 years ago | (#6195878)

Microsoft used to have a product group working on this same type of idea (that you could program by editing the parse tree). Does anyone remember what the group was called? They were also responsible for putting the collapsable code regions into the latest version of Visual Studio.

I believe it was called the "Intentional Programming" Group, and it was dissolved a few years back for reasons unknown to me.

Another James Gosling interview (1, Troll)

ChrisRijk (1818) | more than 11 years ago | (#6195789)

[infoworld.com]
Gosling likes idea of open source Java

Does this mean... (1)

Got-Tea-Rolls (681042) | more than 11 years ago | (#6195795)

I can see Java-like popup ads telling me I've "won the jackpot", except they'll BE in jackpot now?

My opinion? (2, Informative)

jabbadabbadoo (599681) | more than 11 years ago | (#6195796)

Gosling + Martin Fowler = Jackpot! If you didn't know, Fowler is THE refactoring guy. They should team up.

Now, put this support straight into emacs and I'll be happy.

Re:My opinion? (1)

brunes69 (86786) | more than 11 years ago | (#6196269)

Now, put this support straight into emacs and I'll be happy.

EmacsOS does not support this yet? Wow, thats weird. (Goes back to controlling his water heater temperature from Emacs)

IntelliJ (4, Interesting)

MaxTardiveau (629919) | more than 11 years ago | (#6195803)

Isn't that what IntelliJ does already? I use it as my main IDE, and it has an amazing understanding of Java -- it allows you to refactor just about anything.
When working in it, you feel like you're not just editing Java -- you're editing the fully integrated structure of your software.

Re:IntelliJ (2, Insightful)

SpryGuy (206254) | more than 11 years ago | (#6195865)

IntelliJ IDEA just plain rocks. I don't know how I coded without it before. Anything else seems like coding with freakin' NOTEPAD.EXE (shudder)

For those of you that have no idea what IntelliJ IDEA is, check it out [intellij.com]

Re:IntelliJ (1)

panck (69848) | more than 11 years ago | (#6196666)

I've just started to moved to Eclipse [eclipse.org] from NetBeans [netbeans.org] , since Eclipse has good refactoring stuff, plus I can also work on my Perl code in the same IDE.

What's the difference between those and IntelliJ? Anything compellingly different? I've nearly decided to commit to eclipse, so if there's something better out there I want to know before I get settled!

Is IntelliJ free? (I saw something about a "trial key") Open source?

Coffee and Money (-1, Offtopic)

castlec (546341) | more than 11 years ago | (#6195832)

Two things we all like that work very well together. What a man!!

Hackers ? (0)

Anonymous Coward | more than 11 years ago | (#6195844)

Does this mean our code will look like the "net" in hackers ?

And do we get those cool headsets too ?

What do I look like, me lad?! (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195879)

"Try as they will, and try as they might, who steals me gold won't live through the night." from Leprechaun the movie 1993

[singing while bouncing a pogo stick on a man's chest] "This old Lep, he played one. He played pogo on his lung." from Leprechaun the movie 1993

Jackpot! (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6195889)

Interestingly enough, that's exactly what your mother said last night when she reached into my pants.

Re:Jackpot! (0, Flamebait)

larry bagina (561269) | more than 11 years ago | (#6196978)

that's also what CmdrTaco said when he fisted Hemos and pulled out a big lump of shit. I won't go into the details of what happened next, but Kathleen fent reported that his toothbrush needed replacing.

Gosling is a hypocrit (0, Insightful)

xacto (140278) | more than 11 years ago | (#6195900)

...because he raves on about simplicity yet took something beautiful -- Smalltalk -- and turned it into a steaming pile of complex, manager-friendly, dog-shit; a.k.a. Java. Oh, and -- WOW -- he's just now getting around to figuring out that a farking dynamic code model and not idiotic text files, is the way development should be done. Too bad that was in Smalltalk too! Our industry is going to implode and it's all our fault. When we accept bullshit artists like Gosling we deserve what we get. Oh, flamebait for the day: Emacs is a piece of shit too. Simplicity my ass.

Sounds vaguely functional (4, Interesting)

Larne (9283) | more than 11 years ago | (#6195913)

Some of this is reminiscent of things the functional programming language folks have been doing for a while. In particular the parse tree concept sounds a bit like graph reduction [brighton.ac.uk] , which runs programs by repeatedly simplifying the graph which it (where the graph is a generalization of a parse tree). One of the things you can do with such a system is "common subexpression elimination" where common subtrees are moved to single point, ensuring they're evaluated only once. Sounds like a specialized form of refactoring, doesn't it...?

Of course all this is easier in functional languages, because you don't have to worry about state, identical trees will always evaluate to the same value. Not so in Java, if any of the nodes refer to global data.

I wonder how often Gosling talks with Guy Steele, who was pivotal in the development of both Scheme and Java. I'd love to see what they'd come up with if they put their brains together.

Re:Sounds vaguely functional (1)

Old Fart (99472) | more than 11 years ago | (#6196425)

Dude, they came up Java! (*spit!*) No mas!

Re:Sounds vaguely functional (1, Funny)

Anonymous Coward | more than 11 years ago | (#6196754)

It's all remiscent of my favorite programming language: intent. Unlike other programming languages which are based on strict syntax and grammatical rules, intent goes beyond what you actually type and gets what you mean, or rather, what you intend.

Here is an example of the full source code of a compiler (filename "intend") for the intent language, written, of course in the intent language:

write compiler for teh intent languge

Note that despite the lack of capitalization, punctuation and proper English spelling, this will compile under the intent standard, and will produce object code which is a working intent compiler:

[ac@/. #] intend "write compiler for teh intent languge" > intend2
[ac@/. #] diff intend intend2
[ac@/. #]

Refactoring code is trivially easy, and in fact a refactorizer written in intent looks like:

refactor the code

This refactorizer works on all languages, just as you intend, of course. Refactoring Java is as easy as:

[ac@/. #] intend "refactor the code" > refactor
[ac@/. #] refactor *.java

If simple refactoring isn't enough, you can get all of the features of Gosling's Jackpot with the code:

write a program liek that one jackpot thing that had the slashdot storey that one time.

babblefish translation please (3, Funny)

frovingslosh (582462) | more than 11 years ago | (#6195921)

OK, I read the article. What the hell are they talking about?

Re:babblefish translation please (0)

Anonymous Coward | more than 11 years ago | (#6196491)

I understood practically everything Bill Venners said, but practically nothing of what James Gosling said. That means for me, Venners is the smarter guy.

code is data (1)

nacturation (646836) | more than 11 years ago | (#6195924)

Man, this has been done 30 freaking years ago already. Lisp (yeah, remember the parentheses?) has had this from day 1 essentially. walk the Wiki [c2.com] on this.

same thing but for C? (1)

bob_jenkins (144606) | more than 11 years ago | (#6195991)

What's an environment that does the same thing, but for C? I can see that macros could foul up the works unless the system is extensible.

New .sig (1)

God'sAwayOnBusiness (678295) | more than 11 years ago | (#6195994)

How long before we see this .sig:

"I apologize for this long comment. I didn't have the time to make it any shorter.

of course we'll have (1)

crea5e (590098) | more than 11 years ago | (#6196000)

Microsoft's answer ... Crackpot

No that was to easy. Mod me down dammit!

Jackpot vs. Sun's Last Stand (2, Insightful)

joelparker (586428) | more than 11 years ago | (#6196007)

Sun would have a better chance surviving
if people like Gosling could show Jackpot
and its benefits in a BUSINESS CONTEXT.

- Code gets cleaner, easier to maintain & debug.
- Multi-thread scaling areas get easier to spot.
- Profiling tools speed up based on the algebra.
- IT staff in mergers can finally merge apps.

Sure the technology is "cool" and "entertaining"
but these days Sun needs a profit.

Cheers, Joel

Re:Jackpot vs. Sun's Last Stand (1)

dismayed (76286) | more than 11 years ago | (#6196264)

Sun would have a better chance surviving if people like Gosling could show Jackpot and its benefits in a BUSINESS CONTEXT.
Well, I don't see the relevance of your comment, Artime would really be doing something wrong if Gosling was speaking in a BUSINESS CONTEXT since Artima.com is self-described as:
Artima.com serves a community of developers interested in object and service-oriented architectures and design. At Artima.com, developers can find practical information in articles, interviews, books, links to resources, FAQs, and discussion forums. Our intent is to make Artima.com a place that developers can learn from experts in the software industry as well as interact, share information, and learn from each other. -- About Artima.com [artima.com]
That's all. :)

Re:Jackpot vs. Sun's Last Stand (0)

Anonymous Coward | more than 11 years ago | (#6196509)

Ahhhhhhhhh! Was *that* the point! I thought I was just being told that Gosling was getting paid for jerking off in his office :^/

Reminds me of whitespace (1)

nhavar (115351) | more than 11 years ago | (#6196013)

Anyone remember seeing the programming language called Whitespace. It uses a similar methodology where indentation and heirarchy are the key to the language. :)

Just Great (4, Funny)

sammyo (166904) | more than 11 years ago | (#6196027)

When you googled for something *java* it was anoying enough to deal with stupid $tarbuck$
links, with 'Jackpot' an unlucky click and it might take 20 min to undo the popdowns, offers for the *best internet casino*... and oh my gawd, add to the wrong mail list!

(I was going to add an example link but I wouldn't do that to my worst enemy)

Re:Just Great (3, Insightful)

rsborg (111459) | more than 11 years ago | (#6196190)

'Jackpot' an unlucky click and it might take 20 min to undo the popdowns

Chuckle... my poor friend, why don't you just upgrade to the lizard [mozilla.org] ? :-)

Re:Just Great (1)

goodchef (213729) | more than 11 years ago | (#6196416)

Although in actuality, a google search on java [google.com] doesn't turn up any Java-Coffee links in all 68 pages of results. The island of Java first shows up on page 14 [google.com] .

Sounds like LISP to me (2, Interesting)

Sayjack (181286) | more than 11 years ago | (#6196033)

When writing LISP you're pretty much expressing a parse tree as a program, and yes, LISP does have some advantages when it comes to expressing certain solutions in an elegant manner.

Such a language, much like LISP, might be quite useful with respect to genetic programming.

In addition, a parse tree language which has lots of internal understanding of data flow might make for a good intermediate step in a compiler or perhaps become a better LISP.

It's good to see that Gosling isn't resting on his Java laurels but applying what he's learned in new areas of research.

Appropriate (2, Funny)

Markus Registrada (642224) | more than 11 years ago | (#6196143)

Alex Stepanov famously described Java [stlport.org] as "a money-oriented programming language". I guess that makes the name "Jackpot" an appropriate name. I suppose the next projects will be "Jingle" and "Jyp".

The Emergents got him (1)

JasonAsbahr (54085) | more than 11 years ago | (#6196170)

Anyone else get the feeling that Mr. Gosling's been Focused?

This is an advance? (1)

jarober61 (598836) | more than 11 years ago | (#6196177)

Has Gosling not ever looked at Smalltalk or Lisp? Heck, even if he's got Java tunnel vision, he wouldn't need to look further than Eclipse or IntelliJ.

It's a race (1)

useruser (638080) | more than 11 years ago | (#6196218)

It's interesting how industry and academic research in systems and languages seem to have been racing neck and neck for the past decade. Visual programming languages [oregonstate.edu] have been around for a long time now, all which operate on "parse-trees" (which is largely a misnomer, since there's really no parsing going on). Keep in mind that by "visual," academics don't really mean to emphasize the visual. They mean to emphasize the fact that such computational formalisms allow programmers to operate on higher-level semantics than single characters, while completely avoiding syntactic errors (and often most type errors).

Of course, the difference is that academics build these programming systems because they offer the potential for easier learning and better domain-specific reasoning--and Gosling developed Jackpot because "...[it's] kind of goofy, but entertaining." Both approaches are essential for taking the programming systems community beyond it's archaic language-centric viewpoint. IMHO, Gosling won the programming language race with Java--who will the programming systems race?

So what's new? (2, Interesting)

e__alf (642611) | more than 11 years ago | (#6196242)

Hmm... most of what he talks about has been available in proper languages for decades! I'll even try, as a public service, not to mention LISP :]

Smalltalk has this:

(3/5) class methodDictionary at: #+

which will give you the + method for the Fraction class. From that object (the CompiledMethod) you can get the original source code (if it's available), or a parse tree. The parse tree will give you indices into the original source, in case you should need to do a GUI for your IDE :)

Say you're writing a debugger (which you can actually do, unlike in Java, where the debugger needs to run externally).. the MethodContext knowns at what opcode execution stopped, the parse tree knows which part of the source that represents. This means you can step operator by operator through an exression... no "line numbers".

You can *fake* some of these things in java, but it's not pretty - something like IntelliJ has to use its own special compiler and huge amounts of support code, and it's just plain impossible in Java for a system to debug itself.

Go play: free-as-in-beer-for-personal-use and nice [uiuc.edu] / free, cute, fluffy and sluggish [squeak.org]

</preach>

Internal Sun Memo criticizes Java performance (0, Troll)

schouwl (658811) | more than 11 years ago | (#6196317)

http://www.internalmemos.com/memos/memodetails.php ?memo_id=1321 Time to move on guys.

Re:Internal Sun Memo criticizes Java performance (1)

jjohnson (62583) | more than 11 years ago | (#6196489)

Thanks for the FUD [slashdot.org] .

Jackass - Scott Lockwood's Latest Faggotry (-1, Troll)

Anonymous Coward | more than 11 years ago | (#6196377)

From scottlockwood@hotmail.com Fri Mar 29 15:54:18 2002
Return-Path: scottlockwood@hotmail.com
X-Originating-IP: [63.74.34.71]
From: "William Scott Lockwood III"
To: jeremy@satanosphere.com, cyborg_mmonkey@yahoo.com, flikee@xmission.com, hurstdog@kuro5hin.org, inoshiro@kuro5hin.org, rusty@kuro5hin.org, trlockwood@yahoo.com
Cc: benevolent_spork@yahoo.com, kdogg731@hotmail.com, elby@adequacy.org, jwipotroll@hotmail.com, j0nkatz@hotmail.com, spiralx@spazmail.com, sarah@johncglass.com, quacky@rocketmail.com, BlueBear@meowmail.com, momocrome@momocrome.cjb.net, pen1s_goat_guy@hotmail.com, tjfriese@shaw.ca, revlucion@journalist.com, adamtrowe@hotmail.com, sarah@aphasianetworks.com, drhelpful@portalofevil.com, spacefem@starmail.com, sporkopolis2001@yahoo.com, hanales@hotmail.com, trollaxor@mac.com
Subject: Retiring the scoopizoid site.
Date: Fri, 29 Mar 2002 15:54:18 -0600
Mime-Version: 1.0
Content-Type: text/plain; format=flowed
Message-ID: F1629Qs96i1QwCfWaL40001112f@hotmail.com

I'm going to retire scoop.giz. People are right about the geekizoid name forever being associated with crap.

We will go back up with a new domain name at some point in the future when I find something I like. Any suggestions on a name?

Scott

Gamma and OO (3, Informative)

schouwl (658811) | more than 11 years ago | (#6196411)

For me as along time programmer this feels like moving from C to C++. You can discuss your program on a whole other abstraction level.
GREAT.
Things are getting very interesting in the field of improving the coding process. I still remember Sniff C++ started by Eric Gamma in the early 90-ties. This was the first product to visualize/navigate over large C++ projects that blew me away. One can certainly see this approach in Eclipse - one of the latest projects of Eric Gamma.
A few very smart IDEs appeared - CodeGuide, Eclipse, IDEA.
Eric Gamma was working in an IT research lab in the UBS in Zurich in Switzerland before he became really famouns with his GoF book.
Lars

Link to Jackpot home page (2, Informative)

gwernol (167574) | more than 11 years ago | (#6196506)

Not a great deal there yet, but if you're interested in Jackpot then the Jackpot home page [sun.com] would be worth bookmarking for future reference. Their early work on source code metrics is interesting and the published papers listed are a good starting point for more detailed information than can be delivered in an interview.

Not new (2, Interesting)

dr2chase (653338) | more than 11 years ago | (#6196699)

Besides Lisp and Eclipse and IntelliJ, this sort of syntax-tree-oriented manipulation has been going on in optimization and programming language research for the last 20 years. (And Eclipse does a fine job -- all that chit-chat about encapsulating public instance variables is just a choice on the refactoring menu, and it's free. I've got no idea why Gosling thinks this is new and interesting.)

For example, people (including me) at Rice University worked on a source-to-source Fortran vectorizer that manipulated ASTs. Derivatives of that AST reappeared in the Dana/Ardent/Stardent compilers for C and Fortran. The Fortran AST was also used in an AST-based editor, a Fortran interpreter/debugger, a pretty printer, an ugly (fixed-format card image) printer, and dependence-displaying Fortran browsers (dependence here refers to loop iteration dependences that hinder parallelization).

One thing that became clear while working on AST-based editors was that people didn't want the tree structure continuously in their face. For example, at the expression level, Fortran programmers (as opposed to, say, Lisp programmers) found tree-based editing to be intolerable. The tree structure can be handy for browsing/skimming code; uninteresting blocks of code could be elided. But, people did not want to be prevented from making changes that were "only" syntactic.

Keep in mind, this is just the Rice-centric view, other people were doing things like program slicing (what code depends on the value of this variable). I'd love to see some of this stuff nicely integrated into an IDE -- that nice integration is the hard part, the theory is generally done and old.

James Gosling versus Guido van Rossum (1)

Paul Bain (9907) | more than 11 years ago | (#6196796)

If I have a choice between following the latest activities (with respect to developing new programming languages) of Gosling or Van Rossum, I shall choose the latter. The opinion of those who know Java and Python equally well (e.g., Bruce Eckel) is that Python is much better designed.

I used to be a server-side Java bigot, but now I am older and wiser.

Getters/Setters (2, Insightful)

oodl (398345) | more than 11 years ago | (#6196803)

Gosling spoke:

One piece of analysis, therefore, is to find all the public instance variables. But we can find them and also make them private, add all the setters and getters, and account for what it means to actually access the variables via setters and getters.

As I've said before, Gosling appears to have oblivious to most of the research that had gone on in the field of object-oriented languages.

Java should been designed from the start to enforce getter/setter access to instance variables. This feature has long been recognized to be a desirable feature in an object-oriented language. I think Self, Dylan, and other object-oriented languages got this feature right.

So who owns the relevant IP? (0)

Anonymous Coward | more than 11 years ago | (#6196942)

Quick run down of contenders.

  • System and method for documenting and displaying computer program code Apple [uspto.gov]
  • Method in a structure editor IBM [uspto.gov]
  • Token-based computer program editor with program comment management Sun [uspto.gov]
I'm sure there are other patents that could be applied to this as well. Someone mentioned that MS has this sort of functionality in Visual Studio, I sure hope they licensed everything properly.
Load More Comments
Slashdot Login

Need an Account?

Forgot your password?