Skip to content

Commit f2ff87e

Browse files
Merge branch 'master' into code-compl-precedencegroups
2 parents d2e7c78 + dd711e8 commit f2ff87e

File tree

436 files changed

+338863
-77576
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

436 files changed

+338863
-77576
lines changed

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,45 @@ Swift 4.2
128128

129129
### 2018-09-17 (Xcode 10.0)
130130

131+
* [SE-0202][]
132+
133+
The standard library now provides a unified set of randomization functionality.
134+
Integer types, floating point types, and Bool all introduce a new static
135+
method that creates a random value.
136+
137+
```swift
138+
let diceRoll = Int.random(in: 1 ... 6)
139+
let randomUnit = Double.random(in: 0 ..< 1)
140+
let randomBool = Bool.random()
141+
```
142+
143+
There are also additions to select a random element from a collection or
144+
shuffle its contents.
145+
146+
```swift
147+
let greetings = ["hey", "hello", "hi", "hola"]
148+
let randomGreeting = greetings.randomElement()! // This returns an Optional
149+
let newGreetings = greetings.shuffled() // ["hola", "hi", "hey", "hello"]
150+
```
151+
152+
Core to the randomization functionality is a new `RandomNumberGenerator`
153+
protocol. The standard library defines its own random number generator
154+
called `SystemRandomNumberGenerator` which is backed by a secure and
155+
thread-safe random number generator on each platform. All the randomization
156+
functions have a `using:` parameter that take a `RandomNumberGenerator` that
157+
users can pass in their own random number generator.
158+
159+
```swift
160+
struct MersenneTwister: RandomNumberGenerator {
161+
func next() -> UInt64 {
162+
// implementation
163+
}
164+
}
165+
166+
var mt = MersenneTwister()
167+
let diceRoll = Int.random(in: 1 ... 6, using: &mt)
168+
```
169+
131170
* [SE-0194][]
132171

133172
The new CaseIterable protocol describes types which have a static

CMakeLists.txt

Lines changed: 12 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ else()
592592
set(SWIFT_HOST_VARIANT_ARCH_default "x86_64")
593593
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
594594
set(SWIFT_HOST_VARIANT_ARCH_default "itanium")
595-
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
595+
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(x86|i686)")
596596
set(SWIFT_HOST_VARIANT_ARCH_default "i686")
597597
else()
598598
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
@@ -639,78 +639,52 @@ endif()
639639

640640
if("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX")
641641

642-
set(CMAKE_EXECUTABLE_FORMAT "ELF")
643642
set(SWIFT_HOST_VARIANT "linux" CACHE STRING
644643
"Deployment OS for Swift host tools (the compiler) [linux].")
645644

646-
# Calculate the host triple
647-
if("${SWIFT_HOST_TRIPLE}" STREQUAL "")
648-
if("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "x86_64")
649-
set(SWIFT_HOST_TRIPLE "x86_64-unknown-linux-gnu")
650-
elseif("${SWIFT_HOST_VARIANT_ARCH}" STREQUAL "aarch64")
651-
set(SWIFT_HOST_TRIPLE "aarch64-unknown-linux-gnu")
652-
elseif("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "(powerpc64|powerpc64le)")
653-
set(SWIFT_HOST_TRIPLE "${SWIFT_HOST_VARIANT_ARCH}-unknown-linux-gnu")
654-
elseif("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "s390x")
655-
set(SWIFT_HOST_TRIPLE "s390x-unknown-linux-gnu")
656-
elseif("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "(armv6|armv7)")
657-
set(SWIFT_HOST_TRIPLE "${SWIFT_HOST_VARIANT_ARCH}-unknown-linux-gnueabihf")
658-
else()
659-
message(FATAL_ERROR "Unable to calculate triple for linux host on ${SWIFT_HOST_VARIANT_ARCH}")
660-
endif()
661-
endif()
662-
663645
# Should we build the standard library for the host?
664646
is_sdk_requested(LINUX swift_build_linux)
665647
if(swift_build_linux)
666-
configure_sdk_unix(LINUX "Linux" "linux" "${SWIFT_HOST_VARIANT}" "${SWIFT_HOST_VARIANT_ARCH}" "${SWIFT_HOST_TRIPLE}" "/")
648+
configure_sdk_unix("Linux" "${SWIFT_HOST_VARIANT_ARCH}")
667649
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
668650
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
669651
endif()
670652

671653
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "FREEBSD")
672654

673-
set(CMAKE_EXECUTABLE_FORMAT "ELF")
674655
set(SWIFT_HOST_VARIANT "freebsd" CACHE STRING
675656
"Deployment OS for Swift host tools (the compiler) [freebsd].")
676657

677-
# FIXME: Using the host OS version won't produce correct results for
678-
# cross-compilation.
679-
string(REPLACE "[-].*" "" FREEBSD_SYSTEM_VERSION ${CMAKE_SYSTEM_VERSION})
680-
message(STATUS "FreeBSD Version: ${FREEBSD_SYSTEM_VERSION}")
681-
configure_sdk_unix(FREEBSD "FreeBSD" "freebsd" "freebsd" "x86_64"
682-
"x86_64-unknown-freebsd${FREEBSD_SYSTEM_VERSION}" "/")
658+
configure_sdk_unix("FreeBSD" "${SWIFT_HOST_VARIANT_ARCH}")
683659
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
684-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
660+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
685661

686662
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "CYGWIN")
687663

688-
# set(CMAKE_EXECUTABLE_FORMAT "ELF")
689664
set(SWIFT_HOST_VARIANT "cygwin" CACHE STRING
690665
"Deployment OS for Swift host tools (the compiler) [cygwin].")
691666

692-
configure_sdk_unix(CYGWIN "Cygwin" "cygwin" "cygwin" "x86_64" "x86_64-unknown-windows-cygnus" "/")
667+
configure_sdk_unix("Cygwin" "${SWIFT_HOST_VARIANT_ARCH}")
693668
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
694-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
669+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
695670

696671
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WINDOWS")
697672

698673
set(SWIFT_HOST_VARIANT "windows" CACHE STRING
699674
"Deployment OS for Swift host tools (the compiler) [windows].")
700675

701-
configure_sdk_windows(WINDOWS "Windows" "msvc" "${SWIFT_HOST_VARIANT_ARCH}")
676+
configure_sdk_windows("Windows" "msvc" "${SWIFT_HOST_VARIANT_ARCH}")
702677
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
703678
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
704679

705680
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "HAIKU")
706681

707-
set(CMAKE_EXECUTABLE_FORMAT "ELF")
708682
set(SWIFT_HOST_VARIANT "haiku" CACHE STRING
709683
"Deployment OS for Swift host tools (the compiler) [haiku].")
710684

711-
configure_sdk_unix(HAIKU "Haiku" "haiku" "haiku" "x86_64" "x86_64-unknown-haiku" "/")
685+
configure_sdk_unix("Haiku" "${SWIFT_HOST_VARIANT_ARCH}")
712686
set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
713-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "x86_64")
687+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
714688

715689
elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*)")
716690

@@ -761,16 +735,10 @@ if(swift_build_android AND NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
761735
message(FATAL_ERROR "A Darwin or Linux host is required to build the Swift runtime for Android")
762736
endif()
763737

764-
if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND NOT swift_build_osx) OR
765-
("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND NOT swift_build_linux))
766-
set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID")
767-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
768-
endif()
769-
770738
if("${SWIFT_SDK_ANDROID_ARCHITECTURES}" STREQUAL "")
771-
set(SWIFT_SDK_ANDROID_ARCHITECTURES armv7;aarch)
739+
set(SWIFT_SDK_ANDROID_ARCHITECTURES armv7;aarch64)
772740
endif()
773-
configure_sdk_unix(ANDROID "Android" "android" "android" "${SWIFT_SDK_ANDROID_ARCHITECTURES}" "" "")
741+
configure_sdk_unix("Android" "${SWIFT_SDK_ANDROID_ARCHITECTURES}")
774742
endif()
775743

776744
# Should we cross-compile the standard library for Windows?
@@ -779,7 +747,7 @@ if(swift_build_windows AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
779747
if("${SWIFT_SDK_WINDOWS_ARCHITECTURES}" STREQUAL "")
780748
set(SWIFT_SDK_WINDOWS_ARCHITECTURES aarch64;armv7;i686;x86_64)
781749
endif()
782-
configure_sdk_windows(WINDOWS "Windows" "msvc" "${SWIFT_SDK_WINDOWS_ARCHITECTURES}")
750+
configure_sdk_windows("Windows" "msvc" "${SWIFT_SDK_WINDOWS_ARCHITECTURES}")
783751
endif()
784752

785753
if("${SWIFT_SDKS}" STREQUAL "")

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
|**[Ubuntu 16.04 (TensorFlow with GPU)](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/x86_64_ubuntu_16_04_tensorflow_gpu.json)** | x86_64 |[![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-tensorflow-gpu/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-tensorflow-gpu)|
2626

2727

28-
**Welcome to Swift!**
28+
## Welcome to Swift
2929

3030
Swift is a high-performance system programming language. It has a clean
3131
and modern syntax, offers seamless access to existing C and Objective-C code

benchmark/scripts/compare_perf_tests.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ class `ReportFormatter` creates the test comparison report in specified format.
3434
import sys
3535
from bisect import bisect, bisect_left, bisect_right
3636
from collections import namedtuple
37-
from decimal import Decimal, ROUND_HALF_EVEN
38-
from math import sqrt
37+
from math import ceil, sqrt
3938

4039

4140
class Sample(namedtuple('Sample', 'i num_iters runtime')):
@@ -143,15 +142,12 @@ def max(self):
143142
return self.samples[-1].runtime
144143

145144
def quantile(self, q):
146-
"""Return runtime of a sample nearest to the quantile.
145+
"""Return runtime for given quantile.
147146
148-
Explicitly uses round-half-to-even rounding algorithm to match the
149-
behavior of numpy's quantile(interpolation='nearest') and quantile
150-
estimate type R-3, SAS-2. See:
147+
Equivalent to quantile estimate type R-1, SAS-3. See:
151148
https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample
152149
"""
153-
index = int(Decimal((self.count - 1) * Decimal(q))
154-
.quantize(0, ROUND_HALF_EVEN))
150+
index = max(0, int(ceil(self.count * float(q))) - 1)
155151
return self.samples[index].runtime
156152

157153
@property

benchmark/scripts/test_compare_perf_tests.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,17 @@ def test_stores_samples(self):
6262
self.assertEquals(s.num_iters, 42)
6363
self.assertEquals(s.runtime, 1000)
6464

65+
def test_quantile(self):
66+
self.assertEquals(self.samples.quantile(1), 1000)
67+
self.assertEquals(self.samples.quantile(0), 1000)
68+
self.samples.add(Sample(2, 1, 1100))
69+
self.assertEquals(self.samples.quantile(0), 1000)
70+
self.assertEquals(self.samples.quantile(1), 1100)
71+
self.samples.add(Sample(3, 1, 1050))
72+
self.assertEquals(self.samples.quantile(0), 1000)
73+
self.assertEquals(self.samples.quantile(.5), 1050)
74+
self.assertEquals(self.samples.quantile(1), 1100)
75+
6576
def assertEqualFiveNumberSummary(self, ss, expected_fns):
6677
e_min, e_q1, e_median, e_q3, e_max = expected_fns
6778
self.assertEquals(ss.min, e_min)
@@ -81,7 +92,7 @@ def test_computes_five_number_summary(self):
8192
self.samples, (1000, 1000, 1050, 1100, 1100))
8293
self.samples.add(Sample(4, 1, 1025))
8394
self.assertEqualFiveNumberSummary(
84-
self.samples, (1000, 1025, 1050, 1050, 1100))
95+
self.samples, (1000, 1000, 1025, 1050, 1100))
8596
self.samples.add(Sample(5, 1, 1075))
8697
self.assertEqualFiveNumberSummary(
8798
self.samples, (1000, 1025, 1050, 1075, 1100))
@@ -447,7 +458,7 @@ def test_results_from_merge_verbose(self):
447458
self.assertTrue(isinstance(result, PerformanceTestResult))
448459
self.assertEquals(result.min, 350815)
449460
self.assertEquals(result.max, 376131)
450-
self.assertEquals(result.median, 363094)
461+
self.assertEquals(result.median, 358817)
451462
self.assertAlmostEquals(result.sd, 8443.37, places=2)
452463
self.assertAlmostEquals(result.mean, 361463.25, places=2)
453464
self.assertEquals(result.num_samples, 8)

benchmark/utils/DriverUtils.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,13 @@ struct BenchResults {
3131
self.stats = self.samples.reduce(into: Stats(), Stats.collect)
3232
}
3333

34-
/// Return sample at index nearest to the `quantile`.
34+
/// Return measured value for given `quantile`.
3535
///
36-
/// Explicitly uses round-half-to-even rounding algorithm to match the
37-
/// behavior of numpy's quantile(interpolation='nearest') and quantile
38-
/// estimate type R-3, SAS-2. See:
36+
/// Equivalent to quantile estimate type R-1, SAS-3. See:
3937
/// https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample
4038
subscript(_ quantile: Double) -> T {
41-
let index = Int(
42-
(Double(samples.count - 1) * quantile).rounded(.toNearestOrEven))
39+
let index = Swift.max(0,
40+
Int((Double(samples.count) * quantile).rounded(.up)) - 1)
4341
return samples[index]
4442
}
4543

cmake/modules/AddSwift.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,13 @@ function(_add_variant_c_compile_flags)
273273
# RTTI as well. This requires a newer SDK though and we do not have
274274
# guarantees on the SDK version currently.
275275
list(APPEND result "-D_HAS_STATIC_RTTI=0")
276+
277+
# NOTE(compnerd) workaround LLVM invoking `add_definitions(-D_DEBUG)` which
278+
# causes failures for the runtime library when cross-compiling due to
279+
# undefined symbols from the standard library.
280+
if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
281+
list(APPEND result "-U_DEBUG")
282+
endif()
276283
endif()
277284

278285
if(CFLAGS_ENABLE_ASSERTIONS)

0 commit comments

Comments
 (0)