PDA

View Full Version : گفتگو: LLVM رو از کجا شروع کنم؟



FastCode
دوشنبه 12 فروردین 1392, 13:19 عصر
سلام.
یکی دو روزی هست که دارم سایتش رو زیر و رو میکنم ولی نمیدونم برای طراحی یک زبان خیلی ساده از کجا شروع کنم؟
هدفم یک زبان برای کار با بردار ها و ارایه ها و در صورت امکان ماتریس هاست.که در نهایت به عنوان زبان procedure های موتور دیتابیسی که دارم مینویسم استفاده بشه.
این زبان قرار نیست عملیاتی مثل join, select, update, where, having, distinct و مشابه این رو انجام بده و فقط قرار هست که برای کار های خیلی سطح پایین مثل کپی اطلاعات یک سطر و تبدیل و جا به جایی چند فیلد مورد استفاده قرار بگیره.
حالا نظرتون چیه؟
LLVM؟چیز دیگه؟چطوری؟

فقط هم یک الویت دارم:سرعت اجرا.

MSK
دوشنبه 12 فروردین 1392, 23:35 عصر
از اینجا: http://llvm.org/docs/tutorial/index.html
اگه با اسمبلی هم مشکلی نداری antlr (http://www.antlr.org/) هم خوب چیزیه.
boost::sprit (http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/index.html) هم چیز خفنیه. و خیلی ساده. شاید این آخریه همونی باشه که به کار تو می خوره.

FastCode
سه شنبه 13 فروردین 1392, 00:39 صبح
مرسی.
اون صفحه tutorial رو دیده بدوم.چند صفحش رو هم خوندم ولی اینقدر طولانی بود که فکر کردم راهنمای ساده تری هم باید باشه.
اسم ANTLR رو خیلی وقت پیش شنیده بودم ولی یادم نبود.
sprit کاملا برام جدید بود.
سعی میکنم تا یکی دو هفته دیگه یکیشون رو استفاده کنم که اولین نسخه قابل استفاده MVDB رو به github
commit کنم.

maktoom
سه شنبه 27 فروردین 1392, 22:52 عصر
سلام
چنتا پست توی این تاپیک (http://barnamenevis.org/showthread.php?296021-%D8%B3%D8%A7%D8%AE%D8%AA-Compiler-%D9%88-%DB%8C%DA%A9-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AC%D8%AF%DB%8C%D8%AF)دادم. دیگه حافظه و حوصله یاری نمی کنه دوباره تکرار کنم.
توی اون تاپیک چند نفر خواستن یه پروژه متن باز برای ایجاد یک زبان جدید ایجاد کنن. به جاهای تقریبا خوبی از لحاظ تجربه کاری رسیدن(همین که فهمیدن نمیشه به این راحتی این کارو کرد!).
بحثای خوبی بود. از لحاظ آکادمیک هم بحث شد. و هم از لحاظ تجربی.
خوبه بخونیدش. از کاربرایی که اونجا بطور مستمر پست میدادن میتونید درخواست کمک بکنید.

MSK
پنج شنبه 29 فروردین 1392, 16:36 عصر
سلام دوباره؛

یه چیزی که جدیدا دربازه اش مطالعه کردم و کم‌کم هم داره محبوب میشه بخاطر سادگیش اینه: http://www.complang.org/ragel/
اگه جدی هستی و برنامت هم درجه پیچیدگی خیلی بالایی نداره شاید بخای بهش نگاهی بندازی. مثالهاش کاملا واضح و روشن اند.

درمورد مطالب پست بالا هم باید بگم که فقط خوندن چند پست اول و آخرش باعث شد که قلب درد بگیرم :لبخند:
در عکس حال و هوای اون تاپیک، این روزها طراحی یه زبان جدید انقدرها هم سخت نیست. من واقعا بچه بودم که یه زبان برنامه نویسی طراحی کردم. البته باید اعتراف کنم که مفید نبود. اما توی همین لینک llvm هم توی ۷-۸ تا صفحه یه زبان کامل و مفید طراحی می‌کنه. این روزها هم که مثل قارچ از زمین داره زبان برنامه نویسی جدید در میاد. :بامزه: فقط نکته اینه که زبان‌ه چقدر مفیده و چقدر میتونه محبوب بشه.

در هر صورت من از پست شما اینطور دستگیرم شد که زبان‌تون یک DSL ه و قراره به عنوان قسمتی از پروژه‌تون مورد استفاده قرار بگیره. اگه اینطوره بهترین انتخابها همون sprit و ragel اند. اما اگه نخواستید و یا نتونستید به هر دلیلی از اینها استفاده کنید، باید توجه داشته باشید که طراهی زبان برای virtual machine هایی مثل jvm و .net به مراتب راحتتره تا llvm . یه virtual machine ه دیگه که ممکنه بخواید بهش نگاه کنید parrot (http://en.wikipedia.org/wiki/Parrot_virtual_machine) ه. گزینه های دیگه هم python و v8 اند که ابزار های مناسبی برای طراحی زبانهای ویژه ارایه می دهند.

اگه پروژه ای که درحال اجراش هستید متن باز هست، ممکنه که بخواید اینجا معرفی‌ش کنید و دوستان شاید پیشنهاد های خوبی داشته باشند و بتونند بشما کمک کنند.

FastCode
پنج شنبه 29 فروردین 1392, 17:34 عصر
سلام دوباره؛
درمورد مطالب پست بالا هم باید بگم که فقط خوندن چند پست اول و آخرش باعث شد که قلب درد بگیرم

من چی بگم که با کلی امید نشستم و همش رو خوندم.هر لحظه بدتر میشد.آخر طراحی بد بود.۷ ۸ تا غلط توی هر صفحش بود.

زبان DSL هست.
بله.پروژه GPL3 هست که به خاطر همین موضوع هنوز یک commit قابل استفاده هم نداشته.
https://github.com/Behrooz-Amoozad/MVDB
v8 و python رو قبل از ایجاد این تاپیک همراه ruby و haskell و perl و بقیه زبون های script ی حذف کردم.چون سرعتشون خیلی پایینه و این زبانها رو فقط در حد آشنایی بلد هستم و در آخر اینکه حجمشون زیاده.haskell رو که اصلا بلد نیستم.فقط جند جا خونده بودم که در چنین سناریو هایی استفاده شده.

دیروز یکی از دوستانم(یک آدم واقعی نه یک کاربر توی این سایت) پیشنهاد داد که یک API برای برنامه درست کنم و به جای استفاده از یک زبان و این همه درد سر از چند تا Dynamic Library استفاده کنم.پیشنهادش واقعا خوب بود.ولی من حاضر نیستم کنار دیتابیسم چند هزار تا فایل اضافه بزارم.
اگر ویکی رو بخونید نوشتم که یک پروژه مشابه قبلا با C#‎‎‎ نوشتم.چیزی که به ذهنم میرسه اینه که این پروژه رو ول کنم و از C#‎‎‎ و امکان Emit استفاده کنم.ولی میترسم performance ای که به خاطرش اومدم روی C++‎‎‎ و همچنین کسر بزرگی از مخاطبین احتمالی برنامم رو از دست بدم.

parrot به نظر خیلی جالبه.سرعتش چطوره؟شما باهاش کار کردید؟

MSK
پنج شنبه 29 فروردین 1392, 18:36 عصر
دوست عزیز من پروژه شما رو توی github استار کردم. خیلی خوشحال می‌شم اگه بتونم توی پروژتون کمکی کنم. اما برای این باید ویکی پروژه تون رو بهتر کنید. :بامزه:

در هرصورت استرس شما برای سرعت زبان کاملا بیجاست. bottleneck ه یه دیتابیس سرعت پارس query ها نخواهد بود. اما در هرصورت از هر جهت بهترین انتخاب برای پروژه شما ragel است. سرعت، حجم، سادگی، قدرت، ...
اگه ویکی پروزه تون رو روی github بهتر کنید و زبان query هاتون رو اونجا توضیح بدید شاید من بتونم واستون پیاده سازیش کنم.

اگه خواستید می‌تونیم با هم در ارتباط باشیم. ایمیل من توی صفحه github ام هست.

FastCode
پنج شنبه 29 فروردین 1392, 19:02 عصر
دوست عزیز من پروژه شما رو توی github استار کردم. خیلی خوشحال می‌شم اگه بتونم توی پروژتون کمکی کنم. اما برای این باید ویکی پروژه تون رو بهتر کنید. :بامزه:

در هرصورت استرس شما برای سرعت زبان کاملا بیجاست. bottleneck ه یه دیتابیس سرعت پارس query ها نخواهد بود. اما در هرصورت از هر جهت بهترین انتخاب برای پروژه شما ragel است. سرعت، حجم، سادگی، قدرت، ...
اگه ویکی پروزه تون رو روی github بهتر کنید و زبان query هاتون رو اونجا توضیح بدید شاید من بتونم واستون پیاده سازیش کنم.

اگه خواستید می‌تونیم با هم در ارتباط باشیم. ایمیل من توی صفحه github ام هست.
خیلی خوشحال میشم از همکاریتون .
از این زبان قرار نیست برای کوئری ها استفاده بشه.فقط برای تبدیل اطلاعات بین ورژن های مختلفی که در دیتابیس تعریف میشه استفاده میشه که فکر میکنم ۹۹٪ حجم پردازش رو شامل میشه و مطمئنا پرمصرفترین نقطه برنامه از نظر مصرف پردازنده خواهد بود..
تا شنبه خیلی درگیر هستم ولی قول میدم تا شنبه شب ۵ ۶صفحه مربوط به روش ذخیره سازی, روش سینک, انواع داده ها, ذخیره سازی متا دیتا ,روش حل وابستگی ها و نحوه ذخیره سازی snapshot به ویکی اضافه کنم.

maktoom
شنبه 31 فروردین 1392, 23:14 عصر
یک تجربه: از یک خبره در این کار بعنوان ناظر کیفی و سمت دهنده به کیفیت و کمیت کارتون استفاده کنید. این باعث میشه انرژی بیخودی نذارید.