Shebang来Java了吗?

尽管添加对Unix风格的shebang ( #! )的支持从来不是 JEP 330 [“启动单文件源代码程序”] 的中心目标 ,但围绕JEP 330“单个文件源程序”的潜在功能存在一些问题。为了支持Unix风格的shebang ,在OpenJDK jdk-dev邮件列表上引起了广泛的讨论。 这场“激烈的讨论”导致Mark Reinhold对JEP 330 的审查期增加了一周 (现已于5月31日结束),以允许就针对JDK 330的JEP 330进行进一步的讨论。

尽管对于是否应该添加shebang支持仍存在一些分歧 ,但似乎共识已转移到一项提案,以明确区分常规的独立于平台的Java源代码文件(以扩展名.java结尾的文件)和新的。 JEP 330“可执行”平台特定的“单文件源代码程序”。 明显的区别是值得注意的,因为它允许将Shebang表示在后者中(JEP 330可执行平台特定的单文件源代码程序),而不能在前者中使用(我们所使用的传统Java平台无关的源代码)。都习惯了)。

在此讨论中, 乔纳森·吉尔斯 ( Jonathan Giles)的一条消息指出“不想更改JLS或javac的各种原因”,并指出“ shebang脚本是在某些(但不是全部)平台上定义的可执行格式,”指出“创建shebang脚本通常不只是在文件中添加第一行”,还阐明了明确区分传统Java源代码和JEP 330可执行Java脚本的概念:

虽然将文件重命名为命令友好名称是可选的,但也希望将其重命名。 例如,名为“ HelloWorld.java”的源文件可能被安装为“ helloworld”。 而且,尽管JEP描述了使用`java HelloWorld.java'执行小型单文件程序或仅使用`helloworld`作为平台特定的shebang脚本执行的用例,但似乎并没有常见的用例执行`HelloWorld.java`。 因此,如果通常将shebang脚本重命名为命令友好的名称,则将无法使用“ javac helloworld”直接对其进行编译,因为这对于Javac而言不是有效的命令行。 这降低了使javac忽略shebang行的任何潜在便利。

由于Java源文件与特定于平台的可执行脚本是不同的工件,因此有区别地对待它们是有道理的,并且由于我们不想更改Java语言以支持shebang行,因此建议修改JEP和实现,以便shebang绝不会从Java源文件(即以`.java`结尾的文件)中删除行。 这就避免了处理Java源文件的工具生态系统必须处理诸如shebang行之类的任意工件的问题。 所做的更改仍将允许直接执行Java源文件(如java HelloWorld.java),以及执行shebang脚本(如helloworld)。

下表总结了与每种“ Java”文件样式相关的特征和优点。

项目 传统Java源文件 JEP 330可执行单文件源代码程序
内容描述
/名称
“ Java源文件(以.java扩展名结尾) ” “ 可执行脚本(不使用[ .java ]扩展名。) “
“ Java源文件 ” “ shebang脚本 “
“ Java源文件 ” “ 包含Java代码的脚本 ”或“ 特定于平台的可执行脚本 ”
“ Java源文件,由以'.java'结尾的文件名标识 ”
舍邦 不支持 支持的
平台 独立 依附
显式编译 没有

乔纳森·吉本斯(Jonathan Gibbons)总结了JEP 330的意图 :“这里的总主题不是将Java演变为脚本语言,而是使诸如Java启动器之类的工具更友好地支持在可执行文本文件中使用Java源代码,以便减少运行简单程序的仪式。”

讨论还涵盖了其他方法,例如binfmt_misc (另请参见此处 ),Unix风格的“ here文档 ”( 此处定义文档 ),“ 在Java启动器中支持'-'STDIN源 ”以及将Linux更改为支持“ la”。 -la-bang: //!

讨论中另一个有趣的旁注是Brian Goetz 对JEP 330如何达到其当前状态的“回顾” 。 他谈到了导致人们认识到的“无数小时聆听人们对Java的关注”,“人们表达关注的一个普遍主题是'激活能量'; 在Java中做简单的事情需要太多的固定工作。” Goetz指出,JShell和JEP 330是解决此问题的许多可能方法中的两种,并且这两种方法是在考虑“成本(在多个维度上)”后做出“关于哪种方法影响最大的主观选择”之后从众多方法中选择的。做出这些选择时的收益和利益(或我们对收益的主观估计)。”

因此,“常规Java”源代码文件将不会得到shebang的支持,但这并不是什么大问题,因为它们确实不需要它们。 但是,用Java编写的基于JEP 330的基于平台的依赖于可执行文件的单文件脚本似乎将在第一行中支持可选的shebang。 我们可能会在本周四之前知道JEP 330是否将针对JDK 11。

翻译自: https://www.javacodegeeks.com/2018/05/shebang-coming-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++编程题1】数组指针之字符串排序

题目 用数组指针处理50个不等长字符串。写一个函数对字符串按降序排序&#xff0c;然后在主函数输入这50个字符串&#xff0c;调用函数后&#xff0c;再输出这50个已经排好序的字符串。 代码 子函数&#xff1a; #include <iostream> using namespace std; #define N…

如何用Java编写类似C的Sizeof函数

如果您刚开始学习Java并且是C语言背景&#xff0c;那么您可能已经注意到Java和C编程语言之间存在一些差异&#xff0c;例如String是Java中的对象&#xff0c;而不是NULL终止的字符数组。 同样&#xff0c;Java中没有sizeof&#xff08;&#xff09;运算符。 所有原始值都有预定…

【C++编程题2】字符串插入空格

题目 从键盘输入一个字符串&#xff0c;然后按照下面要求输出 从键盘输入一个字符串&#xff0c;然后按照下面要求输出一个新字符串&#xff1a;新串是在原串中的每两个字符之间插入一个空格&#xff0c;如原串为 abcd&#xff0c;则新串为a口b口c口d口&#xff08;口表示空格…

Spring启动教程

1.简介 如果您一直想使用一个Web框架&#xff0c;它使您能够快速开始API开发&#xff0c;而无须设置Web服务器&#xff0c;收集所有有线依赖项&#xff0c;安装各种工具的麻烦&#xff0c;那么您将拥有一个出色的框架&#xff0c;即Spring开机 Spring Boot的主要座右铭是约定优…

【LDPC系列1】基于MATLAB中LDPC编译码器对象的图像传输通信系统仿真

关注公号【逆向通信猿】更精彩!!! 1. 构造编码器对象 采用MATLAB内置的comm.LDPCEncoder构造编码器对象,其中使用默认的校验矩阵,信息位长32400比特,码长64800比特,该校验矩阵中除第一行中1的个数为6个外,其余行中1的个数均为7;前12960列中1的个数为8,后32400列构成…

【LDPC系列2】基于MATLAB中LDPC编译码器对象的图像传输通信系统仿真(IEEE 802.16e标准协议基础矩阵)

关注公号【逆向通信猿】更精彩!!! 1. 构造校验矩阵H,并保存为mat文件 采用IEEE 802.16e标准协议中的基础校验矩阵 通过构造QC-LDPC校验矩阵,码长n=2304,信息长k=1152,码率r=1/2,基础矩阵维数为1224: Hb = [-1 94 73 -1

.xhr长轮询_使用Spring 3.2的DeferredResult进行长轮询

.xhr长轮询在我们的最后一集中 &#xff0c; Agile Cowboys Inc.的首席执行官刚刚雇用了Java / Spring顾问&#xff0c;方法是为他提供最初为女友购买的保时捷。 这位首席执行官的女友因失去保时捷而感到不安&#xff0c;已将其婚外恋告诉了他的妻子。 他的妻子在分拆了CEO的套…

十进制数与八进制数互相转换(MATLAB和C版本)

一、八进制数转十进制数 C语言实现 实现思路和参数: /* Function: ConvertOctaltoDecimal* Abstract: Convert an octal number to its equivalent decimal value** - First compute the number of digits in the octal number* - Then perform the conversion, one …

Java正成为COBOL的一部分-它将成为COBOL的一部分吗?

任何从大学&#xff0c;技术学校或社区学院毕业的计算机科学专业都接受过培训。 每个身材高大的公司都使用该语言&#xff0c;并拥有一批具备此能力的程序员。 通用语言可以推动业务发展。 1985年是COBOL。今天是Java。 尽管存在差异&#xff0c;但这两种语言在行为轨迹上都具…

VS2010附加进程调试DLL时断点无法断下的解决方法

系统版本&#xff1a;Win10 x64 1809 VS版本&#xff1a;VS2017 企业版 问题一 在动态链接库(DLL)附加到进程调试时&#xff0c;用VS2017附加后单步调试&#xff0c;结果发现总是在调试过程中卡死&#xff0c;VS2017无响应&#xff1b; 解决办法是&#xff1a;强制结束VS2017…

MATLAB库函数polly2trellis(卷积码生成多项式转网格图描述)的实现过程详解

关注公号【逆向通信猿】更精彩!!! 生成多项式转网格图 在MATLAB中,卷积码的维特比(Viterbi)译码实现通常需要先将生成多项式转换成网格图描述,然后才能利用网格图进行维特比译码 生成多项式转网格图描述的built-in函数为poly2trellis,在MATLAB中,改函数为通信工具箱…

java反射api研究_深入研究Java 8中的可选类API

java反射api研究作为Java程序员&#xff0c;我们所有人都经历了以下情况&#xff1a;我们调用一个方法来获取某个值&#xff0c;然后代替直接对返回值调用某些方法&#xff0c;我们首先必须检查返回值是否不为null&#xff0c;然后在返回值。 这是像Guava这样的外部API试图解决…

【卷积码系列1】(n,k,m)卷积码的编码原理详解及MATLAB实现

关注公号【逆向通信猿】更精彩!!! 原理 编码电路图 ( n , k , m ) (n,k,m) (n,k,

用于SaaS和NoSQL的Jdbi

一个自然的接口&#xff0c;用于与CRM&#xff0c;ERP&#xff0c;会计&#xff0c;营销自动化&#xff0c;NoSQL&#xff0c;平面文件等基于Java的数据集成 Jdbi是Java的SQL便利库&#xff0c;它为JDBC提供更自然的Java数据库接口&#xff0c;该接口易于绑定到域数据类型。 该…

【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数)

关注公号【逆向通信猿】更精彩!!! 回顾 之前关于(3,1,3)卷积码的维特比译码仿真写过一篇文章(基于C语言实现): 卷积码Viterbi译码算法基本原理及C语言实现 文中从概率的角度出发,对卷积码的基于硬判决和软判决维特比译码原理进行了阐述,最后以(3,1,3)系统卷积码为例…

【卷积码系列3】(n,k,m)卷积码的维特比译码实现(不使用MATLAB库函数)及性能对比(vitdec函数不使用MATLAB库函数【全部代码需私信另外付费获取】)

理论基础 MATLAB库函数polly2trellis(卷积码生成多项式转网格图描述)的实现过程详解 上面这篇仅作为了解!!! 【卷积码系列1】(n,k,m)卷积码的编码原理详解及MATLAB实现 【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数) 维特比译码曲…

【数字信号处理】基于DFT的滤波系列1

一、引言 离散傅立叶变换(DFT)是很多数字信号处理(DSP)层面的核心,因此我们从这块开始。 我们首先快速回顾一下 DFT 的一些要点。 该模块这一部分的完整内容列表是: DFT 回顾 – 实数和复数形式一维(例如时间序列)数据的 DFT 滤波DFT 滤波的非理想行为窗口化二维图像的D…

udt java_Java DB中的Java用户定义类型(UDT)

udt javaJava DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 用户定义类型&#xff08;UDT&#xff09;是Java类&#xff0c;其实例&#xff08;对象&#xff09;存储在数据库表列中。 U…

【自适应盲均衡9】基于判决反馈的多径衰落信道的盲均衡与MATLAB仿真(CMA-DFE)

关注公号【逆向通信猿】更精彩!!! 关于基于常模准则的盲均衡(即CMA)的基础知识,首先可参考本人博客 【自适应盲均衡2】多径衰落信道的复数常模算法(CMA)的理论推导与MATLAB仿真 引言——判决反馈均衡器(DFE)的引入 线性FIR均衡器一直作为克服信道失真的主要手段。它对…

Java批处理教程

在当今世界&#xff0c;互联网已经改变了我们的生活方式&#xff0c;其主要原因之一是大多数日常琐事都使用互联网。 这导致可用于处理的大量数据。 其中涉及大量数据的一些示例是处理工资单&#xff0c;银行对帐单&#xff0c;利息计算等。因此&#xff0c;请设想一下&#x…