I ran a test to see the maximum number of elements swift could handle before 
crashing and the numbers are

swift 2.2: 1213
swift 3-dev (mar 16 snapshot): 976

I don't know why swift 3 is lower than swift 2.2, but I'm guessing its due to 
the same underlying cause, which is running out of stack space. If the swift 3 
snapshot was compiled with different flags than 2.2 then swift 3 could have 
different stack usage properties, and thus run out of stack space quicker.

Here is a python script that generates a dictionary literal with some number of 
elements and runs swift on it, then does binary search to find the maximum 
number of elements before swift crashes.

#!/usr/bin/env python

def make_swift(n):
    def element(x):
        return '"x%d": "0"' % x

    data = "let n = [";
    data += ',\n'.join([element(x) for x in xrange(0, n)])
    data += "]"

    path = 'test-%d.swift' % n
    file = open(path, 'w')
    file.write(data)
    file.write('\n')
    file.close()
    return path

def translate(path):
    print "Testing %s" % path
    import subprocess
    out = subprocess.call(['swift', path])
    if out == 0:
        print "  ok"
    else:
        print "  failed"
    return out == 0

def test(n):
    path = make_swift(n)
    return translate(path)

def binary_search(low, high):
    while low < high:
        middle = (low + high) / 2
        if middle == low:
            low = high
            middle = high
        if test(middle):
            low = middle
        else:
            high = middle
    return middle

#test(5000)

low = 1
high = 10
while test(high):
    low = high
    high *= 2

last_failed = binary_search(low, high)
print "Failed at %d" % last_failed

On 03/22/2016 09:03 PM, Kyle Jessup via swift-dev wrote:

Ok I will test with swift 3, but just to avoid any confusion I am not a 
developer on PerfectLib.



I am! Admittedly, that dictionary contains many obsolete mime type mappings 
which could be pruned (anyone serving Lotus 1-2-3 files?). However, 816 items 
is not an absurdly large number so it’s likely someone else would have run into 
this in the near future.

The code does successfully compile for me using the release 2.2 version on my 
VMWare based Ubuntu 15 system. It also compiles using 3.0.

-Kyle



I was just using that file as a test case for my application that is based on 
the swiftc code base. My application is designed to consume arbitrary swift 2.2 
code. If there is a problem with swift 3 then I suppose it can be fixed, but if 
swift 3 has no issues then it looks like I have few options for remediation.

On 03/22/2016 12:56 PM, Dmitri Gribenko wrote:

On Tue, Mar 22, 2016 at 12:17 PM, Rafkind, Jon via swift-dev
<swift-dev@swift.org><mailto:swift-dev@swift.org><mailto:swift-dev@swift.org><mailto:swift-dev@swift.org>wrote:


I have to support swift 2.2 for the time being because I have to support the 
current release of xcode. I will upgrade to swift 3 when it is released.



I understand your motivation, but I would still recommend trying to
update your code (on a branch) to Swift 3. This way you will get a
preview of the changes, would be able to provide feedback, and maybe
even find issues with the changes that we are making before Swift 3 is
finalized in a release. There is benefit for both your library and
the Swift community.

Dmitri



--





_______________________________________________
swift-dev mailing list
swift-dev@swift.org<mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev



--
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to