Q新闻丨Windows原生运行Linux的技术细节;使用Swift为Android构建代码;Vue.js 2.0版发布,框架重写
Posted InfoQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Q新闻丨Windows原生运行Linux的技术细节;使用Swift为Android构建代码;Vue.js 2.0版发布,框架重写相关的知识,希望对你有一定的参考价值。
Microsoft最近宣布了将Linux Bash与Windows 10进行集成的意图,通过这种集成,Windows 10用户将能在操作系统中原生运行Linux ELF64二进制程序。为避免对该技术的实现方法产生错误的猜测,Windows Subsystem for Linux团队主管Deepu Thomas详细介绍了在Windows上运行Linux的技术细节。
为了解释在Windows上运行Linux的方法,首先需要介绍一些相关技术和功能:
Windows内核模式。主要由(内核模式的)驱动程序之类的操作系统核心组件使用的一种CPU运行模式。与计算机硬件进行的所有交互都是在这种模式下处理的。为尽可能避免崩溃,Windows内建并以该模式运行的组件需要进行全面的测试,因为这种层面的崩溃会危及整个操作系统。这篇MSDN文章详细介绍了这两种Windows模式之间的差异。
Windows NT子系统。Windows NT问世之初就在应用程序所能调用的API和内核层之间进行了隔离。这样Windows NT便可支持多种子系统,例如POSIX、OS/2以及Win32。这些子系统最初的用途是简化UNIX和OS/2应用程序向Windows移植的工作。虽然POSIX和OS/2子系统已被取消,但它们的架构依然保留了下来。
Pico进程和驱动。DrawBridge项目引入的Pico进程和相应的驱动提供了一种基于过程的容器。这是一种不包含操作系统服务的轻量级解决方案,系统调用是由一对Pico驱动处理的。
用户模式Linux。通过这种方式可将Linux作为应用程序在其他Linux宿主机基础之上运行。此时来宾Linux内核无需直接访问硬件,而是将系统调用转发至宿主机Linux,由其代为访问。
为了运行Linux,Microsoft创建了Windows Subsystem for Linux (WSL),这个子系统的整体架构如下图所示:
当用户以用户模式启动bash.exe时,会同时启动相关服务以及LX会话管理器。这个服务在用户通过命令提示符输入的bash命令和待执行的相关原生ELF64二进制程序之间承担了中介的角色。这里的Linux二进制程序是Canonical提供的用户模式Ubuntu 14.04系统的组成部分,以Pico进程的形式启动并在用户模式下运行。此时由lxss.sys和lxcore.sys这两个驱动负责模拟Linux内核并拦截系统调用。大部分情况下,相应的驱动会将Linux内核调用映射为对应的Windows内核调用,但也有些情况可能缺乏对应的Windows内核调用。例如fork(),Thomas解释了其中的原理:
根据记录,Linux fork() syscall没有直接对等的Windows调用。当针对Windows Subsystem for Linux进行fork系统调用时,lxcore.sys会执行一些前期工作为进程的复制做准备。随后它会调用内部的Windows NT内核API以使用相应语意创建进程,并为新建的进程完成额外数据的复制。
WSL提供了两种可被Linux访问的文件系统:VolFs和DriveFs。前者在各方面都非常类似于常规的Linux文件系统,包括权限支持、symbolic链接、大小写敏感,以及Windows文件系统中不允许使用的字符。后者提供了与Windows互操作的能力,使得用户能够在Linux中看到所有Windows卷。
这个功能与虚拟化无关,Linux二进制程序也没有为了在WSL中运行而移植或重编译。这种方式运行的Linux命令可以像Windows应用程序一样访问本地主机,无需使用虚拟化的网络。
根据Thomas的介绍,针对WSL进行性能评测后发现,性能表现非常接近用相同硬件直接运行Linux的性能,这证明WSL在性能方面的表现很出色。
Microsoft团队曾在WSL上运行过Python和Ruby,并像其他Linux用户那样使用gcc编译过程序,大部分情况下都可以正常工作,但也有一些小问题:sudo无法完全正常使用,文件系统需要进行一定的调整,运行mysql会遇到一些小问题等。有些用户提到无法运行Java、Semaphores或共享内存。目前UserVoice WSL频道中最需要的三个特性分别是:在两个环境中使用slash,通过Bash启动Windows进程,以及将WSL开源。
Microsoft提供的在Windows上运行Linux的能力可以帮助运维团队,尤其是负责运维云实例的团队无需更换计算机或使用虚拟化解决方案,便可直接从一台Windows/Linux计算机管理自己的所有系统。云中运行的很多计算机都运行了Linux,这个功能可以让运维人员的工作变得轻松一些。
本文译者:大愚若智
原文链接:
http://www.infoq.com/news/2016/04/linux-windows
一个名为“Port to android”的合并请求最近被合并进了官方Swift代码仓库的主分支,这使得用Swift开发简单的Android程序变得有可能。该合并请求为Swift stdlib增加了安卓目标,其允许开发者使用Linux环境,跨平台地为基于ARMv7处理器的Android进行编译。
Swift面向Android的端口主要是两个开发者的贡献:一个是Zhuowei Zhang,他在2015年末开始了此项目,另一个是Facebook的Brian Gesiak,他提交了此次PR,并解决了在最终被合并到主分支之前出现的所有反馈的问题。由于这次PR的规模很大(最初包含了54个文件的修改),整个流程从提交到合并花了差不多两个月时间。
正如之前提到的,目前只有可能在Linux环境跨平台编译Android。另外还需要最新版本的Android NDK,以及为Android开发的libiconv和libicu。这些依赖项都满足之后,针对Android的Swift可以通过这样的调用被构建:
一旦编译器可用,它可以被用作创建Android可执行文件:
它可以和Swift stdlib以及Android NDK libc++一起被部署到真实的Android设备上,使用下面的adb push命令:
最后,该程序可以使用adb shell命令执行。
因为目前此端口只包含Swift stdlib,还需要做很多工作才能让Swift有效地被用作创建完整的安卓应用,比方说提供图形化用户界面的应用。它可以用两种方式来完成,要么用某些可以运行在Android上的Swift UI框架,或者通过和Android的Java框架交互。然而,要注意的是,Swift编译器目前并没有包含任何条款,能够让Swift像和Objective C代码互通一样,和Java代码更简单地互通。
另一个在真实Android应用中使用Swift代码的可能是,使用JNI/NDK通过Java调用Swift代码。Zhang还提供了一个原型应用示例来展示如何在JNI之上从Android Java应用访问Swift代码。
本文译者:顾俊
原文链接:
http://www.infoq.com/news/2016/04/swift-for-android
Vue.js的团队最近发布了v2.0版本,该版本被描述为是对框架的一次“完全改写”。
Vue创建者Evan You称Vue由“一个核心视图层、伴随工具以及支持库”所构成,这次发布的2.0版本更快速更精简。
“渲染层现在基于一个轻量级的 Virtual-DOM 实现,在大多数场景下初试化渲染速度和内存消耗都提升了 2~4 倍。”You提到。
此外,开发者可以将template-to-virtual-DOM编译器和运行时分开,允许预编译模板,发布应用时只需要运行时间。Vue运行时代码min+gzip后小于12kb,而React 15 min+gzip后需要44kb。
You说Vue同时提供“一些针对template-to-virtual-DOM编译阶段的优化”,包括在初始渲染之后“检查那些没变的静态类名和属性”。
在宣布Vue.js 2.0发布的官方博文中,You提到尽管2.0版本是一次完全改写,但是“除了一些有计划的弃用,API和1.0版本在很大程度上兼容”。其中最显著的的是对过滤系统的变更。
从2.0版本之后, 过滤器仅可以在{{}}标签中使用,You解释说团队发现含有指令的过滤器,包括v-model和v-on“导致了更多的复杂性,而不是方便性”。
此外,Vue 2.0将不提供任何内置的过滤器,推荐开发者使用单独的库,例如moment.js来格式化日期,accounting.js来格式化货币。对过滤器的决定性改变是对其语法的改变,使其与函数调用{{ date | formatDate('YY-MM-DD') }}内联。
Vue 2.0目前是公共预览版,预计在六月会发布Beta版本,预览版收到的反馈基本都是积极的。
系统分析师Victor Bastos评论说“他对过滤器弃用感到很失望”,他认为过滤器是“Vue中他最喜欢的功能”之一。并不是所有人都同意Bastos的观点。教育工作者Chris Fritz回复道“我个人支持去除过滤器,它们只是javascript函数似,但它们使用了一种特殊的管道语法,好像在变魔术一样。对我个人而言,这是对库初学者的另一道障碍。”
Vue.js是基于MIT许可协议的开源项目。InfoQ的读者如果想对项目作出贡献必须先阅读贡献指南。(https://github.com/vuejs/vue/blob/dev/CONTRIBUTING.md)
本文译者:刘嘉洋
原文链接:
http://www.infoq.com/news/2016/05/Vuejs-2
▽
延展阅读(点击标题):
本文系InfoQ原创首发,未经授权谢绝转载。
以上是关于Q新闻丨Windows原生运行Linux的技术细节;使用Swift为Android构建代码;Vue.js 2.0版发布,框架重写的主要内容,如果未能解决你的问题,请参考以下文章
高通华裔工程师跳楼自杀,2015年曾被裁员;Flutter SDK 首个发布预览版释出;谷歌向京东投资5.5亿美元丨Q新闻
全球人脸识别算法测试,中国包揽前五;图数据库 Neo4j 宣布企业版彻底闭源;腾讯云发布新一代自研云原生数据库丨Q新闻
Q新闻丨Linux基金会迎来JavaScript社区;开源搜索引擎Elasticsearch 5.0版发布;Rust 2017…
Q新闻丨新版本发布潮:CeylonNode.js和Atom;微软公布用于Windows的OpenSSH代码;苹果开源三个加密库
Q新闻丨谷歌广告彻底放弃Flash,100%转向HTML5;将在.NET Core中被废止的技术;Angular发布1.5正式版