当前位置: 首页 > 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:可达性分析…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...