Nu, GNUstep, and Debian Linux

I have an experimental Debian package that contains a Nu interpreter built for Debian Etch (4.0). This Nu is built to use the GNU Objective-C runtime and GNUstep-base, the GNUstep open-source equivalent of Apple’s Foundation classes.

With GNUstep support, “NuFound” (aka libFoundation) support is dropped. GNUstep is actively maintained and adds at least one very important feature (UTF-8 support) that is missing in libFoundation.

All source code changes for this build are now in my Nu github repository and I will soon also add a nuke task to build the Debian package.

Please be aware that this is very new. So far it has only been tested in a VMware image, but because it is based completely on stock Debian components, I think it will hold up well.

A link and more details are below.

Downloading

To download and install the package, run the following in your Debian installation:

tim@debian:~$ wget http://programming.nu/nu-0.3.3-1_i386.deb
--09:58:48--  http://programming.nu/nu-0.3.3-1_i386.deb
           => `nu-0.3.3-1_i386.deb'
Resolving programming.nu... 157.22.130.35
Connecting to programming.nu|157.22.130.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 359,012 (351K) [text/html]

100%[================================>] 359,012    479.77K/s

09:58:59 (478.03 KB/s) - `nu-0.3.3-1_i386.deb' saved [359012/359012]

tim@debian:~$ sudo dpkg -i nu-0.3.3-1_i386.deb 
Selecting previously deselected package nu.
(Reading database ... 29333 files and directories currently installed.)
Unpacking nu (from nu-0.3.3-1_i386.deb) ...
Setting up nu (0.3.3-1) ...
If you get messages abut missing dependencies, run the following to resolve them:
tim@debian:~$ sudo apt-get -f install

Then type “nush” and give it a try!

Unit Tests
The nuke test results for this build are below:
tim@debian:~/work/nu$ nuke test
Using Nukefile with target test.
nuke: running in /home/tim/work/nu
nuke: ./nush tools/nutest test/test_*.nu

TestArray: running
--- testCreate
--- testEach
--- testEachInReverse
--- testEachWithIndex
--- testIndexing
--- testSortedArrayUsingBlock
TestArray: completed 6 tests/28 assertions/0 failures/0 errors

TestBridge: running
--- testFunctions
TestBridge: completed 1 tests/4 assertions/0 failures/0 errors

TestCharacters: running
--- testEscapedCharacters
--- testFourCharacterIntegers
--- testHexEscapedCharacters
--- testOctalEscapedCharacters
--- testRegularCharacters
TestCharacters: completed 5 tests/19 assertions/0 failures/0 errors

TestClassMethodMissing: running
--- testCustomSubclassClassMethodMissing
TestClassMethodMissing: completed 1 tests/2 assertions/0 failures/0 errors

TestClasses: running
--- testAddClassMethod
--- testAddInstanceMethod
--- testAutomaticClassCreationFromNu
--- testAutomaticClassCreationFromObjC
--- testMetaVariables
TestClasses: completed 5 tests/6 assertions/0 failures/0 errors

TestClosures: running
--- testAccumulator
--- testScoping
TestClosures: completed 2 tests/10 assertions/0 failures/0 errors

TestComparison: running
--- testGreaterThan
--- testGreaterThanOrEqual
--- testLessThan
--- testLessThanOrEqual
TestComparison: completed 4 tests/16 assertions/0 failures/0 errors

TestControl: running
--- testCase
--- testCond
--- testFor
--- testForBreak
--- testForContinue
--- testIf
--- testLoopMacro
--- testUnless
--- testUntil
--- testUntilBreak
--- testUntilContinue
--- testWhile
--- testWhileBreak
--- testWhileContinue
TestControl: completed 14 tests/27 assertions/0 failures/0 errors

TestDictionary: running
--- testAutomaticAccessor
--- testCreate
--- testEach
--- testLookupWithDefault
--- testSet
TestDictionary: completed 5 tests/19 assertions/0 failures/0 errors

TestEnumerable: running
--- testEach
--- testEachWithIndex
--- testFind
--- testFindWithInteger
--- testMap
--- testMapSelector
--- testReduce
--- testSelect
--- testSelectWithInteger
TestEnumerable: completed 9 tests/13 assertions/0 failures/0 errors

TestErrors: running
--- testCarOnAtom
--- testCdrOnAtom
--- testIncorrectNumberOfBlockArguments
--- testMisplacedCmethod
--- testMisplacedImethod
--- testMisplacedIvar
--- testMisplacedIvars
--- testNoInstanceVariable
--- testParseError
--- testUndefinedClass
--- testUndefinedSuperClass
--- testUndefinedSymbol
TestErrors: completed 12 tests/12 assertions/0 failures/0 errors

TestExceptions: running
--- testRangeException
--- testUserRaisedException
TestExceptions: completed 2 tests/8 assertions/0 failures/0 errors

TestInterface: running
--- testParser
TestInterface: completed 1 tests/4 assertions/0 failures/0 errors

TestList: running
--- testAll
--- testAny
--- testApply
--- testBasicOperators
--- testCompare
--- testIndexing
--- testLength
--- testList?
--- testMap
--- testNull?
--- testObjectAtIndex
--- testPair?
--- testSort
TestList: completed 13 tests/75 assertions/0 failures/0 errors

TestListEnumerable: running
--- testEach
--- testEachWithIndex
--- testFind
--- testFindWithInteger
--- testMap
--- testMapSelector
--- testReduce
--- testSelect
--- testSelectWithInteger
TestListEnumerable: completed 9 tests/13 assertions/0 failures/0 errors

TestMacros: running
--- testBrokenFactorialMacro
--- testFactorialFunction
--- testFactorialMacro
--- testGensymInterpolation
--- testIvarAccessorMacro
--- testMacroImplementation
TestMacros: completed 6 tests/7 assertions/0 failures/0 errors

TestMath: running
--- testAbs
--- testArithmeticOperators
--- testBooleanOperators
--- testCbrt
--- testCeil
--- testComparisonOperators
--- testCos
--- testExp
--- testExp2
--- testFloor
--- testIntegerDivide
--- testIntegerMod
--- testLog
--- testLog10
--- testLog2
--- testRaiseNumber
--- testRound
--- testShiftOperators
--- testSin
--- testSqrt
--- testSquare
TestMath: completed 21 tests/105 assertions/0 failures/0 errors

TestMemory: running
--- testCreationInNuUsingObjC
--- testCreationInObjCUsingNu
--- testCreationInObjCUsingNuWithOwnership
--- testCreationInObjCUsingObjC
--- testIvarReleaseOnDealloc
TestMemory: completed 5 tests/11 assertions/0 failures/0 errors

TestNu: running
2008-12-14 09:52:34.762 nush[3131] warning: assert is unavailable
2008-12-14 09:52:34.763 nush[3131] warning: assert is unavailable
--- testAssert
--- testAtom?
--- testSymbol?
--- testThrow*
TestNu: completed 4 tests/14 assertions/0 failures/0 errors

TestNumbers: running
--- testDownTo
--- testTimes
--- testUpTo
TestNumbers: completed 3 tests/7 assertions/0 failures/0 errors

TestOperators: running
--- testAddOperator
--- testIfOperator
--- testIfSugaredOperator
--- testMaxOperator
--- testMinOperator
--- testSubtractOperator
--- testUnlessOperator
--- testUnlessSugaredOperator
TestOperators: completed 8 tests/78 assertions/0 failures/0 errors

TestParser: running
--- testParseHereStrings
--- testParseMultilineRegularExpressions
TestParser: completed 2 tests/10 assertions/0 failures/0 errors

TestPropertyLists: running
--- testSerialization
TestPropertyLists: completed 1 tests/1 assertions/0 failures/0 errors

TestReferences: running
--- testReturnByReference
TestReferences: completed 1 tests/1 assertions/0 failures/0 errors

TestRegex: running
--- testExtendedRegex
--- testMultipleCaptures
--- testRegex
--- testRegexWithOperator
TestRegex: completed 4 tests/7 assertions/0 failures/0 errors

TestReturn: running
--- testReturnFromMethod
--- testReturnNested
--- testReturnValue
--- testReturnVoid
TestReturn: completed 4 tests/14 assertions/0 failures/0 errors

TestStrings: running
--- testEscapedHereStrings
--- testEscapedRepresentations
--- testEscapedStrings
--- testExplicitlyEscapedHereStrings
--- testExplicitlyEscapedStrings
--- testExplicitlyUnescapedHereStrings
--- testExplicitlyUnescapedStrings
--- testHexEscapedHereStrings
--- testHexEscapedStrings
--- testInterpolation
--- testLineSplitting
--- testOctalEscapedHereStrings
--- testOctalEscapedStrings
--- testStringEach
TestStrings: completed 14 tests/54 assertions/0 failures/0 errors

TestSwizzling: running
--- testClassMethodSwizzling
--- testInstanceMethodSwizzling
TestSwizzling: completed 2 tests/12 assertions/0 failures/0 errors

TestSystem: running
--- testSystem
TestSystem: completed 1 tests/3 assertions/0 failures/0 errors

TestTemplates: running
--- testCodeSubstitution
--- testCountingSubstitution
TestTemplates: completed 2 tests/2 assertions/0 failures/0 errors

TestTruth: running
--- testFalse
--- testTrue
TestTruth: completed 2 tests/8 assertions/0 failures/0 errors

TestTypes: running
--- testVoidMethodReturnTypes
TestTypes: completed 1 tests/2 assertions/0 failures/0 errors

TestVarArgs: running
--- testArrayOperator
--- testDictOperator
--- testSimple
TestVarArgs: completed 3 tests/9 assertions/0 failures/0 errors

All: completed 173 tests/601 assertions/0 failures/0 errors

SUCCESS (0 failures, 0 errors)

2 comments ↓

#1Christoffer Sawicki on 2008-12-18 at 05:25:53 America/Los_Angeles

Great news!

...but I have a little complaint: Your package is not policy compliant. The reasons are many, but installing files into /usr/local is a big no-no. Read the Debian Policy Manual and use lintian or linda if you want to make it compliant.

By the way: Debian Etch was not released on 2008-10-23, it was updated on that day. The release was on 2007-04-08.

#2Tim on 2008-12-21 at 14:55:09 America/Los_Angeles

Christopher,

Thanks—I’ll make those corrections.

Tim

Leave a Comment (sign in with Twitter)