If you want improved error handling, feel free to put together a proposal once 
Swift 4 phase 2 is over. A good proposal should take into account the reasons 
Swift's error handling was designed as it currently is 
(https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst 
<https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst>)

Otherwise, if you really need to build a web server framework that can swallow 
any sort of application logic without choking, perhaps Swift as it currently 
stands isn't the best tool for the job.

Best,
Austin

> On Mar 12, 2017, at 12:06 PM, Elijah Johnson <ejrx7...@gmail.com> wrote:
> 
> The problem for using Swift on the server is one of these optionals (or array 
> index out of bounds error, or cast from Int to UInt error) would crash the 
> entire server directing many requests. Granted, thats not Apple’s busininess, 
> but it is pretty much standad in a modern webserver never to crash, and 
> whoever is developing servers will find they don’t have the necessary power 
> to do that. Some languages like PHP have a unique process per-request style, 
> but that phrohibits shared data. One could do the same with Swift, but it 
> would be a major loss.
> 
> Just because Swift is not garbage collected doesn’t mean that you can’t 
> safely unwind the stack and continue execution somewhere. If “bad” developers 
> would start using this as unwanted exceptions, then it can be made inconvient 
> somehow.
> 
> Think about a server that handles 1,000 requests per minute - its going to 
> happen evenutally, even despite testing, and chances are that once it happens 
> it will re-occur - and now the server goes down every minute or even every 
> few seconds and needs an auto-restart loop.
> 
> If we’re going to be talking about “bad developers” as in ones who might once 
> code a bug with an optional or index out of bounds exception, then that is 
> going to be a very high standard and result in a very mild adoption of server 
> side Swift. Maybe it would take off for a while, and then when people realize 
> these things, they will say “thats why everyone writes their server-side code 
> in Java/C#/PHP, etc” and Swift will be a thing for people who need ultra-fast 
> performance on a server.
> 
> Its not really Apple’s business, and clearly you are trying to replace only 
> C++ and not Java/C#, but if you can add a compiler mode with exceptions 
> instead of fatalError(mesage:) calls, that would contribute a lot to making 
> web servers with Swift. Even if you leak the entire call stack, it would 
> still be better than crashing an entire web serer.
> 
> 
> On March 6, 2017 at 9:47:03 PM, Austin Zheng (austinzh...@gmail.com 
> <mailto:austinzh...@gmail.com>) wrote:
> 
>> Swift already is an unmanaged language, and is far closer to C++ than Java. 
>> There is no equivalent to the CLR or JVM and it is trivially easy to call 
>> into C code or the unsafe APIs and do nearly anything that C can do with 
>> regard to direct access to memory.
>> 
>> The force-unwrap operator was never intended to model a Java-style runtime 
>> exception. Instead, it is an assertion which indicates a programmer logic 
>> error. The preferred way to handle an optional at runtime has always been to 
>> use the conditional-unwrapping functionality the language offers. The 
>> correct way to report errors at runtime that aren't due to programmer error 
>> is through the do-try-catch mechanism. Pervasive, unnecessary use of '!' is 
>> a project management and/or developer competence issue, and not something 
>> the language should go out of its way to fix.
>> 
>> Sugaring 'if let' for programmer convenience is something on the commonly 
>> rejected proposals list: 
>> https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md 
>> <https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md>
>> 
>> Regards,
>> Austin
>> 
>> 
>> On Mon, Mar 6, 2017 at 6:27 PM, Elijah Johnson via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> Additionally, not discarding previous comments, one way the language could 
>> be improved is by replacing (or rather augmenting) optional binding with a 
>> faster syntax.
>> 
>> ex.
>> 
>> func test( name : String?, name2 :String? ){
>>      name! , name2! {
>> // inside this block, “name” and “name2” are non-optional
>>     } else {
>>       // no forced unwrapping, just optional else case
>>    }
>> }
>> 
>> Whereas the alternative (current optional binding), requires a re-definition 
>> of variables and an additional “if” operator. Besides the extra characters 
>> involved in typing and reading it, usually variables have specific names 
>> that the user does not want to augument.
>> 
>> func test( name : String?, name2 :String? ){
>>     if let nameUnwrapped = name , let name2Unwrapped = name2 {
>> 
>>     } else {
>>    }
>> }
>> 
>> func test( name : String?, name2 :String? ){
>>     guard let nameUnwrapped = name , let name2Unwrapped = name2 else {
>> 
>>     }
>> 
>> }
>> 
>> The fact that we don’t need a “nameUnwrapped” variable (which is unsightly 
>> and requires refractoring) is one thing that still makes forced unwrapping 
>> still very much a necessary or common part of Swift coding, even where it 
>> could be replaced with optional binding.
>> 
>> 
>> 
>> 
>> On March 6, 2017 at 7:20:40 PM, Elijah Johnson (ejrx7...@gmail.com 
>> <mailto:ejrx7...@gmail.com>) wrote:
>> 
>>> Hi,
>>> 
>>> I’ve been recently considering Swift on the server-side, and there came up 
>>> the question, “what happens when a null optional is forcibly unwrapped?” 
>>> and the answer was clearly that not only would the request crash, but the 
>>> entire server would also crash, since the server itself is/would be also 
>>> written in Swift.
>>> 
>>> I think that this highlights serveral weaknesses in Swift’s “null safety” 
>>> attempts. The first is that there needs to be a way to isolate blocks of 
>>> code so that a “null pointer exception” does not crash the system. I think 
>>> it is fair to say, in the language of Java, that these are really “runtime 
>>> exceptions” and for some reason are being treated as segmentation faults 
>>> would be in C/C++. In my opinion, the existence of these things has the 
>>> ability to bring Swift down below Java and closer to an unamanged language. 
>>> Not really sure why it would ever be desireable, but in terms of 
>>> server-side programming, it is definitely a serious issue.
>>> 
>>> Secondly, Swift’s “null safety” is really completely undermined by these 
>>> “force-unwrap” errors. I agree with the usage of new language features like 
>>> guard, optional binding, etc to remove a null value, but I see this 
>>> force-unwrap as extremely pervasive for a lot of reasons:
>>> 
>>> 1. When porting code from a C style language to Swift, force-unwrap is 
>>> needed to make the code work without refractoring.
>>> 2. XCode itself reccomends this operator and when it is used to satisfy a 
>>> requirement, then it can be left in the code
>>> 3. Some styles of coding just can’t work without force-unwrap.
>>> 
>>> I don’t think the logic of making the consequences extreme for making a 
>>> mistake are a rational for making better coders. In fact, I personally see 
>>> the “force-unwrap” operator having very great potential usage as a 
>>> deliberate assertion exception - the programmer demands that a certain 
>>> value be non-null for execution to continue, only there should be a proper 
>>> scope and context where these exceptions can propogate to. On debug modes, 
>>> one might want it to pause on the line, but for other uses, it should be 
>>> caught IMO - on regular code by the user, and inside dispatch blocks by the 
>>> queue itself. For a multithreaded app or server to exit, the user should 
>>> have to explicitly write exit(0), isn’t this the goal of a managed 
>>> language? Maybe in some cases, Apple will want the program to crash, but if 
>>> Swift is given an audience not just with Apple hardware, then it should 
>>> have more flexibility IMO.
>>> 
>>> Elijah
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to