LINUX.ORG.RU

Посоветуйте язык на замену QBasic

 


3

3

Ищу язык для написания простеньких программ и прототипов. Требования:

  • Низкий порог вхождения. Хочу в будущем показывать детям. Сам программирую с 11 лет.
  • Наличие ide. vi и emacs за ide не считаются.
  • Графика «из каробки». Чтобы программка «палка, палка, огуречик - вот и вышел человечик» помещалась на одном экране без гугления сторонних либ.
  • желательно наличие в репах ubuntu
  • желательно наличие под оф.топик

Ранее эту функцию для меня выполнял qbasic.

PS свободно владею: basic, c, c++, pascal, еще десяток языков «читаю со соварем».

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

Или читать доки по реболу и пробовать в реде?

This. Чтобы начать и въехать в концепции - док по реболе достаточно, официальный User Guide + учебник на вики. В реде суть та же, просто некоторые функции называются по-другому. Приятный бонус - гуй работает под линуксом в реболе, а в реде еще не завезли GTK-бекенд.

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

Кароче, вот так можно?

red>> a: [a * a + b]
== [a * a + b]
red>> b: replace/all a 'a 'c
== [c * c + b]
red>> g: func [c b] b
== func [c b][c * c + b]
red>> g 2 3
== 7
red>> insert find b '+ [+ 1]
== [+ b]
red>> b
== [c * c + 1 + b]
red>> g: func [c b] b
== func [c b][c * c + 1 + b]
red>> g 2 3
== 8

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

Я тут пацанам кодирующим на Дельфи и Компонентном Паскале сказал, они рассмеялись.

В какой области пацаны работают? Много новых проектов накодировали за последние 5 лет?

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

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

Даже если изобретут искусственный интеллект, ремесло программиста канет в лету только после всех остальных.

Так что детей лучше учить распознаванию привилегий.

Каких привилегий?

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

http://www.tcl.tk/man/tcl/TclCmd/apply.htm

proc map {lambda list} {
    set result {}
    foreach item $list {
        lappend result [apply $lambda $item]
    }
    return $result
}

map {x {return [string length $x]:$x}} {a bb ccc dddd}
      → 1:a 2:bb 3:ccc 4:dddd

map {x {expr {$x**2 + 3*$x - 2}}} {-4 -3 -2 -1 0 1 2 3 4}
      → 2 -2 -4 -4 -2 2 8 16 26

https://ru.wikipedia.org/wiki/Tcl

proc filter {list script} {
    set res {}
    foreach e $list {if {[uplevel 1 $script $e]} {lappend res $e}}
    return $res
}

proc in {list e} {
    expr {[lsearch -exact $list $e]>=0}
}

filter {a b c} {in {b c d}}
     → b → c

https://ru.wikipedia.org/wiki/Tcl

Вот пример того, как можно осуществить композицию двух функций:

proc o {f g x} {$f [$g $x]}
anonymous
()
Ответ на: комментарий от Esper

Даже если изобретут искусственный интеллект, ремесло программиста канет в лету только после всех остальных.

Почему?

Каких привилегий?

Ну там родиться белым мужиком — это привилегия и т.д.

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

Ты просто передаешь тело и вызываешь его, но можно ли его изменять / конструировать?

Первая ссылка говорит

The function func is a two element list {args body} or a three element list {args body namespace}

Значит `{}` создают список?

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

Ты просто передаешь тело и вызываешь его, но можно ли его изменять / конструировать?

% set f {{x y} {expr {$x**2 + $y**2}}}
{x y} {expr {$x**2 + $y**2}}
% apply $f 3 4
25
% set f {{x y} {expr sqrt($x**2 + $y**2)}}
{x y} {expr sqrt($x**2 + $y**2)}
% apply $f 3 4
5.0
% set f [lreplace $f 1 1 {expr hypot($x,$y)}]
{x y} {expr hypot($x,$y)}
% apply $f 3 4
5.0

Значит `{}` создают список?

{} — ограничивают один элемент списка, без подстановки

proc получает список из трёх элементов

proc {name} {args} {body}
anonymous
()

Графика «из каробки». Чтобы программка «палка, палка, огуречик - вот и вышел человечик» помещалась на одном экране без гугления сторонних либ.

Миссия невыполнима.

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

{} — ограничивают один элемент списка, без подстановки

proc получает список из трёх элементов

Очень близко, но похоже ты не можешь менять то что внутри. То есть ты можешь заменить `{$x**y + $y**2}` на что-то, но не можешь заменить `x`, `y`, `+`, `**`, `2` правильно?

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

У iup есть вариант с прилинкованым lua. Не говоря уже о классике Tk и Gambas-е.

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

Почему?

Даже если система может обслуживать себя сама, перестраховка не помешает.

Ну там родиться белым мужиком — это привилегия и т.д.

И зачем такое изучать?

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

Очень близко, но похоже ты не можешь менять то что внутри. То есть ты можешь заменить `{$x**y + $y**2}` на что-то, но не можешь заменить `x`, `y`, `+`, `**`, `2` правильно?

там apply текстовой строки на список — модифицируй что хочешь и как хочешь.

тебя интересует https://ru.wikipedia.org/wiki/Самомодифицирующийся_код ?

а ты уверен, что это совместимо с концепцией network-oriented приложениями и сетевыми библиотеками кода?

самомодифицирующееся https://ru.wikipedia.org/wiki/Абстрактное_синтаксическое_дерево ?

расскажи, pls, как ты это используешь, зачем оно тебе?

anonymous
()
Ответ на: комментарий от loz
red>> a: [a * a + b]
== [a * a + b]
red>> b: replace/all a 'a 'c
== [c * c + b]
red>> g: func [c b] b
== func [c b][c * c + b]
red>> g 2 3
== 7
red>> insert find b '+ [+ 1]
== [+ b]
red>> b
== [c * c + 1 + b]
red>> g: func [c b] b
== func [c b][c * c + 1 + b]
red>> g 2 3
== 8

ты же понимаешь, что, в отличии от функциональщины (map, filter, fold, и т.п.), этот показанный тобой подход опасен?

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

там apply текстовой строки на список — модифицируй что хочешь и как хочешь.

Строковые модификации это точно не то что я хочу, ты же в 2016 не конкатенируешь строки чтобы сделать SQL запрос, или сгенерить HTML-стриничку.

тебя интересует https://ru.wikipedia.org/wiki/Самомодифицирующийся_код ?

Нет, у меня уже есть )

а ты уверен, что это совместимо с концепцией network-oriented приложениями и сетевыми библиотеками кода?

Конечно, не вижу никаких проблем

самомодифицирующееся https://ru.wikipedia.org/wiki/Абстрактное_синтаксическое_дерево ?

Именно

расскажи, pls, как ты это используешь, зачем оно тебе?

Суть не в самой модификации кода, суть в базовой абстракции - блоке (а-ля список, но круче), когда функция состоит из блока аргументов и блока кода - с ними можно делать все то что можно делать с любыми другими блоками: создавать, изменять, интроспектировать, сериализовывать и посылать по сети и тд. Это дает кучу возможностей, в том числе таких о которых мы до сих пор не подозреваем, просто потому что другие языки небыли способны на это.

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

ты же понимаешь, что, в отличии от функциональщины (map, filter, fold, и т.п.), этот показанный тобой подход опасен?

Это две разные вещи - функциональщина про композицию функций, а блоки про интроспекцию и рантайм работу с кодом/данными. Тут макросы ближе, но они не рантайм и не настолько прозрачны.

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

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

Хм. Это все звучит красиво, но меня кое-что смущает. Я допускаю такое поведение, когда функция является комбинатором (в терминах лямбда-исчисления) - то есть, когда в ней нет свободные переменных, и все что нужно ей для работы (в том числе и в обычных случаях внешние библиотечные константы/функции) передаются ей в качестве аргументов. Но это далеко не всегда так, и обычно (в моей модели мира) функция при своем вычислении опирается на то окружение, в котором она была создана, и откуда берет все «внешние привязки». Это принято называть умными словами типа «лексическое окружение» и т.п. В отличие от макросов (условно назовем их так, хотя они могут быть и рантаймовые), в которых несвязанные термы берутся из контекста вызова (если они конечно там есть :)). К чему это я все - если хотеть передать функцию далеко от родного места создания, то все равно придется передавать вместе с бананом и всю обезьяну с джунглями (была такая аллегория у одного чувака). Или нет?

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

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

ага, интересно в диаграммке про структуру REBOL/Core: «интерпретатор блоков», «транслятор блоков», про компилятор на PEG, nanopass, монады, вот это вот всё.

суть в том, что вычисления не функциональные, а символические. которые можно обойти по фреймовой семантической сети через plist-ы.

которые есть метаданные прикреплённые к коду (блоки данных, метаданных к блокам кода в AST). ну как в org-mode babel «блоки кода»,«блоки данных», «сам текст» (на метаязыке человекопонятном)

«делать всё что угодно» на самом деле круче в символической парадигме, чем в функциональной. например, можноЗделать(tm) что-то типа «памяти переводов» на «блоках кода», полуавтоматических для перевода между языками, метаязыками и DSL.

очень интересно, да. почти как «let over lambda», только окружение символическое (в фекспрах, что ли?)

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

или задавать контексты, песочницы, активные миры из FoNC/STEP (например, тетрис на реболе в примерах — DSL с контекстами. ребол есть свой собственный метаязык, гомоиконный среди диалектов и метациклический среди песочниц, так что все эти обезьяны с бананами в джунглях есть в контекстах песочниц башен метаязыков).

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

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

anonymous
()

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

Сам код не будет требовать вообще ничего. Ну или что вы захотите.

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

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

Хороший вопрос, смотря что ты называешь «обезьяной с друнглями», в реболе/реде значения привязываются к символам в момент создания (если значение было), работает это так:

xs: []
use [x] [
    x: 12
    append xs 'x
]
use [x] [
    x: 9
    append xs 'x
]
use [x] [
    x: "REBOL"
    append xs 'x
]
probe xs
; == [x x x]
print xs
; == 12 9 REBOL

То есть в итоге в блоке `xs` три символа `x`, каждый из которых связан со своим собственным значением, и вычисляется в него, а не в «текущее» значение `x`.

Подробнее тут: http://blog.revolucent.net/2009/07/deep-rebol-bindology.html

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

Получит от препода любое подходящее IDE, настроенное под python с оберткой

Ты же понмиаешь что это значит:

1. Надо поставить python на комп ученика

2. Поставить туда эту IDE

3. Настроить IDE на работу с python

4. Настроить IDE на работу с оберткой

5. Научить ученика пользоваться IDE

Сможешь автоматизировать это все в один установщик для винды чтобы не возникло проблем ни на одном этапе?

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

Пункты 1-4 укладываются в настроить ide и упаковать в месте с python-ом в один исполняемый файл. Технология уже отработона и давно. Вот подобрать понятную ide и набор простотых графических команд уже сложнее. Ибо мыслить надо и время тратить. Не всем дано :(

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

О! Сообразил. Lua ещё ближе к Бейсику, чем Питон!

LÖVE2D, кстати. IDE, правда, к нему родного нет, зато примитивами рисовать в нем можно сходу. Бинарник для ребенка скомпилировать только, и смело в путь.

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

Пишем DRAW 100,100<enter> — и линия уже на экране :D
«сейчас таких не делают» :D

Полностью согласен. Для начала обучения именно так и надо. Иначе есть риск отпугнуть невиданной сложностью.

Тоже ищу сейчас среду для обучения подрастающего поколения. И с ужасом понимаю, что такой нет.

Столяров в своих книгах предлагает freepascal для обучения, его мысль понятна. Но вот ограничение строки в 255 символов, когда детсадовцы говорят «у моего папы телефон с 32Гб памяти», в XXI веке выглядит странно. Как объяснить ребенку такую загадку, что даже в сраных телефонах десятки миллиардов ячеек, а на мощном игровом компьютере не хватает места для строки в 300 символов?

Я сейчас смотрю на микрософтовские QBasic и борландовский Паскаль, и понимаю, насколько правильно сделаны эти среды. Они именно для обучения. И для несложных вспомогательных программок. Человек, который смог пройти этот путь, мог стать программистом. Я с ужасом смотрю на современных программеров: насколько сложно писать на всех этих фреймверках, библиотеках и прочих подставочках. Как сложно их было понять. И скорее всего, многие современные программеры плохо себе представляют, что скрывается под капотом используемых ими объектов. И это порождает психологические девиации, которые мы тут, кстати, наблюдаем на лоре.

В общем, к чему пришли в результате? На чем кроссплатформенном учить детей программировать?

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

В общем, к чему пришли в результате? На чем кроссплатформенном учить детей программировать?

Tcl/Tk

anonymous
()

Хотел написать про Haskell, но почитал требования и понял что тебе logo нужен.

Rodegast ★★★★★
()

отстань от детей, сами разберутся что они захотят.
хочется человечков на екране – юзай gimp/paint/photoshop. там хоть в/на/около коробок

anonymous
()

Ну есть процессинг https://processing.org/, давно я его смотрел, тогда был ситаксисис уровня java 1.4 (до дженериков).

Низкий порог вхождения.

Да, они себя позиционировали как язык для цифровых «художников»

Наличие ide. vi и emacs за ide не считаются.

Был из коробки примитивный редактор но уютный (приятный ui с понятным интерфейсом).

Графика «из каробки»

Да, это First-class citizen, см. галерею https://www.openprocessing.org/

желательно наличие под оф.топик

есть такое.

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

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

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

Был из коробки примитивный редактор но уютный (приятный ui с понятным интерфейсом).

где \lib\languages\PDE_ru.properties ?

anonymous
()

Низкий порог вхождения.

Javascript. Относительно прост и может приносить деньги в будущем.

Наличие ide. vi и emacs за ide не считаются.

Зачем вам ide для простых задач? Оно нужно в больших и разветвленных проектах. Для javascript отладчика в браузере хватит за глаза.

Графика «из каробки». Чтобы программка «палка, палка, огуречик - вот и вышел человечик» помещалась на одном экране без гугления сторонних либ.

Javascript+HTML5 можете даже писать простенькие игрульки и показывать их миру, имея таким образом незамысловатую возможность нарабатывать ребенку портфолио, если он конечно имеет тягу к программированию и вы видите его в таком амплуа. Если нет тяги, то заставлять не стоит. Ничего дельного все равно не выйдет.

желательно наличие в репах ubuntu

Javascript поддерживается любым современным браузером.

желательно наличие под оф.топик

См. выше.

Добавлю еще, что наверное хороршо было бы изучать ассемблер т.к. он даст понимание как работает машина на самом примитивном уровне без абстракций. Без понимания этих механизмов хороших программистов не бывает. Получаются...эээ.... подмастерья что ли? Правда к сожалению там нет единого стандарта в синтаксисе.

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

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

напомнило две темы: Оберон — это спектрум будущего

Что ещё общего у Спека и Оберона — простота. Научиться сознательно применять его — около месяца, при условии активного использования. Научиться сознательно применять его достоинства перед другими технологиями — этому можно учиться всю жизнь

и другую:

Но барьер вхождения, как по мне, чрезвычайно высок, потому что для профессиональной разработки нужно владеть всем этим добром на чрезвычайно высоком уровне. Здесь дело не в том, что “профи должен владеть всем этим”, здесь дело в том, что набор “этого” через 10-15 лет окажется совсем другим, и профи-гонщик мэйнстрима будет очень бледно себя чувствовать в попытках за всем этим угнаться.

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