Change Log
Sep 05
- Begin work on Java version of Fan parser
- Compiler emits straight to Java bytecode or .NET IL
- Basic expr compilation
- Basic class, method support
Oct 05
- Original jblock and nblock native method design
- Methods
- Fields
- Type checking
- Method argument overloading (since removed)
- New operator (since removed)
- If, throw statements
- Class aliasing (original Java/.NET integration strategy)
Nov 05
- Casting
- Primitive operators and auto-boxing (since removed)
- String concat, unary operators, assignment operators
- Local variables
Dec 05
- Redesign to use pure OO (everything boxed)
- Type inference for locals
- Duration literals
- Shortcut operator overloading
- Static initializers
- Comparision operators
- Constructors
Jan 06
- Generic types
- Support for
is
andas
operators - Type literals
- Method parameter defaults
- Unit test harness
Feb 06
- Refactor to use fcode intermediate format
- Refactor local variables for .NET emit
- Fandoc comments
Mar 06
- Native methods
- Superclass constructor chaining
- Closures
- I/O, List, and Map APIs
- Mixins
Apr 06
- Tomcat integration
- Field accessors
- Enums
- Charset I/O support
May 06
- Refactor Err to use Fan type system
- Math methods for Int, Float
- Switch statement
- New character methods for Int, Str
Jun 06
- Dynamic
->
call operator - Try/catch blocks
- Initial web API
- String interpolation
- CompareNull, CompareNotNull opcodes
- Tokenizer rewritten in Fan
Jul 06
- Parser rewritten in Fan
- Version API
- Using/import statements
- Facets
- Uri API, refactor File to use Uri
- Stub Time API
Aug 06
- Fan compiler does first end-to-end compile
- Fanp disassembler ported from Java to Fan
- Zip API
Sep 06
- First Fandoc goes live on fandev.org
- Precompiled Java bytecode mode
Oct 06
- Props file and Sys.env
- Constant folding in compiler
- Compiler can finally compile itself!
Nov 06
- Deprecate DupDown (dup_x1) opcode
- Nested closure support
- List.dup(), Map.dup()
- Not a statement checking
- Protection scope checking
Dec 06
- CLR protected region support
- Try finally blocks
- Virtual fields (mixins support abstract fields)
- Mixin reflection
- Covariant return types
- Change inheritance syntax to use colon
- Named super calls
- Const fields and const classes
- Launcher C++ executables for Win32
- Transition from Ruby build scripts to Fan build scripts
Build 1.0.1 (1 Jan 07)
- First official build
- Both old Ruby build scripts and new Fan build scripts
Build 1.0.2 (1 Jan 07)
- New pod format for pod meta-data and facets
Build 1.0.3 (8 Jan 07)
- Fan launcher options (--v and --D)
- Refactor Sys methods into respective classes
- Field storage
@
operator - Storage fcode flag
Build 1.0.4 (14 Jan 07)
- Virtual fields
- Move field accessor generation to Parser
- Fix closures in field accessor methods
- Fix multiple static initializer closures and scoping
- Optimize if(true), if(false)
- Fix indirect mixin router emitting
Build 1.0.5 (21 Jan 07)
- Use () operator on sys::Methods as callx() shortcut
- Curried methods
- Use soft references for pod cache
- InStream, OutStream.charset changed to abstract field
- Float constants changed to static const fields
- Fan.exe now uses Fan compiler to run scripts
Build 1.0.6 (5 Feb 07)
- Make sys::Err const
- Obj.isImmutable, List.toImmutable, Map.toImmutable
- Slot.isConst for thread-safe methods
- Thread API
Build 1.0.7 (12 May 07)
- New inet pod
- IpAddress, TcpSocket, TcpServerSocket
- Str.equalsIgnoreCase, compareIgnoreCase, any, all
- Time.now with tolerance
- Time.parseHttp, formatHttp
- InStream.readLine max parameter
- Map cannot have null keys
- Map.caseInsensitive
- New fandoc pod to parse fandoc into DOM
- New docCompiler pod to generate HTML documentation
- Doc chapters: docIntro::Overview, docLang::Literal
- .NET runtime support for most of sysTest
Build 1.0.8 (30 Jun 07)
- Add doc target to buildall script
- Add StrBuf.remove, buff up test suite
- DocLang chapters: Expressions, Statements, Exceptions, TypeSystem, CompilationUnits, Fields, Methods
- InStream peek, peekChar, readStrToken
- Changes to web API
- New wisp pod with simple web server implementation
Build 1.0.9 (1 Jul 07)
- Add: List.containsAll
- Remove: Type.sourceFile, Type.lineNumber, Slot.lineNumber
- Hidden: Field.getter, Field.setter
- Dynamic types
- Dynamic types emitter for subclass with type per instance
- Dynamic fields
- New sql pod using JDBC
- New chapters: docLang::DynamicTypes, docLib::Sql
Build 1.0.10 (7 Jul 07)
- Remove all the old Java based compiler code
- Change Int intern to -256 to 1024
- Major refactoring of compiler - fcode now implements namespace mixins
- Ability to compile against any arbitrary dependsDir
Build 1.0.11 (10 Jul 07)
- Java runtime dependency checking
- Compiler dependency checking
- MethodParam->Param, fieldField->of, paramType->of, returnType->returns
- Split Func out of Method
Build 1.0.12 (17 Jul 07)
- InStream.eachLine
- Covariant field overrides of methods
Build 1.0.13 (4 Aug 07)
- Indexed assignment expressions: x[y] += z
- Buf no longer mixins InStream and OutStream
- InStream and OutStream changed from mixins to classes
- Fix case insensitive Map equality/hash
- FileWeblet with ETag and Last-Modified support
- Rewrite Uri with custom parser
- Allow escape sequence in Uri literals
- Uri decoding/encoding
- Fix maxLocals, maxStack in emitter
Build 1.0.14 (12 Aug 07)
- Add maxStack to fcode format
Build 1.0.15 (5 Sep 07)
- Serialization support
- Simple literals
- With-blocks
- Refactor fcode attributes
- New facet design
Build 1.0.16 (11 Sep 07)
- Facets completed
- Override implies virtual fix
- Roll fcode version to support method var attributes
Build 1.0.17 (5 Nov 07)
- Obj auto-casts to anything
- Use serialization for thread messaging when not immutable
- Dynamic methods
- Buf: hex, base64, digest support
- TimeZone database and buildtz script for importing Olsen database
- Rename Time -> DateTime
- DateTime ticks to date/time calculations
- Locale API
- Rename parse -> fromStr
Build 1.0.18 (13 Dec 07)
- Int, Str, Month, Weekday, DateTime localization methods
- DateTime string encoding/decoding
- Resource and MemResource APIs
- Support final override modifiers
- Int.random
- Pretty stack traces
- Tons of new documentation
Build 1.0.19 (30 Dec 07)
- Basic fand bootstrap
- Tweaks to InStream.readObj
- Logging APIs
- File now subclasses Resource
- WebService pipeline
- Refactor Resource implementation
- SysResources
- Sys.appDir
- Raw string literals
- Regex regular expression API
- Optimize pod/type lazy loading
- Pod level user defined facets
- Type database
Build 1.0.20 (13 Jan 08)
- Fan shell
- Type literal support in serialization syntax
- More docs (docTools, docIntro)
- Rework build scripts to use facets
Build 1.0.21 (10 Mar 08)
- Haven ORM engine
- Type immutability
- Doc meta-data, doc default expressions
- File copyTo, copyInto, moveTo, moveInto, rename, open, mmap
- Buf redesign -> MemBuf, FileBuf, MmapBuf
- Redesign Resource -> Namespace
- Uri pathOnly, relToAuth, plusName, tail -> slice, minus -> relTo
- Allow const field set in ctor with-block
- Rename test pods: testSys, testNatives, testCompiler
- Move Windows executables from bin/win/ to bin/
- Sys.compile and script caching
- Coverage for .NET sysTests 364/375 - 97%
Build 1.0.22 (30 Mar 08)
- web::Cookie support
- WebSession support
- Once methods
- Func.curry
- Slot, Field, and Method are now const
- Make parameter names optional in function signatures
- New Cookbook chapters: Reflection
- Unix launcher scripts
Build 1.0.23 (14 Apr 08)
- Weekday, Month increment/decrement
- Enhance webapp steps
- File support for checkSlash
- New docs: Namespaces, Fandoc, Web, WebApp, Widget, Maps
- LogStep for W3C extended log format
- Haven enhancements - prepared statements
- Duration boot, uptime, toLocale
- Sys.diagnostics (mem, threads, classes)
- Uri queryPlus and escaping fixes
Build 1.0.24 (14 Apr 08)
- Cleanup old ruby scripts
- Cleanup docs
Build 1.0.25 (16 Apr 08)
- Fix Unix build problems
- Sys.env is now case insensitive map
- File.pathSep
- Skip .NET compiles if not on Windows
Build 1.0.26 (26 Apr 08)
- Require f suffix for float literals
- Decimal type and literal syntax
- Decimal API enhancements: InStream, OutStream, Num, Str
- This return types
- Update APIs to use return This return
- Fix Firefox3 form handling
- Allow this and super keywords in string interpolation
- Fix various fandoc bugs seen on discussion forum
Build 1.0.27 (28 May 08)
- Fix this return for mixins
- Sanity check for bootstrap build
- sys::MimeType, Uri.mimeType, File.mimeType
- New email pod for MIME and SMTP support
- Charset.make => fromStr (now serializable simple)
- Thread.isService, findService
- Fix fandoc blockquotes
- Native fields
- Allow non-storage fields in const class
- Fix constructor, field init ordering
- Allow single statement for try, catch, finally
- Log.setLevel() => Log.modified
- File.setModified() => File.modified
Build 1.0.28 (25 Jun 08)
- Fix bug in threading flow control
- Map.def
- Update unix scripts to use bash
- Fix timezone on unix when GMT offset
- Require call open paren on same line
- With-blocks support implicit call to add
- Support @collection facet in readObj and writeObj
- C# fixes including filtered catch blocks
- Launcher exe and bash support for lib/java/ext
- Fix closures inside once methods
- Improved support for calling main
- Rename some of the shortcut operators methods
- New fwt pod which wraps SWT
Build 1.0.29 (18 Jul 08)
- New isnot operator
- New null convenience operators: ?: ?. ?->
- New FWT widgets: WebBrowser, Text, InsetPane, SashPane
- FWT graphics: Pen, Brush, Gradient
- FWT serialization support
- New icons pod
- Web view priorities
- Require indexing open bracket on same line
- Allow |->Int| to fit |->Void|
- Sys.idHash
- List.findIndex, indexSame, containsSame, containsAllSame, removeSame
- Pod.log, Type.log
- Str.split(Str) => Str.split(Int,Bool)
- Compiler implicitly generates toImmutable for const List/Map/Type fields
Build 1.0.30 (30 Jul 08)
- Short construction call syntax Type(args)
- FWT widgets: Combo, Tree, RichText
- fwt::Command
- GridPane enhanced, see tab in demo
- File.listDirs, listFiles, walk, osRoots
- Expand auto-cast to include any assignable type
- Weblet.doGet,doPost,... => Weblet.onGet,onPost,...
- webapp::Widget API changes
- Add field default to fandoc
- Change Uri.name to return "" instead of null
- Rework sample code apps/ to examples/
- List.binarySearch
- New type literal syntax: Type#
- Slot literals: Type#slot or #slot
Build 1.0.31 (24 Aug 08)
- New leading whitespace rules for multi-line Str literals
- Upgrade SWT to 3.4
- Using statement support in serialization files
- List.removeRange
- Range.toList
- Str.containsChar, trimStart, trimEnd, numNewlines, splitLines
- StrBuf.join
- Relax rules for const field types to allow Obj, Obj[], Obj:Obj
- Change fwt callbacks to be EventListeners
- Enhance fwt eventing
- Key eventing and accelerators
- New fwt::CommandStack API
Build 1.0.32 (20 Sep 08)
- Remove support for old type literal syntax
- Add adm/tools with fan support for various editors
- Remove haven pod
- Fix thread queue notify bug
- Fix infinite loop in compiler bug
- Fix race condition loading $Pod class
- Fix win32 launchers to not require .NET
- Fix compiler handling of unparameterized generic types like List
- Fix adm/unixsetup script (mostly)
- Breaking change to Uri.get (inserted base parameter before checked)
- Breaking change Locale.prop -> get
- Process API enhanced: join, out, err, in, mergeErr, and env
- Int.equalsIgnoreCase
- Str.indexIgnoreCase, indexrIgnoreCase
- List.eachBreak, flatten
- Map.eachBreak
- Uri.sliceToPathAbs, isPathOnly
- Pod.uri, loc
- Type.loc
- File.normalize now includes file: scheme
- Require Namespace uris to be path only
- New UriScheme naming design
- New docLang chapters: Naming, Conventions
- New docTool chapters: Flux
- New docLib chapters: Flux
- Refactor native methods in fwt
- fwt::Command localization
- fwt::Font metrics
- New fwt::Dialog API
- New fwt::Desktop and Monitor APIs
- New fwt::TextWidget base class for Text and RichText
- New fwt text selection and clipboard APIs
- Flux prototype!
Build 1.0.33 (13 Oct 08)
- Java runtime: fan.sys.Obj -> java.lang.Object
- Java runtime: fan.sys.Bool -> java.lang.Boolean
- Java runtime: fan.sys.Int -> java.lang.Long
- Java runtime: fan.sys.Float -> java.lang.Double
- Java runtime: fan.sys.Num -> java.lang.Number
- Java runtime: fan.sys.Decimal -> java.math.BigDecimal
- Nullable type support
- Support for parameterized fields (sys::Map.def)
- Add build::CreateZip task, buildall.fan handles dist zip
- Fix RichText editor home/end to take whitespace into account
- Change fwt::Image constructors
- Add icons to flux history items
Build 1.0.34 (24 Oct 08)
- Roll fcode version for value-type support
- Bool, Int, Float are now value types
- Disallow covariance with value types
- Disallow === !== is isnot as operators to be used againt value types
- Java runtime maps sys::Boolean to primitive boolean
- Java runtime maps sys::Int to primitive long
- Java runtime maps sys::Float to primitive double
- Change semanatics of Float.nan compare to match JVM
Build 1.0.35 (14 Nov 08)
- Update documentation for nullable and value types
- New docLib::Fwt chapter
- New docLang::Deployment chapter
- Turn on non-null coercion runtime checking
- Allow function types const fields with implicit toImmutable
- Allow any list or map type as const field via implicit toImmutable
- New xml API
- OutStream.writeXml
- Fix compiler checking of internal types
- Fix compiler auto-casting of function types
- Fix compiler to disallow empty try blocks
- Fix compiler to allow for(...); and while(...);
- Fix compiler to include fandoc for enum defs
- Enhance docCompiler to show overridden slot and inherited fandoc
- Fwt: file and directory dialogs
- Fwt: RichText line background styling
- Flux: persist undo/redo stack between hyperlinks
- Flux: allow drag and drop of files to hyperlink
- Flux: highlight current line
- Flux: show short filenames in console instead of full paths
Build 1.0.36 (13 Dec 08)
- Java FFI
- Use
dotnet
to denote .NET instead ofnet
- Initial json API
- Remove compiler support for for(...); and while(...);
- DateTime toJava, fromJava
- Reorganize icons
- Fan launcher -fcodeDump option to disassemble a Fan script
- List, Map eachBreak -> eachWhile
- Emacs support adm/tools/emacs/fan-mode.el
Build 1.0.37 (11 Jan 09)
- Java FFI: array overrides of methods which use primitives or arrays
- Java FFI: coerce sys::Func to Java interface with one abstract method
- New sys::Date and sys::Time APIs
- New sys::Unit API
- New sys::Uuid API
- New web::WebClient API
- Wisp support for chunked transfers and persistent connections
- Str isAlpha, isAlphaNum
- OutStream sync
- Allow closures in constructor to set const fields (same for static ctors)
- Change Obj.trap arg signature to Obj?[]?
- Flux enhancements for goto into, find, find in files
- Protection checks to prevent internal types being used in public APIs
- Expose sys::File ctor to allow new implementations
- Optimize common MimeTypes to be interned
- BuildScript dumpenv target
Build 1.0.38 (15 Feb 09)
- Str: in, toBuf, toDisplayName, fromDisplayName
- Buf: dup, fill, hmac
- Duration, DateTime, Date, Time: toIso, fromIso
- Map: ordered, join, setList, addList
- Test: verifyNull, verifyNotNull
- Type: make support for defVal
- Type: emptyList
- MimeType: charset, parseParams
- Add toCode: Bool, Int, Float, Decimal, Uri, Duration, DateTime, Date, Time, List, Map
- Unsafe wrapper class
- New compilerJavascript and webappClient APIs
- New obix API
- Rework webapp APIs
- Doc compiler support for @nodoc facet
- Web Cookie refactor into const class
- Web Cookie enforce name and value chars and use quoted string value
- Web Cookie fix use both max-age and expires for cookies for IE and Safari
- More linux timezone work arounds
- Json fix for parsing top level array
- Json.write API change
- Flux add findInFiles into context popup of dirs
- Flux fix undo/redo stack to check point on save
- Flux syntax definition for ActionScript
- Compiler allow single statement expression based return
- Compiler allow const field to override a method
- Compiler fix when local variable shadows field with storage operator
- Compiler fix when using null safe call with no-leave primitive return
- Compiler fix when calling super with default params results in stack overflow
- Compiler fix allow mixins use const keyword
- Compiler fix for once methods used with subclasses in same pod
- Compiler fix for construction call against fromStr in super class
- Compiler fix to check for dup method params and dup enum defs
Build 1.0.39 (25 Mar 09)
- Remove dynamic types
- Redesign sql::Row API
- Int: minValue/maxValue -> minVal/maxVal
- Uuid: removed createdTicks and created
- Bool: toLocale
- Date: toDateTime, midnight, plus, minus
- DateTime: midnight, nowTicks
- Decimal: toLocale
- Duration: abs
- Float: toLocale
- Int: toLocale, toDuration, toDateTime
- List: fill
- Num: localeDecimal, localeGrouping, localePercent, localeInf, localeNaN
- Map: any, all
- Str: padr, padl, toLocale
- Time: toDateTime, toDuration, fromDuration
- Thread: loopCoalescing, stop/kill
- Type: toLocale
- Uri: toLocale
- Tree: nodeAt
- Table: rowAt, colAt
- BuildScript: defaultTarget now defaults to first script declared
- BuildPod: rename compileJavascript to javascript
- WebOutStream: css->includeCss, js->includeJs, style, script
- WebOutStream: change title,h1,h2,h3,h4,h5,h6 to use separate start/end tags
- Reflection fix to inherit concrete slot over abstract slot if two choices
- Fix buildall.pods to bootstrap correctly on Unix
Build 1.0.40 (2 Apr 09)
- Added sys::Actor API
- Added sys::Service API
- Renamed UnknownThreadErr to UnknownServiceErr
- Refactor fand to work with Services
- SqlService API changed from Thread to Service
- Image resize
- ScrollBar added
- ProgressBar.value renamed val
Build 1.0.41 (11 Apr 09)
- It-Blocks
- Comma operator for it.add
- Closure type inference
- Require return expr to be on same line
- Duration: minVal, maxVal
- Move jfan to sys/java; nfan to sys/dotnet
- Change exclusive range from "..." to "..<"
- Disallow it-block: Point, Size, Rect, Insets, Hints
- Require it-block: Font
- Rename def => defVal: Point, Size, Rect, Insets, Hints, Pen
- Rename Locale.with => use
Build 1.0.42 (13 May 09)
- Tweaks to flux
- Loosen restrictions on it/this ambiguity errors
- webappClient::Effect
- Disallow nullable types in
as
expression - Fix
as
with generics to work like cast - Rename ActorGroup to ActorPool
- Move Point, Size, Rect, Hints, Pen, Color, Brush to gfx
- Color/Font system color/font methods moved to Desktop
- Date: isYesterday, isToday, isTomorrow
- DateTime: nowUnique
- Window: showTrim, activate
- List: eachRange
- Duration: nowTicks
- StrBuf.grow => capacity
- InStream.makeForStr => Str.in
- OutStream.makeForStrBuf => StrBuf.out
- Func/Method call => callList
- Func/Method callx => call
- fanx.sys.Interop utility methods
- #518: Problem in check of reflective field set
- #520: Flux Last Line
- #527: Func.curry with optional parameters
- #528: Compiler bug - duplicate slot x$num
- #529: Private method in mixin bad classfile
- #530: Ctor bug with default params
- #531: Allow curry of private methods
- #533: Fandoc bug
- #534: RichText scrollbar bug
- #542: Compiler - Internal class cast error
- #543: Compiler - Chaining dynamic calls
- #544: Move graphics API out of fwt
- #545: Compiler bug: using ... as ...
- #546: Packaging of Fan
- #547: WebOutStream - FavIcon tag
- #548: Flux bug - tabstops not quite right
- #551:
it
and Str interpolation - #554: docCompiler bug with |,| signatures
- #559: API request: sys::StrBuf.remove(Range)
- #561: Compiler: Internal error - auto-cast of Func
- #574: Request: Range.random, List.random
- #591: Flux: View menu in NavBar for .fan files doesn't show
- #592: Proposal: Method/Func call
Build 1.0.43 (28 May 09)
- FWT port to JavaScript
- Change default for value type local variables
- Remove support for "..." range literals (replaced with "..<")
- Add register parameter to sys::Log.make
- ObixClient
- #429: Triple Quoted Strings and DSL Str/Regex
- #438: DSL Proposal
- #532: Improved detection immutable closures
- #578: Uri Interpolation
- #595: Definite assignment of non-nullable fields
Build 1.0.44 (25 Jun 09)
- Fix bug in WebReq.absUri
- Fix webappClient to use Uri instead of Str
- Remove old webServlet code
- Regex.glob
- Flux Goto File command
- DateTime.toHttpStr use toLocale to avoid race conditions
- FWT Canvas widget (Widget.make is now internal)
- Graphics removed clipRect, drawPoint
- fwt::Command.invoke final, override invoked now
- Int.pow
- List on JVM now uses backing store with typed array
- Json fixes
- Fix Wisp HTTP pipeling bug when no request body
- JavaScript compiler enhancements for script support
- 64-bit integer emulation in JavaScript
- #612: Change signature of List.map and Map.map
- #617: Compiler bug - traceback in switch with missing case expression
- #618: Ambiguous method call on java object
- #629: NoClassDefFoundError when accessing public static final field with JavaFFI
Build 1.0.45 (24 Jul 09)
- Roll fcode version code 0x01_00_0034 => 0x01_00_0045
- LoadSymbol opcode
- Change field storage operator from "@" => "*"
- fwt::Canvas support in IE using JavaFX
- DateTime,TimeZone support for JavaScript
- Fix Int.fromStr to work for signed 64-bit integers with radix 16
- Split webappClient into sys and dom
- Change all uses of
javascript
=>js
- Fix Str indexIgnoreCase/indexrIgnoreCase bug
- Switch to new, more compressed timezone database format
- #425: Separate pod install location
- #558: DocCompiler - Facet Documentation
- #564: Symbols
- #606: Partial closure type inference?
- #620: Dynamically controlled function types
- #651: Type description of inferred function types
- #657: Bug in docs with default arguments
- #659: Rename sys::Namespace to sys::UriSpace
- #663: wisp sluggish via apachebench
- #664: Nullable params w/out name in func sig