Войти
ПрограммированиеФорумГрафика

О скриптовых языках...

#0
21:31, 3 ноя. 2005

Не подскажете, что это такое,какие проблемы помогают решать и не проще ли юзать С++ вместо них? И с каким лучше работать(lua, python...)?


#1
21:37, 3 ноя. 2005

А для чего тебе юзать-то?

#2
0:08, 4 ноя. 2005

asgalex
Единственное преимущество "скриптовых" языков - это то, что для них не надо писать пуленепробиваемые reference-counted copy-on-write контейнеры и прочий безопасный пушыстый стафф для дизайнеров уровней, которые не должны знать что такое "память", "байт", "malloc", "конструктор копирования".  Еще можно из преимуществ можно назвать реальный, а не эмулируемый microthreading. Для некоторых приложений так же важно, что бы скрипт их скачаного из интернета уровня не мог отформатировать винчестер и послать всем твоим друзьям по почте. Но на это разработчики обычно забивают - некорректно записаный SaveGame может сделать тоже самое. Уязвимости были даже в mp3 и jpeg-файлах.

Подробности - http://www.livejournal.com/users/_winnie/4401.html

#3
0:12, 4 ноя. 2005

Например, интернет странички иногда пишутся на скртптах (типа JavaScript, PHP, ...).

#4
0:16, 4 ноя. 2005

socket
Угу. Например вот так и вот так

#5
0:18, 4 ноя. 2005

А Питхон, что тоже к скриптам относится?

#6
0:23, 4 ноя. 2005

_Winnie

Интересно. Если человек не желает знать о " "память", "байт", "malloc" " - То он полный идиот. А помоему это тот человек, который хочет обезопасить себя от долго "дебага" по ночами ;)

#7
0:32, 4 ноя. 2005

Cote-Duke
да, под "полными идиотами" я понимаю именно таких людей. Полностью в положительном смысле, который ты обозначил.

>[b]Семён[/b]
>GC, принципиальна невозможность выхода за пределы массивов, проблемы с указателями и т.д. - это на самом деле неоценимо. _Winnie, ты же чувствуешь себя умным, когда на С++ пишешь? Я устал повторять, что это плохо. Нужно быть совсем тупым. Тупеть от каждой строчки. Ну и традиционно упомяну рефакторинг ;)

#8
0:37, 4 ноя. 2005

Cote-Duke
Зато по ночам я много бочек укотил в сторону разработчиков JavaScript за такую "безопасность". По-моему лучше уж проводить дебаг в среде С++, чем в среде Блокнот++!

#9
3:09, 4 ноя. 2005

_Winnie
можно узнать что ты понимаешь "под реальный, а не эмулируемый microthreading"? проц то всиравно один....

#10
17:32, 4 ноя. 2005

Ну вобщем понятно: это просто для "упрощения" работы... А то я не знал, заниматься мне ими или нет. Наверное нет.

#11
9:51, 5 ноя. 2005

Началась вторая серия?
_Winnie ты натурально бредишь и просто не слышишь опонентов :)

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

#12
10:22, 5 ноя. 2005

fr
Блин, а помоему это сторонники python меня не слышат.  Я же привел те вещи, которые будет невозможно сделать на С++ (пост 2). Это означает, что всё остаельное - можно.

ACR
>можно узнать что ты понимаешь "под реальный, а не эмулируемый microthreading"? проц то всиравно один...
Имею в виду убогий yield return из С++ и corutines из Lua. Которым можно временно вернуться из функции.  Если функции друг в друга вложены, то yield return - это геморрой. См. задачу про ханойские башни чуть ниже.

Lua book
Coroutines, on the other hand, are collaborative: A program with coroutines is, at any given time, running only one of its coroutines and this running coroutine only suspends its execution when it explicitly requests to be suspended.

То есть, сделать "выполним 1000 команд того треда, выполним 1000 команд того треда" сделать невозможно, треды должны сами возвращать управление.

fr
О, кстати, просто ради интереса, как будет выглядеть на python синхронная рекурсивная перекладка двух ханойских башен? Одной башни со скростью 1 кольцо за секунду, второй - 1.7 колец в секунду.

PS. А вот как выцепляю сслыки из .html странички в моём фреймворке -

#include "winnie/pearl.h"

void RunCC(const char *a, const char *b) { Run(std::string(a, b)); } //открыть линк в браузере

int main()
{
	parse(
		File("refs.html").c_str(),
		*((*(anychar_p-"href")>>"href" >> *space_p >> '=' >> *space_p >> !ch_p('"') >> (*(anychar_p-'"'-space_p-">"))[&RunCC]))
	);
}

#13
10:58, 5 ноя. 2005

_Winnie
Я такой же стороник питона, как и стороник C++, просто у каждого инструмента должно быть свое место, а ты призываешь все делать топором.
На ассемблере, питоне, лиспе, форте, окамле тоже можно все сделать,  вопрос в целесообразности. Простоту, более высокий уровень, ускорение написания кода для скриптов ты в упор не замечаешь.

>О, кстати, просто ради интереса, как будет выглядеть на python синхронная рекурсивная перекладка двух ханойских башен? Одной башни со >скростью 1 кольцо за секунду, второй - 1.7 колец в секунду.

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

Про html странички, лень разбиратся в твоих закорючках, но похоже что на питоне это решится парой строчек без всякого фреймворка. (Кстати на C++ с библиотекой регулярных выражений будет не сложней чем у тебя)

#14
12:52, 5 ноя. 2005

_Winnie

from time import clock

def hanoy(i, j, k, d):
	if k == 1:
		yield " " * d + "move(%d %d)" %  (i, j)
	else:
		for s in hanoy( i, 6-i-j, k-1, d+1 ): yield s
		for s in hanoy( i, j, 1, d+1 ): yield s
		for s in hanoy( 6-i-j, j, k-1, d+1 ): yield s

def synchro(iter, dt):
	t = clock()
	for i in iter:
		while(clock() - t < dt):
			yield ""
		t = clock()
		yield i

def weave(*iterables):
    "Intersperse several iterables, until all are exhausted"
    iterables = map(iter, iterables)
    while iterables:
        for i, it in enumerate(iterables):
            try:
                yield it.next()
            except StopIteration:
                del iterables[i]

for s in weave(synchro(hanoy(1, 3, 3, 0), 1.0), synchro(hanoy(1, 3, 3, 20), 1.7)):
	if s: print s
ПрограммированиеФорумГрафика

Тема в архиве.