"Wspólny język" programowania

"Wspólny język" programowania
0

Załóżmy, że rozwijam pewien program napisany na kilka platform w różnych językach programowania, np:
C++, Java, C#

Czyli kod aplikacji jest w dużej części powielony na każdej z tych platform.

Czy istnieje jakieś rozwiązanie programistyczne, by część tego kodu "uwspólnić" - mimo tego, że są to zupełnie różne języki programowania?

Np jednym z rozwiązań mógłby być jakiś konwerter, który dla pewnej "uproszczonej" składni języka C++ potrafi wygenerować kod Java i C#.

Tylko czy taki konwerter istnieje? A może macie inne pomysły na rozwiązanie tego problemu?

msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
2

Czy istnieje jakieś rozwiązanie programistyczne, by część tego kodu "uwspólnić" - mimo tego, że są to zupełnie różne języki programowania?

Mógłbyś napisać bibliotekę ze wspólnym kodem w C (w C++ jest kilka kruczków związanych z dekorowaniem funkcji - da się to obejść jeśli Ci na tym zależy), i używać jej w tych programach w trzech różnych językach.

Tylko czy taki konwerter istnieje? A może macie inne pomysły na rozwiązanie tego problemu?

Taki konwerter napisać ciężko, bo składnię można i przetłumaczyć, ale relacje bibliotek standardowych tych języków nie są 1:1. Możesz się zainteresować jakimś metajęzykiem, np. http://en.wikipedia.org/wiki/HaXe ... - ale tak na prawdę i tak będzie to mniej uniwersalne niż poprzednie podejście.

edytowany 4x, ostatnio: msm
0
pitoko napisał(a):

Załóżmy, że rozwijam pewien program napisany na kilka platform w różnych językach programowania, np:
C++, Java, C#

Czyli kod aplikacji jest w dużej części powielony na każdej z tych platform.

Czy istnieje jakieś rozwiązanie programistyczne, by część tego kodu "uwspólnić" - mimo tego, że są to zupełnie różne języki programowania?

Np jednym z rozwiązań mógłby być jakiś konwerter, który dla pewnej "uproszczonej" składni języka C++ potrafi wygenerować kod Java i C#.

Tylko czy taki konwerter istnieje? A może macie inne pomysły na rozwiązanie tego problemu?

Pewnie chodzi o Mobile. Nic to nie da. Oszczędności mierne, a i tak będziesz musieć wspierać te 3 platformy.
Zdecyduj się na jedną i taką wspieraj.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@pitoko a może da się rozwiązać w inny sposób? Na przykład wydzielając część "wspólną" do osobnej aplikacji która komunikowałaby się z pozostałymi? Komunikacja między aplikacjami pisanymi w różnych technologiach jest dość prosta akurat :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

Dzięki za odpowiedzi,
Tak, jest to aplikacja mobilna.
"Wspólny kod" jest raczej zbyt mocno związany z resztą aplikacji bym mógł go wydzielić do osobnej aplikacji.
Generalnie chodzi o to, by po zmianie kodu na jednej platformie, nie trzeba było ręcznie przenosić zmian na pozostałe platformy (jest to dość uciążliwe).
Wiem, że konwerter było by bardzo trudno napisać.
Czyli chyba nic nie wskuram...

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 13 godzin
0

Powiem ci, że ja miałem podobny problem, ale chodziło o uwspólnianie kodu między JavąME, a Androidem i już przy czymś takim jest ciężko, a co dopiero przy różnych językach.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:13 dni
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
1

Dla wielu języków, w tym Javy, C# i nawet C++ istnieją kompilatory front-end, które pozwalają wykonać kompilację do języka "prostszego". Otrzymany kod wygląda trochę śmieciarsko, ale jest zwykle trochę bardziej treściwy niż np. obfuscowany. Dla C# i Javy istnieje front-end do C++, a dla C++ do C. Oczywiście w C# i Javie zostanie dorzucony narzut w postaci runtime'a VM. Tak więc da się zejść do wspólnego kodu w C++ lub C i dalej rozwijać projekt tylko za pomocą źródeł bazy. Z kodu Javy i C# można usunąć wywołania pośrednie przez JVM/.NET i dostanie się czysty kod C++ lub C.
Co prawda czytanie listingów i rozwijanie źródeł stanie się horrorem, ale co tam. :)

Żeby było śmieszniej w samym C można zmusić kompilator aby kompilował do źródeł asemblerowych (w wybranej generacji kodu), więc teoretycznie kod ze wszystkich języków da się przewalić aż do czystego asemblera (w najbardziej skrajnej postaci aż do kodu procka 8086 z emulacją arymetyki zmiennopozycyjnejp; to dla masochistów).


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
0

wydaje mi się że gdyby był łatwy sposób to nie było by miesięcy albo nawet lat przerwy między wydaniem np gry na poszczególne platformy i systemy mobilne...
no i by ludzie nie wychwalali javy za jej multiplatformowość jeśli jednym kliknięciem można było kod w niej napisany zamienić na napisany w innym języku

rafal__
  • Rejestracja:ponad 18 lat
  • Ostatnio:12 miesięcy
0
0

w większych grach twórcy korzystają z silnika gry który jest pisany na kilka platform
wszystkie zmiany są w silniku gry a samą grę tworzy się raz dla wszystkich platform jednocześnie; gra ma grafikę, pliki muzyczne, skrypty gry itd. we wspólnym formacie który jest inaczej interpretowany przez silnik dla każdej platformy; tak samo np shadery mogą być dostosowywane w locie pod konkretne urządzenie
w praktyce wymaga to napisania czegoś w rodzaju relatywnie prostego własnego języka programowania i to raczej pro level - dla mniejszych projektów nie ma sensu
no i gry nie są specjalnie optymalizowane pod konkretną platformę przez co chodzą... no cóż - gorzej niż by mogły ;)

tu masz kilka gotowych rozwiązań silników gier na platformy mobilne: http://mobilegameengines.com/android/2d_game_engines
można pisać w niektórych na androida, iOS, html5 i windows phone a nawet flash playera jednocześnie w 2d i 3d a komercyjne licencje na większość kosztują mniej niż 500$
są też darmowe ale nie spodziewałbym się tutaj zbyt dużych możliwości; zapewne pozwalają tworzyć grę jednego typu zmieniając w zasadzie tylko muzykę i grafikę
zresztą - potestuj; może wcale niczego więcej nie potrzebujesz

msm
Ten post (mówiąc o grach) ma sporo racji, wiele dawnych, większych 'gier' i silników to były właściwie maszyny wirtualne... dzięki czemu żeby 'przeportować' grę wystarczyło przepisać maszynę wirtualną - żeby daleko nie szukać, wystarczy popatrzeć na tytuły takie jak quake i another world.
0

aha, trochę się zapędziłem i nie wiedząc czemu przyjąłem że robisz grę
oczywiście dla zwykłych aplikacji też istnieją takie "silniki" - musisz tylko poszukać

agilob
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:148
0
pitoko napisał(a):

Np jednym z rozwiązań mógłby być jakiś konwerter, który dla pewnej "uproszczonej" składni języka C++ potrafi wygenerować kod Java i C#.

Tylko czy taki konwerter istnieje? A może macie inne pomysły na rozwiązanie tego problemu?

Takim konwerterem przełożono kod Andoida z Javy na c#


Kiedyś miałem sen... że wszyscy ludzie zaczną używać tagów <code> i czytać błędy kompilatora...
grzesiek51114
grzesiek51114
Twój awatar wygląda jak: Leeloo Dallas, multipass! :D
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 13 godzin
0

Innym rozwiązaniem może być JVM zaimplementowany w .NET: http://www.ikvm.net/

Albo jeśli chodzi o mobile to: http://www.codenameone.com/


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
robcio
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Opole
  • Postów:533
0

Można by napisać wszystkie główne funkcje w C++ zapakować je do dllki i można je wywoływać z poziomu javy i c#.


Nie odpowiadam na PW z prośbą o pomoc programistyczną.
Freakman
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 7 lat
0

hm... chyba po części dla takich zapotrzebować stworzono web service'y : )


play hard..go pro.
RU
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 4 lata
  • Postów:9
1

Odświeżam post, gdyż w 2017 dostępnych jest już wiele języków natywnie celujących równocześnie w kilka platform mobilnych:

  • Appcelerator - język: JS, platformy: Android/iOS/Windows
  • Corona - język: Lua, platformy: Android/iOS/Windows
  • Delphi - jeden język, wiele platform: Windows/Linux/macOS/iOS/Android
  • Flex - język: AS, platformy: Windows/Linux/Blackberry/OSX/iOS/Android (dzięki AIR)
  • Flutter - język: Dart, platformy: iOS/Android (sam Dart celuje w HTML5)
  • Haxe - jeden język, wiele platform: iOS/Android/HTML5/Flash/Neko VM
  • Kotlin/Native - platformy: Linux/OSX/iOS (sam Kotlin celuje w HTML5/JVM/Android)
  • Qt - język: C++/QML, platformy: Android/iOS/Ubuntu/Windows Mobile
  • React Native - język JS, platformy: iOS/Android/Windows (dzięki React Native Windows)
  • Xamarin - język C#, platformy: iOS/Android/Windows
edytowany 2x, ostatnio: rugbysta
AK
bardzo pomieszałeś języki bazowe / biblioteki i frameworki /platformę wykonania (w tym słowo "natywnie") / "celowanie" (choć rozumiałbym słowo)
TU
  • Rejestracja:prawie 19 lat
  • Ostatnio:prawie 6 lat
  • Lokalizacja:Lublin
0

Wiele z nich nie pomoże. Przykładowo Xamarin nie ma dostępu do całego API jak Swift i Objective-C. Jeśli chodzi o rozwiązania oparte na webie (produkujące aplikacje), to znowuż nie mamy dostępu do sprawdzania funkcji samego telefonu (np. dla iOS czy urządzenie jest zrootowane (jailbreak)). Pomocne przy prostych projektach oraz w grach gdzie nie ma potrzeby używać niskopoziomowych operacji, ale u mnie w firmie nie przeszły takie pomysły. Więcej było z tym problemów niż równoczesny rozwój Android/iOS/Windows. Chociaż teraz mobilny Windows upadł to już nie jest taki wielki problem rozwijać aplikację w dwóch językach jednocześnie.

PS. Najnowszy Delphi jest tutaj bardzo obiecujący. Nie masz go na liście.

edytowany 1x, ostatnio: Tulio
RU
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 4 lata
  • Postów:9
0

Ale w 80% projektów wspólna baza kodu wystarczy, co znacznie przyspiesza deweloperkę. Windows Mobile i UWP wciąż żyją, więc nie można ich przekreślać. Dodałem do listy Delphi i Flex (oparty na AIR).

Zobacz pozostały 1 komentarz
RU
@Tulio: podajesz stastyki sprzedaży ("sales"), nie aktualnego użycia. Zresztą nawet na tej mapie Windows Mobile np. we Włoszech ma 3.6%, w Brazyli 3.4%. Ich nie można przekreślać.
TU
1. Bo aktualna sprzedaż przekłada się na przyszłe wskaźnik użycia, 2. Sorry, ale nie widziałem ogłoszeń z klientami we Włoszech i Brazylii. Większość klientów dla których programują polscy programiści to jednak Niemcy, Anglia. Faktem jest, że mobilny Windows się kończy.
TU
@rugbysta: Minęło pół roku od Twojego wpisu. Jak myślisz... Windows Mobile i UWP nadal żyją i nie można ich przekreślać?
RU
@Tulio: Tak, przynajmniej UWP wciąż żyje w Windows 10.
TU
@rugbysta: Wcześniej żyły oba i obu nie można było przekreślać. Zapytam za jakieś półtora roku o UWP.
LS
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:990
1

Po co przekreŝlać, z tymi hybrydami flow jest praktycznie zawsze taki sam - zróbmy apkę mobilną ale ma być tania i wspierać wiele platform, no to jedziemy, apka chwyciła, mamy coraz więcej klientów, coraz większe plany, ale uhm tego, urządzenie X tego nie wspiera, uhm tego, na tej marnej podróbie szajsunga z aliexpress nasza hybrydowa platforma ma buga, uhm tego, Apple wypuściło nowy system niestety obecna wersja naszej platformy crashuje się na nim non-stop, uhm tego, na potrzeby rynku X musimy zaimportować własny system map, niestety autorzy hybrydy nie przewidzieli takiego scenariusza itd.

Jak klient zewnętrzny nie trzaśnie drzwiami to zapada decyzja o natywnym przepisaniu na dwie wiodące platformy co w ostateczności niweluje jakiekolwiek oszczędności i dodatkowo rodzi problemy przy portowaniu funkcjonalności. Klienci chyba też to zauważyli bo po początkowym bumie teraz raczej podejmuje się decyzję o natywnym developmencie od początku.


--
Annuit Coeptis
AG
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:77
0

Ma ktoś może doświadczenie z https://www.nativescript.org/ ?

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)