当前位置: 首页 > news >正文

【互联网架构】聊一聊所谓的“跨语言、跨平台“

文章目录

  • 跨语言
  • 跨平台
  • 【饭后杂谈】为什么有人说Java的跨平台很鸡肋?


很多技术都具有跨语言、跨平台的特点
比如JSON是跨语言的、Java是跨平台的、UniAPP、Electron是跨平台的

跨语言和跨平台,是比较重要的一个特性。这些特性经常能够决定开发者是否要使用它

对于一项技术能不能跨语言、跨平台,我的理解是:基于一个语言特性设计的技术,就不能跨语言;基于一个平台特性设计的技术,就不能跨平台。
同理,设计一项技术时,如果这个技术独立于语言/平台特性,或者把语言/平台特性隐藏在调用接口层之下,那它就满足了跨语言、跨平台的基础要求


跨语言

不受语言限制,不需要让开发者关心在 不同编程语言 的影响的,就叫跨语言,也叫语言中立。

跨语言对什么最重要?

我认为 跨语言对"通信技术"最重要

在分布式、微服务日益强大的今天,让整体架构都采用统一的语言已经不切实际。况且更好用的语言(例如Golang)层出不穷,新事物总要慢慢取缔旧事物,跨语言通信早已不是什么新鲜事。

很多我们常用的通信技术都是跨语言的,比如通信协议(每个语言都支持TCP/IP协议族吧,这是硬性需求)、序列化方案(XML、JSON、Protobuf等)

而不跨语言的技术也有,比如golang的gob、java的serializable,这些语言自带的序列化不是跨语言的,它们包含了很多语言特性。


跨平台

不受平台限制,不需要让开发者关心在 不同平台 的影响的,就叫跨平台,也叫平台中立。

平台指的是运行环境,如CPU架构不同(引发的指令集不同)、系统架构不同(导致的API不同)、设备形态不同(大小、运行方式、操作方式等)
例如:Windows、MacOS、Linux、手机、平板、web网页、小程序、穿戴设备(手表、手环等)、PS(PlayStation)、NS(Nintendo Switch)等等

跨平台对什么最重要?

我认为 跨平台对"编程语言和GUI框架"很重要
因为不同平台的架构、GUI-API都不一样。

例如 UniAPP,可以编写一套代码,同时编译到多个平台(小程序、Web、IOS APP、Android APP)运行的UI框架。

例如 Java,一套代码编译之后的jar包,可以在Windows、MacOS、Linux、Solaris平台上运行,只需要在这些平台上安装对应平台的Java运行环境(JRE)即可

例如 GoLang,它的 交叉编译 技术让一套代码可以编译成任何平台的可执行程序。

尽管Java和Go的跨平台方法不一样,但他们都做到了跨平台,不需要开发者针对不同平台开发不同的代码。

当然也有不跨平台的技术。甚至还有不跨平台的序列化技术,现在看来是多么没有意义,如今作为一个序列化技术,"跨平台"应该是最基础的要求了。

摘自美团技术-序列化和反序列化
在这里插入图片描述

跨平台的缺陷
跨平台虽然很好,但也有缺陷。

以GUI而言,每个平台提供的GUI控件和属性多多少少有点差别。为了保证跨平台,UI框架可能只能提供所有平台都有的控件和属性,但这样做出来的UI就会过于简单、不好看。但如果调用平台的API,就可以做出相对好看的效果

UniAPP为了解决这个问题,提供了"条件编译"这个办法,可以针对不同平台,编写不同的定制性代码,这些代码会在编译时根据选择的平台决定是否参与编译。


【饭后杂谈】为什么有人说Java的跨平台很鸡肋?

为什么有人说 Java 的跨平台很鸡肋?

Java一直宣称的跨平台,其实现在来看已经不怎么重要了。因为现在主流的服务器开发技术也没有不支持跨平台的了。
像是go也可以跨平台编译,在哪个平台上运行直接打哪个平台的包即可。而且golang编译包还是exe,可以直接运行,不需要像java一样还要安装JRE。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


相关文章:

【互联网架构】聊一聊所谓的“跨语言、跨平台“

文章目录序跨语言跨平台【饭后杂谈】为什么有人说Java的跨平台很鸡肋?序 很多技术都具有跨语言、跨平台的特点 比如JSON是跨语言的、Java是跨平台的、UniAPP、Electron是跨平台的 跨语言和跨平台,是比较重要的一个特性。这些特性经常能够决定开发者是否…...

1.JVM常识之 类加载器

1.jvm组成 JVM组成: 1.类加载器 2.运行时数据区 3.执行引擎 4.本地库接口 各组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码…...

一天搞定《AI工程师的PySide2 PyQt5实战开发手册》

PySide2/PySide6、PyQt5/PyQt6:都是基于Qt 的Python库,可以形象地这样说,PySide2 是Qt的 亲儿子(Qt官方开发的) , PyQt5 是Qt还没有亲儿子之前的收的 义子 (Riverbank Computing这个公司开发的,有商业版权限…...

身份推理桌游

目录 杀人游戏(天黑请闭眼) (1)入门版 (2)标准版 (3)延伸版——百度百科 (3.1)引入医生和秘密警察 (3.2)引入狙击手、森林老人和…...

[LeetCode周赛复盘] 第 99 场双周赛20230304

[LeetCode周赛复盘] 第 99 场双周赛20230304 一、本周周赛总结二、 [Easy] 2578. 最小和分割1. 题目描述2. 思路分析3. 代码实现三、[Medium] 2579. 统计染色格子数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 2580. 统计将重叠区间合并成组的方案数1. 题目描述2. 思路分析…...

Parcel Bundle漏洞学习

Bundle的序列化细节看上去还是有些复杂的,在之前已经讨论过,一般我们使用Parcel的时候,都是严格的write和read相对应。一些疏漏,不对应,竟然就可以成为漏洞,https://xz.aliyun.com/t/2364 里介绍了Bundle漏…...

RTP载荷H264(实战细节)

RTP包由两部分组成,RTP头和RTP载荷: RTP头 RTP头的 结构如下: 代码结构: typedef struct RtpHdr {uint8_t cc : 4, // CSRC countx : 1, // header extendp : 1, // padding flagversion : 2; // versionuint8_t …...

软考高级信息系统项目管理师系列之四十三:信息系统安全管理

软考高级信息系统项目管理师系列之四十三:信息系统安全管理 一、信息系统安全管理内容二、信息安全策略1.信息系统安全策略的概念与内容2.信息系统安全等级保护的概念三、信息安全系统1.信息安全系统三维空间2.信息安全系统三种架构体系四、PKI公开密钥基础设施1.PKI总体架构2…...

并发编程之AtomicUnsafe

目录 原子操作 定义 术语 处理器如何实现原子操作 处理器自动保证基本内存操作的原子性 使用总线锁保证原子性 使用缓存锁保证原子性 Java当中如何实现原子操作 Atomic 定义 原子更新基本类型类 原子更新数组类 原子更新引用类型 原子更新字段类 Unsafe应用解析…...

GDB调试快速入门

什么是GDB: GDB - - - (GNU symbolic debugger)是Linux平台下最常用的一款程序调试器。 自己的Linux是否安装GDB? 一般来说,使用Ubuntu的话,系统就会自带的有GDB调试器的 命令窗口输入如下命令可以查看是否安装了gdb: gdb -v …...

Vim一次复制,多次粘贴

我们平常在使用Vim时候,通过viwy或者yy等复制操作之后,p操作粘贴的时候,只能粘贴一次,想要粘贴多次怎么办? 解决方案:在使用p的是时候使用"0p,这样就能无限制的一直粘贴了。 可是&#xff…...

如何修改Win11上的默认程序?

在Win10之前,更改特定文件格式的默认程序很简单,但在Win11发布之后,很多用户都不清楚关于Win11的修改默认程序的操作步骤,接下来我们就一起来看看吧,希望可以帮助到大家。 步骤如下: 一、如何更改Windows 1…...

安装Linux虚拟机和Hadoop平台教程汇总及踩坑总结

📍主要内容介绍安装Linux虚拟机、ubuntu系统、安装hadoop三个环节的教程链接介绍及本机与虚拟机的FTP传输教程总结(直接找hadoop安装环节的5.filezilla传输文件)新鲜出炉的踩坑总结和填坑指南安装Linux虚拟机和ubuntu系统一、材料和工具1、下…...

Shell脚本的使用和介绍

为了方便以后工作使用和复习,吐血整理记录一下学习shell脚本的笔记,看这篇文章需要对linux系统熟悉,希望对大家有所帮助! 文章目录 目录 文章目录 一、什么是shell? 为什么要学习和使用shell? 二、shell的分类...

机械学习 - 基础概念 - scikit-learn - 数据预处理 - 1

目录安装 scikit-learn术语理解1. 特征(feature )和样本( sample / demo)的区别?2. 关于模型的概念一、机械学习概念1. 监督学习总结:2. 非监督学习总结:3. 强化学习总结:三种学习的…...

OLCNE cluster 配置 NFS Storage(英文)

OLCNE cluster 配置 NFS Storage(英文)Create an OLCNE cluster.Create an NFS server.a. Install the NFS utility package on the server and client instances.b. Create a directory for your shared files. Make sure that the server does not hav…...

RabbitMQ高级特性

RabbitMQ高级特性 消息可靠性投递 Consumer ACK 消费端限流 TTL 死信队列 延迟队列 日志与监控 消息可靠性分析与追踪 管理 消息可靠性投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制…...

利用Dockerfile开发定制镜像实战.

Dockerfile的原理 dockerfile是一种文本格式的文件,用于描述如何构建Docker镜像。在Dockerfile中,我们可以定义基础镜像、安装依赖、添加文件等操作,最终生成一个可以直接运行的容器镜像。 Dockerfile的原理可以分为以下几个步骤&#xff1a…...

PyInstaller 将DLL文件打包进exe

PyInstaller 将DLL文件打包进exe方法1:通过--add-data命令方法2:通过修改 .spec扩展:博主热门文章推荐:方法1:通过–add-data命令 注意:这里 dll末尾添加的.为当前目录,则该dll要放到main.py同一…...

【JVM篇2】垃圾回收机制

目录 一、GC的作用 申请变量的时机&销毁变量的时机 内存泄漏 内存溢出(oom) 垃圾回收的劣势 二、GC的工作过程 回收垃圾的过程 第一阶段:找垃圾/判定垃圾 方案1:基于引用计数(非Java语言) 引用计数方式的缺陷 方案2:可达性分析…...

120MHz Cortex-M3+150DMIPS+ART加速器:STM32F205RBT6的性能参数解析

STM32F205RBT6:120MHz Cortex-M3工业互联MCU的技术解析在工业控制、电机驱动以及物联网网关等嵌入式应用中,微控制器往往需要同时兼顾高算力、实时响应与丰富的工业通信接口。STM32F205RBT6是意法半导体基于ARM Cortex-M3内核的高性能系列产品&#xff0…...

如果写好AI提示词:这份 Prompt 调试速查表帮你事半功倍

有句话说得好:"好的工程师和差的工程师的区别,不在于他们多聪明,而在于他们有没有一份好的排障清单。"这句话对 Prompt 工程也完全适用。最近三个月,我在 Claude 社区的 Discord 里帮人调试 Prompt。最常见的情况是什么…...

终极指南:用FanControl轻松掌控Windows电脑风扇,告别噪音烦恼

终极指南:用FanControl轻松掌控Windows电脑风扇,告别噪音烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/…...

ROFL Player终极指南:英雄联盟回放分析工具完整使用教程

ROFL Player终极指南:英雄联盟回放分析工具完整使用教程 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联盟回放…...

VINS-Mono跑EUROC数据集实战:如何解读Rviz可视化结果与评估轨迹精度?

VINS-Mono EUROC数据集实战:Rviz可视化与轨迹精度评估全解析 当你第一次在Rviz中看到VINS-Mono处理EUROC数据集生成的复杂点云和轨迹时,那种既兴奋又困惑的感觉我完全理解。作为一款开源的视觉惯性里程计(VIO)系统,VINS-Mono在无人机、移动机…...

在「唯」与「阿」之间安放计算之道,老子这句话给 SAP HANA 开发的一层提醒

「唯之与阿,相去几何?美之与恶,相去若何?人之所畏,不可不畏。荒兮,其未央哉!」放在 SAP HANA 开发里看,不是把古文硬贴到技术上,而是在提醒我们,很多工程判断看起来差别很小,落到系统运行里却会拉开很大的距离。一个 JOIN 写在 application server,还是下推到 data…...

从-15dBm到+16dBm:STC8G信标FM射频放大链路实测与优化

1. 从零开始的FM信标信号放大实战 去年我在做一个野外定位项目时,遇到了一个棘手的问题:用STC8G微控制器生成的FM信标信号,在空旷地带的有效传输距离还不到50米。当时测得的初始输出功率只有-15dBm左右,这个强度连穿过一片小树林都…...

从mekong-cli看现代CLI工具的设计哲学与工程实践

1. 项目概述:一个命令行工具能做什么?在开发者的日常工作中,命令行界面(CLI)是我们与计算机系统交互最直接、最高效的桥梁。无论是自动化部署、批量处理文件,还是与远程API进行交互,一个设计精良…...

KeyMapper终极指南:重新定义Android设备按键功能的完整教程

KeyMapper终极指南:重新定义Android设备按键功能的完整教程 【免费下载链接】KeyMapper An Android app to remap the buttons on your devices 项目地址: https://gitcode.com/gh_mirrors/ke/KeyMapper 你是否曾想过自定义Android设备的按键功能&#xff1f…...

【Oracle数据库指南】第03篇:Oracle SQL分组统计与排序——GROUP BY、HAVING与ORDER BY深度解析

上一篇【第02篇】Oracle SQL查询高级技巧——条件与函数 下一篇【第04篇】Oracle多表查询与连接操作——JOIN的全面解析 摘要 本文详细讲解Oracle SQL中的分组统计功能,包括分组函数(COUNT、SUM、AVG、MAX、MIN等)的用法、GROUP BY子句的多列…...