اسکالا و جاوا


#21

99 درصد کمی اغراق آمیز نیست؟ :joy:


#22

با اجرای دستور warble در پوشه اصلی.

No executable script found
C:/Ruby25-x64/bin/warble:23:in `load'
C:/Ruby25-x64/bin/warble:23:in `<main>'
Tasks: TOP => jar:files
(See full trace by running task with --trace)
تنها دستوری که کار کرد warble compiled بود که فایل class میسازه ،

#23

کد jruby که حاوی یک کلاس ساده بود رو کامپایل کرد به فایل class

محتوای decode شده فایل کلاس:

import org.jruby.Ruby;
import org.jruby.ir.IRScope;
import org.jruby.ir.runtime.IRRuntimeHelpers;

public class test
{
  private static final String script_ir = new StringBuilder().append("\000\000\000\001\000\000\001\"ÿÿÿÿ\013\t\024t\000\000Tt\006\001s\000Tt\005\002_\000D\000Tt\000\003'z\004java\005UTF-8\020\t./test.rb\000\037\001\007requireS\001t\000\003t\000\004D\002.t\000\005\001_\000u2t\000\006t\000\005o(t\000\006\013\t\024t\000\000Tt\006\001s\000Tt\005\002_\000D\003\037\001\rattr_accessorS\001:\004name\005UTF-8t\000\003D\0040\002D\0070\003(:\007getName\nASCII-8BIT\t\t\022t\000\000Tt\006\001s\000Tt\005\002_\000Q\001\000ffÿÿÿÿÿ\nl\004name\000\000D\005CS\005@namel\004name\000(l\004name\000\b\t\022t\000\000Tt\006\001s\000Tt\005\002_\000Q\000\000ffÿÿÿÿÿD\b>t\000\003S\005@name(t\000\003\004\007\t./test.rb\000\007\000\000\000ÿÿÿÿÿÿ\000\000\000\000\000\000\000ÿ\000\f\005\005Hello\002\004\000\000\000\000ÿÿÿÿÿÿ\000\000\000\000\000\000\000ÿ\000e\002\ninitialize\004\003\000\001\000\001\004nameÿÿÿÿÿÿ\000\001\000\000\000\000\000ÿ\001\004name\000ÿ\000\000\000·\002\007getName\007\004\000\001\000\000ÿÿÿÿÿÿ\000\000\000\000\000\000\000ÿ\000ÿ\000\000\000õ").toString();
  
  public static void main(String[] paramArrayOfString)
  {
    Ruby localRuby = Ruby.newInstance();
  }
  
  public static IRScope loadIR(Ruby paramRuby, String paramString)
  {
    return IRRuntimeHelpers.decodeScopeFromBytes(paramRuby, script_ir.getBytes("ISO-8859-1"), paramString);
  }
}

نکته مهم اش اینه که در اصل jruby ، کد شما رو به بایت کد تبدیل نمیکنه! و اون رو به صورت یه رشته اسکریپت میده به جاوا ، مثل کاری که ironRuby در دات نت میکنه.


#24

شما اگه همین کد با سکالا native هم کامپایل کنی و شاید کاری که میخواهی بشه با این حال من همچین کارایی و پیشنهاد نمیکنم اگر میخواهی از jvm به خوبی بهره بگیری از یک زبان JVM طراز اول scala Java kotlin Clojure استفاده کن


#25

اگه در مورد جاوا با موارد زیر کار کردید و جواب داده ، لطفا معرفی کنید:

  • Obfuscator
  • ساخت فایل اجرایی برای توزیع برنامه (‌ البته چند نرم افزار برای این کار تست کردم )
  • یه نسخه از jvm که سبک باشه و بشه به صورت embed همراه نرم افزار ارائه کرد

#26

من با JVM فقط در سرور و کتابخانه های bigdata تجربه دارم


#27

برای برنامه های بزرگ … ریورس کردن jar . سورس درستو حسابی تحویل نمیده … شما با hello world امتحان نکنید!! …
بعدم هرکاری بکنید … اینکار شدنیه … اما با زمان بیشتر… راه 100% برای محافظت از سورس نیست …
برای تبدیل جاوا به باینری و exe میتونید از Exe4j استفاده کنید …


#28

یه راه حل میتونه این باشه که کتابخانه ها رو در نهایت به اسکالا import کرد ، و خروجی native گرفت؟

با اسکالا کار نکردم و این استدلال رو از پیام‌ها گرفتم


#29

من متوجه نمیشم چرا اینکارو میخایید بکنید … اگر برنامه پردازشیه … اسکالا توجیح داره … ولی برای برنامه ساده … بخصوص دسکتاپی … اسکالا و کلوژور مصرف منابعشون بالاتر از جاواست …


#30
  • زبانی که از کتابخانه های هوش مصنوعی خوبی برخودار باشه
  • شی گرا باشه
  • در همه سیستم عامل ها اجرا بشه
  • decode کردنش خیلی سخت باشه
  • رابط کاربری هم پشتیبانی کنه

#31

و اون چیزی نیست بجز پایتون :heart_eyes::relaxed:
البته راجبه دیکد کردن نظری ندارم … اما پایتون رو میتونید به باینری و ماژول نیتیو تبدیل کنید … ک به کد اپتیمایز C تبدیل میشه … دیکد هم بشه بدرد کسی نمیخوره …


#32

پایتون زبان خوبی هست ولی مشکلات خودش رو داره . پایتون بیشتر برای تست الگوریتم به کار میاد (‌ منظورم کار خودم هست ) مثل متلب


#33

این اشتباهه …
هرجور راحتید …


#34

فقط داخل پرانتز بگم که اینجوری نیست scala و clojure در نهایت به بایت کد های JVM تبدیل می شن. و تفاوت بین resource utilization شون بسیار ناچیز هست. جفتش رو در پروداکشن و scale قابل قبول دارم استفاده می کنم.


#35

یعنی در اسکالا امکان استفاده از javafx هم هست؟ و در نهایت یک برنامه native؟


#36

مصرف منابع موقع ران تایم چطور؟؟؟ یه پروسه اضافی تری برای تشکیل AST و تفسیر تا رسیدن به jvm رخ میده اینجا…

من یه بنچمارک دیدم توی سورتینگ بود احتمالا … اسکالا و کلوژور بین ۲۰% تا ۳۰% بیشتر از جاوا رم گرفته بودن …


#37

ScalaFX


#38

نه منظورم مثل زبان های دات نتی بود ، یه کتابخانه dll که مهم نیست به چه زبانی نوشته شده ، بعد استفاده ازش در هر زبان دات نتی دیگه


#39

runtime منظورم بود. همه اینها در نهایت به بایت کد جاوا تبدیل می شن و در نهایت روی سرور به دید یه نرم افزار کامپایل شده جاوا اجرا می شن. و فرق چندانی ندارن. مگر اینکه مثلا از امکاناتی استفاده کنین که extra هست مثلا یه nREPL ی چیزی که خوب کارایی در مقابل منابع.


#40

بله می تونین استفاده کنین. هر چیزی که رو JVM باشه رو می تونین تو هر زبان JVM بیس استفاده کنین. اون ScalaFX هم احتمالا فقط یه wrapper واسه javaFX باشه.