Log of the #nice channel on irc.freenode.net

Using timezone: Greenwich Mean Time
<arjanb>good night01:23
* arjanb leaves
* noise leaves03:16
* thorus leaves08:31
* arjanb joins11:19
* GummiEnte joins13:57
Hi
Arjan, are you out there?13:58
<arjanb>hi14:04
<GummiEnte>Hello... 14:06
Nice to see you again, after so long time...
But I've got again some work for you... :/
I found a compiler bufg...
...just by accident14:07
Look:
<arjanb>yes?14:08
<GummiEnte>System.out.println(dprefix: "",
t: (T date) => "x",
empty: "-",
blank: " ",
dpostfix: "|");
So, I#ve forgotton one function ... it should be:
System.out.println(func_foo(arguments...));
But the compiler gives:14:09
[nicec] Stack trace:
[nicec] java.lang.NullPointerException
[nicec] at bossa.syntax.Arguments.noMatchByName(Arguments.java:255)
[nicec] at bossa.syntax.Arguments.explainNoMatch(Arguments.java:238)
[nicec] at bossa.syntax.OverloadedSymbolExp.noMatchError(OverloadedSymbolExp.java:534)
[nicec] at bossa.syntax.OverloadedSymbolExp.resolveOverloading(OverloadedSymbolExp.java:131)
[nicec] at bossa.syntax.CallExp.resolveOverloading(CallExp.java:242)
[nicec] at bossa.syntax.CallExp.computeType(CallExp.java:249)
[nicec] at bossa.syntax.Expression.getType(Expression.java:155)
[nicec] at bossa.syntax.fun.typecheck(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/src/bossa/syntax:1051)
[nicec] at bossa.syntax.dispatch.typecheck(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/classes/bossa/syntax)
[nicec] at bossa.syntax.fun.typecheck(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/src/bossa/syntax:749)
[nicec] at bossa.syntax.dispatch.typecheck(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/classes/bossa/syntax)
[nicec] at bossa.syntax.fun.lambda16(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/src/bossa/syntax:801)
[nicec] at bossa.syntax.fun.apply1(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/src/bossa/syntax)
[nicec] at gnu.expr.ModuleMethod.apply1(ModuleMethod.java:89)
[nicec] at nice.lang.fun.foreach(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/stdlib/nice/lang:368)
[nicec] at nice.lang.dispatch.foreach(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/classes/nice/lang)
[nicec] at bossa.syntax.fun.typecheck(/site.data/ZippedFiles/WinLinux/Java/nice/Nice/src/bossa/syntax:799)
* GummiEnte leaves
<arjanb>i see
* GummiEnte joins14:10
Uups, that was too much...
<arjanb>it's a NPE in error reporting code14:11
<GummiEnte>Enough stack trace...
?
<arjanb>yes
<GummiEnte>Ok... This bug is no blocker, but as you once told me, compiler exceptions should not occur.
<arjanb>so what's the header of that func_foo method?14:12
<GummiEnte>...maybe daniel told me...
If I use System..println(func_foo(...)); its working...
...it just isn't working if I use println(arbitray_arguemtn_name:...)... that breaks the compiler.14:13
...but should only throw an compiler error, that there is no argument defined with name "arbitrarty_arguemtn_name").
<arjanb>so when you try to use named argument for a method that doesn't have named arguments it gives a NPE14:14
<GummiEnte>yes.14:15
but also the following breaks:14:16
String foo(String h) => "xxx";14:17
...
foo(hagsgs: "hsdfhksdh");
that also throw a NPE.
<arjanb>the same right?
<GummiEnte>Quite:14:18
[nicec] java.lang.NullPointerException
[nicec] at bossa.syntax.FormalParameters.hasMatchFor(FormalParameters.java:459)
[nicec] at bossa.syntax.Arguments.noMatchByName(Arguments.java:255)
[nicec] at bossa.syntax.Arguments.explainNoMatch(Arguments.java:238)
[nicec] at bossa.syntax.OverloadedSymbolExp.noMatchError(OverloadedSymbolExp.java:534)
[nicec] at bossa.syntax.OverloadedSymbolExp.resolveOverloading(OverloadedSymbolExp.java:131)
<arjanb>String foo(String h) => "xxx"; ?14:24
something missing here?14:25
<GummiEnte>that was just an examnple... don't know, if that is working...14:26
<arjanb>i can't reproduce the second case14:29
<GummiEnte> String test(String bla) {14:30
return "x";
}
test(h: "hh");
<arjanb>is that a local function?
<GummiEnte>ah, function test is defined in a class C and I call test from within a function in the same class C.14:31
<arjanb>the second one is different14:38
class A {
String test(String bla) { return "x"; }
void foo() { test(h: "hh"); }
}
* Bluelive leaves
<arjanb>no NPE in this testcase14:39
* Bluelive joins
<GummiEnte>Nice compiler version 0.9.4 prerelease (build 2003.11.18, 06:37:26 UTC)14:40
Compiled using JDK 1.3.0
with my compiler the error occurs.
<arjanb>you get an NPE with exaclty the same code as i showed?14:42
<GummiEnte>yes.14:44
<arjanb>that's strange14:45
i have tracked down the first case15:07
could you give a indendent testcase for the second one
i know how solve the second case too but i'm curious what code triggered the NPE15:28
GummiEnte?15:40
<Bluelive>busy bugfixing ?15:42
<arjanb>yes15:43
<Bluelive>im busy working on the contraints on parametric types15:46
<arjanb>GummiEnte: the bug is fixed in cvs16:36
<GummiEnte>I'm back.16:47
Well, I've extracted the "2nd" testcase to a separate package and it gives me:~/Work/WorkingDirectory/Sualtam/src/test/test.nice: line 6, column 19:16:48
Method test expects parameters (test.A this, String bla)
That's really strange ?.16:49
<arjanb>yes
probably something wrong in depencies between package or in resolving of methods16:50
<GummiEnte>I'll do some cleanup of the new sualtam code (maybe not until tomorrow) and then I'll send you a file, in which the class A does generate an error...
<arjanb>please store the current version somewhere16:51
this kind of bugs are hard to track down and can have subtle causes16:52
<GummiEnte>What version?
<arjanb>version of sualtam that yielded that NPE16:53
<GummiEnte>Do you want to try it yourself?16:54
<arjanb>good idea, can you send the source by mail?16:55
<GummiEnte>I'll send you my complete workingdirectory...16:56
<arjanb>so you're active in developing sualtam now?16:58
<GummiEnte>Yes, but just for fun ...16:59
The mail is out here.
<Bluelive>what is sualtam ?17:00
<GummiEnte>http://sualtam.sourceforge.net/
<arjanb>it generates a html page of the logs
<GummiEnte>You can view its result here: http://confer09.condor-edv.com/nice@freenode/2003-11-22.html17:01
btw. Hello Bluelive...
<Bluelive>hi Gummi :)
<GummiEnte>Did you receivee the mail arjan?17:02
<arjanb>yes
<GummiEnte>And do you also get the NPE?
<arjanb>i first need to find out how to compile it17:03
<Bluelive>hmz17:07
<GummiEnte>just use: ant dist
<arjanb>i don't have ant installed17:08
<Bluelive>hmz17:12
having a tvcard doesnt increase productivity :)
<arjanb>reproduced the exception and my fix does work
<GummiEnte>Great!17:15
If you'vent got ant installed you are missing something, don't you?17:16
<arjanb>not that i know
<GummiEnte>Quite a few apache (maybe more and more) use ant...17:17
...apachee projects...17:18
<arjanb>yeah i should try ant sometime17:19
the second case wasn't a serious problem17:28
there was another method named test without any arguments17:29
<GummiEnte>Was it my mistake?17:30
<arjanb>no
<GummiEnte>Ok...
<arjanb>only the error reporting went wrong17:31
<GummiEnte>Ok. I've also got problems with srialisation...
<arjanb>:(17:32
<GummiEnte>Normal serialisation seems to work, but:17:33
1) how to create the serialVerUID's???
2) Implementing my own {write|read}Object({Out|In}putStream ... does not work; it seems so, as if these methods simply want get used.
:(17:34
<arjanb>serialVerUID are just random longs17:37
<GummiEnte>Yes, but: for the normal jvm serialisation|deserialisation concept there needs to be static final long serialVerUID's in each class that needs to be serialisesed...17:39
Only with these variables you get syncronised objects...
<arjanb>Nice doesn't have static fields 17:40
<GummiEnte>Yes, I know, so how we should do that???17:41
It does not seem so, as if a final variable is sufficient...
<Bluelive>ive allways found java serialisation a weird system, it does more then you could do with serialisation and visitors17:43
<arjanb>i think serialverUID in java superclass won't work either :(17:44
<Bluelive>maybe just add it for every class in the code generator ?17:45
<arjanb>that might be possible
<Bluelive>generating a code is the hard part, it should be something like a hashcode of the fingerprint and implementation of the class17:46
<arjanb>adding a serialversionUId for every Nice class based on a hash of class name, package name and fields
<Bluelive>that wouldnt do it
the id should be unique for different source compiles17:47
maybe just randomize ?
<arjanb>no
then you can't build that source in different places17:48
<GummiEnte>We need to be able to adjust this value and also be able to automatically generate it.
<Bluelive>well if you would want to adjustthe value it would be inside metadata ?17:49
hmz17:50
how does java generate the value ?17:51
<arjanb>a serialversionUID isn't required for serialization right?
<GummiEnte>looks for all non-static,non-transient fields and generates something...
<Bluelive>its required
<GummiEnte>Well, it is...
<arjanb>java doesn't generate the UID, you do17:52
<Bluelive>java does generate an UID when compiling a serializable class
<GummiEnte>If you don't explicit set an uid it generates automatically one.
yes... :)
<Bluelive>http://cermics.enpc.fr/~rl/cloudscape/doc/html/coredocs/special3.htm#81392117:53
if the value is autogenerated only from the fingerprints, there wouldnt be any occasions to explicitly define an UID would have meaning17:55
<arjanb>is the serialversionUID the only thing that prevent using serialization for Nice classes?17:57
<GummiEnte>But what is even worse, that if I write a method "private void readObject(ObjectInputStream in) {...}" these method doesn?t seem to be able to get used... :(17:58
Serialisation for nice works, but only for the standard case.
<arjanb>these method don't get used becaused they aren't compiled to inside the class and the private modifier isn't set18:00
<Bluelive>those methods should be public in the class file18:01
<GummiEnte>so, how to tell the jvm that for deserialisation it should use fun.readObject(...18:02
Or may there be some symlinks in the classes?
<Bluelive>omz
a forwarding stub ?
<arjanb>that isn't possible
the jvm is quite restrictive about a lot of thing18:03
<Bluelive>but that would require some metadata or somesort of new keyword
<arjanb>but readObject is only needed when you want to do something special after serialization right?18:04
<Bluelive>no
<GummiEnte>no,
<Bluelive>if you want to do the deserialisation bij hand
<GummiEnte>:)
<Bluelive>its also required for rmi
<GummiEnte>that said, for me it is required, cause some native gcj-3.3 hashmap deserialisations are broken.18:05
so i have to save and restore my hashmaps on my own.
<arjanb>i see
<Bluelive>sounds like it cheaper to patch gcj :)
<arjanb>how hard do you need serialization now?18:06
<GummiEnte>Yes, but then I have to deliver to all these customers a patched library... not everyone wants these updates...
...well, serilisation is one of the topics... cause we store the ast of our parsed cells...18:07
i could move the "data" back to java classes, but that is not that "nice".18:08
(again to the libraries and patching: due to licence issues, I am not allowed to release static binaries...)18:09
<Bluelive>isnt the gpl nice
<arjanb>i can hack something for the serialversionUID but i have no idea how to do the readObject methods
<GummiEnte>Yes, really. :/
<arjanb>the nice standard library is now gpl with linking exception18:10
<GummiEnte>So, the UID's is the smaller problem... hopefully Daniel has some idea about.
<Bluelive>arjan, maybe if a class contains a read* generate a stub that calls the fun version ?
<arjanb>that's possible18:11
i know how things could be done in bytecode but not how i can change nicec to do that18:12
daniel is away this weekend :(18:17
<Bluelive>arjanb, vesting bar vanavond ?18:18
<arjanb>vesting bar? is daar wat te doen dan buiten de introductie ?18:21
<Bluelive>je kan er erdinger kopen :)18:22
<GummiEnte>hmmm, lecker erdinger... :)18:23
<Bluelive>zucht18:38
die parametric constraints zijn moielijk
<arjanb>idd
<Bluelive>opzich wel geinig
alleen nested
...
<GummiEnte>So, I'll have to leave now...18:39
Have a nice weekend.
<arjanb>cu18:40
<GummiEnte>---bye---
* GummiEnte leaves
<Bluelive>righty18:57
i locked down the typing some more and added checks for allowing assignments from other parametrictypes18:58
<arjanb>you understand the typing good enough for implement already?19:06
<Bluelive>yeah i think so19:07
altough resolving function calls will be a while off
<arjanb>where can i find how to calculate a serialversionUID?19:09
<Bluelive>even terug naar nederlands ?
<arjanb>kan
<Bluelive>weet zo niet hoe je die uid uit rekend, msihcien dat het ergens in documentatie over rmi staat, en anders ergens in de gcj source ergens kijken19:10
<T> void foo(List<T> x)19:31
is nog wel een hoofd krakertje
<arjanb>hoezo19:32
<Bluelive>ow zit wat te muzen over volledge assignments19:34
okee, maar eens wat keywords toevoegen19:36
<arjanb>die serialversionUID berekening is best lomp in java19:42
<Bluelive>wat doen ze ?
gewoon shift en xor over de bytecode ?
<arjanb>ze nemen de signature van alle fields, methods, implemented interfaces, modifiers en berekenen een hash uit19:43
<Bluelive>dat is toch niet zo erg ?19:44
wel raar heb vaak problemen gehad omdat ik iets heb gerecompiled en dan niet kan deserializen van disk, terwijl de interface nog hetzelfde was
<arjanb>maar als ook maar 1 detail anders is kun je niet meer compatible serializen19:46
<Bluelive>dat moet ook wel
anders zou serializen wel een mooie manier zijn om beschermde data te extracten uit een object19:47
hmz19:49
<arjanb>nah dan is het beter om de storage zelf te beschermen
<Bluelive>public T foo<T as Object>(T in) where T<=U return T;
is die syntax wat ?19:50
<arjanb>nee
<Bluelive>comments ?
<arjanb>public T en dan ook nog return T?19:51
<Bluelive>ehmz
return in; zou dat moeten zijn
<arjanb>en waar verwijst die U naar?19:52
<Bluelive>ow dat is een parametric type die bij de class hoort
class A<U as object> {..} erom heen stoppen zegmaar19:53
<arjanb>waar is dat as Object stukje voor nodig?
<Bluelive>ow die is optional
maar geeft aan waarin dingen van die type impliciet in gecast kan worden19:54
<arjanb>syntax is makkelijk te veranderen19:56
<Bluelive>tsja
waarin :)
gaat om bruik en leesbaarheid
<arjanb>heb je al bij andere talen rondgekeken?19:57
<Bluelive>generics opzich gaan niet zover in java en c#
en syntax van nice vindt ik niet echt wat
jij nog suggestie van talen waarin dat voorkomt ?19:59
opzich wel leuk dat je extra contraints op methods kunt zetten20:01
<arjanb>maar wat is er mis met de notatie in Nice20:02
<Bluelive>ehmz de definitie van de parametrics staat helemaal vooral, wat niet past in m'n model ;)20:03
<arjanb>maar wat ik wel zou doen is alleen parametric ding bij elkaar zetten20:04
-en
<Bluelive>Hmz20:05
wat ik me nog afvraag is of ik een List<U> in een Collection<U> kan kirjgen impliciet
<arjanb>geen probleem als ze dezelfde type param hebben20:06
<Bluelive>dat is het idee ;)
kan je in nice de zelfde class meerdere keren extenden met verschillende paramteric types
?
<arjanb>nee en waarvoor zou dat nodig zijn?20:07
<Bluelive>zeg dat je een interface hebt voor een operator, en dat je die operator voor meerdere types wil hebben ?20:08
soort method overloading via meerdere extends
<arjanb>ik volg dit niet helemaal20:09
<Bluelive>stel je hebt een method foo(T) in een interface20:10
en je extend in je class die interface twee keer voor verschillende solide types voor T
dan heb je bijv foo(A) en foo(B)
<arjanb>zoiets heb ik nog nooit gezien20:13
<Bluelive>maar je kan een interface dus maar 1 keer implementeren ?20:14
<arjanb>ja
<Bluelive>hmz nog wat vroeg voor de vb20:16
<arjanb>ik kan me zo niet bedenken waarvoor dat handig zou zijn20:17
<Bluelive>msihcien in een SI omgeving van java niet, maar in mi is het wel belangrijk20:18
<arjanb>ik zie het nut van mi niet zo20:19
<Bluelive>en ik vindt het flauw dat java vals speelt met fully abstracts die interface heten20:20
<arjanb>in Nice het enige verschil tussen een class en interface is dat een class fields heeft
en mi voor fields is maar beperkt nuttig
<Bluelive>hmz die where is best leuk20:59
kan je ook los staande interfaces requiren
beetje jammer dat je daar niets mee kan in de code met m'n huisige systeem denk ik
hmz, opzich kan ik de implicit cast code wat uitbreiden21:00
<arjanb>where als in ...?
<Bluelive>class A<T> where T<Serializable, T<Comparable21:01
<arjanb>welke taal komt dat uit?21:02
<Bluelive>mijn taal
zo eens naar de vb ?21:05
<arjanb>ik niet
<Bluelive>geen erdinger ?21:06
ik betaal ;)
<arjanb>nee andere keer misschien
<Bluelive>hmz21:07
nou dan maar verder coden
verder is er hier niemand thuis
<arjanb>wat van flat is dat nou weer
<Bluelive>nouja zijn er wel wat thuis maar die hebben eigen feestje21:08
bedoelde eigenlijk irc mensen
normaal gaat frank en boris wel mee als ze op de campus zijn
okee22:01
en nu, constraint checking
<arjanb>de bereking voor serialVersionUID staat wel beschreven in een specificatie maar is erg omslachtig22:29
<Bluelive>ah okee22:30
werkt het nu ?
<arjanb>dan maar dan een mogelijkheid voor custom serialVersionUID erin hacken
<Bluelive>ik ben erg onder de indruk van wat jullie met constraints kunnen22:32
<arjanb>wat wil je met een typechecker van 30kloc22:33
<Bluelive>ik denk dat ik het in minder kan22:34
</boast>
<arjanb>true maar er zit ook type inference in
<Bluelive>alpha is intotaal maar 15klines22:35
typeinference? wazdah ?
<arjanb>dat je niet meer variables een type hoeft te geven maar dat het type systeem dat uit kan zoeken22:36
<Bluelive>waarom wil je dat dan ?
<arjanb>var x = 5; ipv int x = 522:37
scheelt type werk
<Bluelive>die lukt wel
als je hem typed bij eerste assignment, of gaat het verder
<arjanb>nu is het alleen nog bij eerste assignment en != null en instanceof testen22:38
void foo(B x) {}22:39
var A a = new A();
if (a instanceof B) a.foo();
geen casts meer bij instanceof :)22:40
<Bluelive>dus je forward typed ? en dan alleen nog in de branch ?
evil :)
dat is best powerfull22:41
<arjanb>instanceof verandert het type in die if branch
<Bluelive>hmz22:42
<arjanb>we proberen al die scripting taal mensen te overtuigen dat statisch typing niet zo slecht hoeft te zijn22:43
<Bluelive>:)22:44
tsja opzich kun je van simpele types afstappen en voor elke var in elke branch bij houden wat je weet van die type22:45
wordt wel erg moeilijk om de identie van een type te gokken als je overloaded methods gaat callen op zichzelf22:48
<arjanb>valt mee bij overloading zijn meestan de types waarop je overloaded niet gerelateerd aan elkaar22:49
<Bluelive>hmz22:50
wat voor melding krijg je op zo'n var als ie te weinig kennis heeft over een type ?
<arjanb>nu krijgt de var het type van die waarde die geassignt wordt22:51
en als het type van de waarde losse type variable heeft dan krijg je een error22:52
<Bluelive>dus een var kan niet een input parameter zijn ?
wordt er trouwens in de bytecode dan niet aso veel gecast ?
<arjanb>naar de bytecode moet je niet te veel kijken :D22:53
in Nice worden best leukje truukjes uitgehaald met types en wordt nog meer22:58
<Bluelive>gna
wordt het dan niet te bloaterig ?
<arjanb>dat is vooral de implementatie kant22:59
<Bluelive>nee ik bedoel de syntax ?23:00
<arjanb>nee de meeste dingen hebben weinig invloed op de syntax
Number x = someBool ? new Double(1.0) : new Integer(1);23:01
deze code zou in java een type error geven
<Bluelive>ehmz23:02
sjuh
in die van mij ook
maar ehmz, zo moielijk is dat helemaal niet, alleen een efficent algorithme is wat moeilijker
zoek de gcd van beide tijpes en maak dat de type van de trinairy expressie23:03
<arjanb>ja hoewel dat niet triviaal is waarneer je type parameter met constriants hebt23:04
maar een taal moet ook op de details letten
en gewoon doen wat je verwacht23:05
<Bluelive>:)23:06
hmz23:10
regels op 1 type, applyen ook op andere parametrics
als er rules onderling zijn
alleen nu het probleem hoe ze te propageren23:11
A<B, B<C dan ook A<C23:12
hmzels
<arjanb>idd
<Bluelive>grom en om nou te blijven loopen totdat er niks meer vernaderd is zo leem23:13
<arjanb>is van de datastructuren in de typechecker van Nice is een bitmatrix met daarin alle relaties tussen types in een constraint23:14
<Bluelive>ellow23:15
s dat niet wat erg veel ram ?
<arjanb>valt mee
ik heb die matrix nog niet groter gezien dan 600x60023:16
hmz dat is wel weer 45k
<Bluelive>als dat objecten zijn dan is dat wel een stevig stuk ram hoor :)23:18
dat is zo'n 16meg aan ram lijkt me23:19
<arjanb>nee
elke rij is een array of long
<Bluelive>ahja
hmz, maar die lijst is toch alleen valid voor sommige delen van de source ?
veranderd per method ?
<arjanb>idd23:20
het is opgedeelt in een statisch en dynamisch gedeelte
statisch alle gewone extends/implements relaties
dus de grote van de matrix verandert steeds, de gc moet toch ook wat te doen hebben :D23:22
<Bluelive>hehe
<arjanb>maar hoeveel weet je eigenlijk al van type theorie?23:28
<Bluelive>ehmz
ik heb geen vergelijkings materiaal om te zeggen veel of weinig
<arjanb>ooit geprobeert type theorie papers te lezen?23:31
<Bluelive>jawel
maar heb niet echt het geduld ervoor, en be ook niet echt zo goed in het excacte spul
maar denk er nogal veel over, dus na een tijdje ben je voor een aantal dingen wel het wiel over nieuw aan het uitvinden23:34
okee23:49
zuig
hmzels
en toen moest ik wat anders verzinnen23:50
<arjanb>wat is het probleem?
<Bluelive>ow zat ff te denken
maar loop geloof ik wat te hard van stapel23:51
ehmz
het idee van die constraints is erg leuk
alleen een constraint binnen een method kan strakker zijn dan op de hele class23:52
<arjanb>idd
<Bluelive>wat betekend dat ik andere instanties moet maken binne die methods
wat m'n typing engine breekt
tenzij ik impliciete logische regels eruit haal23:54
$oplossing gevonden dus
<arjanb>klinkt wel hackerig
<Bluelive>hmz
tsja
tis niet alsof ik een formele specificatie heb23:55
impliciete dingetjes zijn zowieso niet al te lief
zo23:57
nu alleen nog checken overal dat er een TypeIdentifier wordt gebruikt
en dan nog het hele method calling syteem herbouwen ;p
<arjanb>ik krijg soms de neiging om alle code van nice opnieuw te gaan schrijven00:23
<Bluelive>hehe00:25
ik heb regelmatig neigingen om weer van scratch alle fouten te vermeiden
ben op zich wel een rip up coder
had bijvoorbeeld een bijna volledige code generator die totaal niet meer bestaat in de huidige main source00:26
gewoon het slecht bouwen, alle problemen vinden, dingen oplossen etc, en dan weg gooien en het geheel goed terug stoppen is gewoon zo lekker
<arjanb>ja maar als je eenmaal met een grote berg code zit die grotendeels niet van jou is dan is dat wat lastiger00:27
<Bluelive>veel creatieve verschillen met bonniot ?
<arjanb>nee hoor00:28
is meer dat de structuur al 3 jaar oud is en er zoveel dependancies in zitten dat je bijna niks kunt wijzigen zonder iets anders stuk te maken00:29
<Bluelive>msihcien een goeie ide als eclips erbij pakken ?00:30
die heeft best goeie refractor mogenlijkheden
<arjanb>die snapt geen nice source code
<Bluelive>goed punt00:31
opzich kan je een paralel branch maken die van scratch wordt geschreven paralel aan de development branch
<arjanb>nah dat wil je eigenlijk niet00:33
<Bluelive>moah00:34
opzich is er vast een putn waarop je nadenkt over een nice2
* arjanb slaps himself00:35
if (field.isFinal() && field.sym.getName().toString().equals("serialVersionUID"));
{
need coffee00:36
<Bluelive>doh :)
<arjanb>ik heb de laatste tijd wel vaker dat ik onbewust een ; achter een if of for zet :S00:37
<Bluelive>toch erg stom als een compiler dat eet00:38
<arjanb>ik denk dat de meeste compilers dat wel eten
<Bluelive>zonder warning ?00:39
<arjanb>java iig
<Bluelive>zou niet moeten mogen :)
<arjanb>hmm die warning moet ik ook maar eens in nicec bouwen00:41
<Bluelive>doe je dat nu even :)00:42
clockwork orange op veroniqa is ook wel leuk 01:01
<arjanb>vaag er is geen serialVersionUID nodig in de bytecode voor serialization01:28
<Bluelive>hmz01:31
constraint op superclasses moet ik natuurlijk ook meenemen ....
<arjanb>en constraint op de interfaces01:32
<Bluelive>ik heb alleen classes
hmz01:34
class a<T> extends b<list<T>01:35
>
hoop dat ie dat snapt
<arjanb><C, T | C <: Collection<T>, T <: Number> void foo(C coll) {}01:36
constraints kunnen nogal ingewikkeld worden01:37
<Bluelive>en toen begonnen er echte bugs te komen01:48
<arjanb>ik heb ruzie met de bytecode library01:50
<Bluelive>ik heb ruzie met m'n instanceof functie01:51
<arjanb>of meer het feit dat het geen bytecode library is01:53
<Bluelive>ik ga maar eens m'n instanceof lib fixen01:54
<arjanb>fijn is dat bytecode laten maken door een backend van een scheme compiler :(01:55
<Bluelive>ellow ?01:56
dat klinkt als een mooie rewrite opertunity01:57
<arjanb>tja zo is Nice begonnen01:58
een parser en typechecker geplakt op een scheme backend
<Bluelive>hmz01:59
enis het een beetje goeie fit ?02:00
<arjanb>niet meer iig
<Bluelive>hmz02:02
refractor ?
<arjanb>die library is anderhalve meg source02:04
<Bluelive>hellow
en hoeveel wordt ervan ook echt gebruikt ?
<arjanb>10 to 20%
<Bluelive>tijd om een en ander weg te gooien ?02:06
<arjanb>tja maar als je ooit nog wil updaten naar een nieuwere versie van de library02:07
en er zijn veel dependancies 02:08
<Bluelive>crossdependancies geeft slechte stijl aan over het algemeen
mijn code zit er vol mee ;p
<arjanb>vrij typisch voor compiler lijkt het02:09
<Bluelive>maybe