powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Тяпничный Скало-Зуб.
60 сообщений из 60, показаны все 3 страниц
Тяпничный Скало-Зуб.
    #39175572
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здарова collegues!

Скала наступает. Уже сверкает в вакансиях. Предлагаю поднять
топик специально для обсуждения вопросов Java/Scala разработки.

В смежном топике я обещал поднять дискурсы по спорным
вопросам - и вот я здесь.

Во первых - ссылки.


1) Ссылка на сайт фриков и Сан-Франциско которые это всё затеяли
http://www.scala-lang.org/

2) Книга.


Прошу всех энтузиастов попробовать "на зуб" этот гранит науки. Надеюсь
разгрызём совместно.

Ваш коллега,
mayton

P.S. Вы можете тоже сюда писать ваши вопросы.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39175808
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А книга-то где? Так грызть, в сухомятку?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39175870
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrickmayton,

А книга-то где? Так грызть, в сухомятку?

Вроде как давать ссылки на скачивание платных книг нельзя. А гуглится легко (правда сходу только pdf).
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39175919
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

А почему именно Scala, а не Groovy, например?
А если про вакансии, то там вообще Python больше "сверкает". В рамках форума может быть Jython?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39175962
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... давайте сюда-же и Groovy.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39176291
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот правильная книга по Scala:

https://www.manning.com/books/functional-programming-in-scala

Никак не осилю :)


Groovy - это хорошо, но это та же Java...
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39176307
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,

Первой книгой её брать не стоит. Стоило бы сначала саму Скалу освоить.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39176580
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПрошу всех энтузиастов попробовать "на зуб" этот гранит науки. Надеюсь
разгрызём совместно.


Книга есть... Пробовал...
Как-то не пошло.
В реальном проекте попробовать не удается, т.к. работаю в команде.
А тут важно, чтобы все работали на одном стеке технологий.

maytonВаш коллега,
mayton
P.S. Вы можете тоже сюда писать ваши вопросы.

Если есть проект, то могу поучаствовать удаленно.
Т.к. есть интересные моменты в Scala, но внутренней мотивации не достаточно, что бы изучать самостоятельно.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39176603
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, у нас тоже всё уперлость в неготовность команды изучить и использовать
нечто новое.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39176667
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonmad_nazgul, у нас тоже всё уперлость в неготовность команды изучить и использовать
нечто новое.

Я бы не сказал, что это упертость.
Скорее здоровый консерватизм.

Java обучить новичка гораздо легче, чем Scala.

Так скажем новичок севший разбираться с кодом, быстрее разберется с Java-кодом, чем с Scala-кодом.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177195
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverДиез,

Первой книгой её брать не стоит. Стоило бы сначала саму Скалу освоить.

Понятно, что надо синтаксис изучать сначала...
Суть в том, что использовать Scala для того, чтобы писать на нем в императивном стиле - это та самая овчинка, что не стОит выделки. Накладные расходы большие, а преимущества незаметны.
Имхо, без погружения в ФП и Type-level, Scala не даёт особых преимуществ перед Java.
Мозги надо вывернуть, короче говоря :)
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177200
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,

Это заблуждение. Scala не является pure functional языком. Программирую на нём, вполне можно обойтись без scalaz и теории категорий.
Как-бэ, фишка Скалы в том, что язык сочетает функциональный и объектно-ориентированный подходы, вобрав в себя множество разных фич из других языков. Из FP здесь: иммутабельность, чистые функции, АТД, немного комбинаторов.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177232
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverДиез,

Это заблуждение. Scala не является pure functional языком. Программирую на нём, вполне можно обойтись без scalaz и теории категорий.


А я где-то сказал, что Scala - чисто функциональный язык? Как раз наоборот - я и говорю, что на нем можно писать в императивном стиле, но это довольно бессмысленно. Если уж переходить на Scala - то надо использовать возможности по полной.

DoSOfRedRiver

Как-бэ, фишка Скалы в том, что язык сочетает функциональный и объектно-ориентированный подходы, вобрав в себя множество разных фич из других языков. Из FP здесь: иммутабельность, чистые функции, АТД, немного комбинаторов.

Я знаю, какие возможности есть в Scala (кстати, чистоту функций язык никак не контролирует)
Меня больше интересуют path-dependent types, high-order types и прочие фичи компилятора. Очень уж заманчиво отлавливать ошибки в compile-time, а не в логах продакшн-серверов.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177277
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез,

Я к тому, что идеологически Скала не задумывался как ФП язык. Достаточно Programming in Scala полистать, чтобы убедиться. Хотя тот же scalaz весьма убедительно смотрится.

ДиезЯ знаю, какие возможности есть в Scala (кстати, чистоту функций язык никак не контролирует)

Я бы добавил аннотацию. Вроде даже какие-то подвижки были - результатов не видно.


ДиезМеня больше интересуют path-dependent types, high-order types и прочие фичи компилятора. Очень уж заманчиво отлавливать ошибки в compile-time, а не в логах продакшн-серверов.

Наверное, higher kind types имеются ввиду? В Dotty, кстати, обещают нормальные dependent types.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177470
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver
Наверное, higher kind types имеются ввиду?
Да, речь о них, конечно.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177518
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39177534
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он интересен. Но лучше его пустить отдельным топиком.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184312
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скалозуб продолжается. Внезапно Scala-порт Card-Raytracer 18105781 появился.
После того как я завершу (ш)кодинг можно будет гнать бенчмарк
и смотреть где и как Scala отстаёт от Java.

Несколько траблов.

Тернарная операция отсутствует.

Вместо (C++)
Код: plaintext
1.
	double p = pow(l % r * (b > 0), 99);




Скала предлагает if- c возможностью возврата значения.
Код: java
1.
var p:Double = pow(l % r * (if (b > 0) 1.0 else 0.0), 99.0)



Я пока еще путаюсь в покрывающих конструкторах, пропертях и свойсвтвах
и авто-выводе типов. Но думаю что к концу (ш)кодинга что-то появится.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184327
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... если main класс объявлен как синглтон (object) то можно ли его инстанциировать из main ?
Смешно но я завис не на алгоритме а на конструкторах.

Желтым маркером я отметил то где среда ругается.



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
import java.io
import java.io.{Writer, PrintWriter, OutputStream, FileOutputStream}
import java.lang.Math._

object CardRaytracer(out_:OutputStream,width_:Int,height_:Int) {

    val WIDTH       = 512
    val HEIGHT      = 512
    val SUB_SAMPLES = 64

    var width  = WIDTH
    var height = HEIGHT

    def out:Writer

    // .................................................. bla-bla ...................

    def this(out_:OutputStream,width_:Int, height_:Int) {
        this.width  = width_
        this.height = height_
        this.out    = out_
    }

    def this(out_:OutputStream) {
        this.out = out_;
    }

    def main(args: Array[String]): Unit = {
        def begin = System.currentTimeMillis();
        if (args.length == 0) {
            new CardRaytracer(System.out).process();
            System.err.printf("Elapsed time : %d sec\n",(System.currentTimeMillis()-begin)/1000);
            System.exit(1);
        } else if (args.length == 1) {
            def os = new FileOutputStream(args(0));
            new CardRaytracer(os).process();
            os.close();
            System.err.printf("Elapsed time : %d sec\n", (System.currentTimeMillis() - begin) / 1000);
            System.exit(2);
        } else if (args.length == 3) {
            def os = new FileOutputStream(args(0));
            new CardRaytracer(os, valueOf(args(1)), valueOf(args(2))).process();
            os.close();
            System.err.printf("Elapsed time : %d sec\n", (System.currentTimeMillis() - begin) / 1000);
            System.exit(2);
        }
        System.exit(0);
    }

}



Код: java
1.
2.
3.
Error:(61, 21) traits or objects may not have parameters
object CardRaytracer(out_:OutputStream,width_:Int,height_:Int) {
                    ^
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184335
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики, у меня плохие новости - Scala никогда не будет мейнстримом, и так и останется в тени Java. Если даже главная компания-идеолог Scala - Typesafe (нынче Lightbend), в которой сидит сам Одерски, дистанцируется о Scala, то чего уж говорить про остальной мир.

На запудривайте себе мозги всякой ерундой.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184343
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184347
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv, вот так вот взял и обломал.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184370
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

По-моему это вы "пудрите мозги". Откуда информация о том, что "Одерски дистанцируется от Scala"?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39184381
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver, пофиксил object. Отказался от него.

Теперь новая бочина.

Код: java
1.
2.
3.
4.
5.
6.
7.
$ scala\CardRaytracer.scala:180: error: overloaded method value printf with alternatives:

  (x$1: java.util.Locale,x$2: String,x$3: Object*)java.io.PrintWriter <and>
  (x$1: String,x$2: Object*)java.io.PrintWriter
 cannot be applied to (String, Int, Int)
        wr.printf("P6 %d %d 255 ", width, height)
           ^



Всё устал. Пошёл спать.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185017
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Не нужно пытаться портировать Java код. В Scala есть интерполяция строк:

Код: java
1.
println(s"P6 $width $height 255 ")
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185027
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не очень понимаю, как функциональный код будет выполняться в стандартной JVM.

Читая вики про ErLang я понимаю - что там есть свои рекламируемые достоинства (простота многопотоковости и независимость обработки) являющиеся __следствие__ функционального подхода. Ну и разумеется, так же есть, проистекающие из этого недостатки.

А нафига функциональный язык выполняющийся в стандартной JVM ? Что он дает, кроме "мозги надо вывернуть" ?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185041
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА нафига функциональный язык выполняющийся в стандартной JVM ? Что он дает, кроме "мозги надо вывернуть" ?
Кажется я понимаю мысль. Ты хочешь сказать что для ФП нужна особая функциональная ВМ ?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185044
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRivermayton,

Не нужно пытаться портировать Java код. В Scala есть интерполяция строк:

Код: java
1.
println(s"P6 $width $height 255 ")


О... спасибо. Интерполяцию строк заимплементим. Но всё-таки
обобщая этот баг... Что это за WTF был? Variable arguments
не понравился?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185107
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDoSOfRedRivermayton,

Не нужно пытаться портировать Java код. В Scala есть интерполяция строк:

Код: java
1.
println(s"P6 $width $height 255 ")


О... спасибо. Интерполяцию строк заимплементим. Но всё-таки
обобщая этот баг... Что это за WTF был? Variable arguments
не понравился?
Не очень красиво вышло. Для того чтобы интерполировать строку пришлось ввести отдельное value $res
Код стал на 1 строку длиннее. А с printf я мог вычислять expression на ходу.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
if (args.length == 0) {
            new CardRaytracer(System.out).process()
            val res = (System.currentTimeMillis()-begin)/1000
            System.err.println(s"Elapsed time : $res sec\n")
            System.exit(1)
        } else if (args.length == 1) {
            def os = new FileOutputStream(args(0))
            new CardRaytracer(os).process()
            val res = (System.currentTimeMillis()-begin)/1000
            System.err.println(s"Elapsed time : $res sec\n")
            os.close()
            System.exit(2)
        } else if (args.length == 3) {
            def os = new FileOutputStream(args(0))
            new CardRaytracer(os, args(1).toInt, args(2).toInt).process()
            val res = (System.currentTimeMillis()-begin)/1000
            System.err.println(s"Elapsed time : $res sec\n")
            os.close()
            System.exit(2)
        }
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185129
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Scala не является чисто функциональным языком.
Простота многопоточности в Эрланге - это акторная модель, никакого отношения к ФП она не имеет. В Скале для этого Akka есть.

Leonid KudryavtsevА нафига функциональный язык выполняющийся в стандартной JVM ? Что он дает, кроме "мозги надо вывернуть" ?

Функциональное программирование - парадигма, в рамках которой можно строить модели. "Мозги вывернуть" нужно для того, чтобы повысить уровень абстракции вашей модели, либо вовсе заменить на модель эквивалентную, но более простую.
Какая поддержка в рантайме вам нужна - не понятно. Чем Clojure на JVM плох? Почему Эрланг на JVM нельзя?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185142
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

http://docs.scala-lang.org/overviews/core/string-interpolation.html

В частности:

Код: java
1.
println(s"${(System.currentTimeMillis()-begin)/1000}")
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185146
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverКакая поддержка в рантайме вам нужна - не понятно. Чем Clojure на JVM плох? Почему Эрланг на JVM нельзя?
Действительно! Всё равно потом всё это в Java байт-код скомпилируется.
:-)
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver, ок. Спасибо. Пускай пока побудет. Так удобнее.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сослаться в конструкторе на value или константу (WIDTH, HEIGHT)?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class CardRaytracer(out_arg:io.OutputStream,width_arg:Int,height_arg:Int) {

    var out:OutputStream = out_arg
    var width:  Int      = width_arg
    var height: Int      = height_arg

    val WIDTH       = 512
    val HEIGHT      = 512
    val SUB_SAMPLES = 64

    .............


    def this(out2:OutputStream) {
        // TODO: Fix the constants usage
        // this(out2,WIDTH,HEIGHT)
        this(out2,512,512)
    }

}
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185497
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185499
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
package example.org

import java.io.OutputStream

object CardRaytracer {
  val WIDTH = 512
  val HEIGHT = 512
  val SUB_SAMPLES = 64
}

class CardRaytracer(out_arg: OutputStream, width_arg: Int, height_arg: Int) {

  var out: OutputStream = out_arg
  var width: Int = width_arg
  var height: Int = height_arg
  
  def this(out2: OutputStream) {
    this(out2, CardRaytracer.WIDTH, CardRaytracer.HEIGHT)
  }
}
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185500
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, спасибо. Как раз про это читаю у Хорстмана.

Надеялся что есть другой механизм для констант. Подсознательно сопротивляюсь
введению новой сущности в проект. Т.к. для меня объект-компаньон пока
мысленно представляется таковой.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185506
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Питоновская фишка:
Код: java
1.
println("*" * 80);

Работает в Groovy и, к моему удивлению, в Scala тоже (:
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39185609
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКак сослаться в конструкторе на value или константу (WIDTH, HEIGHT)?

Я бы константы вынес в объект компаньён
И конструкторы бы то же не делал, а реализовал бы как apply() методы в объекте компаньене типа:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
class MyClass(many args) {
}

object MyClass {
   // констаны  лучше тут
  val WIDTH       = 512
  val HEIGHT      = 512
  val SUB_SAMPLES = 64

 def apply(какой-то-набор-аргументов) {
   ....

   return new MyClass(...)
 }

  def apply(другой-набор-аггументов) {
    ....

   return new MyClass(...)
 }
}


.....

где то в коде: 

 val a = MyClass(какой-то-набор-аргументов) // вызов через apply
 val b = MyClass(другой-набор-аггументов) // вызов через apply
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186169
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186187
Kenny Fartman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПрошу всех энтузиастов попробовать "на зуб" этот гранит науки. Надеюсь
разгрызём совместно.


P.S. Вы можете тоже сюда писать ваши вопросы.

Так уже же давно топик есть http://www.sql.ru/forum/830850/
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186204
Kenny Fartman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЯ не очень понимаю, как функциональный код будет выполняться в стандартной JVM

Ну, как-как. Точно также будет выполняться как на обычном CPU. Байт за байтом, последовательно, как в машине тьюринга. Ибо функциональный код ничем от обычного императивного не отличается, компилятор просто хитровыделанные функциональные инструкции переводит в последовательные императивные команды. А дает он еще большее отдаление от железа и асма и еще больший уровень абстракции
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186248
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverUsman,

https://github.com/scala/scala/blob/v2.10.0/src/library/scala/collection/immutable/StringLike.scala Спасибо! Поправил:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
object CardRaytracer {
  val WIDTH = 512
  val HEIGHT = 512
  val SUB_SAMPLES = 64
}

import CardRaytracer._

class CardRaytracer(out_arg: java.io.OutputStream, width_arg: Int, height_arg: Int) {

  var out: java.io.OutputStream = out_arg
  var width: Int = width_arg
  var height: Int = height_arg

  def this(out2: java.io.OutputStream) {
    this(out2, WIDTH, HEIGHT)
  }
}

P.S.
Тут главное не импортировать в глобальный scope одноименные константы из другого объекта
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186285
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, о.... это типа аналог static import? Спасибо. Fixed.

P.S. Походу всё равно имею stackoverflow в рантайме.... Надо дебажить едрён-батон...
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186290
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще в Скале нет binary-констант как в Java7.

Но есть возможность расширить строковый тип своими методами. (Кажется в Groovy тоже
подобный ништяк был).

Вот так. Называется implicit class.

Код: java
1.
2.
3.
4.
5.
6.
  implicit class IntToBase( val digits:String ) extends AnyVal {
    def base(b:Int) = Integer.parseInt( digits, b )
    def b = base(2)
    def o = base(8)
    def x = base(16)
  }



Я этим воспользовался и получил.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    val G = Array(
      "00111100011100010010".b,
      "01000100100000010100".b,
      "01000100100000011000".b,
      "00111100111110010100".b,
      "00000100100010010010".b,
      "00000100100010010001".b,
      "00111000011100010000".b,
      "00000000000000010000".b,
      "00000000000000010000".b
    )



У Хорстмана 21.1 - Неявные преобразования.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186297
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Систему вложенных циклов можно свернуть в одно for-expression. И еще условие добавить.

Было
Код: java
1.
2.
3.
4.
for (k <- (0 to 18).reverse) {
    for (j <- (0 to 8).reverse) {
          if ((G(j) & 1 << k) != 0) {
              .......


После рефакторинга
Код: java
1.
2.
3.
for (k <- (0 to 18).reverse ; j <- (0 to 8).reverse; if (G(j) & 1 << k) != 0) {
   ....
}



Негативный момент ИМХО - невозможность шагнуть дебаггером. Хотя... если
для нас в for-expression всё тривиально то вобщем-то туда незачем шагать.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39186573
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная ситуация. Сейчас картинка которая должна быть не пуская - отсекается до нуля.
Хотя в процессе отладки когда я вызываю принудительно printWriter.flush - вижу что файл
не пустой.

Но после завершения процедуры .process() файл пустой.

Сколько ни ползаю отладчиком - не могу понять что за явление или процесс рубит
тело файла.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.io.{OutputStream, PrintWriter, FileOutputStream}
import System.out
import System.err
import java.util.Random

object Main {

  def main(args: Array[String]): Unit = {
    // println(s"Scala version : ${util.Properties.versionString}")

    val begin = System.currentTimeMillis
    def stream:OutputStream = new FileOutputStream("img/image1.ppm")
    new CardRaytracer(stream).process
    stream.close
    val res = (System.currentTimeMillis - begin) / 1000
    err.println(s"Elapsed time : $res sec\n")
    System.exit(1)
}}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
  
class CardRaytracer(outputStream_arg:io.OutputStream, width_arg:Int, height_arg:Int) {

    var     outputStream:OutputStream    = outputStream_arg
    lazy val printWriter:PrintWriter     = new PrintWriter(outputStream)

    var width:  Int      = width_arg
    var height: Int      = height_arg

    def this(stream_arg:OutputStream) {
        this(stream_arg,WIDTH,HEIGHT)
    }

 def process() {
    printWriter.println(s"P3 $width $height 255 ")
    var g: Vector = !CAMERA_DEST_VECTOR
    var a: Vector = !(Z_ORTHO_VECTOR ^ g) * .002
    var b: Vector = !(g ^ a) * .002
    var c: Vector = (a + b) * -256.0 + g
    var cnt:Int = 0
    // TODO: During loop the PPM file contains data
    for (y <- (0 until height).reverse; x <- (0 until width).reverse) {
      var p: Vector = COLOR_DARK_GRAY_VECTOR
      /*for (r <- 0 until SUB_SAMPLES) {
        var t: Vector = a * (Random - 0.5) * 99.0 + b * (Random - 0.5) * 99.0
        p = sampler(
          CAMERA_ASPECT_VECTOR + t,
          !(t * -1 + (a * (Random + x) + b * (y + Random) + c) * 16)
        ) * 3.5 + p
      }*/
      var R: Int = p.x.toInt
      var G: Int = p.y.toInt
      var B: Int = p.z.toInt
      printWriter.println(s"$R $G $B")
      cnt = cnt + 1
    }
    printWriter.flush
    System.out.println(s"OK cnt = $cnt")
    // TODO: But after exit process file is empty
  }
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39187425
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Код: javascript
1.
2.
3.
            def os = new FileOutputStream(args(0));
            new CardRaytracer(os).process();
            os.close();


В groovy и scala у def разная семантика, def в scala - это объявление метода.
В данном случае объявлается метод os(), который вызывается несколько раз.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
package scaladefsample

import java.io.FileOutputStream
import java.util.concurrent.atomic.AtomicInteger

object Program {

  def main(args: Array[String]) {
    def os = yourNewFileOutputStream("~/sample.txt")
    println("yourNewFileOutputStream didn't called yet")
    println(os.hashCode)
    println(os.hashCode)
    //but now called twice
  }

  val counter = new AtomicInteger()

  def yourNewFileOutputStream(filePath: String) = {
    println(s"yourNewFileOutputStream called: ${counter.incrementAndGet()}")
    new FileOutputStream(filePath)
  }
}
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39187743
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk, точно. Все глаза проглядел из за этого def/var/val...

Спасибо.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39187879
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Идея отличная !

сам кучу раз пытался его изучить и начать применять ... но все лень

даже прошел шикарный курс , который всем рекомендую от

Martin Odersky

https://www.coursera.org/course/progfun

по изучению - лучше всего смотреть код , а еще лучше придумать свой проект и его продвигать !!!

создать на https://github.com/ и начать творить ...

в свое время очень помог в изучении современных технологий этот проект :

https://github.com/ornicar/lila

шахматы !



+

появилсь вакансии типа Яндекс.Поиск:

Мы ищем как senior, так и middle Java/Scala разработчиков в следующие направления:
Команда биллинга
это разработка сложной платежной системы для всего сервиса auto.ru. В рамках данной команды мы ищем сильного специалиста Scala, который также может и хочет писать код на Java (не более 30% задач)
Команда поиска.
это разработка внутреннего движка по поиску, который входит в общую систему проекта Яндекс.Поиск. В рамках данной команды мы ищем уверенного Java разработчика, с хорошим знанием алгоритмов и математики, с небольшим опытом на Scala. Мы готовы обучать и повышать ваш уровень в функциональном программировании.




ps

или лучше сразу Хаскель начать учить???
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39188064
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1, так давай включайся. У меня тут как раз stackoverflow и надо разбираться.
Хотя метод рекурсивный но скорее всего условие рекурсии соблюдается не так
как в оригинале (на С++) и мы проваливаемся слишком глубоко.

Вот последний вариант https://sourceforge.net/p/card-raytracer-bench/code/HEAD/tree/trunk/scala/
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39188066
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1 или лучше сразу Хаскель начать учить???
Я периодически чето почитываю по Хаскель (проффэсора Душкина) но от
обилия математики идёт голова кругом. Душкин вводит такие понятия
которые пока не налезают на голову. Ну тоесть вроде-бы и формально
понятно но где и как их применить - ХЗ. Здесь мой прагматизм
даёт сбой и я зависаю кас старый Пень-133 Мгц.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39188135
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAtum1 или лучше сразу Хаскель начать учить???
Я периодически чето почитываю по Хаскель (проффэсора Душкина) но от
обилия математики идёт голова кругом. Душкин вводит такие понятия
которые пока не налезают на голову. Ну тоесть вроде-бы и формально
понятно но где и как их применить - ХЗ. Здесь мой прагматизм
даёт сбой и я зависаю кас старый Пень-133 Мгц.

алгоритмы - торговля на бирже ... итд ... использовать можно везде ... очень быстра разработка ... где уже обсуждолось ...

просто это другой способ мыслить и программировать :)

+ куча плюшек т.к это функциональный язык программирования ....

скала - круто очень но Мартин Одерски и создал монстра под ведомые только ему нужны ... :)
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39192886
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос :

есть ubuntu в ней стоит java 8 но scala родная и она не рабоатет с 8 версией ... как ей указать чтобы она работала с 7 ? где для нее нужно прописать java_home отличный от умолченного ?

не хочу руками ставить 2.11.8 .

или как альтернатива - посоветуйте репозиторий где есть актуальная версия ?


Код: java
1.
2.
3.
4.
java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)



Есть

Код: java
1.
2.
scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
update-alternatives --config java
Есть 2 варианта для альтернативы java (предоставляет /usr/bin/java).

  Выбор   Путь                                 Приор Состояние
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-oracle/jre/bin/java   12        автоматический режим
  1            /usr/lib/jvm/java-7-oracle/jre/bin/java   5         ручной режим
* 2            /usr/lib/jvm/java-8-oracle/jre/bin/java   12        ручной режим

Нажмите enter, чтобы сохранить текущий выбор[*], или введите выбранное число: 



Код: java
1.
2.
3.
4.
5.
6.
7.
$ scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_74).
Type in expressions to have them evaluated.
Type :help for more information.

scala> [init] error: error while loading AnnotatedElement, class file '/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)' is broken
(bad constant pool tag 18 at byte 76)
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39192956
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставь jdk 7 из репозитория, jdk8 руками /opt (если она вообще нужна).
scala тоже ставь руками
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39192962
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и скалу поновее поставь

Код: sql
1.
2.
~$ scala -version
Scala code runner version 2.10.2 -- Copyright 2002-2013, LAMP/EPFL
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39192966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1 не хочу руками ставить 2.11.8 .

или как альтернатива - посоветуйте репозиторий где есть актуальная версия ?


Почему?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39193073
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ну не кошерно это руками ставить ... нужно чтобы все через рапозитарий обновлялось и поддерживалось :)

а 7 как раз есть

Код: java
1.
 /usr/lib/jvm/java-7-oracle/jre/bin/java   5         ручной режим



ее и хочу выбрать ...

или версия скала 2.9.2 -- Copyright 2002-2011, LAMP/EPFL это совсем древность ?
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39193106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю. Меня-бы не парил этот вопрос.

Я-бы по другому спросил. Почему я должен доверять внезапным обновлениям
парка ПО убунты, когда я сам разрабатываю конкретное ПО на конкретных
версиях и даже более того я в maven указываю их версии с точностью
ди билда.

Вобщем это вопрос личной оценки риска.
...
Рейтинг: 0 / 0
Тяпничный Скало-Зуб.
    #39193112
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе знаю. Меня-бы не парил этот вопрос.

Я-бы по другому спросил. Почему я должен доверять внезапным обновлениям
парка ПО убунты, когда я сам разрабатываю конкретное ПО на конкретных
версиях и даже более того я в maven указываю их версии с точностью
ди билда.

Вобщем это вопрос личной оценки риска.
+1

в скала есть проблема кроскомпилинга под разные версии. скала обновится мажорно и ты со своим проектом пролетишь по зависимостям
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Тяпничный Скало-Зуб.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]