能不能用drracket scheme代替GUN/MIT Scheme去实现SICP中的习题

第三方登录:| 时间排序
Emacs的话:&br&&ol&&li&rainbow-delimiters&/li&&li&paredit&/li&&/ol&&p&其中后面那个才是王道. 不过彩虹的好看....哈哈&/p&&br&&p&买一赠一, 你可以装一个nyan-mode...反正我装了...&/p&
Emacs的话:rainbow-delimitersparedit其中后面那个才是王道. 不过彩虹的好看....哈哈买一赠一, 你可以装一个nyan-mode...反正我装了...
看着很炫然而没什么egg用的功能。
看着很炫然而没什么egg用的功能。
VIM 的 SLIMV
VIM 的 SLIMV
λ 是函数式编程的标志啊,来源就是lambda演算,图灵的老师搞出来的一套东西,本质上与图灵机等价。
λ 是函数式编程的标志啊,来源就是lambda演算,图灵的老师搞出来的一套东西,本质上与图灵机等价。
&a href=&http://mitpress.mit.edu/sicp/psets/ps4hnd/readme.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Picture language&i class=&icon-external&&&/i&&/a& 貌似是这个…mit-scheme用的
貌似是这个…mit-scheme用的
你可以用 &b&Drracket &/b&代替GNU Scheme来实现SICP里的所有习题。Drracket: &a href=&http://racket-lang.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&racket-lang.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&因为在Drracket中可以根据源代码来确定所使用的语言,所以只要在程序开头写清楚所需要的语言就可以,比如实现SICP习题的Scheme:&br&&br&&img src=&/4e0d7dccc6d3dea2fbe1_b.jpg& data-rawwidth=&889& data-rawheight=&200& class=&origin_image zh-lightbox-thumb& width=&889& data-original=&/4e0d7dccc6d3dea2fbe1_r.jpg&&&br&第一行的 &b&#lang racket &/b&就声明了所需要的语言。&br&&br&为了实现第二章中得图形语言,我使用的是 &a href=&http://planet.plt-scheme.org/package-source/soegaard/sicp.plt/2/1/planet-docs/sicp-manual/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PLT Scheme SICP Picture Language package&i class=&icon-external&&&/i&&/a&, 只需在第二行加入这句话:
&b&( require ( planet &sicp.ss& ( &soegaard& &sicp.plt& 2 1))) ,&/b&就可以使用。&br&这是一些结果:&br&&br&&img src=&/f6d254e882ce524ecdbbc_b.jpg& data-rawwidth=&1331& data-rawheight=&872& class=&origin_image zh-lightbox-thumb& width=&1331& data-original=&/f6d254e882ce524ecdbbc_r.jpg&&&br&最后有一个需要注意的是:将SICP图形语言中得 &b&wave &/b&替换为&b& einstein, &/b&画出来的就都是爱因斯坦爷爷了&b&。&/b&
你可以用 Drracket 代替GNU Scheme来实现SICP里的所有习题。Drracket: 因为在Drracket中可以根据源代码来确定所使用的语言,所以只要在程序开头写清楚所需要的语言就可以,比如实现SICP习题的Scheme:第一行的 #lang racket 就声明了所…
&a class=& wrap external& href=&http://blog.yxwang.me/2010/02/the-sicp-picture-language/& target=&_blank& rel=&nofollow noreferrer&&SICP 里提到的画图语言&i class=&icon-external&&&/i&&/a&&br&&a href=&http://www.biwascheme.org/repos/demo/pictlang.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Picture Language (from SICP 2.2.4)&i class=&icon-external&&&/i&&/a&&br&&br&第一个链接是介绍PLT里实现的一个库&br&第二个是一个JavaScript实现的Scheme做的&br&当然自己动手也可以,也如&a data-title=&@Lispor& data-editable=&true& class=&member_mention& data-hash=&930a87c697ca772d22f471ee370d5fa0& href=&///people/930a87c697ca772d22f471ee370d5fa0& data-tip=&p$b$930a87c697ca772d22f471ee370d5fa0&&@Lispor&/a& 所说,会些绘图语言就可以.&br&不过感觉metapost,postsctipt上手可能有点难度&br&可是尝试下用SVG&a class=& wrap external& href=&http://en.wikipedia.org/wiki/Scalable_Vector_Graphics& target=&_blank& rel=&nofollow noreferrer&&(Scalable Vector Graphics&i class=&icon-external&&&/i&&/a&)做一个
第一个链接是介绍PLT里实现的一个库第二个是一个JavaScript实现的Scheme做的当然自己动手也可以,也如 所说,会些绘图语言就可以.不过感觉metapost,postsctipt上手可能有点难度可是尝试下用…
这个只要自己会一些绘图语言(比如 metapost 、postscript 等等),可以很容易实现输出这些图形格式的文件
这个只要自己会一些绘图语言(比如 metapost 、postscript 等等),可以很容易实现输出这些图形格式的文件来自子话题:
当然需要开源啊&br&据我所知,既然用了GPLv2保护的开源项目,并且都用于商业盈利了,为啥不要开源啊?之前说源码中有新机信息(小米note标配版)。但是现在新机都发布了,开源应该提上日程了吧?虽说国内由来已久的流氓风气,不开源的数不胜数(我都不说暴风都挂在FFmpeg耻辱柱上多少年了),但是这决不能成为不开源的借口啊。&br&至于开源协议适用范围,应该只是Linux内核那部分吧,驱动等HAL层给二进制码,其余给源码。具体开放范围可以参见AOSP项目以及HTC、华为等厂商提供的源码。MIUI上层部分作为商业产品,也没用GPLv2保护下的Linux的那部分,肯定不会开源码,最多只是patchrom那样的中间码。&br&另外,其实从xda的这篇文章也能看出其他许多信息——那就是xda开发者为什么那么急切的要米3源码?真的只是不遵守开源协议?那魅族锁BL、一直搞闭源、没通过CTS认证就用GMS还没被吊销Android授权咋就没老外说?说白了还是老外想研究代码,搞点机型适配和rom移植,毕竟小米在东南亚市场已经颇有规模,老外有需求才会逼宫,至于那些在国内销量市占率都还不是一个量级的对手,呵呵。。&br&反正无论如何,小米想要在国外发展,再考虑舆论需求,个人推测一季度应该会开放源码(当然不知道是去年还是前年的源码)。最后结局肯定会是神仙打架,凡人受益——越来越多的第三方rom,越来越好的优化
当然需要开源啊据我所知,既然用了GPLv2保护的开源项目,并且都用于商业盈利了,为啥不要开源啊?之前说源码中有新机信息(小米note标配版)。但是现在新机都发布了,开源应该提上日程了吧?虽说国内由来已久的流氓风气,不开源的数不胜数(我都不说暴风都…
来自子话题:
GNU 是 GNU is Not Unix的缩写&br&因此G的意思是GNU
GNU 是 GNU is Not Unix的缩写因此G的意思是GNU
实名反对 &a class=&member_mention& href=&///people/c32ad3f421f57eaaa5bde& data-hash=&c32ad3f421f57eaaa5bde& data-tip=&p$b$c32ad3f421f57eaaa5bde&&@廖雪峰&/a& 对rhel的看法.&br&啥叫对开源支持极差? 啥叫只认证oracle/java等软件? &br&我从rhel7开发早期开始用, 那时候80%概率安装失败, 各种不同的存储后端都会导致安装失败, 或者安装后启动不能, 从那个时候起, 遇到了无数多的panic, (开发阶段, 问题多是正常的, 那个时候完全没有发布给外界使用), 后来一步步修复了无数的kernel issue, 而且所有的patch都推给upstream了. 并且, 跟各种其他it公司合作, 包括ibm, dell, hp等, 跟他们的软件/硬件测试兼容性. oracle当然我们也有合作, 但是为啥说只认证oracle/java? 要这么说, debian什么都不认证的怎么反而叫做对开源支持很好了??? 请问逻辑在哪里?&br&rhel不仅开源, 并且十分支持rhel的免费克隆, centos. 投入了人力财力帮助centos, 来缩短centos克隆rhel所需要的时间. 这叫不支持开源? rhel自己开源了, 并且很支持免费克隆, 你还想让他怎么支持开源???很多厂商的linux下的driver问题都是redhat测出来并且敦促厂商去修复, 不然linux对硬件支持没有今天这么好, 这叫对开源支持极差??? 你看看redhat对上游各种项目的代码贡献量再说...&br&&br&利益相关: Redhat前雇员, Canonical现雇员
对rhel的看法.啥叫对开源支持极差? 啥叫只认证oracle/java等软件? 我从rhel7开发早期开始用, 那时候80%概率安装失败, 各种不同的存储后端都会导致安装失败, 或者安装后启动不能, 从那个时候起, 遇到了无数多的panic, (开发阶段, 问题多是…
来自子话题:
针对题目,答案是可以避免 GPL 感染,但另外需要做一些工作。在开源脑残粉们把这里成讨伐你的阵地之前,先假设你说的 GPL 是 GPLv2 ,解答一下你的问题。&ol&&li&&b&如果我在发布软件的时候不同时发布使用到的GPL软件,而是让用户自己安装这些GPL软件,那么是否可以私有?&/b& 简单说,条件不足,无法做出判断。分别发布只是 GPL 要求之一。&br&&/li&&li&&b&如果我使用了某种GPL的编程语言开发程序,而这个程序也必须在安装了此编程语言运行环境时才能使用,那么我发布这个程序是否必须用GPL? 这个应该不必吧?&/b& 确实不必。&br&&/li&&li&&b&如果我以GPL协议发布了某种软件,我是否可以再使用其它协议发布同一款软件?&/b&可以,但必须是兼容 GPL 的协议。&br&&/li&&li&&b&最后确定一点,如果我不发布我的软件,而只是做为一个web site运行,那么不管是否使用GPL软件,都可以私有?&/b&条件不足,无法判断。比如你弄了个 GPL 的 Java Applet 改了改放到网站上给人用,也要发布源代码。不限于二进制。再比如你弄了个 GPL 的 Javascript 改了改,也要发布修改版(当然不用特别发布,反正别人也能拽下来呵呵)。&br&&/li&&li&&b&如果我使用了GPL的程序,并在此基础上修改了部分代码,然后用到我自己的软件中,那么我是否可以把自己的程序分为两部分,其中一部分包含了修改过GPL程序的程序,另一部分完全不包含任何GPL程序,然后我再分别发布这两个程序,但是这两个程序必须同时使用才能正常运行,我可以通过这种方式私有化部分程序吗? 有没有例子说明一下这种情况?&/b&如果你隔离 GPL 影响,分开两部分是必须的。但在此之上也有其它要求。包含 GPL 代码的部分,受到 GPL 影响的(法律定义是原GPL作品的衍生作品,后面称为衍生部分),必须按照 GPL 要求开源。剩下的一部分,则是你自己的作品,可以自由选择协议(后面称为自由部分)。但是 GPL 对两者交互模式和发行方式都有要求:&br&1. 代码上讲,自由部分完全必须独立于 GPL 代码,非 GPL 作品修改/衍生/翻译。(GPLv2 条款 0 说明的适用范围)。需要注意,对衍生作品的定义每个国家不同,中国版权法没有明确定义。&br&2. 运行时交互上讲,两种部件在运行时交互的方式被 GPL 限定为:前端后端交互方式,或者主程序插件交互方式。&br&3. 发布形式上,两者不能捆绑发布。具体一点,把GPL非GPL部分仅仅是物理上放到一张光盘(软件合集什么的)上给人是可以的。但逻辑上如果都在一个安装包中一装全装上是不行的。但是写个脚本先从网上下一个装一个再下了装一个则是可行的(没有先后顺序要求)。&br&4.我自己的软件 SpeedTao 就是这么搞的,程序本身私有,用户下载时只能下载到自由部分。但如果用户要激活 P2P 下载功能,需要用到 GPLv2 的 mlnet。此时程序会提示用户下载该部件并安装。运行起来 Speedtao 是 mlnet 的前端,通过socket交互。mlnet 安装包以及自行修改代码也在网站上公布。&br&&/li&&li&&b&你写的代码你有知识产权,只要不违反 GPL,愿意用什么协议用什么协议,别管一粉胜十黑的脑残开源粉。。。&/b&&/li&&/ol&
针对题目,答案是可以避免 GPL 感染,但另外需要做一些工作。在开源脑残粉们把这里成讨伐你的阵地之前,先假设你说的 GPL 是 GPLv2 ,解答一下你的问题。如果我在发布软件的时候不同时发布使用到的GPL软件,而是让用户自己安装这些GPL软件,那么是否可以私…
个人的一点经验:&br&&b&&br&&/b&&b&一个很好的移动工作站配置:&/b&Macbook Pro / Air + Apogee Duet ( 可选 ) + Korg nanoKEY ( 或是 iCON i-KEY,区别在于前者无力度反馈,触键手感同笔记本键盘相差无几;后者有一定的力度反馈,但由于做工质量不一,或有接触问题,即力度无法准确地反映在音序软件中 )&br&笔记本不一定是 Macbook Pro / Air,只要满足你的需求的均可。&br&&br&&b&一个较好的外出记录乐思的方式:&/b&iPad + GarageBand for iPad&br&对于&b&旋律线&/b&的录入,或者传统三大件 ( 吉他,贝司,鼓 ) 的编配,这个组合很方便,并且回到家或工作室可做进一步处理。&br&&br&&b&音序软件的选择:&/b& Cubase 或是 Logic Pro&br&这个要单独说明一下,并不是说 Sonar 不好,只是我对 VST 格式的软音源有所偏好,而 Sonar 对于 VST 格式的支持总不是很稳定。除了一些很「硬气」的厂家会推出自己的宿主(Spectrasonics Ominisphere / Tralian / Stylus RMX, EastWest Play系列,等等)外,Kontakt 支持着绝大多数软音源,普遍用 Cubase 或是 Logic Pro 来搭载 Kontakt 的运行。&br&&br&如果你实在没有地方带 MIDI 键盘,无妨,我上述所列的 MIDI 键盘更多的只是方便了录入,而非力度记录,因此和 鼠标/触摸板 区别不大。
个人的一点经验:一个很好的移动工作站配置:Macbook Pro / Air + Apogee Duet ( 可选 ) + Korg nanoKEY ( 或是 iCON i-KEY,区别在于前者无力度反馈,触键手感同笔记本键盘相差无几;后者有一定的力度反馈,但由于做工质量不一,或有接触问题,即力度无法…
来自子话题:
&a href=&http://www.neilvandyke.org/racket-sicp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SICP Support for DrRacket&i class=&icon-external&&&/i&&/a&&br&具体的差别可以看这里:&br&&a href=&/questions/3345397/how-is-racket-different-than-scheme& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lisp - How is Racket different Than Scheme?&i class=&icon-external&&&/i&&/a&
具体的差别可以看这里:
&p&如果你不是在工作的时候,而是在家里用C++重写STL,这一直都是被鼓励的一种学习方法。不过数据结构跟OOP基本没关系,你要搞OOP得重写GUI库。&/p&&br&&p&不过根据我的认识,面试官说的不一定靠谱。&/p&
如果你不是在工作的时候,而是在家里用C++重写STL,这一直都是被鼓励的一种学习方法。不过数据结构跟OOP基本没关系,你要搞OOP得重写GUI库。不过根据我的认识,面试官说的不一定靠谱。
来自子话题:
&a href=&http://www.perfect-/gcc-compile-and-makefile-resource.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&gcc 编译选项和 makefile 资源 汇总&i class=&icon-external&&&/i&&/a&&br&&a href=&http://www.perfect-/GNU-autotools.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GNU Autotools&i class=&icon-external&&&/i&&/a&&br&&br&工具类的东西,大部分功能是不用的。入门的话要结合应用场景,经常用的多查资料。Linux 下的东西很零散的,没有一本书可以讲的很全。
工具类的东西,大部分功能是不用的。入门的话要结合应用场景,经常用的多查资料。Linux 下的东西很零散的,没有一本书可以讲的很全。
来自子话题:
Ubuntu more Mac,Fedora more linux
Ubuntu more Mac,Fedora more linux
虚拟机上装个Linux,然后把Windows的一个目录共享过去,再在Linux里面把代码搞进去,然后你用VS也可以,SourceInsight也可以,怎么熟悉怎么来。
虚拟机上装个Linux,然后把Windows的一个目录共享过去,再在Linux里面把代码搞进去,然后你用VS也可以,SourceInsight也可以,怎么熟悉怎么来。
来自子话题:
就这个问题说说我的&b&个人看法&/b&,不过先说明一下,有关 GPL 的相关法律条文,国内似乎没有可以追溯的判例,所以每个人对 GPL 的解读可能会有偏差。欢迎每个人就 GPL 发表自己的观点。&br&&br&GPL的核心关注点是:发布。单纯使用 GPL 软件不造成开源,&b&发布&/b& GPL 软件才与源代码相关。&br&&br&如果发布 GPL 软件,发布者必须同时发布其源代码。如果你不具有相关的源代码,则发布行为不符合 GPL。换句话说其源代码应当具有与已编译的二进制代码相同的发放途径。&br&&br&你有权获得其源代码的前提是你获得了相关软件的二进制版本。获得的途径与你获得相关二进制版本的途径相同。&br&&br&注意,发布源代码是&b&发布者&/b&的责任,因为 GPL 是允许再分发的,所以每个&b&分发者&/b&有责任保证源代码被分发。&br&&br&&b&例1:&/b&A 发布了一个软件给 B ,B 复制了一份这个软件给 C,C 用邮件将这个软件发给 D,所有这些行为都是再分发,换句话说都叫发布。&br&如果 D 是找 C 拿到这个二进制版本的,则应当找 C 索要源代码。&br&C 如果手头没有源代码,则 C 分发这个软件的行为是违反 GPL 的,他应当&u&立即停止分发该软件的行为,直到他找 B 索要到这个软件的源代码为止&/u&。&br&&br&&b&例2:&/b&某个网站公开的公布了下载某个 GPL 软件二进制版本的链接,此行为视为发布软件,则其有义务同时公开下载对应版本的源代码的下载链接。如果不能同时提供源代码,则违反了GPL,该网站应当&u&立即停止公布该软件的下载链接,停止对该软件的发布行为,直到其能提供源代码为止&/u&。&br&&br&至于哪些软件属于需要分发源代码的,对几个问题分开讨论:&br&&br&工具链:由于这些产商一般仅仅是自行使用工具链,不会将工具链发布出去,所以无需将其源代码发布出去。仅仅获得嵌入式设备的你,无权索要其工具链。&br&&br&有一种情况除外:比方说你作为产商,使用华为海思的芯片制作嵌入式产品,华为要将海思的工具链发布给你,如果你拿到了二进制版本的工具链,就有权找发布给你的人索要相应的源代码。&br&&br&内核:通常来说,你不会直接获得内核的二进制代码,除非产商用文件的形式发布了更新,如果你通过某种&b&合法渠道&/b&获得了该内核的二进制代码,则有权找&b&相同渠道&/b&索要对应版本的源代码。&br&&br&(这里插入一个事情:我们知道 android 虽然开源但不是 GPL的,不过其中的 Linux 内核是 GPL 的。有一部分 android ROM 发布的时候不带 Linux 内核,因此那些 android ROM 可以不必开源。但自带内核的 ROM,发布该 ROM 时需要将其内核部分源代码一并提供。)&br&&br&结论:&br&&ul&&li&GPL 当然有规定如何发放源代码,简单的说就是你如何获得其二进制代码,就有权用如何方式获得其源代码。&/li&&li&如何快速找到某个机型的 GPL 源代码?答案应该是首先通过合法渠道找到对应机型的二进制代码,然后在你找到对应机型二进制代码的地方,索取对应的源代码。&/li&&li&如果没有任何合法渠道能让你获取对应的二进制代码,这说明其二进制代码没有发布过,没有发布的软件不受 GPL 限制。&/li&&/ul&
就这个问题说说我的个人看法,不过先说明一下,有关 GPL 的相关法律条文,国内似乎没有可以追溯的判例,所以每个人对 GPL 的解读可能会有偏差。欢迎每个人就 GPL 发表自己的观点。GPL的核心关注点是:发布。单纯使用 GPL 软件不造成开源,发布 GPL 软件才与…
来自子话题:
您所说的应该是 GNU/LINUX 而不是Linux kernel本身。&br&GNU/LINUX 是一套基于Linux内核的完整操作系统,而其中很多软件都是采用的GPL协议。&br&而调用Linux kernel的API 并不违反GPLv2的协议。 并且Google在处理硬件驱动问题到时候用了一个很巧妙的方法使得手机硬件商不需要开源其驱动。[1]&br&&br&&i&&Android 是运行于 Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 为了达到商业应用,必须移除被GNU GPL授 权证所约束的部份,例如Android将驱动程序移到 userspace,使得Linux driver 与 Linux kernel彻底分开。bionic/libc/kernel/ 并非标准的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所产生的,这样做是为了保留常数、数据结构与宏。“ &/i&[2]&i&&/i&P.S. GPL is a FREE license,这里到FREE是自由到意思 不是免费的意思。&i&&/i&关于付钱的貌似的事参考&i& @Kevin Yu &/i&的答案&i&。&/i&[1]&i&&a href=&http://blog.csdn.net/Droid/archive//5561561.aspx& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&blog.csdn.net/Droid/arc&/span&&span class=&invisible&&hive//5561561.aspx&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/i&[2]&i&&a href=&http://zh.wikipedia.org/wiki/Android& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&zh.wikipedia.org/wiki/A&/span&&span class=&invisible&&ndroid&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& Android --《编程语言》&br&&/i&
您所说的应该是 GNU/LINUX 而不是Linux kernel本身。GNU/LINUX 是一套基于Linux内核的完整操作系统,而其中很多软件都是采用的GPL协议。而调用Linux kernel的API 并不违反GPLv2的协议。 并且Google在处理硬件驱动问题到时候用了一个很巧妙的方法使得手机硬…
来自子话题:
什么都不会发生,世界照常运行。&br&----&br&补充一下避免让人认为是抖机灵。&br&说什么都不会发生是因为软件开源不开源在这个时代的影响远没有十年前那么大。&br&首先开源不等于免费,开源这个概念国内引入也有好多年了,但是还有人把开源等同于免费。这是不对滴,开源的软件也可以用来收费和用来商用,RedHat和IBM为例。&br&其次有人认为开源了以后这玩意会千疮百孔被人和玩一样的黑来黑去。这也是不对的。是否开源对于软件的安全性并没有必然联系,而要看软件本身设计时对安全性和健壮性的审核把关。有人认为源代码在那有问题大家都会一起修,其实这也是妄想。很多开源软件的安全性是相当脆弱的,不管是用户,还是开发者,对软件的要求都只是“能用”而已。举个例子,上个月的bash漏洞,如果了解原理的话就会知道这漏洞的成因基本上是在打开发者和安全从业人员的脸,打前者是因为竟然有人敢这么写,打后者是存在这么多年没人发现,或者是发现了故意不报?反面的例子是微软的可信任计算的开发模式。忘了这是微软哪一年提出来的,应该是在XP之后Vista之前,已经算是在业界很超前了。所以Windows整体代码质量可是比很多开源系统好很多(个人感觉)。&br&Windows真要开源,倒是有一个可能是会出现很多衍生版本的系统,但是为了兼容现有Windows估计也不会偏离主干太多,顶多是会有各种定制花样的系统出现。其实以今年Windows的生态,它有足够的灵活性和泛用性跑在各种各样大的小的好的坏的奇葩的硬件上了。&br&开源不开源,真不是什么大事,真正要关心的是以何种协议开源,以何种商业模式继续构建生态圈。&br&题外话,我认为微软即使是Windows全免费的准备也做好了,在这个生态系统为王的时代,只要你用他的服务,操作系统什么的都不算个事,让你拆了自己仿造一个你也造不来的。这是计算机行业发展到这个地步技术积累的必然结果。
什么都不会发生,世界照常运行。----补充一下避免让人认为是抖机灵。说什么都不会发生是因为软件开源不开源在这个时代的影响远没有十年前那么大。首先开源不等于免费,开源这个概念国内引入也有好多年了,但是还有人把开源等同于免费。这是不对滴,开源的软…
来自子话题:
Richard Stallman在一个演讲上[1]解释过,大致上就是他试了很多首字母,gnu冒出来的时候立即就敲定了,他认为gnu是英语里最好笑的一个词,很难拒绝。Gnu这个词原本g不发音,读「怒」。因此刻意把g音发出来,变成两个元音,又成为一种难以抗拒的乐趣。他小时候还听过一首歌叫《The Gnu》。所以这是个让他非常开心的词。&br&@Lawrence Li 提到的递归缩写[2]是以Stallman为代表的早期hackers的特殊爱好,取名字时首先考虑递归,然后再看递归出来的词是不是一个真正的词。所以GNU是二者一拍即合的案例。下面这段话,是递归游戏的经典文本:&br&&br&&i&...some of them were called &something Emacs&, but there was also Sine, for Sine Is Not Emacs, and Fine, for Fine Is Not Emacs, and Eine, for Eine Is Not Emacs.
And Mince, for Mince Is Not Complete Emacs, and version two of Eine was called Zwei, for Zwei Was Eine Initially.[3]&/i&&br&&br&[1]&a href=&http://fsfe.org/freesoftware/transcripts/rms-fs-.en.html#the-name-gnu& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&fsfe.org/freesoftware/t&/span&&span class=&invisible&&ranscripts/rms-fs-.en.html#the-name-gnu&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[2]&a href=&http://zh.wikipedia.org/wiki/%E9%80%92%E5%BD%92%E7%BC%A9%E5%86%99& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&zh.wikipedia.org/wiki/%&/span&&span class=&invisible&&E9%80%92%E5%BD%92%E7%BC%A9%E5%86%99&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[3] 同[1]
Richard Stallman在一个演讲上[1]解释过,大致上就是他试了很多首字母,gnu冒出来的时候立即就敲定了,他认为gnu是英语里最好笑的一个词,很难拒绝。Gnu这个词原本g不发音,读「怒」。因此刻意把g音发出来,变成两个元音,又成为一种难以抗拒的乐趣。他小时…
来自子话题:
如果想研究linux,用fedora;如果替代windows工作,ubuntu;如果服务器,centos或者rhel
如果想研究linux,用fedora;如果替代windows工作,ubuntu;如果服务器,centos或者rhel
来自子话题:
这个问题应该是vczh群里面的那个同学问的吧?这个问题在群里我应该回答了。&br&&br&不过我这里还是想再讲讲GNU Extended ASM(也称为Inline ASM),我做过这块儿的编译器的实现,然后这一块儿也巨复杂,我顺便来简单总结一下(也只能简单),也当普及一下,我觉得不理解这一块儿的应该不是少数。&br&&br&之前我认为Inline ASM应该很少见,但是在编译一些开源项目的时候,结果发现用的很多,比如Kernel,database,包括一些编程语言。比如Ruby的代码实现,里面的Inline ASM就用的异常的风骚,我们编译器编译的时候,直接ICE了,目前在Fix中,咳咳...&br&&br&对于Inline ASM来说,其分为几块:&br&&br&asm [volatile] ( asm instructions: Output Operands: Input Operands: Clobbers);&br&&br&其中,若你有Input,但是Output为空的话,你也需要保留 : ,而Clobbers是可以为空的,如果有内容的话,Input Operands后面需要跟着 : 分割与Clobber的内容。&br&&br&其实GCC还有针对asm goto的,但是目前只有GCC做了,Clang和我们编译器都没有支持这样的写法,其语法为&br&&br&asm [volatile] goto ( asm instruction : Input Operands : Clobbers : Goto Labels);&br&&br&这里面的话, asm instructions 包含了两部分,一部分是常规的汇编语句,一部分是指向Output Operands, Input Operands. 比如题主的例子:&br&&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&n&&__asm__&/span& &span class=&nf&&__volatile__&/span&&span class=&p&&(&/span&
&span class=&s&&&xaddl %0,%1&&/span&
&span class=&o&&:&/span&&span class=&s&&&+r&&/span& &span class=&p&&(&/span&&span class=&n&&i&/span&&span class=&p&&),&/span&&span class=&s&&&+m&&/span& &span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&lpAddend&/span&&span class=&p&&)&/span&
&span class=&o&&::&/span&&span class=&s&&&memory&&/span&
&span class=&p&&);&/span&
&/code&&/pre&&/div&这里面的xaddl是汇编指令,%0和%1就是指向的output的东西。&br&&br&那么具体来说 %0指向的就是 &+r&(i),%1就是&+m&(*lpAddend)这里。&br&&br&对于Output Operands格式为 &[+][=] Register Constraint& (Operands),其中+表示可读可写, =表示可写。这只能用于Output,不能用于Input。然而对于Clang来说,它会把+翻译为=,也就是不区分 + = 。而Register Constaint就跟具体的平台有关了,但是也有一些通用的,如 r, m, i等。r 代表的是 允许一个 regiser operand,把它放在General Purpose Register中,而m代表着允许一个memory operand, 而i代表着的是允许一个immediate number operand,如 3 这样的。&br&&br&而Input Operands的格式与Output大同小异,但是不能加 = 这样的,之前也说过了。但是Input也有一些特殊的修饰,这里就不细谈了,我说过细节很多,编译器实现巨复杂 -_-||&br&&br&然后就是 Clobber部分,这部分分为常规的Clobber和特殊的Clobber,你的例子的memory就属于特殊的Clobber。而memory的作用是什么呢?就是告诉编译器可能会进行memory的读写操作。而编译器识别到memory的时候,就会置上类似usememory这样的Flag,然后在执行ASM语句之前就会去Flush寄存器的值。&br&&br&然后你这个实现返回的并非是之前的值,而是递增后的值。因为按照AT&T汇编语法,第一个是源操作数,第二个是目标操作数。所以,这句话是把i加到*lpAddend这里来。&br&&br&而对于m寄存器来说,在编译器实现其实是很特殊的。当它出现在Output的时候,会被我们移动到Input这里来,相关的索引号都会变化。&br&&br&所以,写代码其实是一件很幸福的事情,而做编译器来实现这些特性其实是一件受虐的事情。
这个问题应该是vczh群里面的那个同学问的吧?这个问题在群里我应该回答了。不过我这里还是想再讲讲GNU Extended ASM(也称为Inline ASM),我做过这块儿的编译器的实现,然后这一块儿也巨复杂,我顺便来简单总结一下(也只能简单),也当普及一下,我觉得不…
来自子话题:
首先, &a data-hash=&44faf17ff5f5a4ccc4cf9bda47de8da2& href=&///people/44faf17ff5f5a4ccc4cf9bda47de8da2& class=&member_mention& data-editable=&true& data-title=&@冯东& data-tip=&p$b$44faf17ff5f5a4ccc4cf9bda47de8da2&&@冯东&/a&是正确的,mariaDB的客户端程序是LGPL的,所以不存在一定要开源的问题。&br&&br&然后, &a data-hash=&836f5b2ee72d& href=&///people/836f5b2ee72d& class=&member_mention& data-tip=&p$b$836f5b2ee72d&&@pansz&/a& 也是对的,通过网络端口于GPL程序通信,并不被认为是GPL的衍生程序,因此使用GPL的数据库服务,也不存在一定要开源的问题。&br&&br&接下来,我想解释一个普遍的误解,就是用了GPL,就一定要开源。事实上,且不谈技术上有绕过这个限制的手段,但至少就WEB应用程序而言,大多数情况下GPL本身都是安全的协议。&br&&br&GPL协议的要求是,如果你将基于GPL的衍生程序二进制文件交付给用户,那么用户有权取得所有的衍生代码。&br&&br&好了,对于web程序,我们通常不会将我们的二进制程序“交付”给用户,我们交付给我们自己,发布在自己的服务器上,然后打开80端口,坐等客户上门。这里就已经很明确了,即使我们的web程序是完全在GPL基础上构建的,也没有义务交付源代码给用户。这里的用户,是指二进制文件的使用者,而不是该文件的服务使用者,一定要区分这个。注意,程序生成的HTML是我们跟客户进行网络通信的协议的一部分,因此,即使事实上HTML就是我们的程序的一部分,也不能将我们发送给客户端的HTML代码视作程序源代码的分发或者进一步的程序编译后的“二进制”文件的分发。&br&&br&因此,对于web开发者来说,GPL本身是一个完全安全的协议。&br&&br&再强调一点就是,有权取得代码的只能是二进制文件交付的对象,而不是任意的不特定的第三者,因此,如果我们为客户开发了一个web系统,这里就需要注意一点,如果你的程序引用了GPL的library,你就不能向你的客户保留任何自有知识产权的代码,你的所有代码都会因此受到GPL的感染而自动授权给客户。但是,记住一点,即使如此,除了你的客户之外的第三者,是无权要求衍生代码的,因为他们不是你的二进制文件的交付对象。当然,在很多企业系统开发中,合同都要求代码知识产权属于客户,所以,其实这里一般来说也不会有问题。&br&&br&(后文我略有有点没有把握,还需要再细读协议,没时间去看,有兴趣的读者可以去研究一下)&br&&br&最后,这两天在炒小米的GPL的问题,其实,小米完全可以将源代码打包放在手机固件中,然后用图片的方式来展现,只要手机用户能够看到代码,其实就是不算违背GPL协议了,并不是一定要向全世界公开一个download链接这样子。
首先, 是正确的,mariaDB的客户端程序是LGPL的,所以不存在一定要开源的问题。然后,
也是对的,通过网络端口于GPL程序通信,并不被认为是GPL的衍生程序,因此使用GPL的数据库服务,也不存在一定要开源的问题。接下来,我想解释一个普遍的误解…
来自子话题:
拿htop来说,我ubuntu装好后直接apt-get install htop 就能装上,用centos我得满世界去找rpm包,很烦躁。。。另外centos装php之类的软件默认把配置文件直接丢/etc下,这点不能忍,ubuntu都是按/etc/php
/etc/mysql 给你分好类。。。其他诸如启动文件之类的也有这些问题,最后就是用ubuntu出了问题基本google一下都有答案,centos碰到几次问题都没解决,所以直接就换ubuntu了,反正个人用着挺稳定,不明白那些说ubuntu不稳定的人具体指哪些。&br&&br&PS:要黑ubuntu不稳定的请拿出具体例子来,别一口一个【流量大了】你就知道了,好像别人没处理过似的。。。
拿htop来说,我ubuntu装好后直接apt-get install htop 就能装上,用centos我得满世界去找rpm包,很烦躁。。。另外centos装php之类的软件默认把配置文件直接丢/etc下,这点不能忍,ubuntu都是按/etc/php /etc/mysql 给你分好类。。。其他诸如启动文件之类的…
来自子话题:
《Linux c 编程一站式学习》,虽然是培训教材,但是深入了C语言本质,不仅讲语言本身,还讲操作系统,计算机组成原理,汇编,编译原理,我也看过K&R之类的经典书籍,但是这本是我见过最好的书。
《Linux c 编程一站式学习》,虽然是培训教材,但是深入了C语言本质,不仅讲语言本身,还讲操作系统,计算机组成原理,汇编,编译原理,我也看过K&R之类的经典书籍,但是这本是我见过最好的书。
来自子话题:
比较经典的开源协议有 GPL,BSD 等等。题主问的是 GNU ,那么 GNU 软件的协议大都是 GPL 。我简单说说 GPL。&br&&br&GPL 软件可以用于商业用途,甚至说,RMS 撰写 GPL 协议的目的就是为了让自己的 GPL 软件 emacs 可以有法律依据的进行一些商业行为(他当时靠卖 emacs 软件的光盘都赚了不少钱)。&br&&br&但是, GPL 软件要求你对该软件的修改必须回馈开源社区,换句话说就是如果你改了代码然后把修改版本程序发布,就必须同时发布你修改的源代码。&br&&br&如果你并没有修改 GPL 软件本身的代码,并且在你的商业行为中,该 GPL 软件是以一个独立的可分割的形式发布,那么他可以不影响你的软件的其它部分。你的其他软件不必遵循 GPL 协议。——否则你的其他部分软件就要受到 GPL 协议的传染,必须遵循 GPL ,也就必须开源。&br&&br&只要满足上面的条件(换句话说只要满足 GPL 协议),你可以对软件进行任何商业行为,甚至包括拿着别人开发的 GPL 软件自己去卖钱。&br&&br&现实中,有很多商业公司希望修改开源软件的代码以符合自己要求,但又不想提供修改过的源代码。&br&还有很多公司使用了未修改源代码的开源软件但并不希望将他作为独立的程序发布而是整合到自己的应用程序当中。这要求将自己的全部应用都开源。&br&&br&很多商业公司认为,在开源的情况下无法保证自己的商业利益,因此会考虑绕开这种模式,所以就会选择避免使用 GPL 软件,所以他们认为 GPL 协议不适合商用。但一部分商业公司认为自己的软件就算开源也仍然符合自己的商业利益,所以他们可以很好的跟开源社区合作,这至少证明 GPL 软件是可以进行商业行为的。&br&&br&其实,很多人听说过的 ubuntu ,就是一个地道的商业公司 canonical 制作的。他们也围绕 ubuntu 进行了很多商业行为。类似的事情还发生在很多其他的 GNU 软件。
比较经典的开源协议有 GPL,BSD 等等。题主问的是 GNU ,那么 GNU 软件的协议大都是 GPL 。我简单说说 GPL。GPL 软件可以用于商业用途,甚至说,RMS 撰写 GPL 协议的目的就是为了让自己的 GPL 软件 emacs 可以有法律依据的进行一些商业行为(他当时靠卖 ema…

我要回帖

更多关于 drracket scheme 的文章

 

随机推荐