LINUX.ORG.RU

Вышел Pharo 7.0

 , , , ,


1

6

Сегодня вышла новая версия одной из самых популярных и развивающихся реализаций языка Smalltalk — Pharo.

Над релизом работали более 75 человек, были закрыты 2142 задачи, самые главные из которых:

  • Теперь Pharo поддерживает x64 для Linux и Mac. Версия для Windows также доступна, но находится в доработке.
  • Обновлен PharoLauncher — утилита для управления образами, сборками для Jenkins и различными версиями.
  • Изменен процесс сборки, теперь он поддерживает полный бутстрап из исходого кода. Это дает возможность создавать специализированные (микро)образы.
  • Iceberg (git-клиент) получил значительные улучшения и стал дефолтной системой по управлению кодом.
  • Calypso (краеугольный камень в PharoThings) стал новым системным браузером, заменив Nautilus. Он обладает множеством улучшений, в том числе в работе удаленно.
  • IoT теперь важная часть Pharo. PharoThings предоставляет внушительное количество утилит для разработки приложений под маленькие устройства.
  • UnifiedFFI значительно улучшен для работы с 64-битной Windows.

Также отмечается, что новая инфраструктура и процессы оказывают хорошее влияние на развитие платформы, а переезд на GitHub начинает окупаться уже сейчас.

P.S. Поздравляю всех причастных и интересующихся!

Скачать

Подробный список изменений

>>> Официальный анонс

★★★★★

Проверено: Shaman007 ()

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

Если у тебя квалификации достаточно, то и динамику ты нормально сможешь отрефакторить. Проблема только в том, что таких людей по пальцам пересчитать можно.

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

Очевидно, что не понятно.

Ну пока не ознакомишься с понятиями слабой типизации и динамической, разговаривать на эту тему считаю бессмысленным. А то уже детсад какой-то начался.

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

А когда рефакторишь — она очень и очень нужна.

Ну так рефакторинг начинается задолго до того, как код готов.

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

Ну пока не ознакомишься с понятиями слабой типизации и динамической, разговаривать на эту тему считаю бессмысленным.

Давно ознакомился.

А то уже детсад какой-то начался.

Ты его начал. А я всё жду ответа на вопрос: Вышел Pharo 7.0 (комментарий)

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

Если у тебя квалификации достаточно, то и динамику ты нормально сможешь отрефакторить.

Это из серии «если у тебя квалификации достаточно, то ты и камнем гвоздь забьёшь». Но почему-то квалифицированные столяры предпочитают не забивать гвозди камнями.

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

На подумать:

(defvar a 1)

(defvar b "2")

(+ a b)
$ sbcl --load test.lisp 
This is SBCL 1.4.10, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
While evaluating the form starting at line 5, column 0
  of #P"/tmp/test.lisp":

debugger invoked on a TYPE-ERROR in thread
#<THREAD "main thread" RUNNING {10005505B3}>:
  The value
    "2"
  is not of type
    NUMBER
  when binding SB-KERNEL::Y

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY   ] Retry EVAL of current toplevel form.
  1: [CONTINUE] Ignore error and continue loading file "/tmp/test.lisp".
  2: [ABORT   ] Abort loading file "/tmp/test.lisp".
  3:            Ignore runtime option --load "test.lisp".
  4:            Skip rest of --eval and --load options.
  5:            Skip to toplevel READ/EVAL/PRINT loop.
  6: [EXIT    ] Exit SBCL (calling #'EXIT, killing the process).

(SB-KERNEL:TWO-ARG-+ 1 "2") [external]
0] 
turtle_bazon ★★★ ()
Ответ на: комментарий от Miguel

Это из серии «если у тебя квалификации достаточно, то ты и камнем гвоздь забьёшь». Но почему-то квалифицированные столяры предпочитают не забивать гвозди камнями.

Да, так и есть. Но при этом они без труда могут гвоздь камнем забить.

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

Или ты будешь отрицать, что Common Lisp динамически типизируемый язык?

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

Ну если ты такой упёртый, то что делать? Прямо говоришь, отрицаешь, приходится обходными путями тебе показывать. Или для тебя CL это статически типизируемый?

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

Ну если ты такой упёртый, то что делать?

Попробуй ответить на вопрос.

приходится обходными путями

Обходными путями у тебя не получается. Попробуй прямой.

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

Попробуй ответить на вопрос.

Я тебе твоё утверждение сломал, а ты про вопрос.

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

Я [...]

Ты можешь быть хоть Бэтменом, но меня интересует ответ.

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

Ну ты его как-то плохо видишь. В яве в рантайме проверяются аргументы метода. Значит, ява статически типизируемый язык. Хорошо. В CL тоже в рантайме проверяются аргументы метода. Значит, CL тоже статически типизируемый язык?

ПС: если до сих пор ещё не понял, то нет, создать класс отличный передать нельзя. Как и в CL, потому что в обоих языках сильная типизация.

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

Попробуй прямой.

Я тебе сразу сказал, что ты путаешь динамическую типизацию со слабой. Прямой не помог.

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

Ну, про «без труда» — это ты загнул. Собственно, именно потому и выбирают молоток, что «труда» будет поменьше.

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

про «без труда» — это ты загнул

Не, ну даже с молотком это труд, конечно. Возьмём другой пример - отвёрткой мастер может без труда и проблем завинтить шуруп. Но использует для этого шуруповёрт. Но даже имея шуруповёрт, у него остаётся отвёртка. Просто на одном шурупе отвёртка даже интереснее, потому что меньше, легче. На 100 шурупах уже другой разговор.

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

Основная ошибка смолтокеров именно в этом — они считают, что код — это какая-то сложная древовидная структура с перекрёстными ссылками.
Реально же таковым является только законченный код, и то не вполне; в процессе написания код — это чистый текст.

Ты совсем не знаком со Смолтоком, ведь так? «В Смолток все является объектом» - это не пустые слова. Программы на нем обычно пишутся в среде, которая превращает текст метода в объект метода сразу после его сохранения, а текст метода после этого не нужен.

Integer compile: 'test ^3'. Выполнение 3 test вернет 3.

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

Но даже имея шуруповёрт, у него остаётся отвёртка.

Ну да. Даже в Хаскеле остаются не-типобезопасные функции, которые когда-то да используют.

Просто на одном шурупе отвёртка даже интереснее, потому что меньше, легче. На 100 шурупах уже другой разговор.

Тоже соглашусь. И да, для мелкого одноразового действия я обойдусь bash-скриптом, а для чего-то минимально серьёзного возьму серьёзный же инструмент с хорошей статической типизацией.

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

Не совсем. В динамике тип проверяется при каждом использовании объекта.

Если быть более точным, то при динамической типизации переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Проверки тут не причем.

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

лезть в работающую систему и изнутри её подкручивать — это признак полной безнадёги

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

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

Статика — это не только ценный мех способ ловить некоторые ошибки программиста, но и способ добится эффективности выполнения

Уже нет. Сейчас есть компиляторы которые умеют генерить С программу на выходе, например Lisp-->C. А С программа уже собирается gcc со всеми его оптимизациями. Разницы в эффективности выполнения практически нет.

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

Вот в то, что разница между кложуркой и джавой стирается — верю. Хотя динамика и в случае AOT некий бойлерплейт за собой тянуть может, но ок, в условиях сильной типизации и частичной подмены динамики выводом типов, ладно — не сильно большой.

Но динамические языки — это ещё и сборка мусора, как правило. Ну ок, с С (крестами, ржавым) тоже не всё так просто, и стратегия создал объект, отвёл память, удалил — освободил, по нынешним временам тоже отнюдь не самая быстрая, но тут есть свобода выбора стратегией управления памятью. Чего я о лиспе/смолтоке сказать не могу.

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

Не знаю про смолток, но лисп умеет «manipulate raw C data in Lisp through pointers to it. Provides support for stack and heap C memory allocation».

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

образчик «словарика с функциями», который хотя бы отдаленно походил на ООП, из 1960-х?

C++, правда он чутка позднее родился.

Симула

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

Ты можешь подсунуть в вызов метода через рефлексию вместо ожидаемого класса свой независимый (не производный) класс

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

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

Но динамические языки — это ещё и сборка мусора, как правило.

Современные статические — тоже.

Правда, оверхед от сборки мусора обычно минимальный.

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

Ну, в этой узенькой области — да. В каком-нибудь космическом аппарате — тоже. А вот мы на эрланге сервера писали, и там сделать файловер вообще не должно быть проблемой (хотя в той конторе — было).

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

А код — это текст.

Когда я писал под Unreal Engine на блупринтах (в смеси с С++), я осознал всю крутость написания кода в виде текста. Но надеюсь проблемы, с которыми я столкнулся там - результат некомпетентости авторов конкретно движка, и подобных траблов в сабже нет. Надо кстати проверить, насколько в смолтолке удаление класса из цепочки наследования влияет на переопределенные методы, особенно если последние вызывают super. Ну типа рефакторинг упрощения иерархии наследования, который в Unreal превращается в переписывание кода с 0.

И это, вопрос на засыпку, почему на дворе 21 век, а у нас так мало языков инкрементальной разработки (и все родом из бородатых 80-х)? Это же так удобно в задачах построения больших систем, таких как например игровые миры. Неужели всем так нравится пить кофе пока реранятся интегрейшен тесты после каждой правки?

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

а у нас так мало языков инкрементальной разработки (и все родом из бородатых 80-х)?

Потому что чем меньше мутабельного состояния, тем проще. Пресловутая «среда» — это то самое мутабельное состояние.

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

Процесс разработки и есть постоянная мутация исходного кода. Зачем прятать то, без чего все равно не обойтись? И такое варварское поведение в процессе разработки никак не связано с чистотой получаемого кода.

q0tw4 ★★★ ()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от Miguel

В каком-нибудь космическом аппарате — тоже

Уже и там применяют? Про использование лиспа я знаю, про erlang никогда не слышал.

Deleted ()

А где у Pharo референц книга? Конкретно как в нём биндить C либы?

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

Рефлексия есть, а динаимикки нет.

Жесть. У тебя наверно своя уличная рефлексия со статическими проверками через libastral. Хотел записать в блокнотик, но и так помню что ты альтернативно-одаренный.

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

Человек имел ввиду, что никакая рефлексия не вдолбит тупому компилятору джавы о том, что данный класс можно смело передать методу, который принимает уток, несмотря на то что getMethod(«кря») вернул не null.

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

А референца на 300+ страниц, как у всех нормальных компиляторов значит нету?

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

То есть ты тоже ослабление типизации называешь динамикой. Тогда сишка тоже динамический язык.

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

Динамика, это runtime type checking. В сишке из подобного есть только dynamic_cast, но у него ограниченная область применения. А reinterpret_cast вообще из другой оперы. Это уже weak typing.

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

Какой тебе нужен референс как у каких компиляторов? «Экзешник» ты с фарой не сделаешь (но есть метациклический Bee Smalltalk, который умеет)

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

А Bee Smalltalk он точно есть? А то и в домене .org, и на гитхабе есть только обещания что он скоро (когда-нибудь) будет.

be_nt_all ()
Последнее исправление: be_nt_all (всего исправлений: 1)
Ответ на: комментарий от be_nt_all

Где-то в Аргентине точно есть :) на самом деле его релиз (или хотя бы опенсорс) прелюдно обещали ещё в сентябре, но я честно не проверял.

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

Динамика, это runtime type checking

Согласен. Только утиность или иные трюки в обход продекларированных типов никто не обещал. Утиная типизация это такое свойство интерпретируемых язычков, и то не везде это есть.

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