转译和编译_10个有趣又能编译为JavaScript的语言,你用过哪些?

点击上方“IT平头哥联盟”,选择“置顶或者星标”

你的关注意义重大!

5a0aed4ab0876db0bf38411c4d70a74f.png

来源:https://www.sitepoint.com/

现代应用相比普通的网页有不同的要求。但是浏览器是一个有着一套(大部分)固定可用的技术的平台,JavaScript依然是web应用的核心语言;任何需要在浏览器上跑的应用都需要使用这种语言。

我们都知道Javascript并不是最好的语言,特别是在复杂的应用中,它可能不太能胜任。为了避免这种情况,一些新的语言或现有语言的编译器被创造出来,你不用写一行Javascript或者考虑这种语言的局限,就能生产在浏览器能运行的代码。

这篇文章包括了十种有趣的语言能够编译为Javascript,在浏览器或者Node.js中被执行。

--ADVERTISEMENT--

Dart

Dart是一个典型的面向对象的语言,任何东西都是一个对象并且任何对象都是一个类的实例(对象也可以表现为函数)。它的特殊性用于打造面向浏览器,服务器和移动设备的应用。它由谷歌来维护,是用于驱动下一代的AdWords UI。AdWords UI是谷歌盈利的重要产品,这也证明了它在体量上的强大。

这种语言可以编译为JavaScript用于浏览器,或者直接通过Dart VM解释,这样也可以允许你构建服务端应用。移动应用可以通过Flutter SDK创建。

复杂的应用还需要一系列特别为任务所设计的成熟的库和语言特性,Dart这些都有。举例来说一个流行的库是AngularDart,一个Dart版本的Angular。

它允许你写非侵入式的类型安全的代码,但是这不是必须的,因为他们可以自动检测类型。它可以允许你快速构建原型而不用过于思考细节,一旦你需要的时候,你可以加入类型让它更健壮。

至于在VM中的并发编程,相比与共享内存线程(Dart是单线程的),Dart使用所谓的_Isolates_,有它自己的堆内存,而交流是通过传递信息。在浏览器上,情况就有点不一样了:相比与创建一个新的_isolates_,你创建一个新的_Workers_。


// Example extracted from dartlang.org

import 'dart:async';
import 'dart:math' show Random;

main() async {
print('Compute π using the Monte Carlo method.');
await for (var estimate in computePi()) {
print('π ≅ $estimate');
}
}

/// Generates a stream of increasingly accurate estimates of π.
Stream computePi({int batch: 1000000}) async* {var total = 0;var count = 0;while (true) {var points = generateRandom().take(batch);var inside = points.where((p) => p.isInsideUnitCircle);
total += batch;
count += inside.length;var ratio = count / total;// Area of a circle is A = π⋅r², therefore π = A/r².// So, when given random points with x ∈ <0,1>,// y ∈ <0,1>, the ratio of those inside a unit circle// should approach π / 4\. Therefore, the value of π// should be:yield ratio * 4;
}
}
Iterable generateRandom([int seed]) sync* {
final random = new Random(seed);while (true) {yield new Point(random.nextDouble(), random.nextDouble());
}
}class Point {
final double x, y;const Point(this.x, this.y);
bool get isInsideUnitCircle => x * x + y * y <= 1;
}

Get started with Dart https://www.dartlang.org/guides/get-started

TypeScript

TypeScript 是Javascript的超集;一个有效的Javascript项目也是一个有效的TypeScript项目只是添加了静态类型。编译器也可以作为ES2015+到当前实现的转译器,这样你总是能得到最新的特性。

不同于其他语言,TypeScript保持了Javascript完整的精神,只是此外添加了增加代码可靠性的功能。这些功能就是类型注释和其他类型相关的功能,得益于专业工具像是静态分析器和其他工具在重构过程的加入,这些功能使写Javascript更加有趣。并且,类型的加入改善了你的应用不同组件之间的接口。

类型诊断是支持性的,你不必从一开始就写所有的类型。你可以先快速的写代码,然后再加入类型来让代码更稳定。

TypeScript同样也支持高级类型,像是交叉类型,联合类型,类型别名,可辨识联合和类型保护。你可以在TypeScript Documentation网站的Advanced Types页面查看。

如果你使用React的话,通过添加React类型,JSX也是支持的。

class Person {
private name: string;
private age: number;
private salary: number;

constructor(name: string, age: number, salary: number) {
this.name = name;
this.age = age;
this.salary = salary;
}

toString(): string {
return `${this.name} (${this.age}) (${this.salary})`;
}
}




——

Elm

Elm是一个可以编译成JS,HTML和JS的纯函数式编程语言。你可以只通过Elm创建一个完整的网站,这使得它是一个对像React这样的Javascript框架的一个很好的代替。通过它创建的应用自动使用了虚拟DOM库,使得它很快。一个大的加分项是内建的结构让你忘记数据流而是关注于数据声明和逻辑。

在Elm中,所有函数都是纯粹的,这意味着他们总是对一个给予的输入返回一个相同的输出。T他们不能做其他任何事情,除非你指定。举例来说,获取一个远程的API你会创建一个_command_函数来通讯外部世界,和一个 subscriptions 函数监听回复。另一个纯粹的点是,值是不可变的,当你需要什么的时候,你创建一个新值而不是改变它。

ELm的接受可以是平缓的;可以使用_ports_来和Javascript或其他库沟通。虽然Elm还没有到达版本1,它已经用于复杂大型的应用了,这使得它对复杂应用是一个可行的解决方案。

ELm其中一个吸引人的功能是初学者友好的编译器,它生成帮助你修复你的代码的信息,而不是产生难以阅读的信息。如果你正在学习这门语言,编译器本身就是一个大的帮助。


module Main exposing (..)

import Html exposing (..)

-- MAIN

main : Program Never Model Msg
main =
Html.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}

-- INIT

type alias Model = String

init : ( Model, Cmd Msg )
init = ( "Hello World!", Cmd.none )

-- UPDATE

type Msg
= DoNothing

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
DoNothing ->
( model, Cmd.none )

-- VIEW

view : Model -> Html Msg
view model =
div [] [text model]

-- SUBSCRIPTIONS

subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none




Get Started with Elm:https://www.sitepoint.com/functional-reactive-programming-elm-introduction/

PureScript

PureScript 是一个纯函数强类型的编程语言,由Phil Freeman创造。它旨在与现有的JavaScript库进行很好的兼容,与Haskell精神上类似,但是核心保留了Javascript。

PureScript一个重要的点是它的极简主义。它没有包含任何在其他语言认为很重要的功能库。比如,相比于在编译器中包含generators和promises,你可以自己使用指定的库来完成这个任务。你可以选择你想要的功能的实现,当使用PureScript的时候需要高效和个性化的经验,能使生成的代码尽可能的小。

这个编译器另一个重要的功能是构建出清晰可读的代码,能够兼容Javascript包括库和工具。

和其他语言一样,PureScript有它自己的构建工具称为Pulp,可以和Gulp做对比,只是用这个语言写的。

至于类型系统,不同于另一个ML类的语言Elm,PureScript支持更先进的类型特性比如高级类类型和类型类,这些是从Haskell来的特性,允许创建复杂的抽象。


module Main where

import Prelude
import Data.Foldable (fold)
import TryPureScript

main =
render $ fold
[ h1 (text "Try PureScript!")
, p (text "Try out the examples below, or create your own!")
, h2 (text "Examples")
, list (map fromExample examples)
]
where
fromExample { title, gist } =
link ("?gist=" <> gist) (text title)

examples =
[ { title: "Algebraic Data Types"
, gist: "37c3c97f47a43f20c548"
}
, { title: "Loops"
, gist: "cfdabdcd085d4ac3dc46"
}
, { title: "Operators"
, gist: "3044550f29a7c5d3d0d0"
}
]



Get Started with PureScripthttps://github.com/purescript/documentation/blob/master/guides/Getting-Started.md

CoffeeScript

CoffeeScript是一个旨在暴露JavaScript的精华并提供一个干净的语法并在合适地方保留语义的语言。虽然近年来这个语言的热度在下降,它正在改变方向并且现在有一个新的大版本支持ES2015+特性。

你用CoffeeScript写的代码直接转化为可读的Javascript代码并且兼容现有的库。从2版本开始,编译器会产生兼容最新版本的ECMAScript的代码,比如,每次你使用class,你就在Javascript中得到class。并且,如果你使用React,好消息是,JSX兼容CoffeeScript。

这个编译器有一个十分有特色的功能是有能力处理用literate style写的代码。literate style相比于强调代码而把注释作为添加这种方式,而是你需要在一开始就写注释,代码只是偶尔出现。这种写代码的方式由Donald Knuth推荐,使得一个代码文件非常像一个技术文档。

相比于其他语言,CoffeeScript代码可以在浏览器中用一个库直接执行。所以如果你想要写一个快速测试,你可以写你的代码在一个text/coffeescriptscript标签中,并且引入编译器,这样就可以把你的代码轻易的转化为JavaScript了。


# Assignment:
number = 42
opposite = true

# Conditions:
number = -42 if opposite

# Functions:
square = (x) -> x * x

# Arrays:
list = [1, 2, 3, 4, 5]

# Objects:
math =
root: Math.sqrt
square: square
cube: (x) -> x * square x

# Splats:
race = (winner, runners...) ->
print winner, runners

# Existence:
alert "I knew it!" if elvis?

# Array comprehensions:
cubes = (math.cube num for num in list)




Get Started with CoffeeScript http://coffeescript.org/v2/#coffeescript-2

ClojureScript

ClojureScript是一个转化Clojure编程语言为JavaScript的编译器。Clojure是一个多用途的函数式原因伴随着动态类型和不可变数据结构的支持。

这是这个列表中唯一一个属于Lisp家族的语言,自然有着它们共同的特性。举例来说,代码可以作为数据,支持宏系统,使得元编程成为可能。Unlike other Lisps, Clojure has support for immutable data structures, making the management of side-effects easier.不同于其他类Lisp,Clojure支持不可变数据结构,使得函数副作用的管理更容易。

这个语法对初学者看起吓人,因为圆括号的使用。但这样使用是经过深思熟虑的,并且在长远看来你一定会感谢这种语法的。语法的极简和抽象能力使得Lisp成为一个解决高抽象问题的强力工具。

虽然Clojure主要是一个函数式语言,但是不像PureScript或者Elm那样纯粹。函数副作用还是会发生,但是其他函数式特性也会存在。

ClojureScript使用Google Closure做代码优化并且也兼容现有的JavaScript库。


; Extracted from https://github.com/clojure/clojurescript/blob/master/samples/dom/src/dom/test.cljs

(ns dom.test
(:require [clojure.browser.event :as event]
[clojure.browser.dom :as dom]))

(defn log [& args]
(.log js/console (apply pr-str args)))

(defn log-obj [obj]
(.log js/console obj))

(defn log-listener-count []
(log "listener count: " (event/total-listener-count)))

(def source (dom/get-element "source"))
(def destination (dom/get-element "destination"))

(dom/append source
(dom/element "Testing me ")
(dom/element "out!"))

(def success-count (atom 0))

(log-listener-count)

(event/listen source
:click
(fn [e]
(let [i (swap! success-count inc)
e (dom/element :li
{:id "testing"
:class "test me out please"}
"It worked!")]
(log-obj e)
(log i)
(dom/append destinatione))))
(log-obj (dom/element "Text node"))
(log-obj (dom/element :li))
(log-obj (dom/element :li {:class "foo"}))
(log-obj (dom/element :li {:class "bar"} "text node"))
(log-obj (dom/element [:ul [:li :li :li]]))
(log-obj (dom/element :ul [:li :li :li]))
(log-obj (dom/element :li {} [:ul {} [:li :li :li]]))
(log-obj (dom/element [:li {:class "baz"} [:li {:class "quux"}]]))
(log-obj source)
(log-listener-count)

Get Started with ClojureScript https://clojurescript.org/guides/quick-start

Scala.js

Scala.js是一个将Scala编程语言转化为JavaScript的编译器。Scala是一个旨在融合面向对象和函数式编程两种思想到一种语言,为了打造容易接受的强力的工具

作为一个强类型语言,你会从它部分类型推断这种灵活的类型系统中受益。大部分的值会被推断,但函数参数仍然需要明确的类型注释。

虽然许多通常的面向对象模式都支持(比如任何值都是一个对象并且操作是一个方法调用),但你也有函数式特性比如一等函数和不可变数据结构。

Scala.js其中一个特殊的优势是,你可以毫不费力的从你熟悉的面向对象开始向更函数式的转移,以你自己的需要和步调。同样的,现存的JavaScript代码和库和你的Scala代码兼容。

Scala的初学者会发现这个语言和JavaScript并没有多大不同,对比下面两个意思一样的代码:


// JavaScript
var xhr = new XMLHttpRequest();

xhr.open("GET",
"https://api.twitter.com/1.1/search/" +
"tweets.json?q=%23scalajs"
);
xhr.onload = (e) => {
if (xhr.status === 200) {
var r = JSON.parse(xhr.responseText);
$("#tweets").html(parseTweets(r));
}
};
xhr.send();





// Scala.js
val xhr = new XMLHttpRequest()

xhr.open("GET",
"https://api.twitter.com/1.1/search/" +
"tweets.json?q=%23scalajs"
)
xhr.onload = { (e: Event) =>
if (xhr.status == 200) {
val r = JSON.parse(xhr.responseText)
$("#tweets").html(parseTweets(r))
}
}
xhr.send()




Get Started with Scala.jshttps://www.scala-js.org/tutorial/basic/

Reason

Reason是一个由Facebook创造和维护的语言,它为OCaml编译器提供了新的语法,并且代码可以转换成JavaScript和原生代码。

作为ML家族的一部分并且自己本身是函数式语言,它天生提供了强大但是灵活的伴随类型推断的类型系统,代数数据类型和模式匹配。它也支持不可变数据类型和参数多态(也被其他语言称为泛型),但是在OCaml中,也是支持面向对象编程的。

通过 bucklescript绑定就可以使用现存的JavaScript库。你也可以在你的Reason代码旁边混入你的JavaScript。插入的JavaScript代码不会严格的检查,但作为快速修复和原因也是不错的。

如果你是一个React开发者,绑定是可能的,并且这个语言也支持JSX。


/* A type variant being pattern matched */

let possiblyNullValue1 = None;
let possiblyNullValue2 = Some "Hello@";

switch possiblyNullValue2 {
| None => print_endline "Nothing to see here."
| Some message => print_endline message
};

/* Parametrized types */

type universityStudent = {gpa: float};
type response 'studentType = {status: int, student: 'studentType};
let result: response universityStudent = fetchDataFromServer ();

/* A simple typed object */

type payload = Js.t {.
name: string,
age: int
};
let obj1: payload = {"name": "John", "age": 30};




Get Started with Reason https://reasonml.github.io/guide/javascript/quickstart

Haxe

Haxe是一个多范式编程语言,并且它的编译器可以产生二进制或者其他语言的源代码。

虽然Haxe提供了严格的类型系统并带有类型推断,它也可以作为动态语言只要目标语言支持。同样的,它也支持多种的编程风格比如面向对象,泛型,函数式。

当你写Haxe代码的时候,你可以为编译指定多个平台或语言,但不需要对代码做什么大的改变。指定目标的代码块也支持。

你可以用Haxe同时写前端和后端用同样的代码,并且通过Haxe Remoting进行沟通,既可以同步连接也可以异步连接。

不出所料,Haxe代码可以兼容现有的库但也提供了成熟的标准库。


// Example extracted from http://code.haxe.org

extern class Database {
function new();function getProperty<T>(property:Property):T;function setProperty<T>(property:Property, value:T):Void;
}abstract Property<T>(String) {
public inline function new(name) {
this = name;
}
}

class Main {
static inline var PLAYER_NAME = new Property<String>("playerName");
static inline var PLAYER_LEVEL = new Property("playerLevel");static function main() {var db = new Database();var playerName = db.getProperty(PLAYER_NAME);
trace(playerName.toUpperCase());
db.setProperty(PLAYER_LEVEL, 1);
}
}

Get Started with Reasonhttps://haxe.org/documentation/introduction/language-introduction.html

Nim

Nim是一个静态类型,多范式编程语言,有着极简风格与空格敏感的语法,编译为C,C++和JavaScript。

这个语言本身很小,但它的元编程能力会吸引你自己去实现一些在别的语言内置的功能。这些构建模块有宏,模板和泛型,通过它们你可以实现不论是简单的功能还是不同的泛型。这使得Nim成为一个非常通用的语言可以适应你的需求,有着Lisp的精髓。

Nim的语法抽象功能允许你去让语言去适应你的功能,让真正的[DSLs][20]成为可能。如果你有着专门的任务需要处理,你可以获得更高级的表达性。


# Reverse a string
proc reverse(s: string): string =
result = ""
for i in countdown(high(s), 0):
result.add s[i]

var str1 = "Reverse This!"
echo "Reversed: ", reverse(str1)

# Using templates
template genType(name, fieldname: expr, fieldtype: typedesc) =
type
name = object
fieldname: fieldtype

genType(Test, foo, int)

var x = Test(foo: 4566)
echo(x.foo) # 4566




Get Started with Nimhttps://nim-lang.org/documentation.html

结尾

如果JavaScript不是你最喜欢的语言,你依然可以创建web应用而不用忍受这个技术的缺点。可供选择的范围很广,从纯粹的函数式语言,比如PureScript,到面向对象语言,比如Dart。并且如果你想要不只是语言的转化,你也可以选择比如Elm,Elm提供像是虚拟DOM和内置的架构这样的工具。

你是否有尝试了这篇文章的任何一种语言,又或者你有自己的推荐?请在评论中让我知道

7fc965430a7a40ef60f2ec8f8ea75346.png

热门推荐:

    编写更好的 JavaScript 条件式和匹配条件的技巧

你是否头疼于每天有做不完的需求和改不完的bug?说说前端未来几年的路该怎么走如何用CSS3画出懂你的3D魔方?如有收获,点个在看,就是对我最大的支持56b6c61e613f8abf09193695b4df14bc.png

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

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

相关文章

OPC服务器如何采集设备的信息,如何将OPC服务器采集的设备数据转为MQTT方式,实现云端发布或订阅...

通过与PLC、智能仪表等硬件设备&#xff0c;以及OPC服务器、数据库等软件建立通讯&#xff0c;进行实时数据采集监控&#xff0c;然后将相关数据转换为数据库、OPC&#xff0c;以及MQTT、HTTP等多种服务接口&#xff0c;实现各类自动化与信息化系统软件灵活对接。MQTT智能网关案…

微信小程序摄像头监控_微信必备黑科技小程序!

↑点击上方蓝字关注极物推荐欢迎分享到朋友圈-不花冤枉钱&#xff0c;历史见真谛对于喜欢购物的朋友们&#xff0c;这绝对是一把利器。只需把商品链接复制粘贴到上面&#xff0c;就可以轻松的查阅到该商品的历史价格&#xff0c;轻松直观的了解商品过去的价格波动&#xff0c;同…

无线打印 airprint 服务器,如何让 Windows 的共享打印机支持 AirPrint

对很多办公室环境来说&#xff0c;局域网共享打印机往往都是刚需&#xff0c;而如果局域网内的设备大多为 Windows 设备&#xff0c;通过 网络共享 的方式就可以轻松将所连接的 USB 打印机共享到局域网。但对同一个局域网内的 Apple 设备而言&#xff0c;因为很多打印机的 Mac …

硒测试中所需的功能和示例

所需功能是用于声明一组基本要求&#xff08;例如浏览器&#xff0c;操作系统&#xff0c;浏览器版本等的组合&#xff09;的类&#xff0c;以对Web应用程序执行自动跨浏览器测试。 当我们尝试通过Selenium自动化测试来自动化测试脚本时&#xff0c;我们需要考虑这些组合&…

边沿触发是什么意思_集基耦合双稳电路,集成化单稳电路,数字逻辑电路,门电路,触发器...

1).箝位器能把脉冲电压维持在某个数值上而使波形保持不变的电路称为箝位器。它也是整形电路的一种。例如电视信号在传输过程中会造成失真&#xff0c;为了使脉冲波形恢复原样&#xff0c;接收机里就要用箝位电路把波形顶部箝制在某个固定电平上。下图中反相器输出端上就有一个箝…

鲸鱼优化算法_盘点 35 个 Java 代码优化细节

代码优化&#xff0c;一个很重要的课题。可能有些人觉得没用&#xff0c;一些细小的地方有什么好修改的&#xff0c;改与不改对于代码的运行效率有什么影响呢&#xff1f;这个问题我是这么考虑的&#xff0c;就像大海里面的鲸鱼一样&#xff0c;它吃一条小虾米有用吗&#xff1…

powerbi导入地图_Power BI系列教程之powerBI功能介绍及使用导引(一)

作为从事数据分析相关工作的小伙伴&#xff0c;我们总会遇到一些工作是每周、每月甚至每天都是重复做的工作&#xff0c;这个时候我们有没有一种结构化的方法来处理这一些数据呢&#xff1f;答案是肯定的&#xff0c;微软为了满足广大职场数据分析人员的需求&#xff0c;开发了…

模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01

「干货」栏目的开启是为了帮大家科普学习关于品牌出海、数字营销与跨境电商行业相关的知识&#xff0c;以及我们在业内会遇到的情况和一些规避的方法。第一讲搜索者我们整个搜索营销活动都是围绕搜索者展开的我们的目的是把搜索者转化为我们的销售机会所以&#xff0c;研究搜索…

linux shc shell脚本_详解shell脚本加密解密软件—gzese和shc

概述以我个人的需求为例&#xff0c;有时写一个脚本需要传密码&#xff0c;如果直接把密码写在脚本里会存在安全问题&#xff0c;一般是把密码写在脚本里&#xff0c;作为参数传给脚本&#xff0c;而保存密码的脚本&#xff0c;使用某种手段加密&#xff0c;令其不可读但是可执…

linux 查看主板sn_如何在 Linux 上查找硬件规格

在 Linux 系统上有许多工具可用于查找硬件规格。-- Sk(作者)在 Linux 系统上有许多工具可用于查找硬件规格。在这里&#xff0c;我列出了四种最常用的工具&#xff0c;可以获取 Linux 系统的几乎所有硬件(和软件)细节。好在是这些工具在某些 Linux 发行版上默认预装。我在 Ubun…

laravel 分词搜索匹配度_【地名地址】面向智慧城市的高精度地名地址匹配方法...

点击上方蓝字关注我们↑↑↑↑原 文 摘 要针对智慧城市建设中各种业务数据对地名地址匹配准确度和效率不高的问题&#xff0c;本文提出一种面向智慧城市的高精度地名地址匹配方法。该方法在基于中文分词的地名地址匹配技术框架下&#xff0c;综合利用精细化地名地址库构建、地名…

使用通用mapper实现条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了...

在excel中条件求和想必大家都不陌生&#xff0c;这个可以说是我们工作中经常遇到的问题&#xff0c;常见的条件求和函数有sumif以及sumifs&#xff0c;但是还有一个更加强但知道的人却非常少的函数&#xff0c;他就是dsum函数&#xff0c;dsum相交于sumif以及sumifs函数理解起来…

输入文字自动生成图片_批量生成变化的图片文字海报

最近“双十一”活动大家已经进入了鸡血状态&#xff0c;运营的小伙伴给设计出了个难题&#xff0c;搞的设计小伙伴们进入了癫狂模式。本着工具提升效率的原则&#xff0c;我又开始去研究如何批量修改图片内容了&#xff0c;小小的成果和大家分享一下。提出问题为每一位支付了定…

生成私钥 p q rsa_【安全】理解 RSA 算法

Public-key Crytography简介Public-key cryptography (公开密钥加密) 又称 asymmetric cryptography (非对称加密)&#xff0c;即存在两把不同的密钥&#xff0c;分别称为公钥 Pu 和私钥 Pr&#xff0c;公钥通常用来加密明文 M&#xff0c;只有私钥才能解密密文 C&#xff0c;如…

Java:如何创建轻量级数据库微服务

基于云的Java数据库应用程序的数量每分钟都在增加。 许多组织部署了数百甚至数千个微服务实例。 但是&#xff0c;相对于运行时环境&#xff0c;大多数应用程序会带来惊人数量的不必要开销。 反过来&#xff0c;这会使应用程序运行更慢&#xff0c;运行成本更高。 在本文中&am…

垃圾分类毕设java程序_垃圾“拍一拍”,分类不用愁!生活垃圾分类查询小程序上线啦...

垃圾种类太多&#xff1f;分类容易搞混&#xff1f;乐清人 注意啦&#xff0c;拿起手机就能查&#xff01;11月6日&#xff0c;生活垃圾分类查询系统登陆乐清市综合行政执法局官方微信公众号&#xff0c;输入垃圾名称即可快速了解垃圾所属哪一类&#xff0c;还有拍照识别查询&a…

带有Prometheus的弹簧靴和千分尺第5部分:旋转Prometheus

以前&#xff0c;我们获得了Spring Boot Application适配器&#xff0c;以便为Prometheus公开端点。 该博客将重点介绍如何设置和配置Prometheus&#xff0c;以便为Spring Boot端点提供服务器。 因此&#xff0c;让我们开始使用docker来启动Prometheus服务器。 在继续进行Pr…

允许跨域访问_PHP设置多域名允许跨域访问

php中文网最新课程 每日17点准时技术干货分享 针对 PHP 语言设置多域名允许跨域访问 服务器变量: 服务器变量存储在 $_SERVER 数组中,在这个数组中有一个特殊的键值:HTTP_ORIGIN。 这个键只在跨域的时候才会存在值,同源时为空字符串 响应头设置允许某域名访问:access-cont…

Apache Camel 3.1 –即将推出更多骆驼核心优化

希望一切都很好&#xff0c;您可以安全进入2020年。 Camel团队已经在忙于开发下一个Camel 3.1版本。 目标之一是继续优化骆驼核心&#xff0c;这一次我们花了一些时间来寻找路由引擎中的一些热点。 我们所研究的方面之一也是在Camel路由的每个消息中发生的对象分配。 JVM本身…

判断字符为空_算法题:字符串转换整数 (atoi)

题目描述题解分析他人更优解一、题目描述二、题解import math class Solution:def myAtoi(self,str):str str.strip() #去除字符串两边的空格if len(str) 0: return 0 #如果字符串为空返回0if not str[0].isdigit() and str[0] ! - and str[0] ! : #判断第一个字符是…