LINUX.ORG.RU

Kojo — среда для обучения языку Scala

 , kojo, , ,


0

0

Не так давно была анонсирована Kojo — среда для обучения языку Scala на платформе NetBeans. Kojo включает в себя много интересных возможностей, таких как, например, Scala REPL, и позиционируется как развлекательно-обучающая среда для детей. Автор Kojo, Lalit Pant, отвечает на вопросы сайта netbeans.org:

NetBeans: Lalit, здравствуйте. Расскажите, кто Вы и чем занимаетесь?

Lalit: Я — учитель математики в школе для девочек из малообеспеченных семей, в маленьком городке Dehradun в Северной Индии. Ранее я был профессиональным разработчиком и работал в США. В течение 16 лет карьеры мне довелось писать на самых разных языках — С, С++, Java, Prolog, Ruby, Python и, наконец, Scala. Последние 10 лет моей жизни так или иначе были связаны с Java.

NetBeans: Ну, и что же такое Kojo? С какими продуктами можно ее сравнить?

Lalit: Kojo является тем, что я называю обучающей средой. При помощи Kojo ребенок может играючи обучаться работе с компьютером, овладевать азами программирования, экспериментировать с математикой и визуальными образами. Из похожих продуктов я отмечу Scratch, Processing и The Geometer's Sketchpad.

NetBeans: Чем же Kojo уникальна?

Lalit: Kojo сочетает в себе:

  • мощный язык;
  • компьютерное искусство;
  • анимацию и визуализацию;
  • интерактивную математику.

Ни один из конкурирующих продуктов не предоставляет такого уникального набора возможностей в составе единой среды.

NetBeans: Почему Kojo написана именно на Scala?

Lalit: Должен признать, что знакомство со Scala способно сильно расширить кругозор даже самого опытного разработчика в объектно-ориентированной парадигме. Я столкнулся с такими новыми (и очень мощными) концепциями как Traits, Implicits, Abstract Types, полиморфизм type constructor'ов. Scala также явилась для меня примером практического применения функционального программирования, позволяя использовать функциональный подход внутри объектно-ориентированного кода. Поэтому, когда я стал задумываться об обучающей среде для детей, я не колебался в выборе Scala.

NetBeans: И в качестве пользовательского языка тоже?

Lalit: Да. Я решил, что буду обучать детей программировать именно на Scala, потому что даже узкое подмножество Scala (гораздо более простое, чем Java; по простоте приближающееся к Python или Ruby) обладает порядочной мощью. Да и Scala REPL пригодится мне для собственных разработок ;)

NetBeans: Каковы, по-Вашему, преимущества платформы NetBeans?

Lalit: Что мы имеем «из коробки»:

  • редактор исходных текстов: великолепная инфраструктура для создания редакторов, предоставляющая подсветку синтаксиса, автодополнение, автоформатирование и т.п.;
  • оконная система: фиксация (docking) / передвижение окон внутри рабочего пространства;
  • профессиональный внешний вид;
  • окно вывода с автоматическим переносом строк, «умным» скроллингом, настраиваемым шрифтом и гиперлинкингом для сообщений об ошибках;
  • прочее: всевозможные «свистелки» («bells and whistles») наподобие splash-заставки, диалога «About» и инсталлируемого zip-дистрибутива.

Kojo свободно распространяется по лицензии GPL. Доступны исходный текст, бинарные сборки и баг-трекер.

Интервью (на английском).

>>> Сайт Kojo

★★

Проверено: maxcom ()
Последнее исправление: INFOMAN (всего исправлений: 1)

Ответ на: комментарий от Karapuz

> Странно, мою новость о Kojo выпилили. Шо за беспредел

Дык твоя состояла из трех строчек и десяти ошибок. Думаешь, шкворц растет на деревьях? Фиг! Добывается непосильным трудом. :)

Kuka ★★
() автор топика
Ответ на: комментарий от Karapuz

> программа на Эрланге уступит даже лиспу и делфи

даже лиспу и делфи

даже лиспу



Вот никак не могу понять, это толсто или тонко. Сейчас же придут лиспари со своим SBCL и с гомном тебя скушают.

Kuka ★★
() автор топика
Ответ на: комментарий от Karapuz

> И? Ссылку на тесты в студию!

Карапуз, ты о чем это сейчас? Ты, вообще, понимаешь, чем отличается for-comprehension от sequence-comprehension?

dave ★★★★★
()
Ответ на: комментарий от Kuka

Сейчас же придут лиспари со своим SBCL и с гомном тебя скушают


А что они возразят? Что эрланг медленнее SBCL? Так я ж это и говорю

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

> Нет конечно, поэтому и спрашиваю тесты

С тем же успехом можно было спросить о том, какой будет следующая фаза луны ;) Вопрос не в тему.

dave ★★★★★
()
Ответ на: комментарий от Karapuz

Так в том-то и дело, что тестировали производительность Erlang HIPE, который в нативный код может компилировать.

А вообще конечно стоит учитывать, что все эти тесты нифига не тестируют то, ради чего Эрланг создавался. Для реальной сферы применения картина скорее всего иной будет.

anonymous
()
Ответ на: комментарий от anonymous

тестировали производительность Erlang HIPE, который в нативный код может компилировать


А это не важно. Говорят, в эрланге даже чтобы инкрементировать счетчик, вызывается функция, которая возвращает новую «переменную». Такой вот оверхед на каждой элементарной операции

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

Ну дык, там ведь функциональщина чистой воды. Зато с синхронизацией проблем нет. Для написания высоконагруженных распределенных серверов язык сгодится. А вот зачем на нем фрактары Мандельброта и прочую хунту строить - вопрос риторический :)

anonymous
()
Ответ на: комментарий от dimon555

Я — учитель математики в школе для девочек из малообеспеченных семей, в маленьком городке Dehradun в Северной Индии.

почему-то вспомнился саныч :)

а мне лектор по матанализу, член-корр. тогда был... вел математику у рябят из неблагополучных (впрочем, скорее, сами ребята на misfits похожи) семей

n01r ★★
()
Ответ на: комментарий от anonymous

Для написания высоконагруженных распределенных серверов язык сгодится


А ты в курсе, что уже вышел 6-ядерный проц от Интел для десктопа, что AMD такой для сервера год назад сделала, что в следующем году ожидаются 8-32-100 ядерные? И где там место эрлангу?

А вот что в стэнфорде делают http://ppl.stanford.edu/wiki/images/9/93/PPL.pdf

«Software developers will soon face systems with

1 TFLOP of compute power

20+ of cores, 100+ hardware threads
Heterogeneous cores (CPU+GPUs), app-specific accelerators
Deep memory hierarchies
Challenge: harness these devices productively
Improve performance, power, reliability and security

Goal: the parallel computing platform for 2012
Make parallel programming practical for the masses

Next-gen web platform
Immersive collaboration
Social gaming
Millions of players in vast landscape»

То есть ты будешь заходить на linux.org.ru и уже не читать треды в html, а бродить по комнатам, заходить в них, слушать, что обсуждают, смотреть что рисуют на интерактивной доске и даже сможешь виртуально избить битой модератора :)

«Challenges
DSL implementation ⇒ embed in base PL
Start with Scala (OO, type-safe, functional, extensible)
Use Scala as a scripting DSL that ties multiple DSLs»

Scala уже выбрана языком будущего :)

Karapuz ★★★★★
()
Ответ на: комментарий от tailgunner

Оюъясни в двух словах :)


в двух словах вряд ли выйдет, нужно изучить теорию категорий, дискретку и сдать кандидатский минимум по математике. Это не для нас, простаков

Karapuz ★★★★★
()
Ответ на: комментарий от tailgunner

>Оюъясни в двух словах :)

Вопрос был для тестеров :)

dave ★★★★★
()
Ответ на: комментарий от dave

Не надо ждать в Scala, есть ScalaCL

Вот демка code.google.com/p/nativelibs4java/source/browse/trunk/libraries/OpenфCL/ScalaCL/src/main/scala/scalacl/ScalaCLTest.scala

Оно напрямую генерирует kernel core для OpenCL из кода Scala просто наследованием класса! Не хило так.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Оно напрямую генерирует kernel core для OpenCL из кода Scala просто наследованием класса! Не хило так.


Есть тесты?

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

кажись пока готовят. Можете сделать ))) Я сейчас тоже пытаюсь запустить

vertexua ★★★★★
()
Ответ на: комментарий от Karapuz

Удалось запустить, но надо много JARов. И падает segfaultом после завершения. Сильно ранняя версия.

Но работает.

package scalacl1;

import scalacl._;
import scala.reflect.Manifest
import SyntaxUtils._
import ScalaCL._

object Main extends Application {
    
  class VectAdd(i: Dim) extends Program(i) {
    val a = FloatsVar
    val b = FloatsVar
    val result = FloatsVar
    content = result := a + sin(b)
  }

  override def main(args: Array[String]) = {
    var prog1 = new VectAdd(Dim(200))
    
    //prog1.alloc
	prog1.a.write(1 to 110)
	prog1.b.write(1000 to 1109) 
    prog1 !;
    
    for (i <- 0 to 109)
      println(prog1.result.get(i))

  }
}

Вот это само по Scala коду сгенерировало (из дебага).

#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : require
__kernel void function(__global const float* in1, __global const float* in2, __global float* out) {
	int dim1 = get_global_id(0);
	out[dim1] = (in2[dim1]) + (sin(in1[dim1]));
}
vertexua ★★★★★
()
Ответ на: комментарий от dave

> Я тут на днях прочитал про for-comprehension в скале. Как-то разочаровало оно меня. Еще чуть-чуть и могли бы дотянуть до computation expressions как в f#. Но не вышло...

В чём разница-то? Насколько я понял, и то и другое — те же саме монады из хаскеля. Вариации на тему do-notation.

kos
()
Ответ на: комментарий от kos

> Насколько я понял, и то и другое — те же саме монады из хаскеля. Вариации на тему do-notation.

Computation expressions еще и моноиды умеют. Например, можно определить then без bind. Что очень важно, computation expressions имеют практически такой же синтаксис как и обычный код на f#. Можно определить аналоги while, for, use, try, не считая доступных по определению let, if, match. Особенно впечатляет обработка try, на основе которой можно построить use и for. И без try невозможно построить полноценный workflow на основе продолжений.

В общем, computation expressions на голову или даже две головы выше.

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.