الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل من اهتمام عربي باللغات ال Functional ؟!

رائج
بدأه Khaled.Alshaya في 30 مايو 2009 · 108 رد · 9,129 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#76

السلام عليكم ..

هذا حل مثال 92 بالبايثون :

import time

def createArray(n):
	a = `n`
	p = []
	for i in range(0,len(a)):
		p.append(a)
	return p

def squareDigits(num):
	x = createArray(num)
	z = len(x)
	y = 0
	for j in range(0,z):
		y += int(x[j]) ** 2
	return y

t0 = time.clock()

count = 0
max = 10000000

for i in range(1,max):
	found = False
	z = 0
	while found == False:
		z = squareDigits(i)
		i = z
		if z == 89:
			found = True
			count += 1
		elif z == 1:
			found = True

t1 = time.clock()

print "Result=",count
print "elapsed time=",t1-t0

النتيجه هي :

Result= 8581146
elapsed time= 575.74

تم التنفيذ على جهاز 2GHz - 32bit, ذاكرة 2 ونص جيجا , منصه Ubuntu 9.04

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#77

فيه سؤال يراودني ،

هل ليسب وبرولوق lisp prolog تعتبر functional language ?

#78

ليسب نعم، و قد تكون أشهرها. لكن برولوغ (حسب ما أعرف) ليست كذلك.

#79

السلام عليكم ....

اقتباس
هل ليسب وبرولوق lisp prolog تعتبر functional language ?

Lisp هي أول لغة functional :lol:

و لكن في الحقيقة حالياً لا يوجد لغة اسمها lisp, هي اللغة التي اخترعها McCarthy, و منذ وقت طويل تفرعت اللغة إلى عدة "لهجات" أو عدة لغات متشابهة,

حالياً أشهر لغتين من أصل ليسباوي, هما common lisp و التي تستخدم في المشاريع الحقيقية, و لغة scheme التي تستخدم كمقدمة في البرمجة أو الأسلوب الـ functional على وجه

الخصوص لسهولتها الشديد, على عكس common lisp التي تعتبر من أقوى لغات البرمجة بالمناسبة, و يتوفر لها العديد من المكتبات القوية في مجالاتها,

أما prolog فأعتقد يمكن أن تطلق عليها declarative, و اللغات الـ functional أيضاً declarative و ليسا imperative, و لكنها ليست functional بالمعنى المعروف,

تحياتي ...

#80

Prolog هى من ال logic Paradigm

على ما اعرف

قد يبدو من الخارج شبيه بال functional ولكنه مختلف جذريا

----

بالنسبه للموضوع الاصلى

عن نفسى هذا استخدمت ال ML و ال Prolog معا تبع الدراسه

صراحه كنت احس انى ارفع اثقال اثناء العمل على ال Prolog ... فكر مختلف تماما ومحاوله التعامل معها انها imperative تضييع ساعات وساعات

بعد ال Prolog ال ML كانت مستأنسه اكتر الحمد لله

الظريف فى الامر انه يخيل لك انه نوع مستحيل لبناء تطبيقات حقيقه حتى ترى من يستخدمه لها بالفعل (موجود على النت تطبيقات كامله بال Prolog .. وان كنت احس انهم "يعوجون" اللغه ليدمجوا بها مكتبات C/Cpp تمكنهم مما يريدون )

#81

حسناً هذه محاولة أولى باستخدام #F. البرنامج كان بطيئاً و أخذ قرابة أربعة أضعاف الوقت الذي أخذه برنامج الـ#C. سأحاول إعادة صياغته ليكون أسرع.

#light

//Project Euler problem #92 solution in F#

open System

//Maximum number for test
let max = 9999999 

//Define functions
let square x = x*x

let rec squareDigits number = if number<10 
									then square (number) 
									else square (number%10) + squareDigits (number / 10)

let rec endsIn89 number = 
				match number with
				|number when number = 89 -> true
				|number when number = 1 -> false
				|number -> endsIn89 (squareDigits number)

//Define numbers list	
let numList = [1..max]

//Execute functions
let startTime = System.DateTime.Now
let result = List.map endsIn89 numList

//Calculate result
let endsIn89List = List.filter (fun x -> x=true) result

//Output
let interval = System.DateTime.Now.Subtract startTime
printfn "%A" interval
printfn "%A" endsIn89List.Length
#82

السلام عليكم ...

أخي System Down هل لديك مكان جيد لكي نبدأ تعلم #F منه ؟ يبدو أنها جيدة ...

المشكلة أني أريد تعلم Haskell و #F و إكمال الطريق مع Lisp و لدي اختبارات نهائية الاسبوع القادم :lol:

اقتباس
الظريف فى الامر انه يخيل لك انه نوع مستحيل لبناء تطبيقات حقيقه حتى ترى من يستخدمه لها بالفعل (موجود على النت تطبيقات كامله بال Prolog .. وان كنت احس انهم "يعوجون" اللغه ليدمجوا بها مكتبات C/Cpp تمكنهم مما يريدون )

هل تصدق أن أول web application كتب بـ lisp!

و هذه اللغات لها مبرمجوها, و لكنها تستخدم في مجالات معينة فقط,

هناك Paul Graham إذا كنت تحب أن تقرأ حول lisp, مقالاته قمة في الروعة ,,,

على ذمة الدكتور :) يقول بأن شركة نفطية سعودية (مافي غيرها :lol: ) تعاقدت مع شركة لحل مشكلتها,

مالمشكلة ؟

المشكلة أن لديها خبيراً على مستوى عال في التعرف على الصخور .. بحيث يتم فحص الصخور من الطبقة التي وصل إليها الحفر لمعرفة إلى أين وصلوا و هل هناك نفط و هكذا ..

المهم هو عملية معرفة الصخور,

الشركة كان لديها خبير واحد و كان كبيراً في العمر و لا يستطيع تحمل اعباء الشركة كلها,

قامت الشركة البرمجية باقتراح expert system بحيث يضع الخبير فيه معلوماته تدريجياً حتى يساعد الخبراء الأصغر منه بكثير و بهذا لا تضيع خبرته,

و يستطيع الخبراء الأصغر منه العمل بمساعدة الـ expert system الذي ستصممه الشركة,

و يعمل البرنامج حتى اليوم,

و ما هي اللغة التي استخدمت ؟ :lol:

prolog

تحياتي ...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 9 يونيو 2009 في 06:45

#83

لدي هذا الكتاب الإلكتروني. لا بأس به. لكنني دعمت معرفتي عن طريق الإنترنت. بالذات هذه المدونة:

http://blogs.msdn.com/chrsmith/default.aspx

foundations_of_f_experts_voice_in_net.9781590597576.28574.pdf

#84

السلام عليكم ...

سأخرج عن الموضوع قليلاً هذه المرة :)

عندما بدأ النقاش بيني و بين الأخ متميز لم أكن أقصد القول أن ++C "أفضل" من Java أو #C من ناحية أن أي مبرمج يجب أن يترك #C حالاً و ينطلق مع ++C فوراً فهذا غير منطقي أساساً :lol:

كل ما أردت قوله هو أن ++C قوية جداً, و لاتزال تستخدم أكثر من باقي اللغات, أكثر من Java و أكثر من #C بكثير! و لكن المقارنة أصلاً غير منطقية, دعني أوضح لك رأيي,

اضغط على زر start لديك في windows و قل لي كم عدد البرامج الموجودة لديك و المكتوبة بـ Java أو #C و تستخدمها ؟

بدءًا بالمتصفح الذي تقرأ من خلاله كلامي و وصولاً إلى المفكرة, كلها مكتوبة بـ ++C :)

أحب أن أذكر تقسيم الخبير Joel هنا حتى يتضح الأمر قليلاً,

نتكلم عن لغات البرمجة العالية المستوى فقط,

Joel يقسم البرامج إلى "عوالم",

عالم البرامج التي نكتبها مرة واحدة و نرميها بعد ذلك بغرض الحصول على نتيجة معينة و لا يصبح لها فائدة بعد ذلك,

python و ruby و perl و جميع لغات الـ scripting هم المرشحون الأفضل لنيل هذه الحصة,

عالم "الألعاب",

و هذا تكتسحه ++C و قليل من C بكل بساطة, و تستعمل لغات الـ scripting في كتابة منطق اللعبة فوق ذلك,

عالم الأنظمة المضمنة,

و هذا تمتلكه "C" بكل بساطة, و ++C بدأت تشق طريقها بشكل كبير في الآونة الأخير,

و لكن تبقى الكلمة فيه لـ C لتوفر مترجمات لمعظم إن لم يكن كل معالجات أو متحكمات هذا العالم,

عالم البرامج المخصخصة,

البرامج المخصخصة, و يقصد به, أن يأتي إليك شخص و يطلب منك عمل برنامج لأداء غرض X و Y و Z,

و هناك ينطلق خيال المبرمج في استخدام ما يريد, فالمهم هو النتيجة, و لا يعطى في الغالب أهمية لأداء البرنامج بشكل كبير, و هذه ما أسميها أنا برامج الـ business :) و هو عالم كبير جداً بالمناسبة,

و يبرز هنا ضعف ++C لأنها لاتوفر مكونات قياسية جاهزة غالباً,

Java و net. و كل ما تتخيله, و بالطبع delphi :)

عالم البرامج "الجاهزة", التي تأخذها من على الرف حسب تعبيره و تستخدمها, و هذه هي معظم البرامج التي نستخدمها كل يوم,

و هذا هو مجال ++C الحقيقي بالمناسبة, ترمي البرنامج في "غابة" و يجب عليه أن يعمل,

معظم ما تستخدمه يومياً يقع في هذا العالم, لن أعطي مثال على برنامج عريق, فهناك آلالف البرامج المبينة بواسطة ++C و المعروفة على مستوى العالم أجمع,

و معظم الأنظمة العملاقة تبنى بها, تستفيد ++C من توفر مكتبات C التي كتب بها مكتبات لكل شيء تقريباً, هناك بعض الأراء التي تنتقد ++C لأنها تشبه C على الرغم من أن هذه التوافقية ميزة بشكل أكبر بكثير جداُ

انظر إلى ++notepad البرنامج الأول على source forge, محرر شامل كامل, مبني بواسطة ++C و STL حصرياً و ما رأيك بأدائه ؟ هل صادفت معه مشكلة من قبل ؟

الغريب أن delphi لها حصة في هذا العالم, رغم أنها ملائمة أكثر للعالم السابق :)

هذه العوالم تتعلق بعالم أكبر هو عالم المستخدم الطبيعي, فهناك عالم آخر هو عالم العلم و العلماء و تستخدم Fortran بشكل كبير فيه, و دخلت ++C فيه من أوسع الأبواب بسبب استغلال الـ metaprogramming فيها بشكل رهيب,

إضافة بالطبع إلى أدئها السريع,

عموماً أردت فقط التوضيح أين تقع ++C,

في النهاية حتى لا تعتقد أني "أشجع" ++C, أنا أستخدم ++C و Java و scheme غالباً, و ما بين الحين و الآخر ألقي نظرة هنا و هناك

و لدي آراء حول لغات البرمجة و التي لا يعني أنها صحيحة, كل ما في الأمر أنها آراء,

و من تعلمي لـ Java رأيت أنها بدل أن تصحح أخطاء ++C ورثت أخطاءها, و اختزلت ++C في لغة ممسوخة,

رغم نظافة كود java إلا أنها نظافة ظاهرية, و gosling فضل نظافة الكود على نظافة نتائج الكود,

على الرغم أن #C نحت منحى java إلا أنها تلافت بعض أخطائها بالمناسبة, فالسؤال في java هل نوفر ذلك للمبرمج أم لا, مع أن السؤال يجب أن يكون, كيف نوفر ذلك للمبرمج :)

تحياتي ...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 9 يونيو 2009 في 18:24

1
#85
اقتباس
الغريب أن delphi لها حصة في هذا العالم, رغم أنها ملائمة أكثر للعالم السابق

بكل بساطة لان دلفي محمولة ك سي ++ تماما

لماذا ... بكل بساطة بسبب ال vcl ... اكتب مرة بدلفي برنامجا و ترجمه على الي مترجم باسكال-دلفي يملك نسخة vcl ....

هناك بعض الحالات التي لا يمكن ان تجعله محمول... عندما يرتبط بمتغيرات او دوال خاصة بنظام معين :D مثل STL ل C++ توجد VCL لل delphi...

شيئ اخر لغة باسكال مرنة و سهلة القراءة و اكود الناتج سريع جدا بسبب optimisation التي تعتمدها بورلاند مما يجعل الدلفي جيدة بالنسبة لتطوير التطبيقات السريع RAD ... دون ان ننسي C++ Builder الذي اصبح اقوى الان من اي نسخة سابقة له و يستعمل STL و VCL :D

----

كلامي هذا من تجربة فانا لحد الان متعصب للسي بصورة جنونية و كنت اكره دلفي جدا جدا (بسبب الباسكال الذي تجربتي معه سيئة) ... لكني الان اكتب اي فكرة بدلفي قبل ان افكر ان امررها لسي او سي ++ او حتى C# ... و عندما تعمل انقلها الى سي :D

------

ملاحظة : انا لست من هواة rubish collector اهه عفوا garbage collector لذلك فان رأيي لا يحسب :D...

تم تعديل هذه المشاركة بواسطة fkugd2003 في 9 يونيو 2009 في 18:37

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

#86

لم أقرأ الموضوع كله نظرا لإحتوائة على كثير من النقاشات الفرعية

و لكن بما ان الأمر تفرع للوصول إلى هذه الأمور فأنا أريد أن أعرف ما هو الحل لمسألة Assembly الدوت نت الذى يمكن فتحه بسهولة بالreflector و بينما لا أستطيع أن أصنع هذا فى أى برامج تم صناعتها بلغة لا تعتمد تكونولوجيا الVM فى عملها كالجافا مثا أيضا

هذا الأمر أدى إلى سهولة عمل هندسة عكسية للبرامج التى تمت كتابتها بالدوت نت بل و الحصول على الكود المصدرى أيضا

بينما لو كتبت البرنامج بالسى أو سى بلس بلس لن يكون هناك سبيل غير تنقيح البرنامج و التعامل مع ملف البينارى الخاص به على أنه شئ مغلق طبعا تفهمون كلامى بخصوص هذه النقطة

أنا أعلم أن هناك أساليب تشفير يتم إتباعها بعد الإنتهاء من كتابة الكود لكى لا يكون قابل للفتح بواسطة الreflector

و لكنى لم أرى قط من قبل هذه الطريقة و لا أعلم أحد يستخدمها

فهل يعرف أحد هذه الطريقة ؟

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#87

يمكنك عمل Obfuscation للassembly باستخدام أي برنامج و هذه بعض البرامج و منها أيضاً برامج مجانية

http://www.bluechillies.com/list/dotnet-obfuscator.html

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#88

الكثير من تلك الحلول تم كسرها خاصة ....

kurapika لديه الكثير من الاعمال في هذا المجال....

انصحك ان تحاول التوجه الى native عندما تريد ان توجه برنامجا للبيع على النت.. اما ان كنت تريد ان تنجز موقع او تبيع برنامج لزبون مباشرة فقم باستعمال الدوت نت لانك سوف تتحصل على ثمن البرنامج مباشرة...

اذا اردت ان تبقي مع دوت نت فيمكن ان توفر برنامجك على شكل demo و ليس trial

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

#89

أعتقد أننا نعطي الهندسة العكسية اهتمام أكثر مما تستحق. لنقل أنني عملت برنامج تجاري بالدوت نت و بعته. ما الذي سيمكن قراصنة الهاكر و فطاحلة الهندسة العكسية فعله؟ سرقة برنامجي؟ هذه مشكلة تواجه الجميع بدايةً بمطوري برامج الـshareware و نهايةً بالعمالقة مثل مايكروسوفت، و حتماً ليست حكراً على برامج الـVM و ما شابهها.

قد يكون السبب الوحيد الذي يجعلني أقلق من الهندسة العكسية هو في حالة ابتكاري لخوارزمية جديدة. و هذه لها حلول كثيرة، من الحلول التفنية (تشفير و تخبيئ الخوارزميات أسهل نسبياً من غيره) إلى الحلول القانونية (براءة الإختراع).

أنا لست من المتعصبين لحركة المصادر المفتوحة (و لو أنني أدرك تماماً أهميتها الجمة) و لكنني أعتقد أننا كمبرمجين نصاب كثيراً بالنرجسية التي تجعلنا نعتقد أن كودنا شئ هام جداً و يجب عدم سرقته، و لكننا إذا نظرنا إلى الأمور بشكل حيادي سنجد أن 90% من البرامج (برامجنا أو برامج غيرنا) لا يضاهي مجهود ابتكارها مجهود عكس هندسيتها إلا بشئ بسيط.

#90

صحيح اخي system down ...

المشكلة ان الكثير من الزبائن يقومون بكسر البرنامج كي لا يدفعوا ثمنه :D...

احد الحلول التي توجد هي

ان لا تبيع برنامجك :D

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

#91

أنا اتفق مع الأخ System Down فعلى سبيل المثال أن كثيراً استخدم Reflector لقراءة أكواد بعض الclasses في الDotNet نفسه, أحياناً لأفهم أكثر و أحياناً من باب الفضول, و اعتقد أن مايكروسوفت كانت قادرة على تشفير هذه المكتبات أو على الأقل جعلها صعبة في القراءة و لكن لأن حماية الملكية القكرية لها وسائل عدة فلا يهم اذا كان الكود سهل المنال أم لا.

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#92
fkugd2003 كتب:
صحيح اخي system down ...

المشكلة ان الكثير من الزبائن يقومون بكسر البرنامج كي لا يدفعوا ثمنه :D...

احد الحلول التي توجد هي

ان لا تبيع برنامجك :D

الحرامية موجودون في كل مكان. و لا يوجد شئ في الحقيقة يمكنك من منعهم كلهم. و لكن، و الحمد لله، نسبة الناس الشرفاء أكثر بالذات إذا كان برنامجك مفيد و سعره معقول و ضمنت بعض الخدمات التي لا يمكن سرقتها كالدعم الفني أو التحديثات المجانية.

#93

ما معنى هذا الكلام

كيف يعنى نعطى الهندسة العكسية أكثر من حقها <_< !!!

فى الدوت نت تستطيع ببرنامج تافع كالreflector معرف الكود المصدرى لأى assembly تم كتابته بالدوت نت بأى لغة تريد و بكل سهولة و بدون أدنى عناء تقريبا

أما بأى لغة أخرى لا تعتمد على JIT فلن يكون أمامك غير التنقيح و لن تفلح فى معرفة الكود المصدرى للبرنامج المكتوب

بالنسبة

motamayez كتب:
يمكنك عمل Obfuscation للassembly باستخدام أي برنامج و هذه بعض البرامج و منها أيضاً برامج مجانية

http://www.bluechillies.com/list/dotnet-obfuscator.html

هل أفهم من هذا أننى لا أستطيع أن أفعل هذا برمجيا أو حتى عن طريق أدوات موجودة ضمن الVS نفسه !!

لو أن هذا صحيح فهل هذا معناه أن ميكروسوفت أصلا لما صممت الدوت نت لم ترفق له سوى ما يساعد على كشف الكود المصدرى !!

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#94

في النسخ الأولى من Visual Studio.net كانت Microsoft ترفق Obfuscator مع الVisual Studio و لكن ثبت مع الوقت أن هذا غير مهم, و لا يوجد سوى نسبة قليلة جداً من الشركات التي تحتاج هذه الامكانية و لهذا لم تعد تصدر مع الVisual Studio و لكن هناك الكثير من الحلول التي تنتجها شركات أخرى.

و هذا هو البرنامج الذي تدعمه Microsoft و هو Dot Fuscator

http://msdn.microsoft.com/en-us/library/ms227240.aspx

تم تعديل هذه المشاركة بواسطة motamayez في 10 يونيو 2009 في 11:09

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#95

جيد خرجت من هذا النقاش بمعلومة جديدة جيدة :D

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#96

كل البرامج يمكن عمل هندسة عكسية لها. كيف تعتقد أن الهاكر يقومون بصنع الكراكات و غيرها؟ الموضوع أسهل قليلاً في لغات الـVM فقط. و كما أسلفت، الموضوع أثبت مع الوقت أنه ليس بتلك الأهمية. بين جافا و دوت نت هذه قرابة 15 سنة من البرامج. لو كانت الهندسة العكسية لهذه البرامج ستسبب ضرر كبير لرأينا هذا الآن. و لكن لا شئ من هذا القبيل موجود.

#97

في التطبيقات المحمية عادة المبرمج يكون قد حصل على ما يريده من مكسب قبل ان يتم كسر البرنامج .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#98
اقتباس
في التطبيقات المحمية عادة المبرمج يكون قد حصل على ما يريده من مكسب قبل ان يتم كسر البرنامج .

واحيانا الحمايات تتكر مع كل نسخة من البرنامج وباشكال مختلفة فتكرر دورة المكسب

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#99
اقتباس
واحيانا الحمايات تتكر مع كل نسخة من البرنامج وباشكال مختلفة فتكرر دورة المكسب

اذا كان هناك keygenning فسيعمل الـkeygen مع النسخ الجديدة :D

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#100

السلام عليكم ...

ربما يكون كسر حماية البرنامج ممكناً في كثير من الحالات بالفعل, و لكن فهم الخوارزمية التي يحتكرها برنامج ما على سبيل المثال شبه مستحيل,

و حتى لو توفر الكود بلغة البرمجة الأصلية, فإنه دون شرح لن يستطيع أي مبرمج فهم الكود ربما إلا في حالات نادرة من المبرمجين!

تحياتي ...

مواضيع مشابهة