Димитров Вячеслав Михайлович, старший преподаватель кафедры ИМО, dimitrov@cs.petrsu.ru
Кроссплатформенное ПО - ПО, которое работает на более чем одной платформе или операционной системе с возможностью перекомпиляции, но без изменения исходного кода.
Реализует специфику платформы, но при этом позволяет транслировать программу в свой внутренний формат и запускать приложение под платформу.
Пример: Java Virtual Machine.
package ru.petrsu.cross;
public class HelloWorld {
public static void main(String[] args) {
say("Hello");
say("World!");
}
public static void say(String str) {
System.out.println(str);
}
}
$ javac HelloWorld.java
$ javap -c HelloWorld
Compiled from "HelloWorld.java"
public class ru.petrsu.cross.HelloWorld {
public ru.petrsu.cross.HelloWorld();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public static void main(java.lang.String[]);
Code:
0: ldc #2 // String Hello
2: invokestatic #3 // Method say:(Ljava/lang/String;)V
5: ldc #4 // String World!
7: invokestatic #3 // Method say:(Ljava/lang/String;)V
10: return
public static void say(java.lang.String);
Code:
0: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;
3: aload_0
4: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
7: return
}
Реализует множество возможностей, и позволяет писать код без адаптации к системе (системозависимые части реализуются на уровне библиотеки).
Пример: Qt и Boost.
Разработка с помощью HTML, CSS и javascript на готовом визуализаторе одного из браузеров.
Пример: Electron, Enyo
Разработка единой кодовой базы для платформ с последующей компиляцией и созданием приложений под каждую отдельную платформу (Android, iOS, Windows Phone).
Пример: React Native
function Lang(code) {
this.code = code;
this.getCode = function() {
return this.code;
}
}
let ru = new Lang("ru");
console.log(ru.getCode());
let en = new Lang("en");
console.log(en.getCode());
function Lang(code) {
this.code = code;
}
Lang.prototype.getCode = function(){
return this.code;
}
let ru = new Lang("ru");
console.log(ru.getCode());
class Lang {
constructor(code) {
this.code = code;
}
getCode() {
return this.code;
}
}
let ru = new Lang("ru");
console.log(ru.getCode());
let en = new Lang("en");
console.log(en.getCode());
(function ()
{console.log("From function") })
();
function Lang(code) {
var displayCode = function(str) {
console.log(str + ' ' + code);
}
return displayName;
}
var myFunc = Lang('ru');
myFunc('Code ');
myFunc('Your code ');
// Request to SMS gateway.
$client = new \GuzzleHttp\Client();
$data = array('login' => $login, 'psw' => $psw, 'fmp' => 2,
'phones' => $phones, 'mes' => 'Вам сообщение:','charset' => 'utf-8');
$res = $client->request('GET', 'https://smsc.ru/sys/send.php', [
'query' => $data
]);
Log::info((string)$res->getBody());
// Get html table with parameters.
$.post('/api/save_block_instance_data', $("#save_block_instance_form_" + biId).serializeObject(), function(result) {
$("#save_block_instance_data_button_" + biId).button('reset');
if (result.result == 'ok') {
$.notify("Данные успешно сохранены!", "success");
}
}.bind(this));
setTimeout(function () {
window.location.reload();
}, 2000);